6502 指令表
| 4 | C | 14 | 1C | 0 | 8 | 10 | 18 | 2 | 1A |
00 | | | | | BRK | PHP | BPL d | CLC | | |
20 | BIT d | BIT a | | | JSR | PLP | BMI d | SEC | | |
40 | | JMP a | | | RTI | PHA | BVC d | CLI | | |
60 | | JMP (a) | | | RTS | PLA | BVS d | SEI | | |
80 | STY d | STY a | STY d,x | | | DEY | BCC d | TYA | | TXS |
A0 | LDY d | LDY a | LDY d,x | LDY a,x | LDY #i | TAY | BCS d | CLV | LDX #i | TSX |
C0 | CPY d | CPY a | | | CPY #i | INY | BNE d | CLD | | |
E0 | CPX d | CPX a | | | CPX #i | INX | BEQ d | SED | | |
| 5 | D | 15 | 1D | 1 | 9 | 11 | 19 | 6 | E | 16 | 1E | A |
00 | ORA d | ORA a | ORA d,x | ORA a,x | ORA (d,x) | ORA #i | ORA (d),y | ORA a,y | ASL d | ASL a | ASL d,x | ASL a,x | ASL |
20 | AND d | AND a | AND d,x | AND a,x | AND (d,x) | AND #i | AND (d),y | AND a,y | ROL d | ROL a | ROL d,x | ROL a,x | ROL |
40 | EOR d | EOR a | EOR d,x | EOR a,x | EOR (d,x) | EOR #i | EOR (d),y | EOR a,y | LSR d | LSR a | LSR d,x | LSR a,x | LSR |
60 | ADC d | ADC a | ADC d,x | ADC a,x | ADC (d,x) | ADC #i | ADC (d),y | ADC a,y | ROR d | ROR a | ROR d,x | ROR a,x | ROR |
80 | STA d | STA a | STA d,x | STA a,x | STA (d,x) | | STA (d),y | STA a,y | STX d | STX a | STX d,y | | TXA |
A0 | LDA d | LDA a | LDA d,x | LDA a,x | LDA (d,x) | LDA #i | LDA (d),y | LDA a,y | LDX d | LDX a | LDX d,y | LDX a,y | TAX |
C0 | CMP d | CMP a | CMP d,x | CMP a,x | CMP (d,x) | CMP #i | CMP (d),y | CMP a,y | DEC d | DEC a | DEC d,x | DEC a,x | DEX |
E0 | SBC d | SBC a | SBC d,x | SBC a,x | SBC (d,x) | SBC #i | SBC (d),y | SBC a,y | INC d | INC a | INC d,x | INC a,x | NOP |
指令含义
- ADC:带进位加法 A←A+M+C C←256≤A+M+C V←A[7]==M[7]&&A[7]!=(A+M+C)[7] (NZ)
- AND:按位与 A←A&M (NZ)
- ASL:算术左移 C←A[7..0]←0 (NZ)
- BCC/BCS:无进位或有借位则跳转、有进位或无借位则跳转(条件跳转均为相对跳转)
- BEQ/BNE:为零或等于则跳转、不为零或不等于则跳转
- BIT:位测试 N←(A&M)[7] V←(A&M)[6] Z←(A&M)==0
- BPL/BMI:正数则跳转、负数则跳转
- BRK:制造一个中断
- BVC/BVS:未溢出则跳转、溢出则跳转
- CLC/SEC:清除进位或设置借位、设置进位或清除借位 (C)
- CLD/SED:禁用十进制模式、启用十进制模式(在 FC 上无效) (D)
- CLI/SEI:启用中断、禁用中断 (I)
- CLV:清除溢出 (V)
- CMP/CPX/CPY:比较 C←A≥M Z←A==M N==A[7]
- DEC/DEX/DEY:减一 M←M-1 (NZ)
- EOR:按位异或 A←A^M (NZ)
- INC/INX/INY:加一 M←M-1 (NZ)
- JMP:跳转 PC←M
- JSR:调用 ST←PC+2 PC←M
- LDA/LDX/LDY:加载寄存器 A←M (NZ)
- LSR:逻辑右移 0→A[7..0]→C (NZ)
- NOP:空指令
- ORA:按位或 A←A|M (NZ)
- PHA:出栈到寄存器 A←ST
- PHP:出栈到符号位 [NV.BDIZC]←ST
- PLA:寄存器入栈 ST←A
- PLP:符号位入栈 ST←[NV0BDIZC]
- ROL:循环左移 C←A[7..0]←C (NZ)
- ROR:循环右移 C→A[7..0]→C (NZ)
- RTI:中断返回 [NV..DIZC]←ST PC←ST
- RTS:子程序返回 PC←ST+1
- SBC:带进位减法 A←A-M-1+C C←A<M+1-C V←A[7]==M[7]&&A[7]!=(A-M-1+C)[7] (NZ)
- STA/STX/STY:储存寄存器 M←A
- TAX/TAY:累加器传送至 X、Y 寄存器 A→X (NZ)
- TSX:栈指针传送至 X 寄存器 S→X (NZ)
- TXA/TYA:X、Y 寄存器传送至累加器 X→A (NZ)
- TXS:X 寄存器传送至栈指针 X→S (NZ)
寻址模式
- #i:8 位立即数
- d:8 位寻址
- a:16 位寻址(小端字节序,下同)
- d,x:8 位加 x 寄存器寻址
- a,x:16 位加 x 寄存器寻址
- a,y:16 位加 y 寄存器寻址
- (d,x):8 位加 x 寄存器取 16 位地址间接寻址
- (d),y:8 位取 16 位地址加 y 寄存器间接寻址
- (a):16 位间接跳转(目标地址不得跨页,即 JMP ($xxFF) 是不被允许的,详见此处)
FC 卡带引脚排列
地 | GND | 01 | 31 | +5V | 电源 |
CPU 地址线 | A11 | 02 | 32 | M2 | CPU 时钟,详见原文 |
| A10 | 03 | 33 | A12 | CPU 地址线 |
| A9 | 04 | 34 | A13 | |
| A8 | 05 | 35 | A14 | |
| A7 | 06 | 36 | D7 | CPU 数据线 |
| A6 | 07 | 37 | D6 | |
| A5 | 08 | 38 | D5 | |
| A4 | 09 | 39 | D4 | |
| A3 | 10 | 40 | D3 | |
| A2 | 11 | 41 | D2 | |
| A1 | 12 | 42 | D1 | |
| A0 | 13 | 43 | D0 | |
高电平读取,低电平写入 | R/W | 14 | 44 | /ROMSEL | PRG ROM 选通,低电平有效,A15 和 M2 的与非 |
中断,低电平有效,内置上拉 | /IRQ | 15 | 45 | AUDFC | 来自游戏机的音频,一般接 AUDRF |
地 | GND | 16 | 46 | AUDRF | 发送至音频输出的音频 |
PPU 读取,低电平有效 | PPU /RD | 17 | 47 | PPU /WR | PPU 写入,低电平有效 |
内置显存 A10,横向卷轴接 A10,纵向卷轴接 A11 | CIRAM A10 | 18 | 48 | CIRAM /CE | 内置显存选通,低电平有效 |
PPU 地址线 | PPU A6 | 19 | 49 | PPU /A13 | 翻转的 GA13,一般接 CIRAM /CE |
| PPU A5 | 20 | 50 | PPU A7 | PPU 地址线 |
| PPU A4 | 21 | 51 | PPU A8 | |
| PPU A3 | 22 | 52 | PPU A9 | |
| PPU A2 | 23 | 53 | PPU A10 | |
| PPU A1 | 24 | 54 | PPU A11 | |
| PPU A0 | 25 | 55 | PPU A12 | |
PPU 数据线 | PPU D0 | 26 | 56 | PPU A13 | |
| PPU D1 | 27 | 57 | PPU D7 | PPU 数据线 |
| PPU D2 | 28 | 58 | PPU D6 | |
| PPU D3 | 29 | 59 | PPU D5 | |
电源 | +5V | 30 | 60 | PPU D4 | |
Mapper 表
粗体意味着该 Mapper 已受到本社团产品的支持。
过于复杂、资料不足或只有盗版/合卡使用的Mapper不会列入。
分立
编号 | 名称 | 寄存器 | 作用 |
000 | NROM | | |
002 | UNROM | 8000-FFFF | ....pppp(H) |
003 | CNROM | 8000-FFFF | ....CCCC |
007 | AxROM | 8000-FFFF | ...MPPPP(0/1) |
011 | Color Dreams | 8000-FFFF | CCCCLLPP(LL=NES CIC defeat) |
034 | BNROM | 8000-FFFF | ....PPPP |
066 | GxROM | 8000-FFFF | ..PP..CC |
094 | UN1ROM | 8000-FFFF | ...ppp..(H) |
180 | Crazy Climber | 8000-FFFF | .....ppp(L) |
218 | Magic Floor | | (0)(1K VRAM) |
429 | A Mode | 8000-FFFF | ..PPPPCC |
429:1 | A Mode | 8000-FFFF | M.PPPPCC(0/1) |
MMC
编号 | 名称 | 寄存器 | 作用 | 寄存器 | 作用 |
001 | MMC1 | 8000-9FFF(S) | CPPMM(+/+)(P/P/H/L)(0/1/H/V) | A000-BFFF(S) | ccccc |
| | C000-DFFF(S) | ccccc | E000-FFFF(S) | Rpppp(WRAMNCE) |
004 | MMC3 | 8000-9FFE | CP...RRR(R0..R5)(R6..R7=LL+LH+-2+-1/-2+LH+HL+-1) |
| | 8001-9FFF R0 | CCCCCCC.(LL/HL) | 8001-9FFF R1 | CCCCCCC.(LH/HH) |
| | 8001-9FFF R2 | CCCCCCCC(HLL/LLL) | 8001-9FFF R3 | CCCCCCCC(HLH/LLH) |
| | 8001-9FFF R4 | CCCCCCCC(HHL/LHL) | 8001-9FFF R5 | CCCCCCCC(HHH/LHH) |
| | 8001-9FFF R6 | ..PPPPPP(LL/HL) | 8001-9FFF R7 | ..PPPPPP(LH) |
| | A000-BFFE | .......M(V/H) | A001-BFFF | RW......(WRAMPCE/WRAMNWE) |
| | C000-DFFE | DDDDDDDD(PA12RISE:D--,D=0:IRQ) | C001-DFFF | ........(*=IRQRELOAD) |
| | E000-FFFE | ........(*=IRQOFF) | E001-FFFF | ........(*=IRQON) |
字母简写含义
- M:镜像模式
- 0:单屏幕,AAAA
- 1:单屏幕,BBBB
- H:水平滚动,垂直镜像,AABB
- V:垂直滚动,水平镜像,ABAB
- P/p:PRG BANK
- C/c:CHR BANK
- 大写的 P/C:切换整个 32K/8K
- L:切换低 16K 或低 4K,高 16K 固定于首 BANK
- H:切换高 16K 或高 4K,低 16K 固定于末 BANK
- 0H:切换高 16K 或高 4K,低 16K 固定于首 BANK
- S:移位寄存器,位0=数据,低位在前,共5位
|