--- nono/vm/sysclk.cpp 2026/04/29 17:05:24 1.1.1.14 +++ nono/vm/sysclk.cpp 2026/04/29 17:05:28 1.1.1.15 @@ -27,10 +27,6 @@ SysClkDevice::SysClkDevice() monitor.func = ToMonitorCallback(&SysClkDevice::MonitorUpdate); monitor.SetSize(31, 3); monitor.Regist(ID_MONITOR_SYSCLK); - - event.func = ToEventCallback(&SysClkDevice::Callback); - event.code = 0; - event.Regist("System Clock"); } // デストラクタ @@ -57,6 +53,11 @@ SysClkDevice::Init() // クロックの同期方法 sync_rt = GetRTCDevice()->GetSyncRealtime(); + event.func = ToEventCallback(&SysClkDevice::Callback); + event.code = 0; + event.SetName("System Clock"); + scheduler->RegistEvent(event); + return true; } @@ -80,28 +81,38 @@ SysClkDevice::ResetHard(bool poweron) } busdata -SysClkDevice::Read(uint32 offset) +SysClkDevice::ReadPort(uint32 offset) { // 1 ポートしかない - return GetInt(); + busdata data = GetInt(); + data |= BusData::Size1; + return data; } busdata -SysClkDevice::Write(uint32 offset, uint32 data) +SysClkDevice::WritePort(uint32 offset, uint32 data) { // 何か書き込まれたら、フラグをクリア putlog(3, "Clear system clock interrupt"); sysint = false; ChangeInterrupt(); - return 0; + + busdata r = BusData::Size1; + return r; } busdata -SysClkDevice::Peek(uint32 offset) +SysClkDevice::PeekPort(uint32 offset) { return GetInt(); } +bool +SysClkDevice::PokePort(uint32 offset, uint32 data) +{ + return false; +} + void SysClkDevice::MonitorUpdate(Monitor *, TextScreen& screen) { @@ -111,7 +122,7 @@ SysClkDevice::MonitorUpdate(Monitor *, T y = 0; int width = stime < 86400_sec ? 20 : 25; - screen.Print(0, y++, "Freq: %d Hz", freq); + screen.Print(0, y++, "Freq: %u Hz", freq); screen.Print(0, y++, "Sync: %s", sync_rt ? "Real Time" : "Virtual Time"); screen.Print(0, y++, "Time: %*s", width, TimeToStr(stime).c_str()); }