r/ti994a • u/SixColorBleeder • May 01 '26
NEW Swift99a (Mac OS TI99/4a Emulator) now Open Source

A few of you saw the original announcement of Swift 99/a here. Quick update: it's now on GitHub under BSD-2, and the feature set has grown enough that I figured proper roundup was due.
GitHub: https://github.com/swryder/Swift-TI-99
It's a native macOS app — pure Swift / SwiftUI / AppKit / Metal, no third-party dependencies. macOS 14.6+. Everything below is implemented and working today; this isn't a roadmap.
Hardware
- TMS9900 CPU — full instruction set, workspace-pointer architecture, context switching, status-register lookup tables for hot-path performance
- TMS9918A VDP — Graphics I / Graphics II / Text 40-col / Multicolor Bitmap modes, 32 hardware sprites with collision detection, NTSC timing
- SN76489 PSG — three tone channels + noise, fractional clock accumulator for accurate pitch (the v1.2 fix some of you asked about)
- TMS5220 speech synthesizer, so Parsec talks
- TMS9901 — full CRU bit-addressable I/O for keyboard, joystick, DSR
Cartridges
- Raw `.bin` / `.rom` dumps with the standard `C/D/G` filename convention
- TiCart (`.ticart`) — Win994a-compatible
- Banking: standard 8KB, GROM-only, 378 / inverted 379, MBX
Disks (DSK1–DSK3)
- V9T9 disk images (`.dsk`, `.tidisk`)
- Full DSR with PAB protocol: open, close, **read**, **write**, delete, status, directory listing
- Variable + fixed-length records, FDR parsing, cluster management
- Saves stick. OPEN DSKn for directory listings works as of 1.3.
Niceties
- Monitor Mode — chromeless TI-99/4 bezel that drags from anywhere, transparent background so it sits on the desktop
- Clipboard paste— paste text from macOS straight into the TI as keyboard events
- Joystick via arrow keys, plus FCTN+number keyboard menu (CLEAR, BEGIN,
- PROC'D, AID, REDO, BACK, QUIT — the muscle memory ones)
- Live memory heatmap — 256×256 GPU-rendered view of the entire 64KB address space. Blue = reads, red = writes, with white-hot decay. Useful for understanding what the machine is actually doing.
- Real-time FPS / MHz overlays, 3 MHz authentic mode or uncapped (roughly as if original machine ran at ~60 MHz)
What's not in yet
PEB peripherals beyond disk and speech, save states, cassette (CS1/CS2), some obscure cart banking schemes. Issues / PRs welcome.
Why it exists
Companion to a LinkedIn article I wrote on how big projects scale in the AI era — the emulator was the working artifact: https://www.linkedin.com/pulse/complexity-conserved-how-do-big-things-ai-era-scott-ryder-zyybc/
ROMs and cartridge images are not bundled (bring your own — FinalGROM 99 and WHTech are the usual sources).
Curious what people break first.
1
u/Street_Firefighter_3 May 02 '26
I've been playing with it off and on for a few days and I'm thoroughly impressed! Now to dive into this version, which looks pretty awesome!
2
u/SixColorBleeder May 02 '26
Thanks. It was fun to do.
1
u/Street_Firefighter_3 May 04 '26
I'm astounded that the app is only 6.3 MB! I'm having way too much fun with it. I have hundreds of cartridge files and disks and so far the majority of them run quite well. Now if there was only a way to connect joysticks!
2
u/SixColorBleeder May 04 '26
What Joystick (gamepad) are you looking to use?
1
u/Street_Firefighter_3 May 04 '26
I just have a cheap no-name pair I use on the TI. I'm sure it would require a special joystick-to-USB device, though. Not a big deal, though. Keyboard control seems to work relatively well in most programs.
And thank you again for this! It's a blast getting back into TI stuff again. But I don't think I'll be doing any late-night keyboarding the way I did way back when!
1
u/Electronic_C3PO May 05 '26
How about one of those wireless Bluetooth game pads for Nintendo. You can buy copycats for about 20 euro or dollars. I picked one of those up for a remote esp32 car controller project for which I was going to build a separate esp32 controller. I even bought some of those joysticks. But then I found those complete controller controllers and to my amazement they register on a pc. I can use them for MAME. So not the original feel but maybe easier to implement a more convenient. Let’s be honest, the original TI joysticks were not fun to use. I bought myself in the day some arcade like ones and rewired them to work on TI.
2
u/SixColorBleeder May 04 '26
Also it's so small (even smaller if you don't build for both Apple Silicon and Intel) because it doesn't contain any outside code. So it doesn't have to carry all that bloat
1
u/Street_Firefighter_3 May 04 '26
Amazing! I never got heavily into programming. Did an awful lot of Extended BASIC stuff back in the '80s and built a word processor using that with Forth subroutines. 40 years later I found it on a Russian website! Downloaded it and managed to get it to work with FGROM. Not a great word processor, though.
1
u/Electronic_C3PO May 05 '26
Fantastic project. Thanks for open sourcing it. This could be the final push for me to upgrade my very old Intel MacBook Pro to some new Apple silicon stuff. And to pick up swift.
1
u/SixColorBleeder May 08 '26
Just uploaded v1.4 which adds Cassette support (Audio files of the actual tapes) and a bunch of other internal cleanups. Has a slight performance penalty vs. 1.3 in that the "uncapped mode" runs only a 19.5X faster (Rather than 20X) than the original machine on a Mac Book Air. But, I think that's an acceptable tradeoff for more compatibility.
No effect on normal mode other than I expect more software will work.
2
u/jgmiller24094 May 01 '26
Definitely going to have to try this out sounds amazing. It makes me very nostalgic and I'm shocked I was able to understand all of those terms still!