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

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 {};
                     54: };
                     55: 
1.1.1.2   root       56: 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.