--- nono/vm/crtc2.cpp 2026/04/29 17:04:31 1.1.1.3 +++ nono/vm/crtc2.cpp 2026/04/29 17:04:50 1.1.1.6 @@ -1,11 +1,14 @@ // // nono -// Copyright (C) 2018 isaki@NetBSD.org +// Copyright (C) 2020 nono project +// Licensed under nono-license.txt // #include "crtc2.h" #include "renderer.h" +std::unique_ptr gCRTC2; + CRTC2Device::CRTC2Device() { logname = "crtc2"; @@ -40,11 +43,11 @@ CRTC2Device::ResetHard() } uint64 -CRTC2Device::Read(uint32 addr) +CRTC2Device::Read(uint32 offset) { uint32 data; - switch (addr) { + switch (offset) { case 0: // アドレスレジスタ // アドレスレジスタは書き込み専用 // XXX 何が読めるか @@ -83,9 +86,9 @@ CRTC2Device::Read(uint32 addr) } uint64 -CRTC2Device::Write(uint32 addr, uint32 data) +CRTC2Device::Write(uint32 offset, uint32 data) { - switch (addr) { + switch (offset) { case 0: // アドレスレジスタ ar = data & 0x3f; putlog(3, "アドレスレジスタ <- $%02x", ar); @@ -116,9 +119,9 @@ CRTC2Device::Write(uint32 addr, uint32 d } uint64 -CRTC2Device::Peek(uint32 addr) +CRTC2Device::Peek(uint32 offset) { - switch (addr) { + switch (offset) { case 0: // アドレスレジスタ return ar; @@ -131,25 +134,28 @@ CRTC2Device::Peek(uint32 addr) } // 垂直表示・帰線イベント -// arg == 1 なら表示期間開始、arg == 0 なら帰線期間開始。 +// ev.code が 1 なら表示期間開始(V-disp)、0 なら帰線期間開始(V-blank)。 void -CRTC2Device::VDispCallback(int arg) +CRTC2Device::VDispCallback(Event& ev) { + int& vdisp = ev.code; + // 今はここで1画面まるごと作成 - if (arg) { + if (vdisp) { // Render に作画指示 gRenderer->Render(); } // 次のタイミングを計算 // XXX まだ CRTC から計算していない - if (arg) { + if (vdisp) { // 垂直表示期間 - vdisp_event.time = 16234.496_usec; // 1024*Ht + ev.time = 16234.496_usec; // 1024*Ht + ev.code = 0; } else { // 垂直帰線期間 - vdisp_event.time = 507.328_usec; // 32*Ht + ev.time = 507.328_usec; // 32*Ht + ev.code = 1; } - vdisp_event.code = 1 - arg; - vdisp_event.Start(); + ev.Start(); }