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

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;

unix.superglobalmegacorp.com

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