9 releases

Uses new Rust 2021

0.0.9 Jul 25, 2022
0.0.8 Jul 25, 2022
0.0.7 Nov 15, 2021
0.0.3 Oct 22, 2021

#311 in Encoding

Download history 35/week @ 2022-04-27 42/week @ 2022-05-04 105/week @ 2022-05-11 30/week @ 2022-05-18 35/week @ 2022-05-25 63/week @ 2022-06-01 15/week @ 2022-06-08 1/week @ 2022-06-15 1/week @ 2022-06-22 1/week @ 2022-06-29 7/week @ 2022-07-06 14/week @ 2022-07-13 38/week @ 2022-07-20 47/week @ 2022-07-27

106 downloads per month

MIT license

90 lines


crates.io docs.rs dependency status

decart is a library and a command-line tool for reading and (in the future) generating "Octocarts", CHIP-8 game cartridges for the Octo environment, written in Rust.

Use cases

  • Decoding: You can extract the program source code and runtime settings from an Octocart file. The source code can be assembled into CHIP-8 bytecode with Octo or decasm. The runtime settings can be given to a CHIP-8 interpreter like Octo or deca, or saved as JSON for the CHIP-8 Archive or an .octo.rc file for C-Octo or termin-8, etc.
  • Encoding: TODO


Octo cartridge files, or Octocarts, are GIF89a images with a payload steganographically embedded in one or more animation frames. Data is stored in the least significant bits of colors – 1 from the red/blue channels and 2 from the green channel – allowing us to pack a hidden byte into every 2 successive pixels.

The payload consists of a 32-bit length, followed by a sequence of ASCII bytes consisting of the JSON-encoded options dictionary and source text.

An Octo cartridge contains the source code of an Octo program, and a set of configuration options (parsed by octopt) for the CHIP-8 interpreter telling it how to run the program.

See also

  • To compile/assemble the Octo source code in the Octocart, check out the decasm crate.
  • To interpret an assembled program, check out the deca crate (backend) or a program like termin-8 (frontend and graphics).


~44K SLoC