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)
106 uint16 addr = pc, offset;
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++));
119 offset = (soundCPU.RdMem(addr + 0) << 8) | soundCPU.RdMem(addr + 1);
121 sprintf(outbuf, "%s $%04X ", mnemonics[opcode], offset);
124 // sprintf(outbuf, "%s $%04X", mnemonics[opcode], ++addr + (int16)(int8)soundCPU.RdMem(addr));
125 offset = addr + 1 + (int16)(int8)soundCPU.RdMem(addr);
127 sprintf(outbuf, "%s $%04X ", mnemonics[opcode], offset);
130 sprintf(outbuf, "%s ", mnemonics[opcode]);
133 sprintf(outbuf, "%s $%02X,X ", mnemonics[opcode], soundCPU.RdMem(addr++));
136 sprintf(outbuf, "%s #$%02X ", mnemonics[opcode], soundCPU.RdMem(addr++));
138 case 9: // Long Immediate
139 // sprintf(outbuf, "%s #$%04X", mnemonics[opcode], (soundCPU.RdMem(addr++) << 8) | soundCPU.RdMem(addr++));
140 offset = (soundCPU.RdMem(addr + 0) << 8) | soundCPU.RdMem(addr + 1);
142 sprintf(outbuf, "%s #$%04X ", mnemonics[opcode], offset);
146 DisplayBytes(pc, addr); // Show bytes
147 WriteLog("%s", outbuf); // Display opcode & addressing, etc.