//
// 6808 disassembler
//
-// by James L. Hammons
-//
-// (c) 2004 Underground Software
+// by James Hammons
+// (C) 2004 Underground Software
//
#include "dis6808.h"
//
// Display bytes in mem in hex
//
-static void DisplayBytes(uint16 src, uint32 dst)
+static void DisplayBytes(uint16_t src, uint32_t dst)
{
WriteLog("%04X: ", src);
- uint8 cnt = 0; // Init counter...
+ uint8_t cnt = 0; // Init counter...
if (src > dst)
dst += 0x10000; // That should fix the FFFF bug...
- for(uint32 i=src; i<dst; i++)
+ for(uint32_t i=src; i<dst; i++)
{
WriteLog("%02X ", soundCPU.RdMem(i));
cnt++; // Bump counter...
//
// Decode a 6808 instruction
//
-int Decode6808(uint16 pc)
+int Decode6808(uint16_t pc)
{
char outbuf[80];
- uint16 addr = pc;
- uint8 opcode = soundCPU.RdMem(addr++); // Get the opcode
+ uint16_t addr = pc, offset;
+ uint8_t opcode = soundCPU.RdMem(addr++); // Get the opcode
switch (op_mat[opcode]) // Decode the addressing mode...
{
case 0: // Illegal
- sprintf(outbuf, "???");
+ sprintf(outbuf, "??? ");
break;
case 1: // Zero page
- sprintf(outbuf, "%s $%02X", mnemonics[opcode], soundCPU.RdMem(addr++));
+ sprintf(outbuf, "%s $%02X ", mnemonics[opcode], soundCPU.RdMem(addr++));
break;
case 2: // Absolute
- sprintf(outbuf, "%s $%04X", mnemonics[opcode], (soundCPU.RdMem(addr++) << 8) | soundCPU.RdMem(addr++));
+// sprintf(outbuf, "%s $%04X", mnemonics[opcode], (soundCPU.RdMem(addr++) << 8) | soundCPU.RdMem(addr++));
+ offset = (soundCPU.RdMem(addr + 0) << 8) | soundCPU.RdMem(addr + 1);
+ addr += 2;
+ sprintf(outbuf, "%s $%04X ", mnemonics[opcode], offset);
break;
case 3: // Relative
- sprintf(outbuf, "%s $%04X", mnemonics[opcode], ++addr + (int16)(int8)soundCPU.RdMem(addr));
+// sprintf(outbuf, "%s $%04X", mnemonics[opcode], ++addr + (int16)(int8)soundCPU.RdMem(addr));
+ offset = addr + 1 + (int16_t)(int8_t)soundCPU.RdMem(addr);
+ addr++;
+ sprintf(outbuf, "%s $%04X ", mnemonics[opcode], offset);
break;
case 5: // Inherent
- sprintf(outbuf, "%s ", mnemonics[opcode]);
+ sprintf(outbuf, "%s ", mnemonics[opcode]);
break;
case 7: // Indexed
- sprintf(outbuf, "%s $%02X,X", mnemonics[opcode], soundCPU.RdMem(addr++));
+ sprintf(outbuf, "%s $%02X,X ", mnemonics[opcode], soundCPU.RdMem(addr++));
break;
case 8: // Immediate
- sprintf(outbuf, "%s #$%02X", mnemonics[opcode], soundCPU.RdMem(addr++));
+ sprintf(outbuf, "%s #$%02X ", mnemonics[opcode], soundCPU.RdMem(addr++));
break;
case 9: // Long Immediate
- sprintf(outbuf, "%s #$%04X", mnemonics[opcode], (soundCPU.RdMem(addr++) << 8) | soundCPU.RdMem(addr++));
+// sprintf(outbuf, "%s #$%04X", mnemonics[opcode], (soundCPU.RdMem(addr++) << 8) | soundCPU.RdMem(addr++));
+ offset = (soundCPU.RdMem(addr + 0) << 8) | soundCPU.RdMem(addr + 1);
+ addr += 2;
+ sprintf(outbuf, "%s #$%04X ", mnemonics[opcode], offset);
break;
}