diff --git a/src/emulator.c b/src/emulator.c index 9c326a9..8a393a4 100644 --- a/src/emulator.c +++ b/src/emulator.c @@ -193,9 +193,13 @@ doctrl(Uxn *u, SDL_Event *event, int z) void system_talk(Device *d, Uint8 b0, Uint8 w) { - if(!w) return; - putcolors(&ppu, &d->dat[0x8]); - reqdraw = 1; + if(!w) { + d->dat[0x2] = d->u->wst.ptr; + d->dat[0x3] = d->u->rst.ptr; + } else { + putcolors(&ppu, &d->dat[0x8]); + reqdraw = 1; + } (void)b0; } diff --git a/src/uxn.c b/src/uxn.c index 2d9effb..8f1ea5f 100644 --- a/src/uxn.c +++ b/src/uxn.c @@ -183,6 +183,7 @@ portuxn(Uxn *u, Uint8 id, char *name, void (*talkfn)(Device *d, Uint8 b0, Uint8 { Device *d = &u->dev[id]; d->addr = id * 0x10; + d->u = u; d->mem = u->ram.dat; d->talk = talkfn; printf("Device added #%02x: %s, at 0x%04x \n", id, name, d->addr); diff --git a/src/uxn.h b/src/uxn.h index d1f9edd..5d8e660 100644 --- a/src/uxn.h +++ b/src/uxn.h @@ -31,6 +31,7 @@ typedef struct { struct Uxn; typedef struct Device { + struct Uxn *u; Uint8 addr, dat[16], *mem; void (*talk)(struct Device *d, Uint8, Uint8); } Device;