--- nono/vm/sysclk.cpp 2026/04/29 17:05:13 1.1.1.11 +++ nono/vm/sysclk.cpp 2026/04/29 17:05:17 1.1.1.12 @@ -11,26 +11,21 @@ // システムクロックは実時間または仮想時間のいずれかに同期するため、 // システムクロック独自の時刻 stime を持つ。 // stime は、割り込みを発生させるごとに、LUNA-I なら 16.67msec、 -// LUNA88k なら 10msec 進行する。 +// LUNA-88K なら 10msec 進行する。 #include "sysclk.h" #include "config.h" #include "interrupt.h" #include "rtc.h" #include "scheduler.h" -#include "sync.h" - -// グローバル参照用 -SysClkDevice *gSysClk; +#include "syncer.h" // コンストラクタ SysClkDevice::SysClkDevice() - : inherited("SystemClock") + : inherited(OBJ_SYSCLK) { AddAlias("SysClk"); - devaddr = 0x63000000; - monitor.func = ToMonitorCallback(&SysClkDevice::MonitorUpdate); monitor.SetSize(31, 2); monitor.Regist(ID_MONITOR_SYSCLK); @@ -43,19 +38,25 @@ SysClkDevice::SysClkDevice() // デストラクタ SysClkDevice::~SysClkDevice() { - gSysClk = NULL; } +// 初期化 bool SysClkDevice::Init() { + if (inherited::Init() == false) { + return false; + } + + interrupt = GetInterruptDevice(); + // クロックは機種ごとに異なる const ConfigItem& item = gConfig->Find("!sysclk-period"); period = item.AsInt(); event.time = period; // クロックの同期方法 - sync_rt = gRTC->GetSyncRealtime(); + sync_rt = GetRTCDevice()->GetSyncRealtime(); return true; } @@ -67,12 +68,12 @@ SysClkDevice::ResetHard(bool poweron) // XXX たぶん電源オンだけで作用する? if (poweron) { if (sync_rt) { - stime = gSync->GetRealTime(); + stime = GetSyncer()->GetRealTime(); } // 電源オンですぐ起動 sysint = false; - gScheduler->RestartEvent(event); + scheduler->RestartEvent(event); } } @@ -89,7 +90,7 @@ SysClkDevice::Write(uint32 offset, uint3 // 何か書き込まれたら、フラグをクリア putlog(3, "Clear system clock interrupt"); sysint = false; - gInterrupt->NegateINT(this); + interrupt->NegateINT(this); return 0; } @@ -135,11 +136,11 @@ SysClkDevice::Callback(Event& ev) stime += period; sysint = true; - gInterrupt->AssertINT(this); + interrupt->AssertINT(this); if (sync_rt) { - gScheduler->StartRealtimeEvent(ev, stime, period); + scheduler->StartRealtimeEvent(ev, stime, period); } else { - gScheduler->StartEvent(ev); + scheduler->StartEvent(ev); } }