The Bizarre AGB-X
A number of years ago, I came across an oddity from a Hong Kong gadget shop. It is a rather convincing clone of a Nintendo GBA. However, in lieu of a working link cable port, it ships with with a cable which runs the odd looking port to USB. It mounts as a USB mass storage device in Windows, and can run roms natively OR run games directly off the cartridge.
Interestingly enough save games always save to the internal memory and not the cartridge’s memory.
It has a number of advantages over the the original gameboy advance it is modeled after besides the fact that it can run roms as well as cartridges. It’s backlit. It ships natively with a rechargeable battery and charges off of USB.
I had acquired a USB cartridge dumper for gameboy advance games and had been mucking about with playing them on the GCW Zero, when I decided to dust off this thing.
1) The odd thing runs GNU/Linux.
2) Being read by modern GNU/Linux systems crashes it hard. However it mounts fine under Windows 7.
lsusb output for the device:
Bus 002 Device 061: ID 0525:a4a5 Netchip Technology, Inc. Linux-USB File Storage Gadget
dmesg output for the device:
[550917.345573] usb 2-1.2: new high-speed USB device number 13 using ehci-pci [550917.534230] usb 2-1.2: New USB device found, idVendor=0525, idProduct=a4a5 [550917.534236] usb 2-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [550917.534240] usb 2-1.2: Product: File-backedStorag [550917.534242] usb 2-1.2: Manufacturer: 323820474077 [550917.534245] usb 2-1.2: SerialNumber: 323820474077 [550937.522677] usb-storage 2-1.2:1.0: USB Mass Storage device detected [550937.522811] usb-storage 2-1.2:1.0: Quirks match for vid 0525 pid a4a5: 10000 [550937.522989] scsi20 : usb-storage 2-1.2:1.0 [550938.522693] scsi 20:0:0:0: Direct-Access AGB-X DISK PQ: 0 ANSI: 0 [550938.523295] sd 20:0:0:0: Attached scsi generic sg1 type 0 [550938.524140] sd 20:0:0:0: [sdb] 3829760 512-byte logical blocks: (1.96 GB/1.82 GiB) [550938.524751] sd 20:0:0:0: [sdb] Write Protect is off [550938.524758] sd 20:0:0:0: [sdb] Mode Sense: 00 06 00 00 [550938.525374] sd 20:0:0:0: [sdb] Asking for cache data failed [550938.525381] sd 20:0:0:0: [sdb] Assuming drive cache: write through [550938.654559] usb 2-1.2: USB disconnect, device number 13 [550938.661655] sd 20:0:0:0: [sdb] Unhandled error code [550938.661663] sd 20:0:0:0: [sdb] [550938.661668] Result: hostbyte=DID_NO_CONNECT driverbyte=DRIVER_OK [550938.661673] sd 20:0:0:0: [sdb] CDB: [550938.661676] Read(10): 28 00 00 00 00 00 00 00 08 00 [550938.661692] end_request: I/O error, dev sdb, sector 0 [550938.661698] Buffer I/O error on device sdb, logical block 0 [550938.661766] ldm_validate_partition_table(): Disk read failed. [550938.661806] Dev sdb: unable to read RDB block 0
The device reboots almost instantly after those last two dmesg lines. Presumably due to a crash.
Interestingly enough the device identifies itself as an “AGB-X” This is actually somewhat in line with Nintendo’s internal naming convention for the gameboy line. The whole gameboy advance series had model numbers beginning with “AGB” which stands for advanced gameboy.
Further investigation indicates that the NetChip USB ID the thing is using was donated for Linux USB development. It is some sort of place holder ID, not entirely meant for production. So the device likely runs some embedded GNU/Linux.
The only workable solution I have found to making the device usable in a modern GNU/Linux distro is to prevent the usb-storage module from loading for the device and instead access it from a Windows virtual machine in virtual box. Maddening, I know as usb-storage ought to be usable.
This is easily done as a two step process.
Create a /etc/udev/rules.d/hk-agbx.conf file containing the one line:
options usb-storage quirks=0525:a4a5:i
Then unload and reload the usb-storage moduled.
sudo rmmod usb-storage sudo modprobe usb-storage
You will immediately magically gain the ability to connect the device without it crashing hard and rebooting the handheld.
From that point on its just a matter of setting up a USB filter in VirtualBox for your virtual machine under Machine->Settings->USB. Screenshot below.
Booting it up with a few Roms in the GAMES folder reveals a serviceable UI complete with preview game screenshots. (Booting with a cartridge in the cartridge slots causes it to play the cartridge direct.)