|
|
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.1.11! root 21: static const uint32 baseaddr = 0xe00000;
1.1 root 22:
1.1.1.8 root 23: // プレーン数は4枚固定
1.1.1.11! root 24: static const uint NPLANE = 4;
1.1.1.8 root 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.10 root 36: ~TVRAMDevice() override;
1.1 root 37:
1.1.1.8 root 38: bool Init() override;
1.1 root 39:
1.1.1.11! root 40: busdata Read(busaddr addr) override;
! 41: busdata Write(busaddr addr, uint32 data) override;
! 42: busdata Peek1(uint32 addr) override;
! 43: bool Poke1(uint32 addr, uint32 data) override;
1.1.1.9 root 44:
45: void UpdateInfo(TextScreen&, int x, int y) const override;
1.1 root 46:
1.1.1.8 root 47: void SetAccessPlane(uint16 data);
48: void SetAccessMask(uint16 data);
1.1.1.3 root 49: void SetScrollX(int x);
50: void SetScrollY(int y);
1.1.1.11! root 51: void RasterCopy(uint src_ras, uint dst_ras);
1.1 root 52:
53: private:
1.1.1.2 root 54: // アドレスデコーダ
1.1.1.10 root 55: uint32 Decoder(uint32 addr) const;
1.1.1.2 root 56:
1.1.1.11! root 57: void Set8(uint32 offset, uint32 poffset, uint32 data, uint32 mask);
! 58: void Set16(uint32 offset, uint32 poffset, uint32 data, uint32 mask);
1.1.1.8 root 59: inline void SetDirty(uint32 offset);
1.1 root 60:
1.1.1.9 root 61: // X 方向にはみ出したときに対応する仮想画面の Y 座標を返す。
62: int GetWrapY(int y) const override;
63:
1.1 root 64: struct tvram tvram {};
1.1.1.9 root 65:
66: Renderer *renderer {};
1.1 root 67: };
68:
1.1.1.9 root 69: static inline TVRAMDevice *GetTVRAMDevice() {
70: return Object::GetObject<TVRAMDevice>(OBJ_PLANEVRAM);
71: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.