0.1.12 • Published 3 years ago

jackvm-player v0.1.12

Weekly downloads
33
License
MIT
Repository
github
Last release
3 years ago

jackvm-player

A package that runs compiled Jack programs (.vm files) on the web. Jack is a high-level language you build in "Nand 2 Tetris", (aka "The Elements of Computing Systems"). This VM supports the basic features of the Jack VM included in the nand2tetris suite: the Jack "Operating System", keyboard input, and screen output.

JackVm Player requires a browser capable of running WebAssembly (WASM). Generally any modern browser that's newer than 2017 supports WASM. Check out capatability on MDN.

Basic Usage

player.js

import { JackVmPlayer } from "jackvm-player";

const parentEl = document.getElementById('screen-container');
let player = new JackVmPlayer(parentEl);

fetch("<concatenated_vm_file_url>")
    .then(res => res.text())
    .then(program => {
        player.load(program);
    });

Webpack Notes

If you're using webpack 4+, you'll need to either load your module that configures the player asynchronously, or enable an experimental flag on Webpack. If you don't you'll see an error that looks like this:

WebAssembly module is included in initial chunk. This is not allowed, because WebAssembly download and compilation must happen asynchronous. Add an async splitpoint (i. e. import()) somewhere between your entrypoint and the WebAssembly module:

Load module asynchronously

bootstrap.js

import('./player.js')
  .catch(console.error);

Enaable async webassembly files:

webpack.config.js

module.exports = {
  // ...
  experiments: {
    asyncWebAssembly: true,
  },
  // ...
}

Creating VM Files

jackvm-player currently is able to load a single .vm file. It is capable of loading a VM file that declares the entire program though. To create your own .vm file follow these steps:

# Change your directory to your Jack program source (containing `*.jack` files)
shell$ cd my_jack_program

# Compile the program using the Jack compiler.
shell$ JackCompiler.sh .

# Concatenate all .vm files. The OS files are not needed
shell$ cat *.vm > my_jack_program.vm

You can then include my_jack_program.vm in your project and load it into jackvm-player.

0.1.12

3 years ago

0.1.11

3 years ago

0.1.10

3 years ago

0.1.8

3 years ago

0.1.9

3 years ago

0.1.7

3 years ago

0.1.6

3 years ago

0.1.5

3 years ago

0.1.2

3 years ago

0.1.1

3 years ago

0.1.4

3 years ago

0.1.3

3 years ago

0.1.0

3 years ago