63 lines
1.3 KiB
C
63 lines
1.3 KiB
C
#include <stdlib.h>
|
|
#include <stdint.h>
|
|
#include <stdbool.h>
|
|
#include <stdio.h>
|
|
#include "device.h"
|
|
|
|
#define EMU_ID 0xed6f
|
|
#define EMU_VER 0x0000
|
|
|
|
void dumpregs()
|
|
{
|
|
printf("%4s %4s %4s %4s %4s %4s %4s %4s %4s %4s %4s %4s\n",
|
|
"PC","SP","A","B","C","X","Y","Z","I","J","EX","IA");
|
|
printf("%04hx %04hx %04hx %04hx %04hx %04hx %04hx %04hx %04hx %04hx %04hx %04hx\n",
|
|
rpc, rsp, ra, rb, rc, rx, ry, rz, ri, rj, rex, ria);
|
|
}
|
|
|
|
void dump_ram(uint16_t addr, uint16_t count)
|
|
{
|
|
uint16_t i, a;
|
|
|
|
for (i=0; i<count; i++) {
|
|
a = (addr + i) % sizeof(ram);
|
|
if ((i % 8) == 0)
|
|
printf("\n%04x: ", a);
|
|
printf("%04x ", ram[a]);
|
|
}
|
|
printf("\n");
|
|
}
|
|
|
|
void debug_tick()
|
|
{
|
|
if (trace)
|
|
dumpregs();
|
|
}
|
|
|
|
void debug_irqh()
|
|
{
|
|
switch (ra) {
|
|
case 0x0000:
|
|
running = false;
|
|
break;
|
|
case 0x0001:
|
|
dumpregs();
|
|
break;
|
|
case 0x0002:
|
|
dump_ram(ry, rx);
|
|
break;
|
|
case 0x0004:
|
|
trace = false;
|
|
break;
|
|
case 0x0005:
|
|
trace = true;
|
|
break;
|
|
case 0xffff:
|
|
rx = EMU_ID;
|
|
ry = EMU_VER;
|
|
break;
|
|
}
|
|
}
|
|
|
|
struct dev_entry debug_dev = { 0x6d53647c, 0x62e037d3, 0x0000, debug_irqh, NULL, NULL, debug_tick }; /* Debug device */
|