--- nono/vm/lunafb.h 2026/04/29 17:05:18 1.1.1.4 +++ nono/vm/lunafb.h 2026/04/29 17:05:33 1.1.1.7 @@ -11,7 +11,6 @@ #pragma once #include "planevram.h" -#include "monitor.h" // VRAM の ROP (定数) struct ROP { @@ -43,23 +42,19 @@ class LunafbDevice : public PlaneVRAMDev static const uint32 fcset7end = 0xb1500000; // プレーン数の上限 - static const int MAX_PLANES = 8; + static const uint MAX_PLANES = 8; public: LunafbDevice(); - virtual ~LunafbDevice() override; + ~LunafbDevice() override; bool Init() override; void ResetHard(bool poweron) override; - uint64 Read8(uint32 addr) override; - uint64 Read16(uint32 addr) override; - uint64 Read32(uint32 addr) override; - uint64 Write8(uint32 addr, uint32 data) override; - uint64 Write16(uint32 addr, uint32 data) override; - uint64 Write32(uint32 addr, uint32 data) override; - uint64 Peek8(uint32 addr) override; - uint64 Poke8(uint32 addr, uint32 data) override; + busdata Read(busaddr addr) override; + busdata Write(busaddr addr, uint32 data) override; + busdata Peek1(uint32 addr) override; + bool Poke1(uint32 addr, uint32 data) override; void UpdateInfo(TextScreen&, int x, int y) const override; @@ -67,8 +62,9 @@ class LunafbDevice : public PlaneVRAMDev void EmuInitScreen(); void EmuFill(uint x, uint y, uint w, uint h, uint32 data); void EmuPutc(uint x, uint y, uint c); - void EmuPutc(uint x, uint y, uint c, int rop); + void EmuPutc(uint x, uint y, uint c, uint rop); void EmuScrollY(uint dy, uint sy, uint h); + void SetBMSEL(uint8 bmsel_) { bmsel = bmsel_; } private: // offset の VRAM が変更されたことを記録する @@ -77,6 +73,7 @@ class LunafbDevice : public PlaneVRAMDev // X 方向にはみ出したときに対応する仮想画面の Y 座標を返す。 int GetWrapY(int y) const override; + busdata WriteReg(busaddr addr, uint32 data); void WriteRFCNT(uint32); void WriteCommonBitmap8(uint32, uint32); void WriteCommonBitmap16(uint32, uint32); @@ -127,7 +124,10 @@ class LunafbDevice : public PlaneVRAMDev uint fcset[MAX_PLANES] {}; uint32 fcmask[MAX_PLANES] {}; - Monitor monitor { this }; + // ウェイト [nsec] + busdata wait {}; + + Monitor *monitor {}; }; static inline LunafbDevice *GetLunafbDevice() {