Thoughts on a 32-bit 6502 ========================= Using [zp] and [abs] as syntax to refer to 32-bit addressing modes * indicates where new syntax needed to avoid conflict Instructions with 16-bit address bus: 32-bit address bus: ORA (zp,X) byte=?(zp0+X,zp1+X) ORA [zp32,X] byte=?(zp+X..zp+X+3) ORA zp byte=?zp ORA #n byte=n ORA abs byte=?(abs0,abs1) * ORA abs32 byte=?(abs0..abs3) ORA (zp),Y byte=?(zp0,zp1+Y) ORA [zp32],Y byte=?(zp0..zp3+Y) ORA (zp) byte=?(zp0,zp1) ORA [zp32] byte=?(zp0..zp3) ORA zp,X byte=?(zp+X) ORA abs,Y byte=?(abs0,abs1+Y) * ORA abs32,Y byte=?(abs0..abs3+Y) ORA abs,X byte=?(abs0,abs1+X) * ORA abs32,X byte=?(abs0..abs3+X) for ORA also AND/EOR/ADC/STA/LDA/CMP/SBC ASL A byte=A ASL zp byte=?zp ASL abs byte=?(abs0,abs1) * ASL abs32 byte=?(abs0..abs3) ASL zp,X byte=?(zp+X) ASL abs,X byte=?(abs0,abs1+X) * ASL abs32,X byte=?(abs0..abs3+X) for ASL also ROL/LSR/ROR INC zp byte=?zp INC abs byte=?(abs0,abs1) * INC abs32 byte=?(abs0..abs3) INC zp,X byte=?(zp+X) INC abs,X byte=?(abs0,abs1+X) * INC abs32,X byte=?(abs0..abs3+X) for INC also DEC/BIT/STZ STY zp byte=?zp STY abs byte=?(abs0,abs1) * STY abs32 byte=?(abs0..abs3) STY zp,X byte=?(zp+X) for STY also LDY/STX/LDX LDY abs,X byte=?(abs0,abs1+X) * LDY abs32,X byte=?(abs0..abs3+X) LDX abs,Y byte=?(abs0,abs1+Y) * LDX abs32,Y byte=?(abs0..abs3+Y) LDY #n byte=n CPY #n byte=n CPY zp byte=?zp CPY abs byte=?(abs0,abs1) * CPY abs32 byte=?(abs0..abs3) for Y also X TSB zp byte=n TSB abs byte=?(abs0,abs1) * TSB abs32 byte=?(abs0..abs3) for TSB also TRB JSR abs dest=!(abs0,abs1) * JSR abs32 dest=!(abs0..abs3) JMP abs dest=!(abs0,abs1) * JMP abs32 dest=!(abs0..abs3) JMP (abs) dest=!(!(abs0,abs1)) * JMP (abs32) dest=!(!(abs0..abs3)) JMP (abs,X) dest=!(abs0,abs1+X) * JMP (abs32,X) dest=!(abs0..abs3+X) RTS dest=(SP+1,SP+2) RTSF dest=(SP+1..4) RTI dest=(SP+1,SP+2) RTIF dest=(SP+1..4) BRK BIT #n byte=n BPL rel BMI rel BVC rel BVS rel BNE rel BEQ rel BCC rel BCS rel BRA rel CLC SEC CLI SEI CLD SED CLV PHA PLA PHP PLP PHY PLY PHX PLX INY DEY INX DEX TAY TAX TXA TYA TXS TSX INC A DEC A NOP Possible 32-bit 6502 Opcode Map ------------------------------- zp = 8-bit zero page address pointing to 16-bit address abs = 16-bit address [zp] = 8-bit zero page address pointing to 32-bit address [abs] = 32-bit address 0/8 1/9 2/A 3/B 4/C 5/D 6/E 7/F +--------+----------+---------+-----------+-----------+---------+----------+-----------+ 00 |BRK |ORA (zp,X)| |ORA [zp,X] |TSB zp |ORA zp |ASL zp |ora | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ 08 |PHP |ORA #n |ASL A |ora |TSB abs |ORA abs |ASL abs |ORA [abs] | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ 10 |BPL rel |ORA (zp),Y|ORA (zp) |ORA [zp],Y |TRB zp |ORA zp,X |ASL zp,X |ORA [zp] | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ 18 |CLC |ORA abs,Y |INC A |ORA [abs,Y]|TRB abs |ORA abs,X|ASL abs,X |ORA [abs,X]| +--------+----------+---------+-----------+-----------+---------+----------+-----------+ Where to put: ASL abs32 ASL abs32,X TSB abs32 TRB abs32 +--------+----------+---------+-----------+-----------+---------+----------+-----------+ 20 |JSR abs |AND (zp,X)| |AND [zp,X] |BIT zp |AND zp |ROL zp |and | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ 28 |PLP |AND #n |ROL A |and |BIT abs |AND abs |ROL abs |AND [abs] | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ 30 |BMI rel |AND (zp),Y|AND (zp) |AND [zp],Y |BIT zp,X |AND zp,X |ROL zp,X |AND [zp] | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ 38 |SEC |AND abs,Y |DEC A |AND [abs,Y]|BIT abs,X |AND abs,X|ROL abs,X |AND [abs,X]| +--------+----------+---------+-----------+-----------+---------+----------+-----------+ Where to put: ROL abs32 ROL abs32,X JSR abs32 +--------+----------+---------+-----------+-----------+---------+----------+-----------+ 40 |RTI |EOR (zp,X)| |EOR [zp,X] |jmp |EOR zp |LSR zp |eor | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ 48 |PHA |EOR #n |LSR A |eor |JMP abs |EOR abs |LSR abs |EOR [abs] | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ 50 |BVC rel |EOR (zp),Y|EOR (zp) |EOR [zp],Y |jmp |EOR zp,X |LSR zp,X |EOR [zp] | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ 58 |CLI |EOR abs,Y |PHY |EOR [abs,Y]|jmp |EOR abs,X|LSR abs,X |EOR [abs,X]| +--------+----------+---------+-----------+-----------+---------+----------+-----------+ Where to put: LSR abs32 LSR abs32,X JMP abs32 RTIF +--------+----------+---------+-----------+-----------+---------+----------+-----------+ 60 |RTS |ADC (zp,X)| |ADC [zp,X] |STZ zp |ADC zp |ROR zp |adc | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ 68 |PLA |ADC #n |ROR A |adc |JMP (abs) |ADC abs |ROR abs |ADC [abs] | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ 70 |BVS rel |ADC (zp),Y|ADC (zp) |ADC [zp],Y |STZ zp,X |ADC zp,X |ROR zp,X |ADC [zp] | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ 78 |SEI |ADC abs,Y |PLY |ADC [abs,Y]|JMP (abs,X)|ADC abs,X|ROR abs,X |ADC [abs,X]| +--------+----------+---------+-----------+-----------+---------+----------+-----------+ Where to put: ROR abs32 ROR abs32,X JMP (abs32) JMP (abs32,X) RTSF +--------+----------+---------+-----------+-----------+---------+----------+-----------+ 80 |BRA rel |STA (zp,X)| |STA [zp,X] |STY zp |STA zp |STX zp |sta | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ 88 |DEY |BIT #n |TXA |sta |STY abs |STA abs |STX abs |STA [abs] | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ 90 |BCC rel |STA (zp),Y|STA (zp) |STA [zp],Y |STY zp,X |STA zp,X |STX zp,Y |STA [zp] | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ 98 |TYA |STA abs,Y |TXS |STA [abs,Y]|STZ abs |STA abs,X|STZ abs,X |STA [abs,X]| +--------+----------+---------+-----------+-----------+---------+----------+-----------+ Where to put: STZ abs32 STZ abs32,X STY abs32 STX abs32 +--------+----------+---------+-----------+-----------+---------+----------+-----------+ A0 |LDY #n |LDA (zp,X)|LDX #n |LDA [zp,X] |LDY zp |LDA zp |LDX zp |lda | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ A8 |TAY |LDA #n |TAX |lda |LDY abs |LDA abs |LDX abs |LDA [abs] | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ B0 |BCS rel |LDA (zp),Y|LDA (zp) |LDA [zp],Y |LDY zp,X |LDA zp,X |LDX zp,Y |LDA [zp] | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ B8 |CLV |LDA abs,Y |TSX |LDA [abs,Y]|LDY abs,X |LDA abs,X|LDX abs,Y |LDA [abs,X]| +--------+----------+---------+-----------+-----------+---------+----------+-----------+ Where to put: LDY abs32 LDX abs32 LDY abs32,X LDX abs32,Y +--------+----------+---------+-----------+-----------+---------+----------+-----------+ C0 |CPY #n |CMP (zp,X)| |CMP [zp,X] |CPY zp |CMP zp |DEC zp |cmp | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ C8 |INY |CMP #n |DEX |cmp |CPY abs |CMP abs |DEC abs |CMP [abs] | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ D0 |BNE rel |CMP (zp),Y|CMP (zp) |CMP [zp],Y |cpy |CMP zp,X |DEC zp,X |CMP [zp] | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ D8 |CLD |CMP abs,Y |PHX |CMP [abs,Y]|cpy |CMP abs,X|DEC abs,X |CMP [abs,X]| +--------+----------+---------+-----------+-----------+---------+----------+-----------+ Where to put: DEC abs32 DEC abs32,X CPY abs32 +--------+----------+---------+-----------+-----------+---------+----------+-----------+ E0 |CPX #n |SBC (zp,X)| |SBC [zp,X] |CPX zp |SBC zp |INC zp |sbc | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ E8 |INX |SBC #n |NOP |sbc |CPX abs |SBC abs |INC abs |SBC [abs] | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ F0 |BEQ rel |SBC (zp),Y|SBC (zp) |SBC [zp],Y |cpx |SBC zp,X |INC zp,X |SBC [zp] | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ F8 |SED |SBC abs,Y |PLX |SBC [abs,Y]|cpx |SBC abs,X|INC abs,X |SBC [abs,X]| +--------+----------+---------+-----------+-----------+---------+----------+-----------+ Where to put: INC abs32 INC abs32,X CPX abs32