Difference between revisions of "Sachen Mappers"
(Created page with "Several Sachen Mappers are thought to exist. {| class="wikitable" style="width: 30%;" !style="width: 50%;" | Name !style="width: 50%;" | Comment |- |Sachen MBC1 |MBC for mono...") |
(split pages up) |
||
(33 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
− | + | __TOC__ | |
+ | |||
+ | Sachen manufactured unlicensed Game Boy and Game Boy Color games from ~2000 until 2007. | ||
+ | |||
+ | Two Sachen Mappers are thought to exist. Both exist in a stand-alone variant -- just the mapper under glob top -- and an integrated variant -- mapper and ROM are under the same glob top on the PCB. | ||
{| class="wikitable" style="width: 30%;" | {| class="wikitable" style="width: 30%;" | ||
Line 5: | Line 9: | ||
!style="width: 50%;" | Comment | !style="width: 50%;" | Comment | ||
|- | |- | ||
− | | | + | |[[Sachen MMC1]] |
− | + | |MMC for mono 4B games. | |
− | |||
− | |||
− | |MMC for mono 4B games | ||
− | |||
− | |||
− | |||
|- | |- | ||
− | |Sachen | + | |[[Sachen MMC2]] |
− | |MMC for color | + | |MMC for mono/color 1B games. |
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | MMC for color 4B games. | |
− | + | MMC for color 6B games. | |
− | + | MMC for color 8B games. | |
− | + | MMC for color 16B games. | |
− | + | MMC for color 31B games. | |
− | + | |} | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | = Notes = | |
− | + | == 0x6000 - 0x7FFF == | |
− | + | Writing to the 0x6000-0x7FFF range did not affect mapping in any way. I did an exhaustive test. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<pre> | <pre> | ||
− | + | for (k= 0x0000; k < 0x2000; k++) { | |
− | + | for (l = 0x00; l < 0x100u; l++) { | |
− | + | // reset to base RB 0x00 with mask 0x00 here | |
− | |||
− | |||
− | + | // map RB 0x04 with mask 0xFC | |
+ | writeb(0x2000u, 0xFFu); // enable map regs | ||
+ | writeb(0x0000u, 0x04u); // base RB | ||
+ | writeb(0x4000u, 0xFCu); // mask | ||
+ | writeb(0x6000 | k, l); // see if this does anything | ||
+ | writeb(0x2000u, 0x00u); // disable map regs | ||
− | + | //check RB 0x00 - RB 0x04 against known hashes and report error | |
− | + | } | |
− | + | } | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
</pre> | </pre> | ||
− | + | == 0xA000 - 0xBFFF == | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | = | ||
− | + | Reading from this range produced no results. | |
= Miscellaneous Information = | = Miscellaneous Information = | ||
Line 137: | Line 57: | ||
Too bad Sachen screwed up (on 4B-007 at least) and actually writes the base RB to the mask register and the mask to the base RB register, thus all games having broken masking. But due to power-of-2 sizes of RBs and masks, it turns out that only a few extra RBs are mappable which shouldn't be instead of the games skipping ROM banks. | Too bad Sachen screwed up (on 4B-007 at least) and actually writes the base RB to the mask register and the mask to the base RB register, thus all games having broken masking. But due to power-of-2 sizes of RBs and masks, it turns out that only a few extra RBs are mappable which shouldn't be instead of the games skipping ROM banks. | ||
− | I noticed that the Sachen logo check -- VRAM comparison of Sachen logo starting at 0x8010 -- was disabled in the mapped games. I also noticed that games do write to 0x0000-0x1FFF while being mapped, so this may have some effect | + | I noticed that the Sachen logo check -- VRAM comparison of Sachen logo starting at 0x8010 -- was disabled in the mapped games. I also noticed that games do write to 0x0000-0x1FFF while being mapped, so this may have some effect. Technically, since A15..A6, A4, A1, A0 are connected, there might be many registers mapped. Initial tests show this not to be the case. |
[[Category:DMG]] | [[Category:DMG]] |
Latest revision as of 23:50, 15 February 2018
Sachen manufactured unlicensed Game Boy and Game Boy Color games from ~2000 until 2007.
Two Sachen Mappers are thought to exist. Both exist in a stand-alone variant -- just the mapper under glob top -- and an integrated variant -- mapper and ROM are under the same glob top on the PCB.
Name | Comment |
---|---|
Sachen MMC1 | MMC for mono 4B games. |
Sachen MMC2 | MMC for mono/color 1B games.
MMC for color 4B games. MMC for color 6B games. MMC for color 8B games. MMC for color 16B games. MMC for color 31B games. |
Notes
0x6000 - 0x7FFF
Writing to the 0x6000-0x7FFF range did not affect mapping in any way. I did an exhaustive test.
for (k= 0x0000; k < 0x2000; k++) { for (l = 0x00; l < 0x100u; l++) { // reset to base RB 0x00 with mask 0x00 here // map RB 0x04 with mask 0xFC writeb(0x2000u, 0xFFu); // enable map regs writeb(0x0000u, 0x04u); // base RB writeb(0x4000u, 0xFCu); // mask writeb(0x6000 | k, l); // see if this does anything writeb(0x2000u, 0x00u); // disable map regs //check RB 0x00 - RB 0x04 against known hashes and report error } }
0xA000 - 0xBFFF
Reading from this range produced no results.
Miscellaneous Information
Too bad Sachen screwed up (on 4B-007 at least) and actually writes the base RB to the mask register and the mask to the base RB register, thus all games having broken masking. But due to power-of-2 sizes of RBs and masks, it turns out that only a few extra RBs are mappable which shouldn't be instead of the games skipping ROM banks.
I noticed that the Sachen logo check -- VRAM comparison of Sachen logo starting at 0x8010 -- was disabled in the mapped games. I also noticed that games do write to 0x0000-0x1FFF while being mapped, so this may have some effect. Technically, since A15..A6, A4, A1, A0 are connected, there might be many registers mapped. Initial tests show this not to be the case.