# HG changeset patch # User Michael Pavone # Date 1729978281 25200 # Node ID 25e40370e0e47299862ef319c2c110864b7001b1 # Parent 573da2a2e6bbb0ec691ae0f82d45abf65f12dadf Fix some IO port serial mode bugs diff -r 573da2a2e6bb -r 25e40370e0e4 genesis.c --- a/genesis.c Thu Oct 24 21:08:10 2024 -0700 +++ b/genesis.c Sat Oct 26 14:31:21 2024 -0700 @@ -1478,16 +1478,16 @@ value = io_rx_read(gen->io.ports + 1, context->cycles); break; case 0xC: - value = io_sctrl_read(gen->io.ports, context->cycles); + value = io_sctrl_read(gen->io.ports + 1, context->cycles); break; case 0xD: value = gen->io.ports[2].serial_out; break; case 0xE: - value = io_rx_read(gen->io.ports + 1, context->cycles); + value = io_rx_read(gen->io.ports + 2, context->cycles); break; case 0xF: - value = io_sctrl_read(gen->io.ports, context->cycles); + value = io_sctrl_read(gen->io.ports + 2, context->cycles); break; default: value = get_open_bus_value(&gen->header) >> 8; diff -r 573da2a2e6bb -r 25e40370e0e4 io.c --- a/io.c Thu Oct 24 21:08:10 2024 -0700 +++ b/io.c Sat Oct 26 14:31:21 2024 -0700 @@ -1822,9 +1822,7 @@ uint32_t io_next_interrupt(io_port *port, uint32_t current_cycle) { - if (!(port->control & 0x80)) { - return CYCLE_NEVER; - } + if (port->serial_ctrl & SCTRL_BIT_RX_INTEN) { if (port->serial_ctrl & SCTRL_BIT_RX_READY) { return current_cycle; @@ -1833,7 +1831,9 @@ return port->receive_end; } } - //TODO: handle external interrupts from TH transitions + /*if (port->control & 0x80) { + //TODO: handle external interrupts from TH transitions + }*/ return CYCLE_NEVER; }