Mercurial > repos > blastem
diff upd78k2_util.c @ 2716:033d8d4308e3
Fix enough issues in uPD78K/II core so that LaserActive firmware regularly polls front-panel button state
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 12 Jul 2025 22:25:20 -0700 |
parents | d30e7f605ff8 |
children | 8ce5d1a7ef54 |
line wrap: on
line diff
--- a/upd78k2_util.c Fri Jul 11 10:55:33 2025 -0700 +++ b/upd78k2_util.c Sat Jul 12 22:25:20 2025 -0700 @@ -188,11 +188,27 @@ uint8_t upd78237_sfr_read(uint32_t address, void *context) { upd78k2_context *upd = context; - if (address < 8) { - return upd->port_data[address]; - } switch (address) { + case 0x00: + case 0x04: + case 0x05: + case 0x06: + return upd->port_data[address]; + case 0x02: + case 0x07: + //input only + if (upd->io_read) { + upd->io_read(upd, address); + } + return upd->port_input[address]; + break; + case 0x01: + case 0x03: + if (upd->io_read) { + upd->io_read(upd, address); + } + return (upd->port_input[address] & upd->port_mode[address]) | (upd->port_data[address] & ~upd->port_mode[address]); case 0x10: return upd->cr00; case 0x11: @@ -262,6 +278,9 @@ case 0x06: printf("P%X: %02X\n", address & 7, value); upd->port_data[address & 7] = value; + if (upd->io_write) { + upd->io_write(upd, address); + } break; case 0x10: upd78k2_update_timer0(upd); @@ -400,9 +419,11 @@ printf("ISM0: %04X\n", upd->ism0); break; case 0xF4: + printf("INTM0: %02X\n", value); upd->intm0 = value; break; case 0xF5: + printf("INTM1: %02X\n", value); upd->intm1 = value; break; case 0xF8: