uxn

Varvara Ordinator, written in ANSI C(SDL2)
git clone https://git.eamoncaddigan.net/uxn.git
Log | Files | Refs | README | LICENSE

commit 220c3676e5e73e13a0e2aafaea06f873d8a12d2b
parent de22c37e07b4f873d795c54ec3a990ba7f355a74
Author: neauoire <aliceffekt@gmail.com>
Date:   Tue,  9 Feb 2021 09:00:27 -0800

Moved dev code out of uxn

Diffstat:
Mcli.c | 9+++++++--
Muxn.c | 23+++++++++++------------
Muxn.h | 6+++---
3 files changed, 21 insertions(+), 17 deletions(-)

diff --git a/cli.c b/cli.c @@ -21,13 +21,18 @@ error(char *msg, const char *err) } void -console_onread(void) +console_onread(Uint8 *b) { + (void)b; } void -console_onwrite(void) +console_onwrite(Uint8 *b) { + if(b) { + printf("%c", *b); + *b = 0x00; + } } void diff --git a/uxn.c b/uxn.c @@ -114,15 +114,12 @@ lituxn(Uxn *u, Uint8 instr) } int -devuxn(Uxn *u) /* experimental */ +devuxn(Uxn *u) { int i; for(i = 0; i < u->devices; ++i) { - Uint16 addr = u->dev[i].w; - if(u->ram.dat[addr]) { - printf("%c", u->ram.dat[addr]); - u->ram.dat[addr] = 0; - } + u->dev[i].wfn(&u->ram.dat[u->dev[i].w]); + u->dev[i].rfn(&u->ram.dat[u->dev[i].r]); } return 1; } @@ -147,10 +144,8 @@ opcuxn(Uxn *u, Uint8 instr) } int -parse(Uxn *u) /* TODO: Rename */ +stepuxn(Uxn *u, Uint8 instr) { - Uint8 instr = u->ram.dat[u->ram.ptr++]; - u->counter++; if(u->literal > 0) return lituxn(u, instr); else @@ -162,8 +157,12 @@ evaluxn(Uxn *u, Uint16 vec) { u->ram.ptr = vec; setflag(&u->status, FLAG_HALT, 0); - while(!(u->status & FLAG_HALT) && parse(u)) - ; + while(!(u->status & FLAG_HALT)) { + Uint8 instr = u->ram.dat[u->ram.ptr++]; + if(!stepuxn(u, instr)) + return 0; + u->counter++; + } return 1; } @@ -198,7 +197,7 @@ loaduxn(Uxn *u, char *filepath) /* to start: evaluxn(u, u->vreset); */ int -portuxn(Uxn *u, Uint16 r, Uint16 w, void (*onread)(), void (*onwrite)()) +portuxn(Uxn *u, Uint16 r, Uint16 w, void (*onread)(Uint8 *), void (*onwrite)(Uint8 *)) { Device *d = &u->dev[u->devices++]; d->r = r; diff --git a/uxn.h b/uxn.h @@ -36,8 +36,8 @@ typedef struct { typedef struct { Uint16 r, w; - void (*rfn)(void); - void (*wfn)(void); + void (*rfn)(Uint8 *); + void (*wfn)(Uint8 *); } Device; typedef struct { @@ -54,4 +54,4 @@ int getflag(Uint8 *status, char flag); int loaduxn(Uxn *c, char *filepath); int bootuxn(Uxn *c); int evaluxn(Uxn *u, Uint16 vec); -int portuxn(Uxn *u, Uint16 r, Uint16 w, void (*onread)(), void (*onwrite)()); +int portuxn(Uxn *u, Uint16 r, Uint16 w, void (*onread)(Uint8 *), void (*onwrite)(Uint8 *));