all repos — xyw @ c04aa6693cc1a052c252c28fa34f3a5202d07512

A minimal virtual machine and assembler for terminals.

Fixes.
h3rald h3rald@h3rald.com
Mon, 09 Feb 2026 10:24:15 +0100
commit

c04aa6693cc1a052c252c28fa34f3a5202d07512

parent

df4ac2653df1fbfde0946dbf04766c47091163c5

2 files changed, 7 insertions(+), 7 deletions(-)

jump to
M examples/lib/puts.xywexamples/lib/puts.xyw

@@ -4,7 +4,7 @@ ; Print a string starting at address

; a16 -- | [xw] .label puts POPxw - .label PUTS.loop + .label puts.loop LDBxw PUTC INCxw LDBxw puts.loop JCNw CLRxw
M xywrun.cxywrun.c

@@ -128,7 +128,7 @@ xyw_devices[dev_num].output(get_device_data(addr), dev_addr, error);

} } -static inline xyw_byte read(xyw_word addr) +static inline xyw_byte readb(xyw_word addr) { int dev_num = get_device(addr); if (dev_num >= 0 && xyw_devices[dev_num].input)

@@ -279,7 +279,7 @@ // Set value to x or y register or push to stack

#define SET(v) do { if (rx) { SETX(v); } else if (ry) { SETY(v); } else { PUSH(v); } } while(0) // Read a value from memory -#define READ(addr) (w ? readw(addr) : read(addr)) +#define READ(addr) (w ? readw(addr) : readb(addr)) // Read top of the user stack #define TOP READ(USER_STACK_START + (*u) - (w ? 2 : 1))

@@ -342,7 +342,7 @@ // Timer elapsed handling

xyw_word on_timer_handler = XYW_PEEKW(&xyw_memory[CLOCK_ON_TIMER_ELAPSED]); if (on_timer_handler != 0) { - if (read(CLOCK_ON_TIMER_ELAPSED)) + if (readb(CLOCK_ON_TIMER_ELAPSED)) { xyw_dbg("Timer elapsed, jumping to handler at %04X\n", on_timer_handler); xyw_eval(on_timer_handler);

@@ -397,8 +397,8 @@ /* POP */ OPC_SR1(0x02, , if (rx||ry) { SET(POP()); } else { POP(); } );

/* POP */ OPC_SR1r(0x02, if (w) { xyw_word val = us_popw(); *xw = val; *yw = val; } else { xyw_byte val = us_pop(); *x = val; *y = val; } ); /* CLR */ OPC_SR1(0x03, , SET(0)); /* CLR */ OPC_SR1r(0x03, if (w) { *xw = 0; *yw = 0; } else { *x = 0; *y = 0; } ); - /* LDB */ OPC_SR1(0x04, , us_push(read(ADDR(ARG)))); - /* LDB */ OPC_SR1r(0x04, us_push(read(ADDR(ARGX))); us_push(read(ADDR(ARGY))); ); + /* LDB */ OPC_SR1(0x04, , us_push(readb(ADDR(ARG)))); + /* LDB */ OPC_SR1r(0x04, us_push(readb(ADDR(ARGX))); us_push(readb(ADDR(ARGY))); ); /* LDW */ OPC_SR1(0x05, , us_pushw(readw(ADDR(ARG)) )); /* LDW */ OPC_SR1r(0x05, us_pushw(readw(ADDR(ARGX))); us_pushw(readw(ADDR(ARGY))); ); /* STB */ OPC_SR1(0x06, xyw_word addr = ADDR(ARG); xyw_byte val = us_pop(), write( addr, val ));

@@ -509,7 +509,7 @@ xyw_dbg("clock.on_timer_elapsed handler set to %04X, entering timer loop\n", on_timer_handler);

while (system_running_state() || system_waiting_state()) { xyw_memory[SYSTEM_STATE] |= SYSTEM_STATE_WAITING; - if (read(CLOCK_ON_TIMER_ELAPSED)) + if (readb(CLOCK_ON_TIMER_ELAPSED)) { xyw_memory[SYSTEM_STATE] |= SYSTEM_STATE_RUNNING; xyw_dbg("Timer elapsed, calling handler at %04X\n", on_timer_handler);