--- nono/vm/bitmap.h 2026/04/29 17:04:28 1.1.1.1 +++ nono/vm/bitmap.h 2026/04/29 17:04:52 1.1.1.7 @@ -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,20 @@ class BitmapDevice static const uint32 fcset7end = 0xb1500000; public: BitmapDevice(); - virtual ~BitmapDevice(); - - virtual void ResetHard(); + virtual ~BitmapDevice() 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(); + bool Init() override; + bool PowerOn() override; + void ResetHard() 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; + void MonitorUpdate(TextScreen&) override; // プレーン数を取得 int GetPlaneCount() const { return nplane; } @@ -42,11 +45,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); @@ -64,14 +72,14 @@ class BitmapDevice static const int MAX_PLANES = 8; // プレーン数 (設定による) - int nplane = 0; + int nplane {}; // RFCNT // b31..b24 b23..b16 b15..b10 b09..b00 // 無効 水平カウンタ 無効 ラスタカウンタ - uint32 rfcnt = 0; - int hscroll = 0; - int vscroll = 0; + uint32 rfcnt {}; + int hscroll {}; + int vscroll {}; // プレーンセレクタ // b31...b4 b3 b2 b1 b0 @@ -79,12 +87,12 @@ class BitmapDevice // | | +----- プレーン1 // | +-------- プレーン2 // +----------- プレーン3 - uint32 bmsel = 0; + uint32 bmsel {}; // ビットマッププレーン。 // ロングワードでホストバイトオーダー。 // 1枚が 256KB。1 or 4枚 - uint8 *mem = NULL; + std::unique_ptr mem {}; // 更新フラグ。 // 更新があったラインは 1、なければ 0。 @@ -95,6 +103,14 @@ class BitmapDevice // ファンクションセットとアクセスマスク u_int fcs[MAX_PLANES] {}; uint32 mask[MAX_PLANES] {}; + + // エミュレータによるコンソール出力 + TextScreen *textscr {}; + std::vector 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;