#include "dis6809.h"
#include <stdio.h>
-#include <string>
+#include <string.h>
#include "v6809.h"
#include "log.h"
//
static void DisplayBytes(uint16 src, uint32 dst)
{
+ char buf[20], buf2[20];
+
+ buf[0] = 0;
WriteLog("%04X: ", src);
- uint8 cnt = 0; // Init counter...
if (src > dst)
dst += 0x10000; // That should fix the FFFF bug...
for(uint32 i=src; i<dst; i++)
{
- WriteLog("%02X ", mainCPU.RdMem(i));
- cnt++; // Bump counter...
+ sprintf(buf2, "%02X ", mainCPU.RdMem(i));
+ strcat(buf, buf2);
}
- for(int i=cnt; i<5; i++) // Pad the leftover spaces...
- WriteLog(" ");
+ WriteLog("%-12s", buf); // WAS: 15
}
//
char outbuf[80], mnem[6], tmp[30];
uint8 opcode2, operand;
- uint16 addr = pc;
+ uint16 addr = pc, offset;
uint8 opcode = mainCPU.RdMem(addr++); // Get the opcode
uint8 admode = op_mat1[opcode]; // addressing mode
sprintf(outbuf, "%s $%02X", mnem, mainCPU.RdMem(addr++));
break;
case 2: // Absolute
- sprintf(outbuf, "%s $%04X", mnem, (mainCPU.RdMem(addr++) << 8) | mainCPU.RdMem(addr++));
+// sprintf(outbuf, "%s $%04X", mnem, (mainCPU.RdMem(addr++) << 8) | mainCPU.RdMem(addr++));
+ offset = (mainCPU.RdMem(addr) << 8) | mainCPU.RdMem(addr + 1);
+ addr += 2;
+ sprintf(outbuf, "%s $%04X", mnem, offset);
break;
case 3: // Relative
- sprintf(outbuf, "%s $%04X", mnem, ++addr + (int16)(int8)mainCPU.RdMem(addr));
+//DISNOWOK--FIX
+// sprintf(outbuf, "%s $%04X", mnem, ++addr + (int16)((int8)mainCPU.RdMem(addr)));
+ offset = addr + 1 + (int16)(int8)mainCPU.RdMem(addr);
+ addr++;
+ sprintf(outbuf, "%s $%04X", mnem, offset);
break;
case 4: // Long Relative
- sprintf(outbuf, "%s $%04X", mnem, addr + (int16)((mainCPU.RdMem(addr++) << 8) | mainCPU.RdMem(addr++)) + 2);
+// sprintf(outbuf, "%s $%04X", mnem, addr + (int16)((mainCPU.RdMem(addr++) << 8) | mainCPU.RdMem(addr++)) + 2);
+ offset = addr + (int16)((mainCPU.RdMem(addr) << 8) | mainCPU.RdMem(addr + 1)) + 2;
+ addr += 2;
+ sprintf(outbuf, "%s $%04X", mnem, offset);
break;
case 5: // Inherent
sprintf(outbuf, "%s ", mnem);
sprintf(tmp, "($%02X,%s)", boff, iregs[reg]);
break;
case 9:
- woff = (mainCPU.RdMem(addr++) << 8) | mainCPU.RdMem(addr++);
+ woff = (mainCPU.RdMem(addr) << 8) | mainCPU.RdMem(addr + 1);
+ addr += 2;
sprintf(tmp, "($%04X,%s)", woff, iregs[reg]);
break;
case 11: sprintf(tmp, "(D,%s)", iregs[reg]); break;
boff = mainCPU.RdMem(addr++);
sprintf(tmp, "($%02X,PC)", boff);
break;
- case 13:
- woff = (mainCPU.RdMem(addr++) << 8) | mainCPU.RdMem(addr++);
+ case 13:
+ woff = (mainCPU.RdMem(addr) << 8) | mainCPU.RdMem(addr + 1);
+ addr += 2;
sprintf(tmp, "($%04X,PC)", woff);
break;
case 15:
- woff = (mainCPU.RdMem(addr++) << 8) | mainCPU.RdMem(addr++);
+ woff = (mainCPU.RdMem(addr) << 8) | mainCPU.RdMem(addr + 1);
+ addr += 2;
sprintf(tmp, "[$%04X]", woff);
break;
default:
sprintf(tmp, "($%02X),%s", boff, iregs[reg]);
break;
case 9:
- woff = (mainCPU.RdMem(addr++) << 8) | mainCPU.RdMem(addr++);
+ woff = (mainCPU.RdMem(addr) << 8) | mainCPU.RdMem(addr + 1);
+ addr += 2;
sprintf(tmp, "($%04X),%s", woff, iregs[reg]);
break;
case 11:
boff = mainCPU.RdMem(addr++);
sprintf(tmp, "($%02X),PC", boff);
break;
- case 13:
- woff = (mainCPU.RdMem(addr++) << 8) | mainCPU.RdMem(addr++);
+ case 13:
+ woff = (mainCPU.RdMem(addr) << 8) | mainCPU.RdMem(addr + 1);
+ addr += 2;
sprintf(tmp, "($%04X),PC", woff);
break;
default:
sprintf(outbuf, "%s #$%02X", mnem, mainCPU.RdMem(addr++));
break;
case 9: // Long Immediate
- sprintf(outbuf, "%s #$%04X", mnem, (mainCPU.RdMem(addr++) << 8) | mainCPU.RdMem(addr++));
+// sprintf(outbuf, "%s #$%04X", mnem, (mainCPU.RdMem(addr++) << 8) | mainCPU.RdMem(addr++));
+ offset = (mainCPU.RdMem(addr) << 8) | mainCPU.RdMem(addr + 1);
+ addr += 2;
+ sprintf(outbuf, "%s #$%04X", mnem, offset);
break;
}
DisplayBytes(pc, addr); // Show bytes
- WriteLog("%s", outbuf); // Display opcode & addressing, etc.
+ WriteLog("%-17s", outbuf); // Display opcode & addressing, etc.
return addr - pc;
}