DS994a
A Texas Instruments TI99/4a Emulator for the DS/DSi. Parsec, Alpiner, Tunnels of Doom and Hunt the Wumpus - all the classic TI games the way you remember them on your venerable handheld.
Install / Use
/learn @wavemotion-dave/DS994aREADME
DS99/4a
DS994a is a Texas Instruments TI99/4a Emulator for the DS/DSi/XL/LL
To run requires the TI BIOS ROMS in the /roms/bios or /roms/ti99 directory. See BIOS files further down for the ones you need.

Features :
- Games and programs run at or near full speed across the spectrum of DS hardware (though the emulator targets the DSi / XL for optmium performance)
- Cart loads up to 8192K (8MB) on the DSi and 512K on the DS using standard TI99 bankswitching (+40K of GROM beyond the 24K Console GROM)
- Mixed mode C/D/G/8/9 files supported as well as the MESS/MAME .RPK (Rom PacKs) format
- 32K RAM Expansion built-into the base console emulation
- SAMS at full 1MB/2MB/4MB or 8MB for the DSi (and above) and 512K for the older DS/DS-Lite units
- MBX, Mini-Mem and Super Carts supported with extra RAM. Use Options to select cart type
- Save and Load State (one slot per game)
- High score saving for up to 10 scores per game
- Full mapping of any of the 12 DS keys to any combination of TI Joysticks/Keyboard
- Virtual TI-99/4A keyboard with classic stylings just the way you remember it
- Disk Support for DSK1, DSK2 and DSK3 up to 360K each using the standard TI Disk Controller (you need 994adisk.bin - see BIOS files below)
- p-code card emulation supported
- Favorites system to mark games as 'like' (yellow heart) or 'love' (red heart).
- True-Sync reduces video output tearing when playing NTSC games at 60Hz
- The TI Speech Synth is not fully emulated - but there are built-in speech samples for the following games: Parsec, Alpiner, Moonmine, Buck Rogers, Star Trek, MASH, Bigfoot, Superfly, Microsurgeon, Fathom, Sewermania, and Borzork.
Copyright :
DS99/4a is Copyright © 2023-2026 Dave Bernazzani (wavemotion-dave)
This program is made up from a number of constituent bits and pieces of code from other emulators plus a lot of original code to glue it all together and run it on the DS. As such, the following copyrights apply:
The SN76496 sound core is from FluBBa and is used with permission.
The lowzip library and yxml parser are used following the generous MIT licences they were released under.
The TI9918A code came from Marat Fayzullin (ColEM) and retains Marat's original copyright statement. Do not use any of that code without trying to contact Marat.
The TI9900 CPU core is mainly my own with some significant bits of scaffolding from Tursi's Classic99 emulator - especially in the status bits handling and some of the more tricky opcode algorithms so they run correctly. This is used with permission and with great thanks!
For the rest of the code: as long as there is no commercial use (i.e. no profit is made), copying and distribution of this emulator, its source code and associated readme files, with or without modification, are permitted in any medium without royalty provided this copyright notice is used and wavemotion-dave is thanked profusely.
The DS99 emulator is offered as-is, without any warranty.
Credits :
- Thanks to Alekmaul who provided the original Coleco emulator framework of which this is based.
- Thanks to Flubba for the SN76496 sound core (virtually the same as the TI9919 sound chip).
- Thanks to Marat Fayzullin (ColEM) for the TI9918A video driver.
- Thanks to Tursi (harmlesslion) for Classic99 and letting me use some of the disk and CPU core code plus some helpful consults.
- Thanks to Pete Eberlein for his help debugging and some great ideas and a bit of code from his upcoming BuLWiP emulator.
- Thanks to ti99iuc over on AtariAge for the original DS99/4a logo and to StephenJ for the updated 2.0 logo.
- Thanks to Darryl Hirschler for the TI99 Keyboard Graphics.
- Thanks to the 99ers over on the AtariAge site for their help in grokking memory layouts and banking schemes as well as testing and providing feedback.
Installation :
- To run this on your DS or DSi (or 2DS/3DS) requires that you have the ability to launch homebrews. For the older DS units, this is usually accomplished via a FlashCart such as the R4 or one of the many clones. These tend to run about US$25. If you have a DSi or above, you can soft-mod your unit and run something like Twilight Menu++ or Unlaunch which will run homebrew software on the DS. The DSi has a convienent SD card slot on the side that saw very little use back in the day but is a great way to enjoy homebrews. See https://dsi.cfw.guide/ to get started on how to soft-mod your unit.
- You will need the two console BIOS files as described below. Place both .bin BIOS files into /roms/bios (you can just make the directory on your SD card).
- You will also need the emulator itself. You can get this from the GitHub page - the only file you need here is DS994a.nds (the .nds is a executable file). You can put this anywhere - most people put the .nds file into the root of the SD card.
- If you want to play disk based games (Adventure, Tunnels of Doom, etc) you will need 994adisk.bin (often just named disk.bin but you need to rename it and put it into /roms/bios).
- You will need games to play... right now the emulator supports C/D/G files plus '8' non-inverted files and '9' inverted files. Basically just try loading a file to see if it works... the ROMs should have a .bin extension.
- Recommend you put your game ROMs into /roms/ti99 as the emulator will default to that directory.
- Recommend you put any disk files needed in a directory easily accessible (near) where you store your rom files so it's a faster navigation.
BIOS Files :
Here are the BIOS file CRC32 hashes I'm using with all of my testing - seek these out if you want maximum compatibility.
* db8f33e5 994aROM.bin (8K)
* 584b3dca 994aGROM.bin (24K) [a CRC of af5c2449 is also acceptable]
* de1f2e25 994aDISK.bin (8K) [a CRC of 8f7df93f is also acceptable] - for .DSK support
BIOS files should be placed in either /roms/bios (recommended - that's where the cool kids keep them) or /roms/ti99 or they can be put in the same directory as your game ROMs. Do not ask me for BIOS files - you will be ignored.
Known Issues :
- TI Speech Module is not fully supported. Games that rely on the module will still play fine - and many of the classic games have speech samples built into the emulator and will play and sound just as you remember them (e.g. Alpiner, Parsec, Moonmine, etc)
- MBX-only games (Championship Baseball, I'm Hiding and Terry's Turtle Adventures) will not run as the full MBX system is not emulated (other MBX-optional titles with 1K of RAM work fine: e.g. Bigfoot, Superfly, etc).
- Super Cart RAM (mapped in at >6000) works fine but is not persisted (i.e. it's not "battery backed"). However, if you Save/Restore state, that RAM will be preserved/restored.
- Save/Restore state will not save the mounted state of the disk drives... so before you restore a game that uses disk access, be sure to mount any disks you need.
File Types Supported :
DS994a supports the following file types:
- Files whose base filename ends in C/D/G files also known as 'mixed mode'. If there is a 'D' file, it must be exactly 8K. C is the main binary and G is the GROM binary. If a C/D/G file is detected, only the C (or G if it's GROM-only) will be shown in the file listing.
- Files whose base filename ends in '9' or '3' are considered "inverted" files and the banks will be swapped appopriately.
- Files whose base filename ends in '0' is considered a system GROM and can be used to replace the standard console GROMs (e.g. Son of Board).
- All other files are considered '8' files which is non-inverted banking up to 8192K (8MB) for the DSi and up to 512K for the older DS hardware.
- There is a limit of 512 ROM files per directory and 256 DSK images per directory. You can have as many directories as you wish.
- Filenames are limited to 128 characters. Shorten your ROM filenames if you run into this.
- As of version 2.0, the MAME/MESS .rpk (ROM PacK) format is also supported - these are single file archives that contain the ROMs and a layout.xml file that describes where the ROMs get loaded and how any banking might work.
- As of version 2.4, any cartridge filename that ends in _cru just before the .bin extension will be considered a Paged CRU cart type (a handful of the original Databiotics carts used this scheme).
If you wish to associate a .dsk file with your cart (e.g. Adventure or Tunnels of Doom, etc.) you can name the .dsk files with the same base name as the cart and replace the C/D/G/8 with 1, 2 or 3.
For example, for Tunnels of Doom you might have:
- TunnelsOfDoom_g.bin - The Tunnels of Doom GROM cart
- TunnelsOfDoom_1.dsk - The Tunnels of Doom disk mounted as DSK1
When you load Tunnels of Doom, it will automatically mount TunnelsOfDoom_1.dsk
For something like Realms of Antiquity you can have:
- roa_8.bin - The 256K cart
- roa_1.dsk - The first disk to mount as DSK1
- roa_2.dsk - The second disk to mount as DSK2
- roa_3.dsk - The third disk to mount as DSK3
(the underscores are just a personal preference of mine as I find it makes the filenames look cleaner and more clear. It's not required by the DS99/4a emulator)
RPK files can also have associated .dsk files - just use the same base filename and add 1.dsk or 2.dsk For example:
- Adventure.rpk
- Adventure1.dsk
Configuration :
There are two levels of configuration:
- Global Configuration sets defaults for all games - though most things can be overridden at the individual game level.
- Game Configuration is specific to the game you've loaded.
Be sure to use the START button to save out your configuration options so they persist on future launches of the emulator.

Emulated Disk Drives :
DS994a will support 3 Disk Drives all at up to 360KB as DSK1, DSK2 and DSK3. On the DSi, al
Related Skills
node-connect
345.4kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
104.6kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
345.4kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
345.4kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
