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

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