MottZilla wrote:Some bits are speculated until more testing can be done. PRG is probably concrete but CHR is a bit fuzzy. I think the upper nibble of $5010 and $5012 are related to CHR configuration.
PRG-ROM is a 16 Megabit / 2 Megabyte ROM with data arranged as follows:
Rockman 5 (256K)
Rockman 1 (128K)
Duplicated Rockman 5 Data (120K)
Menu Program (8K)
Rockman 2 (256K)
Rockman 3 (256K)
Rockman 4 (512K)
Rockman 6 (512K)
CHR-ROM is probably a 4 Megabit / 512 Kilobyte ROM:
Rockman 5 (256K)
Rockman 3 (128K)
Menu CHR (8K)
Duplicated Junk Rockman 5 Data (120K)
The upper nibble of $5011 most likely sets address lines on the PRG-ROM. The lower nibble of $5010 probably affects the effective size of the PRG viewable to the MMC3, 128K/256K/512K.
Upper nibble on $5010 is probably bit 1 set CHR-RAM Enabled, clear CHR-ROM enabled. bit 0 is probably a CHR ROM size 128K/256K switch.
The upper nibble on $5012 is probably CHR-ROM address lines.
Again I haven't confirmed some of this but I'm pretty sure that most of it should be correct.
Retrieved the Menu CHR and confirmed the data ordering.
The cartridge needs 2048kB for PRG and 512kB for CHR. CHR won't be hard to add, since 27C401 will be okay for that, but PRG is harder, and since my EPROM programmer is not capable of burning EPROMs with more than 32 pins, it would be best if the PRG ROM gets splitted in even+odd parts to two 27C801 EPROMs.MottZilla wrote:On Powerup PP of $5010 is zeroed, BBB of $5011 also zeroed. This causes the first 512K of PRG-ROM to be seen by the MMC3 which puts the Menu program in control.
Code: Select all
REGISTERS: $5010 - Chip Config xxSC-xxPP S = Select CHR ROM/RAM 0 CHRROM. 1 CHRRAM. C = CHR-ROM Size 0 256K. 1 128K. PP = PRG-ROM Size 00 512K. 01 256K. 10 128K. $5011 - PRG Chunk 256K Base Select xBBB-xxxx BBB = Selects 256K Base of PRG-ROM for MMC3 to Use $5012 - CHR Chunk Base Select xxBB-xxxx BB = Selects 128K Base of CHR-ROM for MMC3 Only values 00 and 10 are used but bit 0 may be valid too.
$5011 really controls upper address lines on the PRG-ROM. $5010 controls address lines too, by deciding which ones the MMC3 can control and which ones it holds in a constant state to effectively set bounds for the ROM data seen by the MMC3.
That should cover most of the mapper and how it works.
Stuff about hardware. I'm not sure this is all exact as I'm no hardware expert.
A16 and Below Connect Normally to MMC3
A17 - HELD HIGH in 128K Size Mode, otherwise connects normally
A18 - Connects to MBR if Size isn't 512K. If it is then it connects to MMC3
A19 - Connects to MBR
A20 - Connects to MBR
MBR being Master Bank Register. It controls the upper PRG lines. The upper most 2 are always connected to the MBR. A18 is used in 256K and 128K PRG modes by the MBR. In 512K mode the MMC3 needs this as the ROM is 512K and needs that to switch between the first and last 256K of data. A17 connects normally to MMC3 unless the mode is 128K in which case its I think held high (+5v) so the lower 128K of the selected 256K block is all that is visible. This is used for Rockman 1.
I think all this is correct. CHR-ROM has a similar setup. I imagine you could built your own cartridge with a TxROM cart and additional hardware for the MBR.
I'm really looking for some easy (can be hand-drawn) schematics of this.
Lastly, for the link to the rom dump on that chinese website, click first result of this search or contact me via PM, as I don't want to post that link here. The chinese dump was emulated by CaH4e3's mapper-modified version of FCEU. My dump was emulated by MottZilla's personal unreleased emulator. The cartridges used by me and those chinese guys are the same.
And some of my findings:
Hex values in the chinese dump:
h00000000 - h0000003A
Rockman 5 PRG
h0000003B - h0004003A
h0004003B - h0006003A
Part of Rockman 5 data (h008010-h02600F of Rockman5 PRG)
h0006003B - h0007E03A
h0007E03B - h0008003A
h0008003B - h000C003A
Rockman 3 PRG
h000C003B - h0010003A
h0010003B - h0018003A
h0018003B - h0020003A
8bytes - UNIF's CHR header
h0020003B - h00200042
Rockman 5 CHR
h00200043 - h00240042
Rockman 3 CHR
h00240043 - h00260042
Menu CHR + some other garbage from Rockman5
h00260043 - h0028004B
UNIF something...probably end statement
h00280043 - h0028004B