Skip to content
vs-sr-devPublic

About

Emulator for the VTech MobiGo (2010), the GeneralPlus u'nSP learning handheld: drop a cartridge and play. Touch screen, keyboard and sound; every cartridge tried reaches its menus, several their games; the undocumented ADPCM36 sound format worked out from the cartridges. Bring your own dumps.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

24 Commits

Folders and files

Repository files navigation

MobiGoEmu

MobiGoEmu

An emulator for the VTech MobiGo (2010), a handheld learning console built around a GeneralPlus u'nSP system-on-chip.

MobiGoEmu is not affiliated with VTech. "MobiGo" is VTech's trademark and is used here only to say which console this emulates.

Status

Early work in progress: a window with sound, the touch screen, the keyboard and the pad.

  • The u'nSP CPU core is checked against MAME on about 30,000 single-instruction tests (docs/CPU.md).
  • The system ROM boots through the VTech and MobiGo logos to "Please insert a cartridge".
  • The slide-out keyboard, the touch screen, the pad and the Enter, Exit and Help buttons work. All six cartridges tried so far take a name and reach their title screens and main menus, some of them their games: Chuggington (GER), Disney Planes (GER), Ben 10 Ultimate Alien (GER), Disney Mickey Mouse, Disney Jake and the Neverland Pirates (English), The Penguins of Madagascar - Mission Madness (English).
  • The save EEPROM sits in the console and is shared by every cartridge; the window keeps it in a file.
  • Sound: the 32-voice wavetable SPU, with the ADPCM36 format worked out from the cartridges' samples. A third of its 30 prediction filters are measured exactly; the others are estimates, so some sounds may come out slightly off until they can be checked against a real console.
  • Still to come: the Spanish system ROM (it waits on a device not emulated yet).

See docs/RECON.md for what is known about the hardware and TODO.md for the plan.

Bring your own dumps

This repository contains no BIOS, game code or cartridge data, and never will. You need dumps of a console and cartridges you own.

File Size CRC32 SHA-1 Notes
MobiGo system ROM 8 MiB 49479bad 4ee82c7ba13072cf25a34893cf6272f2da5d8928 firmware with built-in content
MobiGo system ROM (Spanish) 2 MiB 462b4f9d 1541152f1a359bc18de4d4f3d5038a954c9a3ad4 smaller firmware revision

Cartridges are 16 MiB images and are identified by the CRC32 values in MAME's mobigo_cart software list.

Build

MSYS2 MinGW 64-bit with mingw-w64-x86_64-gcc, mingw-w64-x86_64-cmake and mingw-w64-x86_64-ninja:

cmake -S . -B build -G Ninja
cmake --build build

With mingw-w64-x86_64-SDL2 installed the build has a window; without it, only the headless runner.

Running

build/mobigoemu opens a window: drop a cartridge on it (.bin, or a .zip with one), or click to choose one. The system ROM is looked for as mobigo.bin or MAME's mobigo.zip beside the program, beside the cartridge or in its parent folder, else the program asks for it once and remembers it in mobigoemu.ini. The console's save EEPROM is kept in saves/mobigo.eep (one for all cartridges, as on the console).

MobiGo PC
Touch screen the mouse (left button is the pen)
Pad arrow keys, or a game controller's pad or stick
Enter button Right Ctrl, keypad Enter or keypad 0; controller A or Start
Exit button Esc; controller B or Back
Help button F1; controller X or Y
Keyboard the letters, Enter, Backspace, Space, Caps Lock; Tab is the symbol key, Num Lock the number lock, Home and End the cursor keys, / the Help key; the digit keys play Num Lock and the key of the top row

Toolbar

Since the mouse is the pen and every part of the screen takes touches, the toolbar stays out of the way. It shows for a few seconds at startup and whenever the console is paused. Otherwise it comes up when the pointer reaches the top edge of the picture, and goes away shortly after the pointer leaves it. Only its buttons take clicks; the rest of the bar still works as the pen.

Button Key
cartridge Ctrl+O open a cartridge (or drop it on the window)
pause F8, Pause pause and resume
reset F5 restart the console (the cartridge stays)
camera F12 screenshot, in screenshots/
1x / 2x ... Ctrl+plus, Ctrl+minus window size
full screen F11, Alt+Enter full screen and back
speaker, slider mute, volume (the mouse wheel works on them too)

Ctrl+Q quits. The volume and the window size are remembered in mobigoemu.ini.

Headless runner

For reverse engineering, --frames runs without a window and reports where the CPU spends its time:

build/mobigoemu mobigo.bin --frames 600 -v
build/mobigoemu mobigo.bin cartridge.bin --frames 1200 --screenshot shot.png

Input for the headless runner is scripted by frame number: --type samu@420 types a name, --tap 160,190@620 touches the screen (--tap X0,Y0-X1,Y1@F+N drags), --key enter@700 presses a key (up, down, left, right, ok, exit, help, the letters, enter, space...; all names in src/mobigo.c), --shot 900 menu.png saves a frame, --wav sound.wav records the sound and --eeprom console.eep keeps the saves between runs.

Development

tools/unsp_dis.py is a small u'nSP disassembler used for the reverse engineering work:

python tools/unsp_dis.py mobigo.bin 0xF000 64

Addresses are in 16-bit words; word N is at byte 2*N in the image.

Thanks

To AustinRichardson29, who preserved MobiGo cartridges on the Internet Archive, including the German titles this work was tested with.

Licence

MIT. See LICENSE.

About

Emulator for the VTech MobiGo (2010), the GeneralPlus u'nSP learning handheld: drop a cartridge and play. Touch screen, keyboard and sound; every cartridge tried reaches its menus, several their games; the undocumented ADPCM36 sound format worked out from the cartridges. Bring your own dumps.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages