6 // (c) 2004 Underground Software
20 extern V6808REGS soundCPU;//Hm.
22 // Private globals variables
24 static char op_mat[256] = {
25 0, 5, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
26 5, 5, 0, 0, 0, 0, 5, 5, 0, 5, 0, 5, 0, 0, 0, 0,
27 3, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
28 5, 5, 5, 5, 5, 5, 5, 5, 0, 5, 0, 5, 0, 0, 5, 5,
29 5, 0, 0, 5, 5, 0, 5, 5, 5, 5, 5, 0, 5, 5, 0, 5,
30 5, 0, 0, 5, 5, 0, 5, 5, 5, 5, 5, 0, 5, 5, 0, 5,
31 7, 0, 0, 7, 7, 0, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7,
32 2, 0, 0, 2, 2, 0, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2,
33 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8, 8, 9, 3, 9, 0,
34 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1,
35 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
36 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
37 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8, 8, 0, 0, 9, 0,
38 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1,
39 7, 7, 7, 0, 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 7, 7,
40 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2
43 static char mnemonics[256][6] = {
44 "??? ","NOP ","??? ","??? ","??? ","??? ","TAP ","TPA ",
45 "INX ","DEX ","CLV ","SEV ","CLC ","SEC ","CLI ","SEI ",
46 "SBA ","CBA ","??? ","??? ","??? ","??? ","TAB ","TBA ",
47 "??? ","DAA ","??? ","ABA ","??? ","??? ","??? ","??? ",
48 "BRA ","??? ","BHI ","BLS ","BCC ","BCS ","BNE ","BEQ ",
49 "BVC ","BVS ","BPL ","BMI ","BGE ","BLT ","BGT ","BLE ",
50 "TSX ","INS ","PULA ","PULB ","DES ","TXS ","PSHA ","PSHB ",
51 "??? ","RTS ","??? ","RTI ","??? ","??? ","WAI ","SWI ",
52 "NEGA ","??? ","??? ","COMA ","LSRA ","??? ","RORA ","ASRA ",
53 "ASLA ","ROLA ","DECA ","??? ","INCA ","TSTA ","??? ","CLRA ",
54 "NEGB ","??? ","??? ","COMB ","LSRB ","??? ","RORB ","ASRB ",
55 "ASLB ","ROLB ","DECB ","??? ","INCB ","TSTB ","??? ","CLRB ",
56 "NEG ","??? ","??? ","COM ","LSR ","??? ","ROR ","ASR ",
57 "ASL ","ROL ","DEC ","??? ","INC ","TST ","JMP ","CLR ",
58 "NEG ","??? ","??? ","COM ","LSR ","??? ","ROR ","ASR ",
59 "ASL ","ROL ","DEC ","??? ","INC ","TST ","JMP ","CLR ",
60 "SUBA ","CMPA ","SBCA ","??? ","ANDA ","BITA ","LDAA ","??? ",
61 "EORA ","ADCA ","ORAA ","ADDA ","CPX ","BSR ","LDS ","??? ",
62 "SUBA ","CMPA ","SBCA ","??? ","ANDA ","BITA ","LDAA ","STAA ",
63 "EORA ","ADCA ","ORAA ","ADDA ","CPX ","??? ","LDS ","STS ",
64 "SUBA ","CMPA ","SBCA ","??? ","ANDA ","BITA ","LDAA ","STAA ",
65 "EORA ","ADCA ","ORAA ","ADDA ","CPX ","JSR ","LDS ","STS ",
66 "SUBA ","CMPA ","SBCA ","??? ","ANDA ","BITA ","LDAA ","STAA ",
67 "EORA ","ADCA ","ORAA ","ADDA ","CPX ","JSR ","LDS ","STS ",
68 "SUBB ","CMPB ","SBCB ","??? ","ANDB ","BITB ","LDAB ","??? ",
69 "EORB ","ADCB ","ORAB ","ADDB ","??? ","??? ","LDX ","??? ",
70 "SUBB ","CMPB ","SBCB ","??? ","ANDB ","BITB ","LDAB ","STAB ",
71 "EORB ","ADCB ","ORAB ","ADDB ","??? ","??? ","LDX ","STX ",
72 "SUBB ","CMPB ","SBCB ","??? ","ANDB ","BITB ","LDAB ","STAB ",
73 "EORB ","ADCB ","ORAB ","ADDB ","??? ","??? ","LDX ","STX ",
74 "SUBB ","CMPB ","SBCB ","??? ","ANDB ","BITB ","LDAB ","STAB ",
75 "EORB ","ADCB ","ORAB ","ADDB ","??? ","??? ","LDX ","STX "
79 // Display bytes in mem in hex
81 static void DisplayBytes(uint16 src, uint32 dst)
83 WriteLog("%04X: ", src);
84 uint8 cnt = 0; // Init counter...
87 dst += 0x10000; // That should fix the FFFF bug...
89 for(uint32 i=src; i<dst; i++)
91 WriteLog("%02X ", soundCPU.RdMem(i));
92 cnt++; // Bump counter...
95 for(int i=cnt; i<5; i++) // Pad the leftover spaces...
100 // Decode a 6808 instruction
102 int Decode6808(uint16 pc)
107 uint8 opcode = soundCPU.RdMem(addr++); // Get the opcode
109 switch (op_mat[opcode]) // Decode the addressing mode...
112 sprintf(outbuf, "???");
115 sprintf(outbuf, "%s $%02X", mnemonics[opcode], soundCPU.RdMem(addr++));
118 sprintf(outbuf, "%s $%04X", mnemonics[opcode], (soundCPU.RdMem(addr++) << 8) | soundCPU.RdMem(addr++));
121 sprintf(outbuf, "%s $%04X", mnemonics[opcode], ++addr + (int16)(int8)soundCPU.RdMem(addr));
124 sprintf(outbuf, "%s ", mnemonics[opcode]);
127 sprintf(outbuf, "%s $%02X,X", mnemonics[opcode], soundCPU.RdMem(addr++));
130 sprintf(outbuf, "%s #$%02X", mnemonics[opcode], soundCPU.RdMem(addr++));
132 case 9: // Long Immediate
133 sprintf(outbuf, "%s #$%04X", mnemonics[opcode], (soundCPU.RdMem(addr++) << 8) | soundCPU.RdMem(addr++));
137 DisplayBytes(pc, addr); // Show bytes
138 WriteLog("%s", outbuf); // Display opcode & addressing, etc.