|
|
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.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.10! root 40: busdata Read8(uint32 addr) override;
! 41: busdata Read16(uint32 addr) override;
! 42: busdata Write8(uint32 addr, uint32 data) override;
! 43: busdata Write16(uint32 addr, uint32 data) override;
! 44: busdata Peek8(uint32 addr) override;
! 45: bool Poke8(uint32 addr, uint32 data) override;
1.1.1.9 root 46:
47: void UpdateInfo(TextScreen&, int x, int y) const override;
1.1 root 48:
1.1.1.8 root 49: void SetAccessPlane(uint16 data);
50: void SetAccessMask(uint16 data);
1.1.1.3 root 51: void SetScrollX(int x);
52: void SetScrollY(int y);
1.1.1.8 root 53: void RasterCopy(int src_ras, int dst_ras);
1.1 root 54:
55: private:
1.1.1.2 root 56: // アドレスデコーダ
1.1.1.10! root 57: uint32 Decoder(uint32 addr) const;
1.1.1.2 root 58:
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.