# A DCPU-16 emulator and DASM (dis)assembler [![Build Status](https://travis-ci.org/Yamakaky/dcpu.svg?branch=master)](https://travis-ci.org/Yamakaky/dcpu) [![Clippy Linting Result](https://clippy.bashy.io/github/Yamakaky/dcpu/master/badge.svg)](https://clippy.bashy.io/github/Yamakaky/dcpu/master/log) ## Features - Full instruction set - Tick accurate - Devices support - Clock - LEM1802 - Keyboard - m35fd - Disassembler - Assembler - gdb-like debugger - Image-to-LEM-compatible-format utility ## Quick usage Compiled versions for Windows and Linux are available at https://github.com/Yamakaky/dcpu/releases/. No dependencies are required. Note: the Windows version of the emulation currently fails with an OpenGL error. If anyone knows why... All binaries support a `--help` flag for more infos. ## Building You need to install the [rust compiler](https://www.rust-lang.org/) to build this software. # cargo run --release --bin -- Available binaries are assembler, disassembler, emulator and sprite. Some features are only available on Rust nightly. To enable them, install Rust nightly then run; # cargo run --release --features nightly --bin ... ### Build features The following build features are available ([x] means "enabled by default"): - [x] `bins`: only useful to build the binaries, should be disabled for the library. - [x] `debugger-cli`: command line parsing for the debugger, should also be disabled for the library. - [x] `glium`: OpenGL backend for the lem1802 + keyboard, can be useful in the library. - [ ] `nightly`: implementation of `serde::{Serialize, Deserialize}` for some of the types. Requires Rust nightly. ### Build the C library To build a dynamic library (`.so`): # cargo rustc --lib --no-default-features -- --crate-type=dylib To build a static library (`.a`): # cargo rustc --lib --no-default-features -- --crate-type=staticlib See `src/c_api.h` for the available functions. ## Convert images to LEM format The `sprite` utility can: - Convert a font image (`--font-file`) and a palette image (`--palette-file`) to a LEM1802-compatible format, either binary or hexadecimal - Convert an image (`--image`) to VRam + font + palette ## Documentation The library interface is documented [here](https://docs.rs/dcpu).