X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=src%2Fdis65c02.cpp;h=d275f385679d890aa8be3aa2eac764adf0d6101a;hb=c0001155bc0909da61f6c849c0be9b16e9b7f4b6;hp=61976597126b9ec00848b3da5c5c7e2c473c9d94;hpb=eeb2935c12ef41a63049126748c2574b324403a5;p=apple2 diff --git a/src/dis65c02.cpp b/src/dis65c02.cpp index 6197659..d275f38 100755 --- a/src/dis65c02.cpp +++ b/src/dis65c02.cpp @@ -1,178 +1,174 @@ -// -// 65C02 disassembler -// -// by James L. Hammons -// (c) 2005 Underground Software -// - -#include -#include -#include "dis65c02.h" -//#include "types.h" -#include "v65c02.h" -#include "log.h" - -using namespace std; - -// External shit - -extern V65C02REGS mainCPU;//Hm. Shouldn't we pass this shit in? - -// Private globals variables - -static uint8 op_mat[256] = { - 14, 6, 0, 0, 2, 2, 2, 2, 14, 1, 14, 0, 8, 8, 8, 13, - 13, 7, 5, 0, 2, 3, 3, 2, 14, 10, 14, 0, 8, 9, 9, 13, - 8, 6, 0, 0, 2, 2, 2, 2, 14, 1, 14, 0, 8, 8, 8, 13, - 13, 7, 5, 0, 3, 3, 3, 2, 14, 10, 14, 0, 9, 9, 9, 13, - 14, 6, 0, 0, 0, 2, 2, 2, 14, 1, 14, 0, 8, 8, 8, 13, - 13, 7, 5, 0, 0, 3, 3, 2, 14, 10, 14, 0, 0, 9, 9, 13, - 14, 6, 0, 0, 2, 2, 2, 2, 14, 1, 14, 0, 11, 8, 8, 13, - 13, 7, 5, 0, 3, 3, 3, 2, 14, 10, 14, 0, 12, 9, 9, 13, - 13, 6, 0, 0, 2, 2, 2, 2, 14, 1, 14, 0, 8, 8, 8, 13, - 13, 7, 5, 0, 3, 3, 4, 2, 14, 10, 14, 0, 8, 9, 9, 13, - 1, 6, 1, 0, 2, 2, 2, 2, 14, 1, 14, 0, 8, 8, 8, 13, - 13, 7, 5, 0, 3, 3, 4, 2, 14, 10, 14, 0, 9, 9, 10, 13, - 1, 6, 0, 0, 2, 2, 2, 2, 14, 1, 14, 0, 8, 8, 8, 13, - 13, 7, 5, 0, 0, 3, 3, 2, 14, 10, 14, 0, 0, 9, 9, 13, - 1, 6, 0, 0, 2, 2, 2, 2, 14, 1, 14, 0, 8, 8, 8, 13, - 13, 7, 5, 0, 0, 3, 3, 2, 14, 10, 14, 0, 0, 9, 9, 13 }; - -static uint8 mnemonics[256][6] = { - "BRK ","ORA ","??? ","??? ","TSB ","ORA ","ASL ","RMB0 ", - "PHP ","ORA ","ASL ","??? ","TSB ","ORA ","ASL ","BBR0 ", - "BPL ","ORA ","ORA ","??? ","TRB ","ORA ","ASL ","RMB1 ", - "CLC ","ORA ","INC ","??? ","TRB ","ORA ","ASL ","BBR1 ", - "JSR ","AND ","??? ","??? ","BIT ","AND ","ROL ","RMB2 ", - "PLP ","AND ","ROL ","??? ","BIT ","AND ","ROL ","BBR2 ", - "BMI ","AND ","AND ","??? ","BIT ","AND ","ROL ","RMB3 ", - "SEC ","AND ","DEC ","??? ","BIT ","AND ","ROL ","BBR3 ", - "RTI ","EOR ","??? ","??? ","??? ","EOR ","LSR ","RMB4 ", - "PHA ","EOR ","LSR ","??? ","JMP ","EOR ","LSR ","BBR4 ", - "BVC ","EOR ","EOR ","??? ","??? ","EOR ","LSR ","RMB5 ", - "CLI ","EOR ","PHY ","??? ","??? ","EOR ","LSR ","BBR5 ", - "RTS ","ADC ","??? ","??? ","STZ ","ADC ","ROR ","RMB6 ", - "PLA ","ADC ","ROR ","??? ","JMP ","ADC ","ROR ","BBR6 ", - "BVS ","ADC ","ADC ","??? ","STZ ","ADC ","ROR ","RMB7 ", - "SEI ","ADC ","PLY ","??? ","JMP ","ADC ","ROR ","BBR7 ", - "BRA ","STA ","??? ","??? ","STY ","STA ","STX ","SMB0 ", - "DEY ","BIT ","TXA ","??? ","STY ","STA ","STX ","BBS0 ", - "BCC ","STA ","STA ","??? ","STY ","STA ","STX ","SMB1 ", - "TYA ","STA ","TXS ","??? ","STZ ","STA ","STZ ","BBS1 ", - "LDY ","LDA ","LDX ","??? ","LDY ","LDA ","LDX ","SMB2 ", - "TAY ","LDA ","TAX ","??? ","LDY ","LDA ","LDX ","BBS2 ", - "BCS ","LDA ","LDA ","??? ","LDY ","LDA ","LDX ","SMB3 ", - "CLV ","LDA ","TSX ","??? ","LDY ","LDA ","LDX ","BBS3 ", - "CPY ","CMP ","??? ","??? ","CPY ","CMP ","DEC ","SMB4 ", - "INY ","CMP ","DEX ","??? ","CPY ","CMP ","DEC ","BBS4 ", - "BNE ","CMP ","CMP ","??? ","??? ","CMP ","DEC ","SMB5 ", - "CLD ","CMP ","PHX ","??? ","??? ","CMP ","DEC ","BBS5 ", - "CPX ","SBC ","??? ","??? ","CPX ","SBC ","INC ","SMB6 ", - "INX ","SBC ","NOP ","??? ","CPX ","SBC ","INC ","BBS6 ", - "BEQ ","SBC ","SBC ","??? ","??? ","SBC ","INC ","SMB7 ", - "SED ","SBC ","PLX ","??? ","??? ","SBC ","INC ","BBS7 " }; - -// -// Display bytes in mem in hex -// -static void DisplayBytes(uint16 src, uint32 dst) -{ - WriteLog("%04X: ", src); - uint8 cnt = 0; // Init counter... - - if (src > dst) - dst += 0x10000; // That should fix the FFFF bug... - - for(uint32 i=src; i +#include +#include "v65c02.h" +#include "log.h" + + +// External shit + +extern V65C02REGS mainCPU;//Hm. Shouldn't we pass this shit in? ANSWER: YES. !!! FIX !!! + +// Private globals variables + +static uint8_t op_mat[256] = { + 14, 6, 0, 0, 2, 2, 2, 2, 14, 1, 14, 0, 8, 8, 8, 13, + 13, 7, 5, 0, 2, 3, 3, 2, 14, 10, 14, 0, 8, 9, 9, 13, + 8, 6, 0, 0, 2, 2, 2, 2, 14, 1, 14, 0, 8, 8, 8, 13, + 13, 7, 5, 0, 3, 3, 3, 2, 14, 10, 14, 0, 9, 9, 9, 13, + 14, 6, 0, 0, 0, 2, 2, 2, 14, 1, 14, 0, 8, 8, 8, 13, + 13, 7, 5, 0, 0, 3, 3, 2, 14, 10, 14, 0, 0, 9, 9, 13, + 14, 6, 0, 0, 2, 2, 2, 2, 14, 1, 14, 0, 11, 8, 8, 13, + 13, 7, 5, 0, 3, 3, 3, 2, 14, 10, 14, 0, 12, 9, 9, 13, + 13, 6, 0, 0, 2, 2, 2, 2, 14, 1, 14, 0, 8, 8, 8, 13, + 13, 7, 5, 0, 3, 3, 4, 2, 14, 10, 14, 0, 8, 9, 9, 13, + 1, 6, 1, 0, 2, 2, 2, 2, 14, 1, 14, 0, 8, 8, 8, 13, + 13, 7, 5, 0, 3, 3, 4, 2, 14, 10, 14, 0, 9, 9, 10, 13, + 1, 6, 0, 0, 2, 2, 2, 2, 14, 1, 14, 0, 8, 8, 8, 13, + 13, 7, 5, 0, 0, 3, 3, 2, 14, 10, 14, 0, 0, 9, 9, 13, + 1, 6, 0, 0, 2, 2, 2, 2, 14, 1, 14, 0, 8, 8, 8, 13, + 13, 7, 5, 0, 0, 3, 3, 2, 14, 10, 14, 0, 0, 9, 9, 13 +}; + +static uint8_t mnemonics[256][5] = { + "BRK ","ORA ","??? ","??? ","TSB ","ORA ","ASL ","RMB0", + "PHP ","ORA ","ASL ","??? ","TSB ","ORA ","ASL ","BBR0", + "BPL ","ORA ","ORA ","??? ","TRB ","ORA ","ASL ","RMB1", + "CLC ","ORA ","INC ","??? ","TRB ","ORA ","ASL ","BBR1", + "JSR ","AND ","??? ","??? ","BIT ","AND ","ROL ","RMB2", + "PLP ","AND ","ROL ","??? ","BIT ","AND ","ROL ","BBR2", + "BMI ","AND ","AND ","??? ","BIT ","AND ","ROL ","RMB3", + "SEC ","AND ","DEC ","??? ","BIT ","AND ","ROL ","BBR3", + "RTI ","EOR ","??? ","??? ","??? ","EOR ","LSR ","RMB4", + "PHA ","EOR ","LSR ","??? ","JMP ","EOR ","LSR ","BBR4", + "BVC ","EOR ","EOR ","??? ","??? ","EOR ","LSR ","RMB5", + "CLI ","EOR ","PHY ","??? ","??? ","EOR ","LSR ","BBR5", + "RTS ","ADC ","??? ","??? ","STZ ","ADC ","ROR ","RMB6", + "PLA ","ADC ","ROR ","??? ","JMP ","ADC ","ROR ","BBR6", + "BVS ","ADC ","ADC ","??? ","STZ ","ADC ","ROR ","RMB7", + "SEI ","ADC ","PLY ","??? ","JMP ","ADC ","ROR ","BBR7", + "BRA ","STA ","??? ","??? ","STY ","STA ","STX ","SMB0", + "DEY ","BIT ","TXA ","??? ","STY ","STA ","STX ","BBS0", + "BCC ","STA ","STA ","??? ","STY ","STA ","STX ","SMB1", + "TYA ","STA ","TXS ","??? ","STZ ","STA ","STZ ","BBS1", + "LDY ","LDA ","LDX ","??? ","LDY ","LDA ","LDX ","SMB2", + "TAY ","LDA ","TAX ","??? ","LDY ","LDA ","LDX ","BBS2", + "BCS ","LDA ","LDA ","??? ","LDY ","LDA ","LDX ","SMB3", + "CLV ","LDA ","TSX ","??? ","LDY ","LDA ","LDX ","BBS3", + "CPY ","CMP ","??? ","??? ","CPY ","CMP ","DEC ","SMB4", + "INY ","CMP ","DEX ","??? ","CPY ","CMP ","DEC ","BBS4", + "BNE ","CMP ","CMP ","??? ","??? ","CMP ","DEC ","SMB5", + "CLD ","CMP ","PHX ","??? ","??? ","CMP ","DEC ","BBS5", + "CPX ","SBC ","??? ","??? ","CPX ","SBC ","INC ","SMB6", + "INX ","SBC ","NOP ","??? ","CPX ","SBC ","INC ","BBS6", + "BEQ ","SBC ","SBC ","??? ","??? ","SBC ","INC ","SMB7", + "SED ","SBC ","PLX ","??? ","??? ","SBC ","INC ","BBS7" +}; + + +// +// Display bytes in mem in hex +// +static void DisplayBytes(char * outbuf, uint16_t src, uint32_t dst) +{ + char buf[32]; +// WriteLog("%04X: ", src); + sprintf(outbuf, "%04X: ", src); + uint8_t cnt = 0; + + // That should fix the $FFFF bug... + if (src > dst) + dst += 0x10000; + + for(uint32_t i=src; i