- Logic Circuit
- Logic Circuit (inside)- CPU (design)
- CPU (instruction)
- Memory Map
- 6502
- Assembly Langage
Logical Circuit
4 Input OR gate
AND
OR
NAND
NOR1
NOR2
CPU design
3 octal shifter
Full size
Octal D type Flip-Flops
D flip-flop
8 bits addition
Full Size
8 bits soustraction
Full Size
PC Memory map
6502
The 6502 CPU has a 16 bit address
bus and an 8 bit data bus.
It is powered by a 5 volt supply.
Interrupt requests tell the CPU to stop processing its present program and jump
to another.
The reset pin is taken low to initialize the CPU when it is first powered on.
The read/write pin is taken low when writing to memory, and high when reading
from it.The 6502 has eight addressing modes telling the CPU where data is
located.
6502 MMU
CBM64 memory map
Hex Decimal Description
0000 0 Chip directional register
0001 1 Chip I/O; memory & tape control
0003-0004 3-4 Float-Fixed vector
0005-0006 5-6 Fixed-Float vector
0007 7 Search character
0008 8 Scan-quotes flag
0009 9 TAB column save
000A 10 0 = LOAD, 1 = VERIFY
000B 11 Input buffer pointer/# subscrpt
000C 12 Default DIM flag
000D 13 Type : FF = string, 00 = numeric
000E 14 Type : 80 = integer, 00 = floating point
000F 15 DATA scan/LIST quote/memry flag
0010 16 Subscript/FNx flag
0011 17 0 = INPUT; $40 = GET; $98 = READ
0012 18 ATN sign/Comparison eval flag
0013 19 Current I/O prompt flag
0014-0015 20-21 Integer value
0016 22 Pointer : temporary strg stack
0017-0018 23-24 Last temp string vector
0019-0021 25-33 Stack for temporary strings
0022-0025 34-37 Utility pointer area
0026-002A 38-42 Product area for multiplication
002B-002C 43-44 Pointer : Start-of-Basic
002D-002E 45-46 Pointer : Start-of-Variables
002F-0030 47-48 Pointer : Start-of-Arrays
0031-0032 49-50 Pointer : End-of-Arrays
0033-0034 51-52 Pointer : String-storage(moving down)
0035-0036 53-54 Utility string pointer
0037-0038 55-56 Pointer : Limit-of-memory
0039-003A 57-58 Current Basic line number
003B-003C 59-60 Previous Basic line number
003D-003E 61-62 Pointer : Basic statement for CONT
003F-0040 63-64 Current DATA line number
0041-0042 65-66 Current DATA address
0043-0044 67-68 Input vector
0045-0046 69-70 Current variable name
0047-0048 71-72 Current variable address
0049-004A 73-74 Variable pointer for FOR/NEXT
004B-004C 75-76 Y-save; op-save; Basic pointer save
004D 77 Comparison symbol accumulator
004E-0053 78-83 Misc work area, pointer, etc
0054-0056 84-86 Jump vector for functions
0057-0060 87-96 Misc numeric work area
0061 97 Accum#l : Exponent
0062-0065 98-101 Accum#l : Mantissa
0066 102 Accum#l : Sign
0067 103 Series evaluation constant pointer
0068 104 Accum#l hi-order (over flow)
0069-006E 105-110 Accum#2 : Exponent, etc.
006F 111 Sign comparison, Acc#l vs #2
0070 112 Accum#l lo-order (rounding)
0071-0072 113-114 Cassette buff len/Series pointer
0073-008A 115-138 CHRGET subroutine; get Basic char
007A-007B 122-123 Basic pointer (within subrtn)
008B-008F 139-143 RND seed value
0090 144 Status word ST
0091 145 Keyswitch PIA : STOP and RVS flags
0092 146 Timing constant for tape
0093 147 Load = 0, Verify = l
0094 148 Serial output : deferred char flag
0095 149 Serial deferred character
0096 150 Tape EOT received
0097 151 Register save
0098 152 How many open files
0099 153 Input device, normally 0
009A 154 Output CMD device, normally 3
009B 155 Tape character parity
009C 156 Byte-received flag
009D 157 Direct = $80/RUN = 0 output control
009E 158 Tp Pass 1 error log/char buffer
009F 159 Tp Pass 2 err log corrected
00A0-00A2 160-162 Jiffy Clock HML
00A3 163 Serial bit count/EOI flag
00A4 164 Cycle count
00A5 165 Countdown, tape write/bit count
00A6 166 Tape buffer pointer
00A7 167 Tp Wrt ldr count/Rd pass/inbit
00A8 168 Tp Wrt new byte/Rd error/inbit cnt
00A9 169 Wrt start bit/Rd bit err/stbit
00AA 170 Tp Scan; Cnt; Ld; End/byte assy
00AB 171 Wr lead length/Rd checksum/parity
00AC-00AD 172-173 Pointer : tape bufr, scrolling
00AE-00AF 174-175 Tape end adds/End of program
00B0-00B1 176-177 Tape timing constants
00B2-00B3 178-179 Pntr : start of tape buffer
00B4 180 l = Tp timer enabled; bit count
00B5 181 Tp EOT/RS232 next bit to send
00B6 182 Read character error/outbyte buf
00B7 183 # characters in file name
00B8 184 Current logical file
00B9 185 Current secndy address
00BA 186 Current device
00BB-00BC 187-188 Pointer to file name
00BD 189 Wr shift word/Rd input char
00BE 190 # blocks remaining to Wr/Rd
00BF 191 Serial word buffer
00C0 192 Tape motor interlock
00C1-00C2 193-194 I/O start address
00C3-00C4 195-196 Kernel setup pointer
00C5 197 Last key pressed
00C6 198 # chars in keybd buffer
00C7 199 Screen reverse flag
00C8 200 End-of-line for input pointer
00C9-00CA 201-202 Input cursor log (row, column)
00CB 203 Which key : 64 if no key
00CC 204 0 = flash cursor
00CD 205 Cursor timing countdown
00CE 206 Character under cursor
00CF 207 Cursor in blink phase
00D0 208 Input from screen/from keyboard
00D1-00D2 209-210 Pointer to screen line
00D3 211 Position of cursor on above line
00D4 212 0 = direct cursor, else programmed
00D5 213 Current screen line length
00D6 214 Row where curosr lives
00D7 215 Last inkey/checksum/buffer
00D8 216 # of INSERTs outstanding
00D9-00F2 217-242 Screen line link table
00F3-00F4 243-244 Screen color pointer
00F5-00F6 245-246 Keyboard pointer
00F7-00F8 247-248 RS-232 Rev pntr
00F9-00FA 249-250 RS-232 Tx pntr
00FF-010A 256-266 Floating to ASCII work area
0100-103E 256-318 Tape error log
0100-01FF 256-511 Processor stack area
0200-0258 512-600 Basic input buffer
0259-0262 601-610 Logical file table
0263-026C 611-620 Device # table
026D-0276 621-630 Sec Adds table
0277-0280 631-640 Keybd buffer
0281-0282 641-642 Start of Basic Memory
0283-0284 643-644 Top of Basic Memory
0285 645 Serial bus timeout flag
0286 646 Current color code
0287 647 Color under cursor
0288 648 Screen memory page
0289 649 Max size of keybd buffer
028A 650 Repeat all keys
028B 651 Repeat speed counter
028C 652 Repeat delay counter
028D 653 Keyboard Shift/Control flag
028E 654 Last shift pattern
028F-0290 655-656 Keyboard table setup pointer
0291 657 Keyboard shift mode
0292 658 0 = scroll enable
0293 659 RS-232 control reg
0294 660 RS-232 command reg
0295-0296 661-662 Bit timing
0297 663 RS-232 status
0298 664 # bits to send
0299-029A 665 RS-232 speed/code
029B 667 RS232 receive pointer
029C 668 RS232 input pointer
029D 669 RS232 transmit pointer
029E 670 RS232 output pointer
029F-02A0 671-672 IRQ save during tape I/O
02A1 673 CIA 2 (NMI) Interrupt Control
02A2 674 CIA 1 Timer A control log
02A3 675 CIA 1 Interrupt Log
02A4 676 CIA 1 Timer A enabled flag
02A5 677 Screen row marker
02C0-02FE 704-766 (Sprite 11)
0300-0301 768-769 Error message link
0302-0303 770-771 Basic warm start link
0304-0305 772-773 Crunch Basic tokens link
0306-0307 774-775 Print tokens link
0308-0309 776-777 Start new Basic code link
030A-030B 778-779 Get arithmetic element link
030C 780 SYS A-reg save
030D 781 SYS X-reg save
030E 782 SYS Y-reg save
030F 783 SYS status reg save
0310-0312 784-785 USR function jump (B248)
0314-0315 788-789 Hardware interrupt vector (EA31)
0316-0317 790-791 Break interrupt vector (FE66)
0318-0319 792-793 NMI interrupt vector (FE47)
031A-031B 794-795 OPEN vector (F34A)
031C-031D 796-797 CLOSE vector (F291)
031E-031F 798-799 Set - input vector (F20E)
0320-0321 800-801 Set - output vector (F250)
0322-0323 802-803 Restore I/0 vector (F333)
0324-0325 804-805 INPUT vector (F157)
0326-0327 806-807 Output vector (F1CA)
0328-0329 808-809 Test-STOP vector (F6ED)
032A-032B 810-811 GET vector (F13E)
032C-032D 812-813 Abort I/o vector (F32F)
032E-032F 814-815 Warm start vector (FE66)
0330-0331 816-817 LOAD link (F4A5)
0332-0333 818-819 SAVE link (F5ED)
033C-03FB 828-1019 Cassette buffer
0340-037E 832-894 (Sprite 13)
0380-03BE 896-958 (Sprite 14)
03C0-03FE 960-1022 (Sprite 15)
0400-07FF 1024-2047 Screen memory
0800-9FFF 2048-40959 Basic ROM memory
8000-9FFF 32758-40959 Alternate: Rom plug-in area
A000-BFFF 40960-49151 ROM : Basic
A000-BFFF 49060-59151 Alternate: RAM
C000-CFFF 49152-53247 RAM memory, including alternate
D000-D02E 53248-53294 Video Chip (6566)
D400-D41C 54272-54300 Sound Chip (6581 SID)
D800-DBFF 55296-56319 Color nybble memory
DC00-DC0F 56320-56335 Interface chip 1, IRQ (6526 CIA)
DD00-DD0F 56576-56591 Interface chip 2, NMI (6526 CIA)
D000-DFFF 53248-53294 Alternate: Character set
E000-FFFF 57344-65535 ROM: Operating System
E000-FFFF 57344-65535 Alternate : RAM
FF81-FFF5 65409-65525 Jump Table, Including :
FFC6 - Set Input channel
FFC9 - Set Output channel
FFCC - Restore default I/O channels
FFCF - INPUT
FFD2 - PRINT
FFE1 - Test Stop Key
FFE4 - GET
6502 Assembly language
ADC |
.... |
add with carry |
AND |
.... |
and (with accumulator) |
ASL |
.... |
arithmetic shift left |
BCC |
.... |
branch on carry clear |
BCS |
.... |
branch on carry set |
BEQ |
.... |
branch on equal (zero set) |
BIT |
.... |
bit test |
BMI |
.... |
branch on minus (negative set) |
BNE |
.... |
branch on not equal (zero clear) |
BPL |
.... |
branch on plus (negative clear) |
BRK |
.... |
interrupt |
BVC |
.... |
branch on overflow clear |
BVS |
.... |
branch on overflow set |
CLC |
.... |
clear carry |
CLD |
.... |
clear decimal |
CLI |
.... |
clear interrupt disable |
CLV |
.... |
clear overflow |
CMP |
.... |
compare (with accumulator) |
CPX |
.... |
compare with X |
CPY |
.... |
compare with Y |
DEC |
.... |
decrement |
DEX |
.... |
decrement X |
DEY |
.... |
decrement Y |
EOR |
.... |
exclusive or (with accumulator) |
INC |
.... |
increment |
INX |
.... |
increment X |
INY |
.... |
increment Y |
JMP |
.... |
jump |
JSR |
.... |
jump subroutine |
LDA |
.... |
load accumulator |
LDY |
.... |
load X |
LDY |
.... |
load Y |
LSR |
.... |
logical shift right |
NOP |
.... |
no operation |
ORA |
.... |
or with accumulator |
PHA |
.... |
push accumulator |
PHP |
.... |
push processor status (SR) |
PLA |
.... |
pull accumulator |
PLP |
.... |
pull processor status (SR) |
ROL |
.... |
rotate left |
ROR |
.... |
rotate right |
RTI |
.... |
return from interrupt |
RTS |
.... |
return from subroutine |
SBC |
.... |
subtract with carry |
SEC |
.... |
set carry |
SED |
.... |
set decimal |
SEI |
.... |
set interrupt disable |
STA |
.... |
store accumulator |
STX |
.... |
store X |
STY |
.... |
store Y |
TAX |
.... |
transfer accumulator to X |
TAY |
.... |
transfer accumulator to Y |
TSX |
.... |
transfer stack pointer to X |
TXA |
.... |
transfer X to accumulator |
TXS |
.... |
transfer X to stack pointer |
TYA |
.... |
transfer Y to accumulator |
Registers:
PC |
.... |
program counter |
(16 bit) |
AC |
.... |
accumulator |
(8 bit) |
X |
.... |
X
register |
(8 bit) |
Y |
.... |
Y
register |
(8 bit) |
SR |
.... |
status register [NV-BDIZC] |
(8 bit) |
SP |
.... |
stack pointer |
(8 bit) |
SR Flags (bit 7 to bit 0):
N |
.... |
Negative |
V |
.... |
Overflow |
- |
.... |
ignored |
B |
.... |
Break |
D |
.... |
Decimal (use BCD for arithmetics) |
I |
.... |
Interrupt (IRQ disable) |
Z |
.... |
Zero |
C |
.... |
Carry |
Link:
Complet
description
C64 chips
c64 shematic:
250469-A-left, 250469-A-right, 250469-B-right
6510 example ( C64 )
.C:2101 A9 3A LDA #$3A
.C:2103 CD 12 D0 CMP $D012
.C:2106 D0 FB BNE $2103
.C:2108 A2 09 LDX #$09
.C:210a CA DEX
.C:210b D0 FD BNE $210A
.C:210d A2 00 LDX #$00
.C:210f BD 00 09 LDA $0900,X
.C:2112 8D 21 D0 STA $D021
.C:2115 8D 20 D0 STA $D020
.C:2118 BC 00 0A LDY $0A00,X
.C:211b 88 DEY
.C:211c 10 FD BPL $211B
.C:211e E8 INX
.C:211f E0 65 CPX #$65
.C:2121 D0 EC BNE $210F
.C:2123 A2 01 LDX #$01
.C:2125 CA DEX
.C:2126 D0 FD BNE $2125
.C:2128 A9 00 LDA #$00
.C:212a 8D 20 D0 STA $D020
.C:212d AD 21 D0 LDA $D021
Apple IIe Memory Map
6502 example ( Appel II )
LDX #0
LOOP LDA MSG,X
JSR COUT1 ;APPLE II ROM ROUTINE
INX
CPX #13
BNE LOOP
RTS
MSG ASC "HELLO, WORLD!"
|
|
|
|