A Chip8 IDE
Branch: gh-pages
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
css Added the ability to tip your TV on its side. Portrait-mode games, he… Sep 18, 2016
docs checking in a new example game: slippery slopes. Nov 21, 2018



Title Image

Octo is a high-level assembler for the Chip8 virtual machine, complete with an environment for testing programs. The Chip8 keypad is represented on your keyboard as follows:

Chip8 Key   Keyboard
---------   ---------
 1 2 3 C     1 2 3 4
 4 5 6 D     q w e r
 7 8 9 E     a s d f
 A 0 B F     z x c v


General information:

Third-party tools and references:

Third-party games, programs and libraries:

If you've built a project on, with, or for Octo and you'd like to have a link added to this list, submit a pull request!

Command Line Mode

The Octo assembler can also be used as a command-line tool via a Node.js frontend:

$ ./octo
	usage: octo [--decompile] [--roundtrip] [--qshift]
		[--qloadstore] <source> [<destination>]
$ cat simple.8o
	: main
		va := 1
		vb := 2
$ ./octo simple.8o simple.ch8
$ hexdump simple.ch8
	0000000 6a 01 6b 02                                    

The --decompile option can be used to send an existing Chip8 binary through Octo's general-purpose decompiler.

Sharing Your Programs

Octo has a share feature which stores source code and configuration metadata and produces a URL you can share with others. By default, Octo stores programs in its own backend, indexed based on a key. Alternatively, you can store your program in a GitHub gist and specify a gist argument in the Octo URL. The example below demonstrates the structure Octo expects in a Gist.

You can also use the gist id or key to embed a Chip8 emulator in an iframe on your websites:


(Special thanks to rmmh.)

The scale argument is optional and specifies the number of pixels which should make up a high-resolution mode Chip8 pixel. Low-resolution mode pixels will be twice this size.


Octo, along with all its associated documentation, examples and tooling, are made available under the MIT license. See LICENSE.txt for additional details. If for any reason this is insufficiently flexible or permissive for some application, please contact John Earnest with your request. Contributions to this repository are welcome, with the understanding that they will fall under the same licensing conditions.