dcpu 0.5.0

An assembler, debugger and emulator for the DCPU-16
Documentation
# 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 <bin> -- <bin-args>

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).