--- nono/vm/sysclk.cpp 2026/04/29 17:04:30 1.1.1.2 +++ nono/vm/sysclk.cpp 2026/04/29 17:04:32 1.1.1.3 @@ -27,40 +27,42 @@ bool SysClkDevice::PowerOn() { // 電源オンですぐ起動 - gScheduler->AddEvent(&event); + event.Start(); return true; } uint64 -SysClkDevice::Read8(uint32 addr) +SysClkDevice::Read(uint32 addr) { - uint32 an = addr - devaddr; + // 1 ポートしかない + return GetInt(); +} - if (an == 0) { - uint8 data = 0; - if (sysint) { - data |= 0x80; - } - return data; - } else { - // それ以外のポートがどう見えるかとか未調査 - return 0xff; - } +uint64 +SysClkDevice::Write(uint32 addr, uint32 data) +{ + // 何か書き込まれたら、フラグをクリア + sysint = false; + putlog(1, "システムクロック割り込みクリア"); + return 0; } uint64 -SysClkDevice::Write8(uint32 addr, uint32 data) +SysClkDevice::Peek(uint32 addr) { - uint32 an = addr - devaddr; + return GetInt(); +} + +// 割り込み状態を取得(?) +uint8 +SysClkDevice::GetInt() const +{ + uint8 data = 0; - if (an == 0) { - // 何か書き込まれたら、フラグをクリア - sysint = false; - putlog(1, "システムクロック割り込みクリア"); - } else { - // それ以外 (特に +1, +2, +3) で何が起きるかは未調査 + if (sysint) { + data |= 0x80; } - return 0; + return data; } // イベントハンドラ @@ -70,5 +72,5 @@ SysClkDevice::Callback(int arg) putlog(3, "システムクロック割り込み発生"); sysint = true; gMPU->Interrupt(5); - gScheduler->AddEvent(&event); + event.Start(); }