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