static unsigned int mon_register_get_val(int mem, int reg_id) { mos6510dtv_regs_t *reg_ptr; if (monitor_diskspace_dnr(mem) >= 0) if (!check_drive_emu_level_ok(monitor_diskspace_dnr(mem) + 8)) return 0; reg_ptr = mon_interfaces[mem]->dtv_cpu_regs; switch(reg_id) { case e_A: return MOS6510DTV_REGS_GET_A(reg_ptr); case e_X: return MOS6510DTV_REGS_GET_X(reg_ptr); case e_Y: return MOS6510DTV_REGS_GET_Y(reg_ptr); case e_PC: return MOS6510DTV_REGS_GET_PC(reg_ptr); case e_SP: return MOS6510DTV_REGS_GET_SP(reg_ptr); case e_FLAGS: return MOS6510DTV_REGS_GET_FLAGS(reg_ptr) | MOS6510DTV_REGS_GET_SIGN(reg_ptr) | (MOS6510DTV_REGS_GET_ZERO(reg_ptr) << 1); case e_R3: return MOS6510DTV_REGS_GET_R3(reg_ptr); case e_R4: return MOS6510DTV_REGS_GET_R4(reg_ptr); case e_R5: return MOS6510DTV_REGS_GET_R5(reg_ptr); case e_R6: return MOS6510DTV_REGS_GET_R6(reg_ptr); case e_R7: return MOS6510DTV_REGS_GET_R7(reg_ptr); case e_R8: return MOS6510DTV_REGS_GET_R8(reg_ptr); case e_R9: return MOS6510DTV_REGS_GET_R9(reg_ptr); case e_R10: return MOS6510DTV_REGS_GET_R10(reg_ptr); case e_R11: return MOS6510DTV_REGS_GET_R11(reg_ptr); case e_R12: return MOS6510DTV_REGS_GET_R12(reg_ptr); case e_R13: return MOS6510DTV_REGS_GET_R13(reg_ptr); case e_R14: return MOS6510DTV_REGS_GET_R14(reg_ptr); case e_R15: return MOS6510DTV_REGS_GET_R15(reg_ptr); case e_ACM: return MOS6510DTV_REGS_GET_ACM(reg_ptr); case e_YXM: return MOS6510DTV_REGS_GET_YXM(reg_ptr); default: log_error(LOG_ERR, "Unknown register!"); } return 0; }
static void mon_register_print(int mem) { mos6510dtv_regs_t *regs; if (monitor_diskspace_dnr(mem) >= 0) { if (!check_drive_emu_level_ok(monitor_diskspace_dnr(mem) + 8)) return; } else if (mem != e_comp_space) { #ifdef CELL_DEBUG printf("ERROR: Unknown memory space!\n"); #endif return; } regs = mon_interfaces[mem]->dtv_cpu_regs; mon_out(" ADDR AC XR YR SP 00 01 NV-BDIZC"); if (mem == e_comp_space && mon_interfaces[mem]->get_line_cycle != NULL) mon_out(" LIN CYC\n"); else mon_out("\n"); mon_out(".;%04x %02x %02x %02x %02x %02x %02x %d%d%c%d%d%d%d%d", addr_location(mon_register_get_val(mem, e_PC)), mon_register_get_val(mem, e_A), mon_register_get_val(mem, e_X), mon_register_get_val(mem, e_Y), mon_register_get_val(mem, e_SP), mon_get_mem_val(mem, 0), mon_get_mem_val(mem, 1), TEST(MOS6510DTV_REGS_GET_SIGN(regs)), TEST(MOS6510DTV_REGS_GET_OVERFLOW(regs)), '1', TEST(MOS6510DTV_REGS_GET_BREAK(regs)), TEST(MOS6510DTV_REGS_GET_DECIMAL(regs)), TEST(MOS6510DTV_REGS_GET_INTERRUPT(regs)), TEST(MOS6510DTV_REGS_GET_ZERO(regs)), TEST(MOS6510DTV_REGS_GET_CARRY(regs))); if (mem == e_comp_space && mon_interfaces[mem]->get_line_cycle != NULL) { unsigned int line, cycle; int half_cycle; mon_interfaces[mem]->get_line_cycle(&line, &cycle, &half_cycle); if (half_cycle==-1) mon_out(" %03i %03i\n", line, cycle); else mon_out(" %03i %03i %i\n", line, cycle, half_cycle); } else { mon_out("\n"); } if (mem == e_comp_space) { mon_out("R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 ACM YXM\n"); mon_out("%02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x\n", mon_register_get_val(mem, e_R3), mon_register_get_val(mem, e_R4), mon_register_get_val(mem, e_R5), mon_register_get_val(mem, e_R6), mon_register_get_val(mem, e_R7), mon_register_get_val(mem, e_R8), mon_register_get_val(mem, e_R9), mon_register_get_val(mem, e_R10), mon_register_get_val(mem, e_R11), mon_register_get_val(mem, e_R12), mon_register_get_val(mem, e_R13), mon_register_get_val(mem, e_R14), mon_register_get_val(mem, e_R15), mon_register_get_val(mem, e_ACM), mon_register_get_val(mem, e_YXM)); } }