0.0.2 • Published 7 years ago

dcpu-emulator v0.0.2

Weekly downloads
4
License
MIT
Repository
github
Last release
7 years ago

DCPU16-IDE

This repo is a fork of https://github.com/dangermccann/dcpu16-ide

The project in this repository refactors the dcpu16-ide emulator code to make it more clearly organized and allows for it to be used as a flexible and portable library rather than an independent web application.

Essentially, the dcpu16-ide project has been repackaged as a library.

License

MIT License

Useage

Install from package from npm

npm install dcpu-emulator

Refer to below useage example:

import { Emulator, Monitor, Keyboard, Clock } from "dcpu-emulator";

/**
 * Setup a canvas where we can draw our LEM Monitor we will be attaching to the DCPU.
 */
var canvas = document.createElement("canvas");
canvas.width = 128;
canvas.height = 96;
canvas.style.backgroundColor = "#777777";
document.body.appendChild(canvas);

var context = canvas.getContext('2d');

/**
 * Initialize the emulator.
 */
var emulator = new Emulator();

//Create a clock device 
var clock = new Clock(emulator);

//Create keyboard device. 
var keyboard = new Keyboard(emulator);

//Setup monitor device. We must provide the constructor a routine which handles rendering to the screen surface. 
var monitor = new Monitor(emulator, (x: number, y: number, width: number, height: number, r: number, g: number, b: number) => {
    context.fillStyle = "rgb(" + r + "," + g + "," + b + ")";
    context.fillRect(x, y, width, height);
});

//Add devices to the emulator. 
emulator.addDevice(keyboard);
emulator.addDevice(clock);
emulator.addDevice(monitor);

//Caputre key events and dispatch them to the keyboard device. 
document.body.onkeyup = (event) => {
    keyboard.keyUp(event);
};

document.body.onkeydown = (event) => {
    keyboard.keyDown(event);
};

//Opcodes of a very simple hello world program. 
var testProgram = [0x84c1, 0x86d2, 0x000d, 0x7f81, 0x001a, 0x5801, 0x000d, 0x7c0b
    , 0xf000, 0x02c1, 0x8000, 0x88c2, 0x8b81, 0x0048, 0x0065, 0x006c
    , 0x006c, 0x006f, 0x0020, 0x0077, 0x006f, 0x0072, 0x006c, 0x0064
    , 0x0021, 0x0000, 0xef81];

//Load the program and reset the emulator. 
emulator.reset();
emulator.load(testProgram);

/**
 * The update / render loop. Not super accurate timing, but good enough for a demo.
 */
var lastUpdate = Date.now();

var exec = function () {
    let delta = Date.now() - lastUpdate;
    lastUpdate += delta;

    for (; delta >= 10; delta -= 10) {

        clock.update(10);

        //Step 10 time per ms = 10khz 
        for (let i = 0; i < 1000; i++)
            emulator.step();

    }

    monitor.refresh();

    setTimeout(exec, 100);
}

exec();
0.0.2

7 years ago

0.0.1

7 years ago

0.0.0

7 years ago