I was reading the source code, and I think thre might be mistake in vr4300/interface.c :
Code: Select all
75 result = word & 0x7F;
76
77 if (word & 0x0080)
78 result &= ~MI_INIT_MODE;
79 else if (word & 0x0100)
80 result |= MI_INIT_MODE;
81
82 if (word & 0x0200)
83 result &= ~MI_EBUS_TEST_MODE;
84 else if (word & 0x0400)
85 result |= MI_EBUS_TEST_MODE;
86
87 if (word & 0x0800) {
88 vr4300->mi_regs[MI_INTR_REG] &= ~MI_INTR_DP;
89 check_for_interrupts(vr4300); // TODO/FIXME: ???
90 }
91
92 if (word & 0x1000)
93 result &= ~MI_RDRAM_REG_MODE;
94 else if (word & 0x2000)
95 result |= MI_RDRAM_REG_MODE;
96
97 vr4300->mi_regs[MI_INIT_MODE_REG] = result;
I guess, not using the temporary "result" would fix it.
Anyway, congratulations for this very clean code base... I'm kind of jealous, because the emulator I normally contribute to doesn't have this well designed architecture.
Keep up the good work !