--- nono/vm/crtc2.cpp 2026/04/29 17:05:14 1.1.1.9 +++ nono/vm/crtc2.cpp 2026/04/29 17:05:17 1.1.1.10 @@ -12,15 +12,10 @@ #include "renderer.h" #include "scheduler.h" -// グローバル参照用 -CRTC2Device *gCRTC2; - // コンストラクタ CRTC2Device::CRTC2Device() - : inherited("CRTC2") + : inherited(OBJ_CRTC2) { - devaddr = 0xd1000000; - vdisp_event.func = ToEventCallback(&CRTC2Device::VDispCallback); vdisp_event.Regist("CRTC2 V-DISP"); } @@ -28,7 +23,19 @@ CRTC2Device::CRTC2Device() // デストラクタ CRTC2Device::~CRTC2Device() { - gCRTC2 = NULL; +} + +// 初期化 +bool +CRTC2Device::Init() +{ + if (inherited::Init() == false) { + return false; + } + + renderer = GetRenderer(); + + return true; } // リセット @@ -47,7 +54,7 @@ CRTC2Device::ResetHard(bool poweron) // すぐに垂直帰線期間を開始する vdisp_event.time = 0; vdisp_event.code = 1; - gScheduler->RestartEvent(vdisp_event); + scheduler->RestartEvent(vdisp_event); } uint64 @@ -88,7 +95,7 @@ CRTC2Device::Read(uint32 offset) break; default: - __unreachable(); + VMPANIC("corrupted offset=%d", offset); } return data; } @@ -121,7 +128,7 @@ CRTC2Device::Write(uint32 offset, uint32 return 0; default: - __unreachable(); + VMPANIC("corrupted offset=%d", offset); } } @@ -136,7 +143,7 @@ CRTC2Device::Peek(uint32 offset) return reg[ar]; default: - __unreachable(); + return 0xff; } } @@ -150,7 +157,7 @@ CRTC2Device::VDispCallback(Event& ev) // 今はここで1画面まるごと作成 if (vdisp) { // Render に作画指示 - gRenderer->Render(); + renderer->Render(); } // 次のタイミングを計算 @@ -164,5 +171,5 @@ CRTC2Device::VDispCallback(Event& ev) ev.time = 507.328_usec; // 32*Ht ev.code = 1; } - gScheduler->StartEvent(ev); + scheduler->StartEvent(ev); }