static const char* mon_register_print_ex(int mem)
{
    static char buff[80];
    R65C02_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) {
        log_error(LOG_ERR, "Unknown memory space!");
        return "";
    }

    regs = mon_interfaces[mem]->cpu_R65C02_regs;

    sprintf(buff, "A:%02X X:%02X Y:%02X SP:%02x %c%c-%c%c%c%c%c",
            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),
            R65C02_REGS_GET_SIGN(regs) ? 'N' : '.',
            R65C02_REGS_GET_OVERFLOW(regs) ? 'V' : '.',
            R65C02_REGS_GET_BREAK(regs) ? 'B' : '.',
            R65C02_REGS_GET_DECIMAL(regs) ? 'D' : '.',
            R65C02_REGS_GET_INTERRUPT(regs) ? 'I' : '.',
            R65C02_REGS_GET_ZERO(regs) ? 'Z' : '.',
            R65C02_REGS_GET_CARRY(regs) ? 'C' : '.');

    return buff;
}
예제 #2
0
static void mon_register_print(int mem)
{
    mos6510_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) {
        log_error(LOG_ERR, "Unknown memory space!");
        return;
    }

    regs = mon_interfaces[mem]->cpu_regs;

    mon_out("  ADDR AC XR YR SP 00 01 NV-BDIZC ");

    if (mon_interfaces[mem]->get_line_cycle != NULL) {
        mon_out("LIN CYC  STOPWATCH\n");
    } else {
        mon_out(" STOPWATCH\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(MOS6510_REGS_GET_SIGN(regs)),
              TEST(MOS6510_REGS_GET_OVERFLOW(regs)),
              '1',
              TEST(MOS6510_REGS_GET_BREAK(regs)),
              TEST(MOS6510_REGS_GET_DECIMAL(regs)),
              TEST(MOS6510_REGS_GET_INTERRUPT(regs)),
              TEST(MOS6510_REGS_GET_ZERO(regs)),
              TEST(MOS6510_REGS_GET_CARRY(regs)));

    if (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", line, cycle);
        } else {
            mon_out(" %03i %03i %i", line, cycle, half_cycle);
        }
    }
    mon_stopwatch_show(" ", "\n");
}
/* TODO: should use mon_register_list_get */
static void mon_register_print(int mem)
{
    h6809_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) {
        log_error(LOG_ERR, "Unknown memory space!");
        return;
    }
    regs = mon_interfaces[mem]->h6809_cpu_regs;

    mon_out("  ADDR A  B  X    Y    SP   U    DP EFHINZVC\n");
    mon_out(".;%04x %02x %02x %04x %04x %04x %04x %02x %c%c%c%c%c%c%c%c\n",
            addr_location(mon_register_get_val(mem, e_PC)),
            mon_register_get_val(mem, e_A),
            mon_register_get_val(mem, e_B),
            mon_register_get_val(mem, e_X),
            mon_register_get_val(mem, e_Y),
            mon_register_get_val(mem, e_SP),
            mon_register_get_val(mem, e_U),
            mon_register_get_val(mem, e_DP),
            (H6809_REGS_TEST_E(regs) ? '1' : '.'),
            (H6809_REGS_TEST_F(regs) ? '1' : '.'),
            (H6809_REGS_TEST_H(regs) ? '1' : '.'),
            (H6809_REGS_TEST_I(regs) ? '1' : '.'),
            (H6809_REGS_TEST_N(regs) ? '1' : '.'),
            (H6809_REGS_TEST_Z(regs) ? '1' : '.'),
            (H6809_REGS_TEST_V(regs) ? '1' : '.'),
            (H6809_REGS_TEST_C(regs) ? '1' : '.')
            );
}
/* TODO: try to make this a generic function, move it into mon_register.c and
         remove mon_register_list_get from the monitor_cpu_type_t struct */
