mirror of
https://github.com/holub/mame
synced 2025-06-25 22:04:15 +03:00
h8: Make debug PC adjustment and breakpoints actually work
This commit is contained in:
parent
7673e5260f
commit
c350672a1b
@ -42,14 +42,21 @@ void h8_device::device_start()
|
|||||||
cache = program->cache<1, 0, ENDIANNESS_BIG>();
|
cache = program->cache<1, 0, ENDIANNESS_BIG>();
|
||||||
io = &space(AS_IO);
|
io = &space(AS_IO);
|
||||||
|
|
||||||
state_add(STATE_GENPC, "GENPC", NPC).noshow();
|
uint32_t pcmask = mode_advanced ? 0xffffff : 0xffff;
|
||||||
state_add(STATE_GENPCBASE, "CURPC", PPC).noshow();
|
state_add<uint32_t>(H8_PC, "PC",
|
||||||
|
[this]() { return NPC; },
|
||||||
|
[this](uint32_t pc) { PC = PPC = NPC = pc; prefetch_noirq_notrace(); }
|
||||||
|
).mask(pcmask);
|
||||||
|
state_add<uint32_t>(STATE_GENPC, "GENPC",
|
||||||
|
[this]() { return NPC; },
|
||||||
|
[this](uint32_t pc) { PC = PPC = NPC = pc; prefetch_noirq_notrace(); }
|
||||||
|
).mask(pcmask).noshow();
|
||||||
|
state_add(STATE_GENPCBASE, "CURPC", PPC).mask(pcmask).noshow();
|
||||||
|
state_add(H8_CCR, "CCR", CCR);
|
||||||
if(has_exr)
|
if(has_exr)
|
||||||
state_add(STATE_GENFLAGS, "GENFLAGS", CCR).formatstr("%11s").noshow();
|
state_add(STATE_GENFLAGS, "GENFLAGS", CCR).formatstr("%11s").noshow();
|
||||||
else
|
else
|
||||||
state_add(STATE_GENFLAGS, "GENFLAGS", CCR).formatstr("%8s").noshow();
|
state_add(STATE_GENFLAGS, "GENFLAGS", CCR).formatstr("%8s").noshow();
|
||||||
state_add(H8_PC, "PC", NPC);
|
|
||||||
state_add(H8_CCR, "CCR", CCR);
|
|
||||||
|
|
||||||
if(has_exr)
|
if(has_exr)
|
||||||
state_add(H8_EXR, "EXR", EXR);
|
state_add(H8_EXR, "EXR", EXR);
|
||||||
@ -331,7 +338,7 @@ void h8_device::state_string_export(const device_state_entry &entry, std::string
|
|||||||
case H8_R6:
|
case H8_R6:
|
||||||
case H8_R7: {
|
case H8_R7: {
|
||||||
int r = entry.index() - H8_R0;
|
int r = entry.index() - H8_R0;
|
||||||
str = string_format("%04x %04x", R[r + 8], R[r]);
|
str = string_format("%04X %04X", R[r + 8], R[r]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -164,8 +164,8 @@ protected:
|
|||||||
inline void prefetch() { prefetch_start(); prefetch_done(); }
|
inline void prefetch() { prefetch_start(); prefetch_done(); }
|
||||||
inline void prefetch_noirq() { prefetch_start(); prefetch_done_noirq(); }
|
inline void prefetch_noirq() { prefetch_start(); prefetch_done_noirq(); }
|
||||||
inline void prefetch_noirq_notrace() { prefetch_start(); prefetch_done_noirq_notrace(); }
|
inline void prefetch_noirq_notrace() { prefetch_start(); prefetch_done_noirq_notrace(); }
|
||||||
void prefetch_start() { NPC = PC; PIR = fetch(); }
|
void prefetch_start() { NPC = PC & 0xffffff; PIR = fetch(); }
|
||||||
void prefetch_switch(uint32_t pc, uint16_t ir) { NPC = pc; PC = pc+2; PIR = ir; }
|
void prefetch_switch(uint32_t pc, uint16_t ir) { NPC = pc & 0xffffff; PC = pc+2; PIR = ir; }
|
||||||
void prefetch_done();
|
void prefetch_done();
|
||||||
void prefetch_done_noirq();
|
void prefetch_done_noirq();
|
||||||
void prefetch_done_noirq_notrace();
|
void prefetch_done_noirq_notrace();
|
||||||
|
Loading…
Reference in New Issue
Block a user