|
|
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: // ホストパレットのアドレスを取得
61: const uint8 *GetHostPalette() const { return reg.hostcolor; }
62:
1.1.1.2 ! root 63: protected:
! 64: // BusIO インタフェース
! 65: static const uint32 NPORT = 4;
! 66: uint64 Read(uint32 addr);
! 67: uint64 Write(uint32 addr, uint32 data);
! 68: uint64 Peek(uint32 addr);
! 69:
1.1 root 70: private:
71: // レジスタ値からホストパレットを作成
72: void MakeHostColor(int addr);
73:
74: BT454 reg {};
75:
76: int nplane = 0; // ビットマップのプレーン数
77:
78: // ログ出力用
79: static const char rgbstr[3];
80: };
81:
1.1.1.2 ! root 82: 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.