A Flash cartridge for the Tiger game.com handheld.
Reference | Part | Link |
---|---|---|
U1 | M29F160FB5AN6F2 2 MB Flash | Digikey |
R1, R2, R3 | 10 kOhm Resistor (0805) | LCSC |
R4 | 4.7 kOhm Resistor (0805) | LCSC |
C1 | 100 nF Capacitor (0805) | LCSC |
Q2 | NPN Transistor (SOT-323-3) | LCSC |
The switch SW2 is not actually needed. Instead, just connect the two pads as shown in the picture.
Order the cartridge PCB with ENIG/gold plated, "gold fingers" and chamfered edges. Since, e.g., JLCPCB needs a minimum size for those features, you can find a panelized version which should fulfill those requirements.
A PCB thickness of 1.0 mm or 1.2 mm should work (1.0 mm works for me well, 1.2 mm is also successfully tested by somebody else). Original game.com cartridge PCB seem to have a thickness of 1.0 mm or slightly above. When ordering thickness of 1.0 mm, you most likely have to slightly adjust the cart edge connector of the flasher PCB (e.g., carefully bend all pins slightly a bit more towards the center to put more pressure on the contacts), as otherwise the PCB is too loose and does not make properly contact (though works without problems for me on the game.com device).
An initial version of a 3D printable case is inside the case folder. There are 2 "back part" versions. One which has a "lip" like the original case (harder to print with an FDM printer), and one which has "flap" which more FDM printer-friendly.
A regular game.com cartridge case should work, although the cases seem to have quite some tolerance. This means that some fit for me, some are too tight.
The Flash chip on the cartridge can be re-flashed using an Arduino Mega and a "flasher shield". Make sure to insert the cartridge PCB's side with the Flash chip oriented towards the marked "chip-side" on the flasher PCB.
Reference | Part | Link |
---|---|---|
U1 | RBB20DHHN Edge Connector | Digikey |
Can be found under the code directory. As a first step, program the Arduino Mega using the given .ino file and the Arduino IDE. You don't need to redo this step anymore.
A ROM file is flashed onto the cartridge by using the Python script flash.py
.
Make sure that you have Python installed. You also need the PySerial package.
The flash script can be used as follows:
flash.py ROMFILE COMPORT [MIRROR]
The parameter MIRROR
is optional an can be either TRUE
or FALSE
(by default it is turned off).
Enabling MIRROR
can be used to make "small" ROMs work (smaller than 2 MB).
This is due to the that those smaller cartridges do not have the uppper address lines connected.
Hence the content "repeats" from the view of the handheld and it seems that it relies on this.
As a "fix", I added the MIRROR
option to the flashing script which repeats the content of the ROM along the 2 MB.
E.g., Lights Out only has the lower 15 address lines connected (from a total of 21 address lines).
That means adress 0x0 will be the same as 0x8000, or 0x10000, etc.
My current guess is that the header is always checked at 0x40000, but just padding the header to that address is not enough.
Flashing a full 2 MB ROM currently takes around 15 minutes.
Use the files and/or schematics to build your own board at your own risk. This board works fine for me, but it's a simple hobby project, so there is no liability for errors in the schematics and/or board files. Use at your own risk.