Fixes.
h3rald h3rald@h3rald.com
Wed, 03 Dec 2025 16:22:59 +0100
M
xywrun.c
→
xywrun.c
@@ -16,7 +16,8 @@ XYW_ERROR_NONE = 0,
XYW_ERROR_INVALID_INSTRUCTION, XYW_ERROR_STACK_UNDERFLOW, XYW_ERROR_STACK_OVERFLOW, - XYW_ERROR_DEVICE_UNAVAILABLE + XYW_ERROR_DEVICE_UNAVAILABLE, + XYW_ERROR_INVALID_DEVICE_PORT } xyw_error; /* system device */@@ -64,9 +65,16 @@ {
return (addr - DEVICE_AREA_START) / 16; } -static inline xyw_byte get_device_address(xyw_word addr) +static inline xyw_byte get_device_port(xyw_word addr) { - return (addr - DEVICE_AREA_START) % 16; + // Should return a number between 0 and 15, add validation + xyw_byte port = (addr - DEVICE_AREA_START) % 16; + if (port >= 16) + { + *error = XYW_ERROR_INVALID_DEVICE_PORT; + return 0xFF; + } + return port; } //// Read/write memory helpers@@ -81,7 +89,7 @@ {
*error = XYW_ERROR_DEVICE_UNAVAILABLE; return (xyw_word)-1; } - xyw_byte dev_addr = get_device_address(addr); + xyw_byte dev_addr = get_device_port(addr); return xyw_devices[dev_num].readw(dev_addr, error); } return PEEKW(&xyw_memory[addr]);@@ -97,7 +105,7 @@ {
*error = XYW_ERROR_DEVICE_UNAVAILABLE; return; } - xyw_byte dev_addr = get_device_address(addr); + xyw_byte dev_addr = get_device_port(addr); xyw_devices[dev_num].writew(dev_addr, val, error); return; }@@ -114,7 +122,7 @@ {
*error = XYW_ERROR_DEVICE_UNAVAILABLE; return (xyw_byte)-1; } - xyw_byte dev_addr = get_device_address(addr); + xyw_byte dev_addr = get_device_port(addr); return xyw_devices[dev_num].read(dev_addr, error); } return xyw_memory[addr];@@ -130,7 +138,7 @@ {
*error = XYW_ERROR_DEVICE_UNAVAILABLE; return; } - xyw_byte dev_addr = get_device_address(addr); + xyw_byte dev_addr = get_device_port(addr); xyw_devices[dev_num].write(dev_addr, val, error); return; }