Annotation of nono/vm/bt454.h, revision 1.1.1.2

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;

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.