update MMR1 directly when the post/pre-decrement happened

This commit is contained in:
folkert van heusden 2023-03-25 20:00:29 +01:00
parent 5ace4916f8
commit 9c1eef7fdb
Signed by untrusted user who does not match committer: folkert
GPG key ID: 6B6455EDFEED3BD1

View file

@ -342,25 +342,25 @@ gam_rc_t cpu::getGAM(const uint8_t mode, const uint8_t reg, const word_mode_t wo
case 3: // @(Rn)+ / @#a case 3: // @(Rn)+ / @#a
g.addr = b->read(getRegister(reg, mode_selection), wm_word, mode_selection, false, isR7_space); g.addr = b->read(getRegister(reg, mode_selection), wm_word, mode_selection, false, isR7_space);
addRegister(reg, mode_selection, 2); addRegister(reg, mode_selection, 2);
addToMMR1(mode, reg, word_mode);
g.space = d_space; g.space = d_space;
if (read_value) if (read_value)
g.value = b->read(g.addr.value(), word_mode, mode_selection, false, g.space); g.value = b->read(g.addr.value(), word_mode, mode_selection, false, g.space);
addToMMR1(mode, reg, word_mode);
break; break;
case 4: // -(Rn) case 4: // -(Rn)
addRegister(reg, mode_selection, word_mode == wm_word || reg == 7 || reg == 6 ? -2 : -1); addRegister(reg, mode_selection, word_mode == wm_word || reg == 7 || reg == 6 ? -2 : -1);
addToMMR1(mode, reg, word_mode);
g.addr = getRegister(reg, mode_selection); g.addr = getRegister(reg, mode_selection);
if (read_value) if (read_value)
g.value = b->read(g.addr.value(), word_mode, mode_selection, false, isR7_space); g.value = b->read(g.addr.value(), word_mode, mode_selection, false, isR7_space);
addToMMR1(mode, reg, word_mode);
break; break;
case 5: // @-(Rn) case 5: // @-(Rn)
addRegister(reg, mode_selection, -2); addRegister(reg, mode_selection, -2);
addToMMR1(mode, reg, word_mode);
g.addr = b->read(getRegister(reg, mode_selection), wm_word, mode_selection, false, isR7_space); g.addr = b->read(getRegister(reg, mode_selection), wm_word, mode_selection, false, isR7_space);
g.space = d_space; g.space = d_space;
if (read_value) if (read_value)
g.value = b->read(g.addr.value(), word_mode, mode_selection, false, g.space); g.value = b->read(g.addr.value(), word_mode, mode_selection, false, g.space);
addToMMR1(mode, reg, word_mode);
break; break;
case 6: // x(Rn) / a case 6: // x(Rn) / a
next_word = b->read(getPC(), wm_word, mode_selection, false, i_space); next_word = b->read(getPC(), wm_word, mode_selection, false, i_space);