A Python implementation of Notch's DCPU-16 (complete with assembler, disassembler, debugger and video terminal implementations)
Python
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
dcpu16os @ 9ce8dc6 changed extension so GitHub picks up on language as DCPU-16 assembly Apr 12, 2012
examples @ 32ec88f changed extension so GitHub picks up on language as DCPU-16 assembly Apr 12, 2012
plugins
terminals PEP8 compliance Jul 15, 2014
test_binaries Add hello2 and fibonacci test binaries Apr 8, 2012
.gitignore added gitignore with pyc and obj files Apr 5, 2012
.gitmodules added operating system as submodule Apr 9, 2012
LICENSE added license; fixes #2 Apr 5, 2012
README.md Fix README. May 3, 2012
asm.py PEP8 compliance Jul 15, 2014
asm_pyparsing.py
dcpu16.py PEP8 compliance Jul 15, 2014
disasm.py
emuplugin.py PEP8 compliance Jul 15, 2014
example.dasm16 changed extension so GitHub picks up on language as DCPU-16 assembly Apr 12, 2012
tests.py
tox.ini

README.md

A Python implementation of Notch's DCPU-16.

Complete with assembler, disassembler, debugger and video terminal implementations.

See http://0x10c.com/doc/dcpu-16.txt for specification of the CPU.

Notch apparently started doing a 6502 emulator first. Given I did one in Python https://github.com/jtauber/applepy it only seems fitting I now do a DCPU-16 implementation in Python too :-)

Status

Runs a number of example programs successfully. Should be feature-complete at the CPU level.

A dissassembler and (two) assemblers are also included as well as the emulator. The emulator includes a debugger.

  • ./asm.py example.dasm16 example.obj will assemble Notch's example to object code
  • ./disasm.py example.obj will disassemble the given object code
  • ./dcpu16.py example.obj will execute it (but won't show anything without extra options)

There is also an experimental pyparsing-based assembler ./asm_pyparsing.py contributed by Peter Waller. You'll need to pip install pyparsing to run it.

./dcpu16.py takes a number of options:

  • --debug runs the emulate in debug mode, enabling you to step through each instruction
  • --trace dumps the registers and stack after every step (implied by --debug)
  • --speed outputs the speed the emulator is running at in kHz
  • --term TERM specifies a terminal to use for text output (null, debug, curses, pygame or qt)

I'm working on an operating system for the DCPU-16 at https://github.com/jtauber/dcpu16os and also plan an implementation of Forth at some point.

Examples

Now see https://github.com/jtauber/DCPU-16-Examples