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

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