Annotation of nono/vm/tvram.h, revision 1.1.1.4

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: #include <atomic>
                     11: 
                     12: class TVRAMDevice
                     13:        : public IODevice
                     14: {
1.1.1.3   root       15:        using inherited = IODevice;
1.1       root       16:  private:
                     17:        static const int baseaddr = 0xe00000;
                     18: 
                     19:        struct tvram {
                     20:                bool sa;                                // 同時アクセス
                     21:                bool ap[4];                             // 同時アクセスプレーン
1.1.1.3   root       22:                int xscroll;                    // X スクロール
                     23:                int yscroll;                    // Y スクロール
1.1       root       24:        };
                     25: 
                     26:  public:
                     27:        TVRAMDevice();
1.1.1.3   root       28:        ~TVRAMDevice() override;
1.1       root       29: 
1.1.1.3   root       30:        void ResetHard() override;
1.1       root       31: 
1.1.1.3   root       32:        uint64 Read8(uint32 addr) override;
                     33:        uint64 Read16(uint32 addr) override;
                     34:        uint64 Write8(uint32 addr, uint32 data) override;
                     35:        uint64 Write16(uint32 addr, uint32 data) override;
                     36:        uint64 Peek8(uint32 addr) override;
1.1       root       37: 
                     38:        void set_crtc_21(uint16 data);
1.1.1.3   root       39:        void SetScrollX(int x);
                     40:        void SetScrollY(int y);
1.1       root       41: 
                     42:        bool Render(uint8 *);
                     43: 
                     44:  private:
1.1.1.2   root       45:        // アドレスデコーダ
                     46:        uint64 Decoder(uint32 addr) const;
                     47: 
1.1       root       48:        void Invalidate();
                     49: 
1.1.1.2   root       50:        std::unique_ptr<uint8[]> mem {};
1.1       root       51:        // XXX 実際には縦がこれ以上になる可能性はある
                     52:        std::atomic<uint8> atomic_dirty[1024] {};
                     53:        struct tvram tvram {};
1.1.1.4 ! root       54: 
        !            55:        // レンダリング時に使う変換テーブル
        !            56:        static uint32 deptable[256];
        !            57: 
        !            58:        // RGB24 形式(3バイト)を4バイトあるいは SSE なら 16バイト単位で
        !            59:        // 書き込むための1ライン分の中間バッファ。
        !            60:        ALIGNAS_IF_X86(16) uint32 rb[768];
1.1       root       61: };
                     62: 
1.1.1.2   root       63: extern std::unique_ptr<TVRAMDevice> gTVRAM;

unix.superglobalmegacorp.com

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