Get ready to spin that propeller - this stuff can get deep.
This is pretty nerdy. Here is an implementation of FORTH I wrote that runs in the browser. FORTH is a programming language that I find very compelling due to its simplicity.
It only has a bare minimum of words in its dictionary, so be prepared to implement
if..else..then yourself, amongst other challenges.
If you’d like to try your hand, the full page view is the best way to see the current progress.
This is for the real nerds. Here is an entire virtual machine and an assembly language assembler for it. This is pretty gnarly and also best viewed fullscreen. The machine trace is on the left, the assembly editor is on the right, and if your code writes to memory address
999, characters will appear in the output on the far right.
This is an architecture of my own invention, designed to be very minimal and simple to implement in hardware.
Instructions: MOV dst, src MOV dst, imm ADD dst, src ADD dst, imm NOR dst, src NOR dst, imm CMP left, right CMP left, imm All instructions may be preceded by one of: IFGT IFLT IFEQ Parameters: dst & left, one of: A, I, [I], PC src & right, one of: A, [I], PC imm: sign extended integer Machine state: memory, array of 8bit numbers registers: A, I, and PC flags: GT, LT, and EQ Grammar: CONDITION_OR_NIL COMMAND DST_OR_LEFT COMMA SRC_RIGHT_OR_IMM
The assembler has a few commands to make things easier.
NEXT is a signal to use the next location in memory as the source.
.D is an assembler directive to store a single decimal value at the current assembled location. This is how you specify literals.
Check out the current progress here.