--- nono/vm/scc.cpp 2026/04/29 17:04:36 1.1.1.3 +++ nono/vm/scc.cpp 2026/04/29 17:04:45 1.1.1.5 @@ -5,7 +5,8 @@ // #include "scc.h" -#include "mpu680x0.h" +#include "interrupt.h" +#include "mpu.h" // IODevice // | @@ -46,6 +47,8 @@ SCCDevice::ResetHard() uint64 SCCDevice::Read(uint32 addr) { + gMPU->AddCycle(41); // InsideOut p.135 + switch (addr) { case 0: // $E98001 return ReadCtrl(&cr.chan[1]); @@ -68,6 +71,8 @@ SCCDevice::Read(uint32 addr) uint64 SCCDevice::Write(uint32 addr, uint32 data) { + gMPU->AddCycle(49); // InsideOut p.135 + switch (addr) { case 0: // $E98001 WriteCtrl(&cr.chan[1], data); @@ -196,6 +201,13 @@ SCCDevice::WriteCtrl(struct SIO::channel chan->ptr = 0; break; + case 10: // WR10 + putlog(2, "WR%d%s <- $%02x (未実装)", chan->ptr, chan->name, data); + chan->wr10 = data; + // アクセス後は WR0 へ戻す + chan->ptr = 0; + break; + case 11: // WR11 putlog(2, "WR%d%s <- $%02x (未実装)", chan->ptr, chan->name, data); chan->wr11 = data; @@ -243,5 +255,12 @@ void SCCDevice::Interrupt() { putlog(0, "割り込み(未実装)"); - gMPU680x0->Interrupt(this, 5, 0x50/*XXX*/); +// gInterrupt->Raise(this); +} + +// 割り込みアクノリッジ +int +SCCDevice::InterruptAcknowledge() +{ + return 0x50; /* XXX 実際は WR2 とか要因で変わる */ }