diff --git a/README.md b/README.md index e1c1c01..243b43f 100644 --- a/README.md +++ b/README.md @@ -1,32 +1,26 @@ # 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 -``` +A [stack-based VM](https://wiki.xxiivv.com/site/uxn.html), written in ANSI C. ## 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 +- `;variable`, automatically assign an address to a label. +- `:const FFCF`, manually assign an address to a label. +- `@label`, assign the current address to a label. ### Read -- `,literal`, push label value to stack -- `.pointer`, read label value +- `,literal`, push label value to stack, prefixed with `LIT LEN`. +- `.pointer`, push label value to stack. ### 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` +- `( 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 @@ -68,7 +62,7 @@ BRK |FFFA .RESET .FRAME .ERROR ``` -## Mission +## TODOs ### Assembler diff --git a/uxn.c b/uxn.c index 4b0e52e..533a68f 100644 --- a/uxn.c +++ b/uxn.c @@ -27,7 +27,7 @@ void wspush16(Uxn *u, Uint16 s) { wspush8(u,s >> 8); wspush8(u,s & 0xff); } Uint16 wspop16(Uxn *u) { return wspop8(u) + (wspop8(u) << 8); } Uint16 wspeek16(Uxn *u, Uint8 o) { return bytes2short(u->wst.dat[u->wst.ptr - o], u->wst.dat[u->wst.ptr - o + 1]); } void rspush16(Uxn *u, Uint16 a) { u->rst.dat[u->rst.ptr++] = a; } -Uint16 mempeek16(Uxn *u, Uint16 s) { return (u->ram.dat[s] << 8) + (u->ram.dat[s+1] & 0xff); } +Uint16 mempeek16(Uxn *u, Uint16 s) { return (u->ram.dat[s] << 8) + (u->ram.dat[s + 1] & 0xff); } /* I/O */ void op_brk(Uxn *u) { setflag(&u->status,FLAG_HALT, 1); }