|
|
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;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.