I dumped a Tama-Go mask ROM, pulled out of a Memetchi figure. I was able to recognize image data in the memory.
I removed the ROM from a figure, soldered wires to the pads and used the Arduino SPI library to dump the memory. This was a very slow process (the data transfer rate was a few hundred bytes per second running the library at max speed), and voltage dividers were needed to step down the voltage in order not to overload the memory. The first few attempts to dump memory resulted in heavily corrupted dumps, I suspect this was due to the Arduino having trouble reading data close to the input voltage threshold, as running the memory at a voltage closer to its maximum solved the problem.
The ROM dump contained many strings of 0×55, 0xAA and 0xFF. I suspected that these represented strings of identical pixels, as the Tama-Go uses a four-shade greyscale display, so pixels would be represented as two bits, and four identical pixels would be represented as 10101010 (0xAA), 01010101 (0×55), 11111111 (0xff) or 00000000 (0×00). Looking through the binary, I found an instance where a string of 5′s was preceeded by two values which seemed reasonable for width and height, and the string was exactly long enough to provide data for an image with that width and height.
I wrote a script to decode this image, and after a few decoding accidents, extracted an image.
I wrote a longer script to dump all the images on the ROM. There were about 7000 images, taking up about 60% of the 32MBit ROM.
These images give some interesting insight into how the Tama-Go works internally. For example, outside of user-generated data, text doesn’t appear to be stored as strings. All of the text displayed while using the figure was part of the images dumped.
Also, for every item in the game, there were images of every single Tamagotchi using it, for example, pictures of every Tamagotchi in the dress.
This makes me suspect that Tamagotchi programs aren’t very ‘smart’, and simply display bitmap images on the screen in sequence.