You can toggle the NES-side sprite and BG pattern tables and sprite size ($2000 bits 3-5), the MMC5 EXRAM attribute-per-tile mode (the left screenshot has it off, the right has it on), and the order the MMC5 CHR bank registers are written in. Pressing left/right switches between four orders: in order from $5120-$512B; $5128-$512B followed by $5120-$5127; scrambled with $512B last; and scrambled with $5127 last. The value written to each register is the same as the order, e.g. the order shown in the screenshots writes 0 to $5128, 1 to $5129, 2 to $512A, 3 to $512B, 4 to $5120, etc., and finally 11 to $5127.
The way the test works is each 1KB bank of CHR ROM contains an identical copy of the font, the bank number as an 8x8 tile, the bank number as an 8x16 sprite, and the bank number as a data byte that gets read out via $2007 during VBlank. So for every combination of register settings you can see on a single screen what banks end up being used for sprites, for BG, and for data.
It should go without saying that running this test program on a Powerpak or Everdrive or the like defeats its purpose, which is why the attached ROMs are in the form of separate PRG and CHR images rather than a .nes file. When burning, please mirror the data to fill whatever size of EPROMs you're using. The test program should work on any MMC5 cartridge; it doesn't use on-cartridge RAM.
Here are some of the things I'm interested in:
- Does the MMC5 actually somehow know which sprite size the NES is using? Does toggling the sprite size ever change the banks used for BG or data?
- Are there any other surprising instances of "crosstalk"? (e.g. toggling EXRAM having an effect on the banks used for sprites)
- What effect, if any, does the order the registers are written in really have? Are the "mode A" and "mode B" cryptically referred to in the 1990s-vintage translated document by "goroh" actually a thing?
Edit: Attachment deleted, please download the updated version below.