Started to implement events.
h3rald h3rald@h3rald.com
Fri, 30 Jan 2026 10:54:36 +0100
2 files changed,
18 insertions(+),
1 deletions(-)
M
devices/terminal.c
→
devices/terminal.c
@@ -4,6 +4,7 @@
/* terminal device */ #define TERMINAL_INPUT 0x0 #define TERMINAL_OUTPUT 0x1 +#define TERMINAL_ON_KEYPRESS 0x2 void terminal_output(xyw_byte *data, xyw_byte addr, xyw_byte *error) {@@ -16,3 +17,20 @@ fflush(stdout);
break; } } + +void terminal_input(xyw_byte *data, xyw_byte addr, xyw_byte *error) +{ + (void)error; + switch (addr) + { + case TERMINAL_INPUT: + data[addr] = (xyw_byte)getchar(); + // If on keypress word is set, trigger jump to address at that location + if (data[TERMINAL_ON_KEYPRESS] != 0) + { + xyw_word jump_addr = XYW_PEEKW(&data[TERMINAL_ON_KEYPRESS]); + // Todo: execute code at address + } + break; + } +}
M
xyw.h
→
xyw.h
@@ -15,7 +15,6 @@
typedef unsigned char xyw_byte; typedef unsigned short xyw_word; -// Device contract typedef xyw_byte (*xyw_input)(xyw_byte *data, xyw_byte addr, xyw_byte *error); typedef void (*xyw_output)(xyw_byte *data, xyw_byte addr, xyw_byte *error); typedef void (*xyw_init)(xyw_byte *data);