Give to your MSX Cartridges a new life

Brief History

MSX GAME READER was a device released in 2004 in Japan by ASCII. It was a MSX cartridge reader with an usb interface to connect it to Windows XP/Windows 2000 and use it with MSX emulator called MSXPlayer. Sunrise released a clon in Europe with the same features.

MSXPLAYER and the driver for MSX GAME READER had some problems:

BlueMsx emulator gave support for this device for Windows XP/2000 using some dll from original driver, so it has the same problems. Also some dumper code was released but you need to say what kind of cartridge and mapper to dump each one, and it is using the original dll from the original driver so the same problem again.

Some additional info from wiki

Reversing MSX GAME READER device

Steps for reversing:

Get the device

I got the device from Japan last August 6th.

Get USB traffic

Using a virtualbox Windows XP guest and an usb sniffer(a trial version from usblyzer for example), we can dump a working session loading cartridges. We will use it later to understand how the magic is done :P

Reverse driver decompiling code and using USB traffic dump to check

Original driver is done using WINDRIVER WINDRVR6 libraries from Jungo

There are 2 dlls interesting for our job. Ghidra or IDA can help you in this task.

First traces, until 12 usb sequence, are initializing driver basic stuff. Then AnalyzeRomType is called from GrDriver.dll. This function try to get what kind of mapper has the cartridge using MSXGR_WriteMemory and MSXGR_ReadMemory functions. These 2 functions are in MSXGR.dll and they speak directly with device sending/receiving a control transfer (read or write address and size) and a bulk transfer to send and receive the data. You can follow very well the usb traffic with decompiled code from this function.

Open source implemention unix/windows

msxGameReader repository

PlayStation support with new MSX Orbis Infinity