|
|
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:
1.1.1.8 root 7: //
8: // TVRAM
9: //
10:
1.1 root 11: #pragma once
12:
1.1.1.8 root 13: #include "planevram.h"
1.1 root 14:
1.1.1.9 ! root 15: class Renderer;
! 16:
1.1.1.8 root 17: class TVRAMDevice : public PlaneVRAMDevice
1.1 root 18: {
1.1.1.8 root 19: using inherited = PlaneVRAMDevice;
20:
1.1 root 21: static const int baseaddr = 0xe00000;
22:
1.1.1.8 root 23: // プレーン数は4枚固定
24: static const int NPLANE = 4;
25:
1.1 root 26: struct tvram {
27: bool sa; // 同時アクセス
1.1.1.8 root 28: bool ap[NPLANE]; // 同時アクセスプレーン
29: bool cp[NPLANE]; // ラスターコピー対象
30: bool men; // アクセスマスクイネーブル
31: uint16 mask; // アクセスマスク
1.1 root 32: };
33:
34: public:
35: TVRAMDevice();
1.1.1.6 root 36: virtual ~TVRAMDevice() override;
1.1 root 37:
1.1.1.8 root 38: bool Init() override;
39: void ResetHard(bool poweron) override;
1.1 root 40:
1.1.1.3 root 41: uint64 Read8(uint32 addr) override;
42: uint64 Read16(uint32 addr) override;
43: uint64 Write8(uint32 addr, uint32 data) override;
44: uint64 Write16(uint32 addr, uint32 data) override;
45: uint64 Peek8(uint32 addr) override;
1.1.1.9 ! root 46: uint64 Poke8(uint32 addr, uint32 data) override;
! 47:
! 48: void UpdateInfo(TextScreen&, int x, int y) const override;
1.1 root 49:
1.1.1.8 root 50: void SetAccessPlane(uint16 data);
51: void SetAccessMask(uint16 data);
1.1.1.3 root 52: void SetScrollX(int x);
53: void SetScrollY(int y);
1.1.1.8 root 54: void RasterCopy(int src_ras, int dst_ras);
1.1 root 55:
56: private:
1.1.1.2 root 57: // アドレスデコーダ
58: uint64 Decoder(uint32 addr) const;
59:
1.1.1.8 root 60: inline void SetDirty(uint32 offset);
1.1 root 61:
1.1.1.9 ! root 62: // X 方向にはみ出したときに対応する仮想画面の Y 座標を返す。
! 63: int GetWrapY(int y) const override;
! 64:
1.1 root 65: struct tvram tvram {};
1.1.1.9 ! root 66:
! 67: Renderer *renderer {};
1.1 root 68: };
69:
1.1.1.9 ! root 70: static inline TVRAMDevice *GetTVRAMDevice() {
! 71: return Object::GetObject<TVRAMDevice>(OBJ_PLANEVRAM);
! 72: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.