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