|
|
1.1 ! root 1: // ! 2: // nono ! 3: // Copyright (C) 2023 nono project ! 4: // Licensed under nono-license.txt ! 5: // ! 6: ! 7: // ! 8: // Nereid バンクメモリ ! 9: // ! 10: ! 11: #pragma once ! 12: ! 13: #include "device.h" ! 14: ! 15: class BankRAMDevice : public IODevice ! 16: { ! 17: using inherited = IODevice; ! 18: public: ! 19: BankRAMDevice(int objid_, int ram_size_MB); ! 20: virtual ~BankRAMDevice() override; ! 21: ! 22: bool Init() override; ! 23: void ResetHard(bool poweron) override; ! 24: ! 25: uint64 Read8(uint32 addr) override; ! 26: uint64 Read16(uint32 addr) override; ! 27: uint64 Read32(uint32 addr) override; ! 28: uint64 Write8(uint32 addr, uint32 data) override; ! 29: uint64 Write16(uint32 addr, uint32 data) override; ! 30: uint64 Write32(uint32 addr, uint32 data) override; ! 31: uint64 Peek8(uint32 addr) override; ! 32: uint64 Poke8(uint32 addr, uint32 data) override; ! 33: ! 34: // バンクページ取得・設定 ! 35: uint32 GetPage() const { return page; } ! 36: void SetPage(uint32 page); ! 37: ! 38: // バンクメモリ容量 [MB]を取得 (負数は扱わない) ! 39: uint GetSize() const { return ram_size / 1024 / 1024; } ! 40: ! 41: private: ! 42: // アドレスデコーダ ! 43: inline uint32 Decoder(uint32 addr) const; ! 44: ! 45: std::unique_ptr<uint8[]> ram {}; ! 46: uint ram_size {}; ! 47: ! 48: // ページ番号 (レジスタ値、マスク前) ! 49: uint32 page {}; ! 50: ! 51: // ページ番号をリニアアドレスにした状態で保持。 ! 52: uint32 pageaddr {}; ! 53: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.