Thoughts on 32-bit 6502 ----------------------- 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) 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) TSB zp byte=?zp TSB abs byte=?(abs0,abs1) ASL abs32 byte=?(abs0..abs3) BIT zp byte=?zp BIT abs byte=?(abs0,abs1) BIT abs32 byte=?(abs0..abs3) BIT zp,X byte=?(zp+X) BIT abs,X byte=?(abs0,abs1+X) BIT abs32,X byte=?(abs0..abs3+X) BIT #n byte=n STA/X/Y/Z zp byte=?zp STA/X/Y/Z abs byte=?(abs0,abs1) STA/X/Y/Z abs32 byte=?(abs0..abs3) STA (zp),Y byte=?(zp0,zp1+Y) STA (zp32),Y byte=?(zp0..zp3+Y) STA (zp) byte=?(zp0,zp1) STA (zp32) byte=?(zp0..zp3) STA zp,X STX zp,Y STA abs,Y STA abs32,Y STA abs,X STA abs32,X STZ abs,X STZ abs32,X LDA/X/Y #n LDA (zp,X) LDA/X/Y zp LDA/X/Y abs LDA/X/Y abs32 LDA (zp),Y LDA (zp32),Y LDA zp,X LDX zp,Y LDA abs,Y LDA abs32,Y LDY abs,X LDY abs32,X LDA abs,X LDA abs32,X LDX abs,Y LDX abs32,Y PHx/PLx CLx/SEx INC A/X/Y/S byte=A/X/Y/S DEC A/X/Y/S byte=A/X/Y/S INC zp DEC zp INC abs INC abs32 DEC abs DEC abs32 CPX/Y #n CPX/Y zp CPX/Y abs CPX/Y abs32 BPL rel dest=PC+/-dist8 BPL dest32 dest=PC+/-dist32 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) RTI RTS RTS32 TXA/TAX TYA/TAY TSX/TXS xxxEQ -> JSREQ addr -> BNE P%+5:JSR addr xxxNE xxxCC xxxCS BEQNE -> BEQ P%+2:BEQ addr !!! ;) BEQEQ -> BNE P%+2:BEQ addr EOREQ #n -> BNE P%+2:EOR #n JMPEQ addr -> BNE P%+5:JMP addr LDA (zp,X) LDA [zp,X] LDA zp LDA #n LDA abs LDA [abs] LDA (zp),Y LDA [zp],Y LDA (zp) LDA [zp] LDA zp,X LDA abs,Y LDA [abs,Y] LDA abs,X LDA [abs,X] INC abs INC [abs] JSR abs JSR [abs] JMP abs JMP [abs] JMP (abs) JMP [(abs)] RTS RTSF RTI RTIF BPL rel BPL [rel] 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 | | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ 08 |PHP |ORA #n |ASL A | |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 | | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ 18 |CLC |ORA abs,Y |INC A |ORA [abs,Y]|TRB abs |ORA abs,X|ASL abs,X |ORA [abs,X]| +--------+----------+---------+-----------+-----------+---------+----------+-----------+ +--------+----------+---------+-----------+-----------+---------+----------+-----------+ 20 |JSR abs |AND (zp,X)|JSR [abs]|AND [zp,X] |BIT zp |AND zp |ROL zp | | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ 28 |PLP |AND #n |ROL A | |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 | | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ 38 |SEC |AND abs,Y |DEC A |AND [abs,Y]|BIT abs,X |AND abs,X|ROL abs,X |AND [abs,X]| +--------+----------+---------+-----------+-----------+---------+----------+-----------+ +--------+----------+---------+-----------+-----------+---------+----------+-----------+ 40 |RTI |EOR (zp,X)|RTIF |EOR [zp,X] | |EOR zp |LSR zp | | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ 48 |PHA |EOR #n |LSR A | |JMP abs |EOR abs |LSR abs |EOR [abs] | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ 50 |BVC rel |EOR (zp),Y|EOR (zp) |EOR [zp],Y | |EOR zp,X |LSR zp,X | | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ 58 |CLI |EOR abs,Y |PHY |EOR [abs,Y]| |EOR abs,X|LSR abs,X |EOR [abs,X]| +--------+----------+---------+-----------+-----------+---------+----------+-----------+ +--------+----------+---------+-----------+-----------+---------+----------+-----------+ 60 |RTS |ADC (zp,X)|RTSF |ADC [zp,X] |STZ zp |ADC zp |ROR zp | | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ 68 |PLA |ADC #n |ROR A | |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 | | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ 78 |SEI |ADC abs,Y |PLY |ADC [abs,Y]|JMP (abs,X)|ADC abs,X|ROR abs,X |ADC [abs,X]| +--------+----------+---------+-----------+-----------+---------+----------+-----------+ +--------+----------+---------+-----------+-----------+---------+----------+-----------+ 80 |BRA rel |STA (zp,X)| |STA [zp,X] |STY zp |STA zp |STX zp | | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ 88 |DEY |BIT #n |TXA | |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 | | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ 98 |TYA |STA abs,Y |TXS |STA [abs,Y]|STZ abs |STA abs,X|STZ abs,X |STA [abs,X]| +--------+----------+---------+-----------+-----------+---------+----------+-----------+ +--------+----------+---------+-----------+-----------+---------+----------+-----------+ A0 |LDY #n |LDA (zp,X)|LDX #n |LDA [zp,X] |LDY zp |LDA zp |LDX zp | | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ A8 |TAY |LDA #n |TAX | |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 | | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ B8 |CLV |LDA abs,Y |TSX |LDA [abs,Y]|LDY abs,X |LDA abs,X|LDX abs,Y |LDA [abs,X]| +--------+----------+---------+-----------+-----------+---------+----------+-----------+ +--------+----------+---------+-----------+-----------+---------+----------+-----------+ C0 |CPY #n |CMP (zp,X)| |CMP [zp,X] |CPY zp |CMP zp |DEC zp | | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ C8 |INY |CMP #n |DEX | |CPY abs |CMP abs |DEC abs |CMP [abs] | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ D0 |BNE rel |CMP (zp),Y|CMP (zp) |CMP [zp],Y | |CMP zp,X |DEC zp,X | | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ D8 |CLD |CMP abs,Y |PHX |CMP [abs,Y]| |CMP abs,X|DEC abs,X |CMP [abs,X]| +--------+----------+---------+-----------+-----------+---------+----------+-----------+ +--------+----------+---------+-----------+-----------+---------+----------+-----------+ E0 |CPX #n |SBC (zp,X)| |SBC [zp,X] |CPX zp |SBC zp |INC zp | | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ E8 |INX |SBC #n |NOP | |CPX abs |SBC abs |INC abs |SBC [abs] | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ F0 |BEQ rel |SBC (zp),Y|SBC (zp) |SBC [zp],Y | |SBC zp,X |INC zp,X | | +--------+----------+---------+-----------+-----------+---------+----------+-----------+ F8 |SED |SBC abs,Y |PLX |SBC [abs,Y]| |SBC abs,X|INC abs,X |SBC [abs,X]| +--------+----------+---------+-----------+-----------+---------+----------+-----------+