name mode size
..
arithmetic.usm 100644 63B
benchmark.usm 100644 603B
blank.usm 100644 340B
conditionals.usm 100644 115B
core.usm 100644 129B
hello.usm 100644 406B
jump.usm 100644 39B
loop.usm 100644 71B
subcond.usm 100644 13B
subroutines.usm 100644 101B
vectors.usm 100644 86B
README.md
# Uxn A stack-based VM, written in ANSI C. ## Build ``` cc uxn.c -std=c89 -Os -DNDEBUG -g0 -s -Wall -Wno-unknown-pragmas -o uxn ``` ## Assembly Syntax ### Write - `;variable`, set a label to an assigned address - `:const`, set a label to a constant short - `@label`, set a label to an address ### Read - `,literal`, push label value to stack - `.pointer`, read label value ### Special - `( comment )`, toggle parsing on/off - `|0010`, move to position in the program - `"hello`, push literal bytes for word "hello" - `#04`, a zero-page address, equivalent to `,0004` ### Operator modes - `,1234 ,0001 ADD^`, 16-bits operators have the short flag `^`. ``` ( hello world ) ;iterator :dev1r FFF0 :dev1w FFF1 |0100 @RESET "hello @loop ,dev1w STR ,incr JSU ( call incr ) ,05 NEQ ,loop ROT JSC BRK ( RESET ) @incr ,iterator LDR ,01 ADD ,iterator STR ,iterator LDR RTS |c000 @FRAME BRK |d000 @ERROR BRK |FFFA .RESET .FRAME .ERROR ``` ## Mission ### Assembler - Create a benchmark file - Implement shorthand operators - Signed operations - zero-page address? ### CPU - Signed operations - Catch overflow/underflow - A Three-Way Decision Routine(http://www.6502.org/tutorials/compare_instructions.html) - Draw pixel to screen - Detect mouse click - SDL Layer Emulator - Build PPU ### Devices - Devices each have an input byte, an output byte and two request bytes. ## Refs https://code.9front.org/hg/plan9front/file/a7f9946e238f/sys/src/games/nes/cpu.c http://www.w3group.de/stable_glossar.html http://www.emulator101.com/6502-addressing-modes.html http://forth.works/8f0c04f616b6c34496eb2141785b4454 https://justinmeiners.github.io/lc3-vm/