Skip to content

veesem - RetroBIOS

Type standalone
Classification Other
Source https://github.com/sp1187/veesem
Version 0.2
Profiled 2026-08-08
Cores veesem
Systems vtech-vsmile
Source analysis

user_supplied_paths:

- **note:** Named on the command line, with no fixed filename
**entries:**

- what: cartridge ROM, the positional argument, source_ref: src/main.cc:119-126, src/ui/ui.cc:180-187, note: Read into a 4M-word buffer and mapped over ROMCSB, CSB1 and CSB2 (vsmile.cc:168-190). The dual-ROM cartridges pair a 4 MiB ROM on the first two banks with a 2 MiB ROM on CSB2, which the code reads from the same dump at word 0x200000.

- what: system ROM, -sysrom, source_ref: src/main.cc:64-70, src/ui/ui.cc:189-197

generated_files:

  • what: Art Studio CSB2 NVRAM, -art-nvram FILE, source_ref: src/main.cc:71-77 (flag), src/ui/ui.cc:206-221 (read), src/ui/ui.cc:153-170 (write), note: Save data rather than a dump to obtain. The 128K-word buffer is allocated before the stream is tested (ui.cc:210-211), so an absent or unreadable file leaves a blank NVRAM, and -art on its own selects the same cartridge type with no file at all (ui.cc:218-220). It backs the drawing area of V.Smile Art Studio (vsmile.cc:180-196) and is flushed to the same path when the machine is unloaded.

settings_storage:

- **source_ref:** src/ui/ui.cc:126
- **note:** io.IniFilename is nullptr, so Dear ImGui reads and writes no imgui.ini. Every setting comes from the command line or the UI, and no other path in the tree is opened.
Technical notes

V.Smile emulator written from scratch on top of a SunPlus SPG200 (unSP) implementation, distributed as source only. No distribution packages it; ES-DE offers it for its vsmile system beside MAME and the MAME libretro core, and finds it by the binary name or the com.github.sp1187.veesem flatpak.

The system ROM has no fixed name and no search path. -sysrom takes a path (main.cc:64-70) which is opened directly (ui.cc:191), and the open is the only check the tree performs: the read asks for sizeof sysrom, the 10241024-word buffer of vsmile.h:17, so a shorter file keeps the zeros the buffer was value-initialised with and anything past 2 MiB is never reached. No size test, no hash, no signature anywhere. Every word is passed through SDL_SwapLE16 after the read (ui.cc:196-197), so the image is consumed as little-endian 16-bit words.

Without -sysrom the buffer is synthesised instead: zero-filled, with 0x31 written into the odd word of each pair over 0xFFFC0-0xFFFDB, called a "game-compatible dummy system ROM" in the code (ui.cc:198-204) and a "dummy ROM without boot animation" in the README.

Nothing boots from the system ROM. Extmem::Reset leaves address_decode at 0 (extmem.cc:7-10), routing every external address to ROMCSB, and bank 0 stays the cartridge under all three decode modes (extmem.cc:20-52). The CPU takes its reset vector from 0xfff7 (cpu.cc:91), FIQ from 0xfff6, IRQs from 0xfff8+n and BREAK from 0xfff5 (cpu.cc:116,125,228), all inside bank 0, so the vectors always come from the cartridge. The system ROM sits on CSB3 (vsmile.cc:198-200), reachable at 0x300000-0x3FFFFF only once cartridge code selects decode mode 2 or 3.

Region is a jumper, not a file. The low nibble of Port C carries the region code and bit 4 the VTech logo jumper (vsmile.cc:148-152), defaulting to 0xe with the logo on (main.cc:44-45) and settable with -region and -novtech. One system ROM image serves every region; the table at vsmile.cc:3-25 maps the sixteen jumper values to the intro each revision produces, and names revisions 1.00, 1.02 and 1.03.

3 files | 0 required, 3 optional | 3 in repo, 0 missing | 3 with HLE fallback

vsmile_v103.bin optional in repo HLE fallback
V.Smile system ROM, revision 1.03

vsmile_v102.bin optional in repo HLE fallback
V.Smile system ROM, revision 1.02

vsmile_v100.bin optional in repo HLE fallback
V.Smile system ROM, revision 1.00

Generated on 2026-08-23T16:12:06Z