static mon_reg_list_t *mon_register_list_get6809(int mem)
{
    mon_reg_list_t *mon_reg_list, *regs;

    mon_reg_list = regs = lib_malloc(sizeof(mon_reg_list_t) * REG_LIST_6809_SIZE);
    memcpy(mon_reg_list, mon_reg_list_6809, sizeof(mon_reg_list_t) * REG_LIST_6809_SIZE);

    do {
        regs->val = (unsigned int)mon_register_get_val(mem, regs->id);
        ++regs;
    } while (regs->name != NULL);

    return mon_reg_list;
}
static mon_reg_list_t *mon_register_list_getR65C02(int mem)
{
    mon_reg_list_t *mon_reg_list;

    mon_reg_list = lib_malloc(sizeof(mon_reg_list_t) * 9);

    mon_reg_list[0].name = "PC";
    mon_reg_list[0].val = (unsigned int)mon_register_get_val(mem, e_PC);
    mon_reg_list[0].size = 16;
    mon_reg_list[0].flags = 0;
    mon_reg_list[0].next = &mon_reg_list[1];

    mon_reg_list[1].name = "AC";
    mon_reg_list[1].val = (unsigned int)mon_register_get_val(mem, e_A);
    mon_reg_list[1].size = 8;
    mon_reg_list[1].flags = 0;
    mon_reg_list[1].next = &mon_reg_list[2];

    mon_reg_list[2].name = "XR";
    mon_reg_list[2].val = (unsigned int)mon_register_get_val(mem, e_X);
    mon_reg_list[2].size = 8;
    mon_reg_list[2].flags = 0;
    mon_reg_list[2].next = &mon_reg_list[3];

    mon_reg_list[3].name = "YR";
    mon_reg_list[3].val = (unsigned int)mon_register_get_val(mem, e_Y);
    mon_reg_list[3].size = 8;
    mon_reg_list[3].flags = 0;
    mon_reg_list[3].next = &mon_reg_list[4];

    mon_reg_list[4].name = "SP";
    mon_reg_list[4].val = (unsigned int)mon_register_get_val(mem, e_SP);
    mon_reg_list[4].size = 8;
    mon_reg_list[4].flags = 0;
    mon_reg_list[4].next = &mon_reg_list[5];

    mon_reg_list[5].name = "FL";
    mon_reg_list[5].val = (unsigned int)mon_register_get_val(mem, e_FLAGS)
                          | 0x20;
    mon_reg_list[5].size = 8;
    mon_reg_list[5].flags = 0;
    mon_reg_list[5].next = &mon_reg_list[6];

    mon_reg_list[6].name = "NV-BDIZC";
    mon_reg_list[6].val = (unsigned int)mon_register_get_val(mem, e_FLAGS)
                          | 0x20;
    mon_reg_list[6].size = 8;
    mon_reg_list[6].flags = 1;
    mon_reg_list[6].next = NULL;

    return mon_reg_list;
}
/* TODO: should use mon_register_list_get */
static const char* mon_register_print_ex(int mem)
{
    static char buff[80];
    h6809_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) {
        log_error(LOG_ERR, "Unknown memory space!");
        return "";
    }

    regs = mon_interfaces[mem]->h6809_cpu_regs;

    sprintf(buff, "A:%02X B:%02X X:%04X Y:%04X SP:%04X U:%04X DP:%02x %c%c%c%c%c%c%c%c",
            mon_register_get_val(mem, e_A),
            mon_register_get_val(mem, e_B),
            mon_register_get_val(mem, e_X),
            mon_register_get_val(mem, e_Y),
            mon_register_get_val(mem, e_SP),
            mon_register_get_val(mem, e_U),
            mon_register_get_val(mem, e_DP),
            H6809_REGS_TEST_E(regs) ? 'E' : '.',
            H6809_REGS_TEST_F(regs) ? 'F' : '.',
            H6809_REGS_TEST_H(regs) ? 'H' : '.',
            H6809_REGS_TEST_I(regs) ? 'I' : '.',
            H6809_REGS_TEST_N(regs) ? 'N' : '.',
            H6809_REGS_TEST_Z(regs) ? 'Z' : '.',
            H6809_REGS_TEST_V(regs) ? 'V' : '.',
            H6809_REGS_TEST_C(regs) ? 'C' : '.'
            );

    return buff;
}
예제 #7
0
static mon_reg_list_t *mon_register_list_get6502dtv(int mem)
{
    mon_reg_list_t *mon_reg_list;

    mon_reg_list = lib_malloc(sizeof(mon_reg_list_t) * 24);

    mon_reg_list[0].name = "PC";
    mon_reg_list[0].val = (unsigned int)mon_register_get_val(mem, e_PC);
    mon_reg_list[0].size = 16;
    mon_reg_list[0].flags = 0;
    mon_reg_list[0].next = &mon_reg_list[1];

    mon_reg_list[1].name = "AC";
    mon_reg_list[1].val = (unsigned int)mon_register_get_val(mem, e_A);
    mon_reg_list[1].size = 8;
    mon_reg_list[1].flags = 0;
    mon_reg_list[1].next = &mon_reg_list[2];

    mon_reg_list[2].name = "XR";
    mon_reg_list[2].val = (unsigned int)mon_register_get_val(mem, e_X);
    mon_reg_list[2].size = 8;
    mon_reg_list[2].flags = 0;
    mon_reg_list[2].next = &mon_reg_list[3];

    mon_reg_list[3].name = "YR";
    mon_reg_list[3].val = (unsigned int)mon_register_get_val(mem, e_Y);
    mon_reg_list[3].size = 8;
    mon_reg_list[3].flags = 0;
    mon_reg_list[3].next = &mon_reg_list[4];

    mon_reg_list[4].name = "SP";
    mon_reg_list[4].val = (unsigned int)mon_register_get_val(mem, e_SP);
    mon_reg_list[4].size = 8;
    mon_reg_list[4].flags = 0;
    mon_reg_list[4].next = &mon_reg_list[5];

    /* Note: The DTV always has reg 00 and 01 */
    mon_reg_list[5].name = "00";
    mon_reg_list[5].val = (unsigned int)mon_get_mem_val(mem, 0);
    mon_reg_list[5].size = 8;
    mon_reg_list[5].flags = 0;
    mon_reg_list[5].next = &mon_reg_list[6];

    mon_reg_list[6].name = "01";
    mon_reg_list[6].val = (unsigned int)mon_get_mem_val(mem, 1);
    mon_reg_list[6].size = 8;
    mon_reg_list[6].flags = 0;
    mon_reg_list[6].next = &mon_reg_list[7];

    mon_reg_list[7].name = "FL";
    mon_reg_list[7].val = (unsigned int)mon_register_get_val(mem, e_FLAGS)
                          | 0x20;
    mon_reg_list[7].size = 8;
    mon_reg_list[7].flags = 0;
    mon_reg_list[7].next = &mon_reg_list[8];

    mon_reg_list[8].name = "NV-BDIZC";
    mon_reg_list[8].val = (unsigned int)mon_register_get_val(mem, e_FLAGS)
                          | 0x20;
    mon_reg_list[8].size = 8;
    mon_reg_list[8].flags = 1;
    mon_reg_list[8].next = &mon_reg_list[9];

    mon_reg_list[9].name = "R3";
    mon_reg_list[9].val = (unsigned int)mon_register_get_val(mem, e_R3);
    mon_reg_list[9].size = 8;
    mon_reg_list[9].flags = 0;
    mon_reg_list[9].next = &mon_reg_list[10];

    mon_reg_list[10].name = "R4";
    mon_reg_list[10].val = (unsigned int)mon_register_get_val(mem, e_R4);
    mon_reg_list[10].size = 8;
    mon_reg_list[10].flags = 0;
    mon_reg_list[10].next = &mon_reg_list[11];
    
    mon_reg_list[11].name = "R5";
    mon_reg_list[11].val = (unsigned int)mon_register_get_val(mem, e_R5);
    mon_reg_list[11].size = 8;
    mon_reg_list[11].flags = 0;
    mon_reg_list[11].next = &mon_reg_list[12];
    
    mon_reg_list[12].name = "R6";
    mon_reg_list[12].val = (unsigned int)mon_register_get_val(mem, e_R6);
    mon_reg_list[12].size = 8;
    mon_reg_list[12].flags = 0;
    mon_reg_list[12].next = &mon_reg_list[13];
    
    mon_reg_list[13].name = "R7";
    mon_reg_list[13].val = (unsigned int)mon_register_get_val(mem, e_R7);
    mon_reg_list[13].size = 8;
    mon_reg_list[13].flags = 0;
    mon_reg_list[13].next = &mon_reg_list[14];
    
    mon_reg_list[14].name = "R8";
    mon_reg_list[14].val = (unsigned int)mon_register_get_val(mem, e_R8);
    mon_reg_list[14].size = 8;
    mon_reg_list[14].flags = 0;
    mon_reg_list[14].next = &mon_reg_list[15];
    
    mon_reg_list[15].name = "R9";
    mon_reg_list[15].val = (unsigned int)mon_register_get_val(mem, e_R9);
    mon_reg_list[15].size = 8;
    mon_reg_list[15].flags = 0;
    mon_reg_list[15].next = &mon_reg_list[16];
    
    mon_reg_list[16].name = "R10";
    mon_reg_list[16].val = (unsigned int)mon_register_get_val(mem, e_R10);
    mon_reg_list[16].size = 8;
    mon_reg_list[16].flags = 0;
    mon_reg_list[16].next = &mon_reg_list[17];
    
    mon_reg_list[17].name = "R11";
    mon_reg_list[17].val = (unsigned int)mon_register_get_val(mem, e_R11);
    mon_reg_list[17].size = 8;
    mon_reg_list[17].flags = 0;
    mon_reg_list[17].next = &mon_reg_list[18];
    
    mon_reg_list[18].name = "R12";
    mon_reg_list[18].val = (unsigned int)mon_register_get_val(mem, e_R12);
    mon_reg_list[18].size = 8;
    mon_reg_list[18].flags = 0;
    mon_reg_list[18].next = &mon_reg_list[19];
    
    mon_reg_list[19].name = "R13";
    mon_reg_list[19].val = (unsigned int)mon_register_get_val(mem, e_R13);
    mon_reg_list[19].size = 8;
    mon_reg_list[19].flags = 0;
    mon_reg_list[19].next = &mon_reg_list[20];
    
    mon_reg_list[20].name = "R14";
    mon_reg_list[20].val = (unsigned int)mon_register_get_val(mem, e_R14);
    mon_reg_list[20].size = 8;
    mon_reg_list[20].flags = 0;
    mon_reg_list[20].next = &mon_reg_list[21];
    
    mon_reg_list[21].name = "R15";
    mon_reg_list[21].val = (unsigned int)mon_register_get_val(mem, e_R15);
    mon_reg_list[21].size = 8;
    mon_reg_list[21].flags = 0;
    mon_reg_list[21].next = &mon_reg_list[22];
    
    mon_reg_list[22].name = "ACM";
    mon_reg_list[22].val = (unsigned int)mon_register_get_val(mem, e_ACM);
    mon_reg_list[22].size = 8;
    mon_reg_list[22].flags = 0;
    mon_reg_list[22].next = &mon_reg_list[23];

    mon_reg_list[23].name = "YXM";
    mon_reg_list[23].val = (unsigned int)mon_register_get_val(mem, e_YXM);
    mon_reg_list[23].size = 8;
    mon_reg_list[23].flags = 0;
    mon_reg_list[23].next = NULL;

    return mon_reg_list;
}
예제 #8
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));
	}
}
예제 #9
0
static mon_reg_list_t *mon_register_list_get6502(int mem)
{
    mon_reg_list_t *mon_reg_list;

    mon_reg_list = lib_malloc(sizeof(mon_reg_list_t) * 9);

    mon_reg_list[0].name = "PC";
    mon_reg_list[0].val = (unsigned int)mon_register_get_val(mem, e_PC);
    mon_reg_list[0].size = 16;
    mon_reg_list[0].flags = 0;
    mon_reg_list[0].next = &mon_reg_list[1];

    mon_reg_list[1].name = "AC";
    mon_reg_list[1].val = (unsigned int)mon_register_get_val(mem, e_A);
    mon_reg_list[1].size = 8;
    mon_reg_list[1].flags = 0;
    mon_reg_list[1].next = &mon_reg_list[2];

    mon_reg_list[2].name = "XR";
    mon_reg_list[2].val = (unsigned int)mon_register_get_val(mem, e_X);
    mon_reg_list[2].size = 8;
    mon_reg_list[2].flags = 0;
    mon_reg_list[2].next = &mon_reg_list[3];

    mon_reg_list[3].name = "YR";
    mon_reg_list[3].val = (unsigned int)mon_register_get_val(mem, e_Y);
    mon_reg_list[3].size = 8;
    mon_reg_list[3].flags = 0;
    mon_reg_list[3].next = &mon_reg_list[4];

    mon_reg_list[4].name = "SP";
    mon_reg_list[4].val = (unsigned int)mon_register_get_val(mem, e_SP);
    mon_reg_list[4].size = 8;
    mon_reg_list[4].flags = 0;
    /* mon_reg_list[4].next = &mon_reg_list[5];
       this is depandant upon the following distinction! */

    /* FIXME: This is not elegant. The destinction between 6502/6510
       should not be done by the memory space.  This will change once
       we have completely separated 6502, 6509, 6510 and Z80. */
    if (mem == e_comp_space) {
        mon_reg_list[4].next = &mon_reg_list[5];

        mon_reg_list[5].name = "00";
        mon_reg_list[5].val = (unsigned int)mon_get_mem_val(mem, 0);
        mon_reg_list[5].size = 8;
        mon_reg_list[5].flags = 0;
        mon_reg_list[5].next = &mon_reg_list[6];

        mon_reg_list[6].name = "01";
        mon_reg_list[6].val = (unsigned int)mon_get_mem_val(mem, 1);
        mon_reg_list[6].size = 8;
        mon_reg_list[6].flags = 0;
        mon_reg_list[6].next = &mon_reg_list[7];

    } else {
        mon_reg_list[4].next = &mon_reg_list[7];
    }

    mon_reg_list[7].name = "FL";
    mon_reg_list[7].val = (unsigned int)mon_register_get_val(mem, e_FLAGS)
                          | 0x20;
    mon_reg_list[7].size = 8;
    mon_reg_list[7].flags = 0;
    mon_reg_list[7].next = &mon_reg_list[8];

    mon_reg_list[8].name = "NV-BDIZC";
    mon_reg_list[8].val = (unsigned int)mon_register_get_val(mem, e_FLAGS)
                          | 0x20;
    mon_reg_list[8].size = 8;
    mon_reg_list[8].flags = 1;
    mon_reg_list[8].next = NULL;

    return mon_reg_list;
}
예제 #10
0
static mon_reg_list_t *mon_register_list_getz80(int mem)
{
    mon_reg_list_t *mon_reg_list;

    mon_reg_list = lib_malloc(sizeof(mon_reg_list_t) * 14);

    mon_reg_list[0].name = "PC";
    mon_reg_list[0].val = (unsigned int)mon_register_get_val(mem, e_PC);
    mon_reg_list[0].size = 16;
    mon_reg_list[0].flags = 0;
    mon_reg_list[0].next = &mon_reg_list[1];

    mon_reg_list[1].name = "AF";
    mon_reg_list[1].val = (unsigned int)mon_register_get_val(mem, e_AF);
    mon_reg_list[1].size = 16;
    mon_reg_list[1].flags = 0;
    mon_reg_list[1].next = &mon_reg_list[2];

    mon_reg_list[2].name = "BC";
    mon_reg_list[2].val = (unsigned int)mon_register_get_val(mem, e_BC);
    mon_reg_list[2].size = 16;
    mon_reg_list[2].flags = 0;
    mon_reg_list[2].next = &mon_reg_list[3];

    mon_reg_list[3].name = "DE";
    mon_reg_list[3].val = (unsigned int)mon_register_get_val(mem, e_DE);
    mon_reg_list[3].size = 16;
    mon_reg_list[3].flags = 0;
    mon_reg_list[3].next = &mon_reg_list[4];

    mon_reg_list[4].name = "HL";
    mon_reg_list[4].val = (unsigned int)mon_register_get_val(mem, e_HL);
    mon_reg_list[4].size = 16;
    mon_reg_list[4].flags = 0;
    mon_reg_list[4].next = &mon_reg_list[5];

    mon_reg_list[5].name = "IX";
    mon_reg_list[5].val = (unsigned int)mon_register_get_val(mem, e_IX);
    mon_reg_list[5].size = 16;
    mon_reg_list[5].flags = 0;
    mon_reg_list[5].next = &mon_reg_list[6];

    mon_reg_list[6].name = "IY";
    mon_reg_list[6].val = (unsigned int)mon_register_get_val(mem, e_IY);
    mon_reg_list[6].size = 16;
    mon_reg_list[6].flags = 0;
    mon_reg_list[6].next = &mon_reg_list[7];

    mon_reg_list[7].name = "SP";
    mon_reg_list[7].val = (unsigned int)mon_register_get_val(mem, e_SP);
    mon_reg_list[7].size = 16;
    mon_reg_list[7].flags = 0;
    mon_reg_list[7].next = &mon_reg_list[8];

    mon_reg_list[8].name = "I";
    mon_reg_list[8].val = (unsigned int)mon_register_get_val(mem, e_I);
    mon_reg_list[8].size = 8;
    mon_reg_list[8].flags = 0;
    mon_reg_list[8].next = &mon_reg_list[9];

    mon_reg_list[9].name = "R";
    mon_reg_list[9].val = (unsigned int)mon_register_get_val(mem, e_R);
    mon_reg_list[9].size = 8;
    mon_reg_list[9].flags = 0;
    mon_reg_list[9].next = &mon_reg_list[10];

    mon_reg_list[10].name = "AF'";
    mon_reg_list[10].val = (unsigned int)mon_register_get_val(mem, e_AF2);
    mon_reg_list[10].size = 16;
    mon_reg_list[10].flags = 0;
    mon_reg_list[10].next = &mon_reg_list[11];

    mon_reg_list[11].name = "BC'";
    mon_reg_list[11].val = (unsigned int)mon_register_get_val(mem, e_BC2);
    mon_reg_list[11].size = 16;
    mon_reg_list[11].flags = 0;
    mon_reg_list[11].next = &mon_reg_list[12];

    mon_reg_list[12].name = "DE'";
    mon_reg_list[12].val = (unsigned int)mon_register_get_val(mem, e_DE2);
    mon_reg_list[12].size = 16;
    mon_reg_list[12].flags = 0;
    mon_reg_list[12].next = &mon_reg_list[13];

    mon_reg_list[13].name = "HL'";
    mon_reg_list[13].val = (unsigned int)mon_register_get_val(mem, e_HL2);
    mon_reg_list[13].size = 16;
    mon_reg_list[13].flags = 0;
    mon_reg_list[13].next = NULL;

    return mon_reg_list;
}
예제 #11
0
static void mon_register_print(int mem)
{
    z80_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) {
        log_error(LOG_ERR, "Unknown memory space!");
        return;
    }
    regs = mon_interfaces[mem]->z80_cpu_regs;

    mon_out("  ADDR AF   BC   DE   HL   IX   IY   SP   I  R  AF'  BC'  DE'  HL'\n");
    mon_out(".;%04x %04x %04x %04x %04x %04x %04x %04x %02x %02x %04x %04x %04x %04x\n",
              addr_location(mon_register_get_val(mem, e_PC)),
              mon_register_get_val(mem, e_AF),
              mon_register_get_val(mem, e_BC),
              mon_register_get_val(mem, e_DE),
              mon_register_get_val(mem, e_HL),
              mon_register_get_val(mem, e_IX),
              mon_register_get_val(mem, e_IY),
              mon_register_get_val(mem, e_SP),
              mon_register_get_val(mem, e_I),
              mon_register_get_val(mem, e_R),
              mon_register_get_val(mem, e_AF2),
              mon_register_get_val(mem, e_BC2),
              mon_register_get_val(mem, e_DE2),
              mon_register_get_val(mem, e_HL2));
}
/* TODO: should use mon_register_list_get */
static void mon_register_print(int mem)
{
    WDC65816_regs_t *regs;
    unsigned int line = 0, cycle = 0;
    int half_cycle = -1;

    if (monitor_diskspace_dnr(mem) >= 0) {
        if (!check_drive_emu_level_ok(monitor_diskspace_dnr(mem) + 8)) {
            return;
        }
    } else if (mem != e_comp_space) {
        log_error(LOG_ERR, "Unknown memory space!");
        return;
    }

    regs = mon_interfaces[mem]->cpu_65816_regs;

    if (mem == e_comp_space && mon_interfaces[mem]->get_line_cycle != NULL) {
        mon_interfaces[mem]->get_line_cycle(&line, &cycle, &half_cycle);
    }

    if (mon_register_get_val(mem, e_E)) {
        mon_out("  PB ADDR A  B  X  Y  SP DPRE DB NV-BDIZC E");
        if (mem == e_comp_space && mon_interfaces[mem]->get_line_cycle != NULL) {
            mon_out(" LIN CYC");
            if (half_cycle != -1) {
                mon_out(".SB");
            }
        }
        mon_out("\n.;%02x %04x %02x %02x %02x %02x %02x %04x %02x %d%d1%d%d%d%d%d 1",
                  mon_register_get_val(mem, e_PBR),
                  addr_location(mon_register_get_val(mem, e_PC)),
                  mon_register_get_val(mem, e_A),
                  mon_register_get_val(mem, e_B),
                  mon_register_get_val(mem, e_X) & 0xff,
                  mon_register_get_val(mem, e_Y) & 0xff,
                  mon_register_get_val(mem, e_SP) & 0xff,
                  mon_register_get_val(mem, e_DPR),
                  mon_register_get_val(mem, e_DBR),
                  TEST(WDC65816_REGS_GET_SIGN(regs)),
                  TEST(WDC65816_REGS_GET_OVERFLOW(regs)),
                  TEST(WDC65816_REGS_GET_BREAK(regs)),
                  TEST(WDC65816_REGS_GET_DECIMAL(regs)),
                  TEST(WDC65816_REGS_GET_INTERRUPT(regs)),
                  TEST(WDC65816_REGS_GET_ZERO(regs)),
                  TEST(WDC65816_REGS_GET_CARRY(regs)));
    } else {
        mon_out("  PB ADDR");
        mon_out(WDC65816_REGS_GET_65816_M(regs) ? " A  B " : " CREG");
        mon_out(WDC65816_REGS_GET_65816_X(regs) ? " XH X  YH Y " : " X    Y   ");
        mon_out(" STCK DPRE DB NVMXDIZC E");

        if (mem == e_comp_space && mon_interfaces[mem]->get_line_cycle != NULL) {
            mon_out(" LIN CYC");
            if (half_cycle != -1) {
                mon_out(".SB");
            }
        }
        mon_out("\n.;%02x %04x",
                mon_register_get_val(mem, e_PBR),
                addr_location(mon_register_get_val(mem, e_PC)));

        if (WDC65816_REGS_GET_65816_M(regs)) {
            mon_out(" %02x %02x",
                    mon_register_get_val(mem, e_A),
                    mon_register_get_val(mem, e_B));
        } else {
            mon_out(" %02x%02x",
                    mon_register_get_val(mem, e_B),
                    mon_register_get_val(mem, e_A));
        }
        if (WDC65816_REGS_GET_65816_X(regs)) {
            mon_out(" %02x %02x %02x %02x",
                  mon_register_get_val(mem, e_X) >> 8,
                  mon_register_get_val(mem, e_X) & 0xff,
                  mon_register_get_val(mem, e_Y) >> 8,
                  mon_register_get_val(mem, e_Y) & 0xff);
        } else {
            mon_out(" %04x %04x",
                  mon_register_get_val(mem, e_X),
                  mon_register_get_val(mem, e_Y));
        }

        mon_out(" %04x %04x %02x %d%d%d%d%d%d%d%d 0",
                mon_register_get_val(mem, e_SP),
                mon_register_get_val(mem, e_DPR),
                mon_register_get_val(mem, e_DBR),
                TEST(WDC65816_REGS_GET_SIGN(regs)),
                TEST(WDC65816_REGS_GET_OVERFLOW(regs)),
                TEST(WDC65816_REGS_GET_65816_M(regs)),
                TEST(WDC65816_REGS_GET_65816_X(regs)),
                TEST(WDC65816_REGS_GET_DECIMAL(regs)),
                TEST(WDC65816_REGS_GET_INTERRUPT(regs)),
                TEST(WDC65816_REGS_GET_ZERO(regs)),
                TEST(WDC65816_REGS_GET_CARRY(regs)));
    }
예제 #13
0
static mon_reg_list_t *mon_register_list_get6809(int mem)
{
    mon_reg_list_t *mon_reg_list;

    mon_reg_list = lib_malloc(sizeof(mon_reg_list_t) * 11);

    mon_reg_list[0].name = "X";
    mon_reg_list[0].val = (unsigned int)mon_register_get_val(mem, e_X);
    mon_reg_list[0].size = 16;
    mon_reg_list[0].flags = 0;
    mon_reg_list[0].next = &mon_reg_list[1];

    mon_reg_list[1].name = "Y";
    mon_reg_list[1].val = (unsigned int)mon_register_get_val(mem, e_Y);
    mon_reg_list[1].size = 16;
    mon_reg_list[1].flags = 0;
    mon_reg_list[1].next = &mon_reg_list[2];

    mon_reg_list[2].name = "U";
    mon_reg_list[2].val = (unsigned int)mon_register_get_val(mem, e_U);
    mon_reg_list[2].size = 16;
    mon_reg_list[2].flags = 0;
    mon_reg_list[2].next = &mon_reg_list[3];

    mon_reg_list[3].name = "S";
    mon_reg_list[3].val = (unsigned int)mon_register_get_val(mem, e_SP);
    mon_reg_list[3].size = 16;
    mon_reg_list[3].flags = 0;
    mon_reg_list[3].next = &mon_reg_list[4];

    mon_reg_list[4].name = "PC";
    mon_reg_list[4].val = (unsigned int)mon_register_get_val(mem, e_PC);
    mon_reg_list[4].size = 16;
    mon_reg_list[4].flags = 0;
    mon_reg_list[4].next = &mon_reg_list[5];

    mon_reg_list[5].name = "DP";
    mon_reg_list[5].val = (unsigned int)mon_register_get_val(mem, e_DP);
    mon_reg_list[5].size = 8;
    mon_reg_list[5].flags = 0;
    mon_reg_list[5].next = &mon_reg_list[6];

    mon_reg_list[6].name = "CC";
    mon_reg_list[6].val = (unsigned int)mon_register_get_val(mem, e_FLAGS);
    mon_reg_list[6].size = 8;
    mon_reg_list[6].flags = 0;
    mon_reg_list[6].next = &mon_reg_list[7];

    mon_reg_list[7].name = "EFHINZVC";
    mon_reg_list[7].val = (unsigned int)mon_register_get_val(mem, e_FLAGS);
    mon_reg_list[7].size = 8;
    mon_reg_list[7].flags = 1;
    mon_reg_list[7].next = &mon_reg_list[8];

    mon_reg_list[8].name = "A";
    mon_reg_list[8].val = (unsigned int)mon_register_get_val(mem, e_A);
    mon_reg_list[8].size = 8;
    mon_reg_list[8].flags = 0;
    mon_reg_list[8].next = &mon_reg_list[9];

    mon_reg_list[9].name = "B";
    mon_reg_list[9].val = (unsigned int)mon_register_get_val(mem, e_B);
    mon_reg_list[9].size = 8;
    mon_reg_list[9].flags = 0;
    mon_reg_list[9].next = &mon_reg_list[10];

    mon_reg_list[10].name = "D";
    mon_reg_list[10].val = (unsigned int)mon_register_get_val(mem, e_D);
    mon_reg_list[10].size = 16;
    mon_reg_list[10].flags = 0;
    mon_reg_list[10].next = NULL;

    return mon_reg_list;
}