Libre99 — 99 on a chip
Libre99 LIBRE99

A TI-99/4A emulator in pure Rust — with original clean-room firmware, its own assembler and GPL toolchain, and original games. Runs on Windows, Mac, and more. Zero borrowed bytes.

VIEW ON GITHUB SEE IT RUN

Every layer is original work, and every layer stands on the one below it — silicon to firmware to compiler to game.

THE MACHINE

Every major chip, emulated: TMS9900 CPU, TMS9918A video, SN76489 sound, TMC0430 GROMs, TMS9901/CRU keyboard, FD1771 disk. Beam-accurate scanlines, authentic noise LFSR, hardware-true GROM prefetch.

CLEAN-ROOM FIRMWARE

An original console ROM and GROM boot by default — no TI code anywhere. Differentially verified against the real machine's behavior. Extended BASIC cartridges run on it end-to-end.

THE TOOLCHAIN

libre99asm — a two-pass TMS9900 assembler, .ctg cartridge packager, and disassembler covering all 69 base opcodes. libre99gpl — a GPL assembler/disassembler and console-GROM build harness.

ORIGINAL GAMES

Titris (falling blocks), Sokoban (12 credited Microban levels, with undo), and Jaywalker 99 (an endless hopper) — authored with the project's own assembler, running on its own firmware, in its own emulator.

Native 256×192, pixels intact. Everything below is original Libre99 content, drawn by the clean-room firmware and the project's own cartridges.

Libre99 master title screen
Boots to its own title screen — original firmware, not TI's.
Console selection menu
The clean-room console menu — press a number to begin.
TI PYTHON interpreter prompt on Libre99
TI PYTHON — an original Python-flavored interpreter, built into the firmware where TI BASIC lived.
Titris gameplay
Titris — an original cartridge, assembled with the project's own libre99asm.
Sokoban gameplay
Sokoban — 12 credited Microban levels, with undo. Built end-to-end with the project's tools.
Jaywalker 99 gameplay
Jaywalker 99 — an endless hopper working 24 sprites and all four sound voices.
System information screen
Every chip, accounted for. The system-info screen names the hardware it emulates.

Libre99 ships no TI firmware and no commercial cartridges. Your own .ctg and .dsk files mount at run time — these historical shots show user-supplied cartridges running on the emulator.

Parsec title screen running on Libre99
Parsec, loaded at run time. Not distributed with Libre99.
Tunnels of Doom title screen running on Libre99
Tunnels of Doom — bring your own .ctg files.

ORIGINAL FIRMWARE

Most emulators need the manufacturer's copyrighted ROMs. Libre99 doesn't. Its console ROM and GROM are clean-room work, verified against the authentic machine's behavior — never its code.

ZERO THIRD-PARTY BYTES

The shipped binary carries no one else's bytes. Cartridges and disks load at run time from your own files, and the public repository's history is IP-clean back to commit one.

AUTHENTIC ROMS OPTIONAL

Have real TI firmware? It's one flag away: --system-rom / --system-grom — needed only for TI BASIC itself.

AUTOMATED TESTS
CARTRIDGE COMPAT SWEEP
CORE DEPENDENCIES
UNSAFE CODE

Cross-checked against Classic99, the hardware-verified reference emulator · #![forbid(unsafe_code)] · Windows + macOS

Runs on multiple operating systems, including Windows and Mac. Nothing to install but a Rust toolchain — clone the repo, then:

# Boots the bare console to the master title screen.
cargo run --release -p libre99-app

# Mount your own cartridge or disk:
cargo run --release -p libre99-app -- --cartridge my.ctg
cargo run --release -p libre99-app -- --disk vol.dsk
VIEW ON GITHUB

Version 0.1.0 — testers welcome. Write joel@libre99.com.

Modified MIT License with Commons Clause — source-available; the right to sell is reserved.