Revert "other modes with reg 7 shall not update MMR1"
Some checks are pending
CodeQL / Analyze (push) Waiting to run

This reverts commit 5b82ad260f and
2163d5ad58.
This commit is contained in:
Folkert van Heusden 2025-04-15 19:42:36 +02:00
parent 517db4657a
commit 0ab515678b
Signed by untrusted user who does not match committer: folkert
GPG key ID: 6B6455EDFEED3BD1

12
cpu.cpp
View file

@ -491,23 +491,20 @@ gam_rc_t cpu::getGAM(const uint8_t mode, const uint8_t reg, const word_mode_t wo
if (read_value) if (read_value)
g.value = b->read(g.addr.value(), word_mode, rm_cur, isR7_space); g.value = b->read(g.addr.value(), word_mode, rm_cur, isR7_space);
add_register(reg, word_mode == wm_word || reg == 7 || reg == 6 ? 2 : 1); add_register(reg, word_mode == wm_word || reg == 7 || reg == 6 ? 2 : 1);
if (reg != 7) g.mmr1_update = { word_mode == wm_word || reg == 7 || reg == 6 ? 2 : 1, reg };
g.mmr1_update = { word_mode == wm_word || reg == 6 ? 2 : 1, reg };
break; break;
case 3: // @(Rn)+ / @#a case 3: // @(Rn)+ / @#a
g.addr = b->read(get_register(reg), wm_word, rm_cur, isR7_space); g.addr = b->read(get_register(reg), wm_word, rm_cur, isR7_space);
// might be wrong: the adds should happen when the read is really performed, because of traps // might be wrong: the adds should happen when the read is really performed, because of traps
add_register(reg, 2); add_register(reg, 2);
if (reg != 7) g.mmr1_update = { 2, reg };
g.mmr1_update = { 2, reg };
g.space = d_space; g.space = d_space;
if (read_value) if (read_value)
g.value = b->read(g.addr.value(), word_mode, rm_cur, g.space); g.value = b->read(g.addr.value(), word_mode, rm_cur, g.space);
break; break;
case 4: // -(Rn) case 4: // -(Rn)
add_register(reg, word_mode == wm_word || reg == 7 || reg == 6 ? -2 : -1); add_register(reg, word_mode == wm_word || reg == 7 || reg == 6 ? -2 : -1);
if (reg != 7) g.mmr1_update = { word_mode == wm_word || reg == 7 || reg == 6 ? -2 : -1, reg };
g.mmr1_update = { word_mode == wm_word || reg == 6 ? -2 : -1, reg };
g.space = d_space; g.space = d_space;
g.addr = get_register(reg); g.addr = get_register(reg);
if (read_value) if (read_value)
@ -515,8 +512,7 @@ gam_rc_t cpu::getGAM(const uint8_t mode, const uint8_t reg, const word_mode_t wo
break; break;
case 5: // @-(Rn) case 5: // @-(Rn)
add_register(reg, -2); add_register(reg, -2);
if (reg != 7) g.mmr1_update = { -2, reg };
g.mmr1_update = { -2, reg };
g.addr = b->read(get_register(reg), wm_word, rm_cur, isR7_space); g.addr = b->read(get_register(reg), wm_word, rm_cur, isR7_space);
g.space = d_space; g.space = d_space;
if (read_value) if (read_value)