An LC-3 VM implementation as described at https://www.jmeiners.com/lc3-vm.
Besides the obvious (running LC-3 programs):
- uses alternate buffer to preserve terminal state;
- hides cursor for a more immersive gaming experience :-)
- graceful shutdown by capturing
Ctrl-C
; - partial integration testing by running 10 x 1KB, automatically generated images
(using random combinations of
ADD
,AND
,LD
,LDR
,NOT
,LDI
andLEA
opcodes) and verifying theCPU
registers at the end (TODO: verify memory too); - loading images at the address specified in the object file, NOT hardcoding PC to
0x3000
.
And just for the fun, since I control the VM anyway ¯\_(ツ)_/¯ a bit of hacking:
- allow using arrow keys for input (convert them transparently to
WASM
); - output nicer box for 2048 using DEC Line Drawing.