--- nono/vm/bitmap.h 2026/04/29 17:04:28 1.1 +++ nono/vm/bitmap.h 2026/04/29 17:04:35 1.1.1.3 @@ -1,17 +1,18 @@ // // nono -// Copyright (C) 2018 isaki@NetBSD.org +// Copyright (C) 2020 nono project +// Licensed under nono-license.txt // #pragma once -#include #include "device.h" +#include class BitmapDevice : public IODevice { - typedef IODevice inherited; + using inherited = IODevice; static const uint32 plane0base = 0xb10c0000; static const uint32 plane7end = 0xb12c0000; @@ -19,18 +20,18 @@ class BitmapDevice static const uint32 fcset7end = 0xb1500000; public: BitmapDevice(); - virtual ~BitmapDevice(); + ~BitmapDevice() override; - virtual void ResetHard(); + void ResetHard() override; - virtual uint64 Read8(uint32 addr); - virtual uint64 Read16(uint32 addr); - virtual uint64 Read32(uint32 addr); - virtual uint64 Write8(uint32 addr, uint32 data); - virtual uint64 Write16(uint32 addr, uint32 data); - virtual uint64 Write32(uint32 addr, uint32 data); - virtual uint64 Peek8(uint32 addr); - virtual bool MonitorUpdate(); + 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; + bool MonitorUpdate() override; // プレーン数を取得 int GetPlaneCount() const { return nplane; } @@ -42,11 +43,16 @@ class BitmapDevice } // ビットマップのアドレスを取得 - const uint8 *GetBuf() const { return mem; } + const uint8 *GetBuf() const { return mem.get(); } // 更新フラグのアドレスを取得 std::atomic *GetDirty() { return atomic_dirty; } + // エミュレータによる出力 + void EmuConsoleOpen(TextScreen *t); + void EmuConsoleUpdate(); + void EmuConsoleClose(); + private: void Invalidate(); void WriteRFCNT(uint32); @@ -84,7 +90,7 @@ class BitmapDevice // ビットマッププレーン。 // ロングワードでホストバイトオーダー。 // 1枚が 256KB。1 or 4枚 - uint8 *mem = NULL; + std::unique_ptr mem {}; // 更新フラグ。 // 更新があったラインは 1、なければ 0。 @@ -95,6 +101,15 @@ class BitmapDevice // ファンクションセットとアクセスマスク u_int fcs[MAX_PLANES] {}; uint32 mask[MAX_PLANES] {}; + + // エミュレータによるコンソール出力 + TextScreen *textscr; + std::unique_ptr prev; + int screen_w; // 桁数 + int screen_h; // 行数 + int origin_x; // 原点 X [dot] + int origin_y; // 原点 Y [dot] + }; -extern BitmapDevice *gBitmap; +extern std::unique_ptr gBitmap;