MMC1 confusion

This is an archive of a topic from NESdev BBS, taken in mid-October 2019 before a server upgrade.
View original topic
MMC1 confusion
by on (#1654)
i dont know how mmc1 works.
mmc1.txt says that writing a value with a the MSB 1 it reset the mapper.. so what i do is:
Code:
MMC1.Reg0 &= ~0x0C;
MMC1.Reg0 |= 0x0C;


But the new "nes documentation" pdf, says that each register can be reset with a value of 0x80 (or maybe a i missunderstood it).
I have also find in other docs that each bit of the register must be writed bit by bit. But writing bit-by-bit to reg3, so when to do prg-rom swap?
Re: MMC1 confusion
by on (#1655)
Anes wrote:
i dont know how mmc1 works.
mmc1.txt says that writing a value with a the MSB 1 it reset the mapper.. so what i do is:
Code:
MMC1.Reg0 &= ~0x0C;
MMC1.Reg0 |= 0x0C;


But the new "nes documentation" pdf, says that each register can be reset with a value of 0x80 (or maybe a i missunderstood it).
I have also find in other docs that each bit of the register must be writed bit by bit. But writing bit-by-bit to reg3, so when to do prg-rom swap?


That "nes documentation" is NOT new - most of the information inside it was gathered from ancient documentation (like firebug's mappers.txt). If you want information you can trust, I would advise checking the wiki.
(of course, in said wiki, MMC1 mirroring was backwards until about a week ago)

Resetting the MMC1 can be done through any register, but ALL it does is set bits 2/3 of reg0; all other bits are unaffected (for some reason, you're clearing the other bits in reg0, which is wrong).

All MMC1 documents (should) mention that all mapper registers are updated serially - you write to one address range 5 times in a row, shifting your value right 1 bit each time, and the register itself is updated on the very last write.

by on (#1659)
thanks i have it much clear now.