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

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;

unix.superglobalmegacorp.com

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