--- nono/vm/lunafb.h 2026/04/29 17:05:14 1.1.1.3 +++ nono/vm/lunafb.h 2026/04/29 17:05:25 1.1.1.5 @@ -47,18 +47,21 @@ class LunafbDevice : public PlaneVRAMDev 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; + busdata Read8(uint32 addr) override; + busdata Read16(uint32 addr) override; + busdata Read32(uint32 addr) override; + busdata Write8(uint32 addr, uint32 data) override; + busdata Write16(uint32 addr, uint32 data) override; + busdata Write32(uint32 addr, uint32 data) override; + busdata Peek8(uint32 addr) override; + bool Poke8(uint32 addr, uint32 data) override; + + void UpdateInfo(TextScreen&, int x, int y) const override; // エミュレータによる出力 void EmuInitScreen(); @@ -66,11 +69,15 @@ class LunafbDevice : public PlaneVRAMDev void EmuPutc(uint x, uint y, uint c); void EmuPutc(uint x, uint y, uint c, int rop); void EmuScrollY(uint dy, uint sy, uint h); + void SetBMSEL(uint8 bmsel_) { bmsel = bmsel_; } private: // offset の VRAM が変更されたことを記録する inline void SetDirty(uint32 offset); + // X 方向にはみ出したときに対応する仮想画面の Y 座標を返す。 + int GetWrapY(int y) const override; + void WriteRFCNT(uint32); void WriteCommonBitmap8(uint32, uint32); void WriteCommonBitmap16(uint32, uint32); @@ -121,7 +128,12 @@ class LunafbDevice : public PlaneVRAMDev uint fcset[MAX_PLANES] {}; uint32 fcmask[MAX_PLANES] {}; + // ウェイト [nsec] + busdata wait {}; + Monitor monitor { this }; }; -#define gLunafb (dynamic_cast(gPlaneVRAM)) +static inline LunafbDevice *GetLunafbDevice() { + return Object::GetObject(OBJ_PLANEVRAM); +}