--- nono/vm/bt454.h 2026/04/29 17:04:35 1.1.1.3 +++ nono/vm/bt454.h 2026/04/29 17:04:55 1.1.1.7 @@ -22,10 +22,15 @@ struct BT454 // 下位4ビットはとりあえず 0。 uint8 color[3 * 16]; - // addr は次にアクセスされるべき color[] へのインデックス。 - // addr = 0 ならパレット0 の R。 - // addr = 4 ならパレット1 の G。 - int addr; + // idx は次にアクセスされるべき color[] へのインデックス。 + // idx = 0 ならパレット0 の R。 + // idx = 4 ならパレット1 の G。 + // BT454 では R/G/B をカウントするための 3値 2ビットのカウンタ(?)を + // ADDRa,ADDRb (ADDRa,b) と呼んだりしているようなので、ここではその + // modulo 3 を数えるカウンタを ab と呼ぶことにする。つまり + // idx = 0 はパレット 0、ab 0。 + // idx = 4 はパレット 1、ab 1。 + int idx; // ホスト用に変換したパレットデータ。レンダラ側から参照するもので // 4バイトになるようパディングしておく。 @@ -45,15 +50,14 @@ struct BT454 uint8 hostcolor[4 * 16]; }; -class BT454Device - : public IODevice +class BT454Device : public IODevice { using inherited = IODevice; - friend BitmapDevice; // Monitor は Bitmap を間借りしている + friend LunafbDevice; // Monitor は Lunafb を間借りしている public: BT454Device(); - ~BT454Device() override; + virtual ~BT454Device() override; bool Init() override; void ResetHard() override; @@ -61,20 +65,23 @@ class BT454Device // ホストパレットのアドレスを取得 const uint8 *GetHostPalette() const { return reg.hostcolor; } + // BusIO インタフェース + // (内蔵 ROM からのアクセス用に特別に public にしてある) + uint64 Write(uint32 offset, uint32 data); + protected: // BusIO インタフェース static const uint32 NPORT = 4; - uint64 Read(uint32 addr); - uint64 Write(uint32 addr, uint32 data); - uint64 Peek(uint32 addr); + uint64 Read(uint32 offset); + uint64 Peek(uint32 offset); private: // レジスタ値からホストパレットを作成 - void MakeHostColor(int addr); + void MakeHostColor(int idx); BT454 reg {}; - int nplane = 0; // ビットマップのプレーン数 + int nplane {}; // ビットマップのプレーン数 // ログ出力用 static const char rgbstr[3];