|
|
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.