# hcf

> Dcpu16 Assembler/Disassembler/Emulator Library in CoffeeScript

Latest version **0.0.2** (published 2012-06-10) · GPL license · 0 weekly downloads

## Install

```sh
npm install hcf
pnpm add hcf
yarn add hcf
bun add hcf
```

Provides the command `dcpu`.

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.2 |
| Published | 2012-06-10 |
| First published | 2012-06-09 |
| Weekly downloads | 0 |
| License | GPL |
| TypeScript types | none |
| Module format | CommonJS |
| Node | ~0.6.6 |
| Dependencies | 0 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Tim Detwiler |
| Maintainers | tjdetwiler |

## Links

- npm: https://www.npmjs.com/package/hcf
- Repository: https://github.com/tjdetwiler/dcpu-coffee
- Homepage: hcf.io
- npm.io page: https://npm.io/package/hcf

## Recent versions

- 0.0.2 (latest) — 2012-06-10
- 0.0.1 — 2012-06-09
- 0.0.0 — 2012-06-09

## README

hcf
===

Dcpu16 library written in CoffeeScript. The hcf library provides an emulator,
assembler, and disassembler compliant with v1.7 of the DCPU spec.

# Installing - npm (Javascript/Production)
    npm install hcf

# Installing - git (Coffeescript/Development)
    git clone git://github.com/tjdetwiler/hcf.git hcf
    cd hcf
    cake all
    
# Basic Usage (Emulator)

    hcf = require('hcf');
  
    prog = [];
    dcpu = new hcf.Dcpu16();
    dcpu.loadBinary(prog);
    dcpu.run();

The above code would execute a DCPU binary at approximately 100KHz.
You can hook into execution events by providing callback methods:

    // onPreExec - Called right before executing Instr 'i'
    dcpu.onPreExec(function(cpu, i) {});
    // onPostExec - Called right after exectuing Instr 'i'
    dcpu.onPostExec(function(cpu, i) {});
    // onPeriondic - Called every 10,000 instructions or so.
    dcpu.onPeriodic(function(cpu) {});
    // onCondFail - Called when an instruction is skipped via conditional execution
    dcpu.onCondFail(function(cpu, i) {});

Standard hardware devices are provided as well:

    // LEM requires an HTML5 canvas element
    canvs = $("#myCanvas");
    dcpu.addDevice(new hcf.Hw.Lem1802(dcpu, canvas));
    dcpu.addDevice(new hcf.Hw.GenericClock(dcpu));
    dcpu.addDevice(new hcf.Hw.GenericKeyboard(dcpu));

Register/Memory accessors:

    // Read registers
    a = dpcu.regA();
    b = dcpu.regB();
    c = dcpu.regC();
  
    // Write Registers
    dcpu.regX(0xdead);
    dcpu.regY(dcpu.regA());
    dcpu.regZ(0);
    
    // Special registers too
    pc = dpcu.regPC();
    sp = dcpu.regSP();
    ex = dcpu.regEX();
    ia = dcpu.regIA();
    
    // Memory
    addr = 0x1234;
    word = dcpu.readMem(addr);
    dcpu.writeMem(addr, 0xbeef);
    
Breakpoints for read/write/execute events:

    // Sets a breakpoint
    // addr - memory address
    // mode - "r", "w", "x", or any combination of them.
    dcpu.breakpoint(0x1000, "rwx", function(cpu, addr, mode) { });

---
_Source: https://npm.io/package/hcf · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
