Saturday, July 7, 2012
65816 Disassembly - 8 and 16 bit modes
Today I made JMON a little smarter about 65816 disassembly. It now handles 8-bit and 16-bit instructions, looking at SEP and REP instructions to determine what mode the CPU is currently in. Of course, it cannot always get this correct as it doesn't know if code could be called when the CPU is in a specified mode. It starts in all 8-bit mode. This is similar to how the CC65 assembler works in "auto" mode unless you use assembler directives to explicitly set the mode.
While I was testing this I noticed the SEP instruction was disassembled as CPX. There is actually an error in the Western Design Center manual in Chapter 19, Instruction Lists, which I had copied when I entered the op codes. The byte $E2 is SEP but is listed as CPX.
Here is sample disassembly output from JMON showing all 4 combinations of 8 and 16-bit accumulator and index register modes (I've manually added spaces to highlight where the mode changes).
JMON MONITOR 0.97 BY JEFF TRANTER
? U 60B9
60B9 E2 30 SEP #$30
60BB 09 12 ORA #$12
60BD 29 12 AND #$12
60BF 49 12 EOR #$12
60C1 69 12 ADC #$12
60C3 89 12 BIT #$12
60C5 A9 12 LDA #$12
60C7 C9 12 CMP #$12
60C9 E9 12 SBC #$12
60CB A0 12 LDY #$12
60CD A2 12 LDX #$12
60CF C0 12 CPY #$12
60D1 E0 12 CPX #$12
60D3 C2 30 REP #$30
60D5 09 34 12 ORA #$1234
60D8 29 34 12 AND #$1234
60DB 49 34 12 EOR #$1234
60DE 69 34 12 ADC #$1234
60E1 89 34 12 BIT #$1234
60E4 A9 34 12 LDA #$1234
60E7 C9 34 12 CMP #$1234
60EA E9 34 12 SBC #$1234
60ED A0 34 12 LDY #$1234
60F0 A2 34 12 LDX #$1234
60F3 C0 34 12 CPY #$1234
60F6 E0 34 12 CPX #$1234
60F9 C2 20 REP #$20
60FB E2 10 SEP #$10
60FD 09 34 12 ORA #$1234
6100 29 34 12 AND #$1234
6103 49 34 12 EOR #$1234
6106 69 34 12 ADC #$1234
6109 89 34 12 BIT #$1234
610C A9 34 12 LDA #$1234
610F C9 34 12 CMP #$1234
6112 E9 34 12 SBC #$1234
6115 A0 12 LDY #$12
6117 A2 12 LDX #$12
6119 C0 12 CPY #$12
611B E0 12 CPX #$12
611D E2 20 SEP #$20
611F C2 10 REP #$10
6121 09 12 ORA #$12
6123 29 12 AND #$12
6125 49 12 EOR #$12
6127 69 12 ADC #$12
6129 89 12 BIT #$12
612B A9 12 LDA #$12
612D C9 12 CMP #$12
612F E9 12 SBC #$12
6131 A0 34 12 LDY #$1234
6134 A2 34 12 LDX #$1234
6137 C0 34 12 CPY #$1234
613A E0 34 12 CPX #$1234
No comments:
Post a Comment