--- nono/vm/sysclk.cpp 2026/04/29 17:05:28 1.1.1.15 +++ nono/vm/sysclk.cpp 2026/04/29 17:05:42 1.1.1.18 @@ -16,7 +16,7 @@ #include "sysclk.h" #include "config.h" #include "interrupt.h" -#include "rtc.h" +#include "monitor.h" #include "scheduler.h" #include "syncer.h" @@ -24,9 +24,9 @@ SysClkDevice::SysClkDevice() : inherited(OBJ_SYSCLK) { - monitor.func = ToMonitorCallback(&SysClkDevice::MonitorUpdate); - monitor.SetSize(31, 3); - monitor.Regist(ID_MONITOR_SYSCLK); + monitor = gMonitorManager->Regist(ID_MONITOR_SYSCLK, this); + monitor->func = ToMonitorCallback(&SysClkDevice::MonitorUpdate); + monitor->SetSize(31, 3); } // デストラクタ @@ -38,10 +38,6 @@ SysClkDevice::~SysClkDevice() bool SysClkDevice::Init() { - if (inherited::Init() == false) { - return false; - } - interrupt = GetInterruptDevice(); // クロックは機種ごとに異なる @@ -51,7 +47,8 @@ SysClkDevice::Init() event.time = period; // クロックの同期方法 - sync_rt = GetRTCDevice()->GetSyncRealtime(); + auto syncer = GetSyncer(); + sync_rt = syncer->GetSyncRealtime(); event.func = ToEventCallback(&SysClkDevice::Callback); event.code = 0; @@ -145,14 +142,14 @@ SysClkDevice::Callback(Event& ev) { putlog(3, "Interrupt occured"); - // システムクロックとしての現在時刻。 - // 足す前は前回の割り込み発生時刻なので period を足すと現在時刻。 - stime += period; - sysint = true; ChangeInterrupt(); if (sync_rt) { + // システムクロックとしての現在時刻。 + // 足す前は前回の割り込み発生時刻なので period を足すと現在時刻。 + stime += period; + scheduler->StartRealtimeEvent(ev, stime, period); } else { scheduler->StartEvent(ev);