Mercurial > repos > blastem
diff upd78k2_util.c @ 2706:0bd48217941a
Get uPD78K/II core done enough to run the LaserActive firmware main loop
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 06 Jul 2025 20:09:32 -0700 |
parents | ab2d916380bf |
children |
line wrap: on
line diff
--- a/upd78k2_util.c Sun Jul 06 15:20:46 2025 -0700 +++ b/upd78k2_util.c Sun Jul 06 20:09:32 2025 -0700 @@ -28,6 +28,28 @@ return upd->port_mode[address & 0x7]; case 0xC4: return upd->mm; + case 0xE0: + return upd->if0; + case 0xE1: + return upd->if0 >> 8; + case 0xE4: + return upd->mk0; + case 0xE5: + return upd->mk0 >> 8; + case 0xE8: + return upd->pr0; + case 0xE9: + return upd->pr0 >> 8; + case 0xEC: + return upd->ism0; + case 0xED: + return upd->ism0 >> 8; + case 0xF4: + return upd->intm0; + case 0xF5: + return upd->intm1; + case 0xF8: + return upd->ist; default: fprintf(stderr, "Unhandled uPD78237 SFR read %02X\n", address); return 0xFF; @@ -51,6 +73,47 @@ case 0xC4: upd->mm = value; break; + case 0xE0: + upd->if0 &= 0xFF00; + upd->if0 |= value; + break; + case 0xE1: + upd->if0 &= 0xFF; + upd->if0 |= value << 8; + break; + case 0xE4: + upd->mk0 &= 0xFF00; + upd->mk0 |= value; + break; + case 0xE5: + upd->mk0 &= 0xFF; + upd->mk0 |= value << 8; + break; + case 0xE8: + upd->pr0 &= 0xFF00; + upd->pr0 |= value; + break; + case 0xE9: + upd->pr0 &= 0xFF; + upd->pr0 |= value << 8; + break; + case 0xEC: + upd->ism0 &= 0xFF00; + upd->ism0 |= value; + break; + case 0xED: + upd->ism0 &= 0xFF; + upd->ism0 |= value << 8; + break; + case 0xF4: + upd->intm0 = value; + break; + case 0xF5: + upd->intm1 = value; + break; + case 0xF8: + upd->ist = value; + break; default: fprintf(stderr, "Unhandled uPD78237 SFR write %02X: %02X\n", address, value); break; @@ -75,3 +138,7 @@ return context; } +void upd78k2_sync_cycle(upd78k2_context *upd, uint32_t target_cycle) +{ + //TODO: implement me +}