TIC-80
TIC-80 is a free and open-source fantasy computer by Nesbox for making, playing and sharing tiny games under strict 8-bit-style limits. It includes built-in code, sprite, map, music and SFX editors and supports many scripting languages including Lua, JavaScript, Fennel, Wren and WebAssembly, with a Pro paid tier adding extra features.
Runs on: Windows, macOS, Linux, Web browser, Raspberry Pi
TIC-80 Online Emulator
Play TIC-80 using JavaScript directly in your browser.
Controls
Configurations
| Configuration | Emulator | Machine | OS | Legal | |
|---|---|---|---|---|---|
| FPS80 | TIC-80 | TIC-80 | open | Open ⛶ | |
| Hello TIC-80 | TIC-80 | TIC-80 | open | Open ⛶ |
Machines emulated
Chips
Notes
Sound
Sound is a native-pipeline (Pattern V-native) integration. TIC-80's Emscripten/SDL2 web build runs its own WebAudio graph: it lazily creates Module.SDL2.audioContext and wires Module.SDL2.audio.scriptProcessorNode straight to that context's destination. The site does not reroute this through the shared EmuAudio sink, and /debugger/src/audio.js is not loaded — the emulated 4-channel synth already produces real samples through SDL2.
The page must start silent until the visitor asks for sound, but SDL2 auto-resumes its context on any gesture anywhere on the page. To keep control we splice a GainNode between the core's scriptProcessorNode and the destination, hold it at 0 while muted, and run a ~300 ms guard that re-asserts silence (and re-splices the gain once SDL2 lazily opens audio) so a stray click never leaks sound:
function setMute(m){
_muted = !!m; audioWire();
_gain.gain.value = _muted ? 0 : 1;
_muted ? Module.SDL2.audioContext.suspend()
: Module.SDL2.audioContext.resume();
}
The mute contract lives on window.EMU_BOOT.transport as isMuted()/setMute(m); it starts muted, so the console is inaudible until the shell's Sound button is clicked. That real click both satisfies the browser's audio-gesture rule and calls setMute(false), which sets the gain to 1 and resume()s the context.
Mute and the demo cart. Sound is fully supported and plays when the cart makes it; the page starts muted, so click Sound to hear it. The bundled Hello TIC-80 cart is a placeholder that drives the sound chip directly: each TIC() frame it pokes TIC-80's channel-0 sound register at 0x0FF9C — a 12-bit frequency plus a 4-bit volume, followed by the channel's own 32×4-bit waveform (a square wave) — stepping through a short melody. It should be replaced with a real, freely-licensed TIC-80 game (many exist) or a full-capability demo.