|
|
1.1 root 1: //
2: // nono
1.1.1.3 root 3: // Copyright (C) 2020 nono project
4: // Licensed under nono-license.txt
1.1 root 5: //
6:
7: #pragma once
8:
9: #include "device.h"
10:
11: struct BT454
12: {
13: // パレットは R, G, B の順に格納されている。
14: // color[0] = パレット0 R
15: // color[1] = パレット0 G
16: // color[2] = パレット0 B
17: // color[3] = パレット1 R
18: // :
19: // color[47] = パレット15 B
20: //
21: // 色深度は 4ビットで上位4ビットに格納されている。
22: // 下位4ビットはとりあえず 0。
23: uint8 color[3 * 16];
24:
25: // addr は次にアクセスされるべき color[] へのインデックス。
26: // addr = 0 ならパレット0 の R。
27: // addr = 4 ならパレット1 の G。
28: int addr;
29:
30: // ホスト用に変換したパレットデータ。レンダラ側から参照するもので
31: // 4バイトになるようパディングしておく。
32: // [0] パレット0 R
33: // [1] パレット0 G
34: // [2] パレット0 B
35: // [3] padding
36: // :
37: // ホスト用なので各8ビット、といいつつ元レジスタが上位4ビットのみ有効で
38: // 下位4ビットは 0 なのでここでは手抜きしてその値をそのまま流用する。
39: // つまり $f (最も明るい) は 255 ではなく 240。
40: //
41: // また 1bpp モードなら R,G,B のうち G だけが使われるので、ここで
42: // 展開する。パレットのうち実際には #14 と #15 だけが使われるが、
43: // それについてはレンダラ側で処理している。
44: // see https://twitter.com/tsutsuii/status/356704682514714625
45: uint8 hostcolor[4 * 16];
46: };
47:
48: class BT454Device
49: : public IODevice
50: {
1.1.1.3 root 51: using inherited = IODevice;
1.1 root 52: friend BitmapDevice; // Monitor は Bitmap を間借りしている
53:
54: public:
55: BT454Device();
1.1.1.5 ! root 56: virtual ~BT454Device() override;
1.1 root 57:
1.1.1.3 root 58: bool Init() override;
59: void ResetHard() override;
1.1 root 60:
61: // ホストパレットのアドレスを取得
62: const uint8 *GetHostPalette() const { return reg.hostcolor; }
63:
1.1.1.2 root 64: protected:
65: // BusIO インタフェース
66: static const uint32 NPORT = 4;
67: uint64 Read(uint32 addr);
68: uint64 Write(uint32 addr, uint32 data);
69: uint64 Peek(uint32 addr);
70:
1.1 root 71: private:
72: // レジスタ値からホストパレットを作成
73: void MakeHostColor(int addr);
74:
75: BT454 reg {};
76:
1.1.1.4 root 77: int nplane {}; // ビットマップのプレーン数
1.1 root 78:
79: // ログ出力用
80: static const char rgbstr[3];
81: };
82:
1.1.1.2 root 83: extern std::unique_ptr<BT454Device> gBT454;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.