|
|
1.1 ! root 1: // ! 2: // nono ! 3: // Copyright (C) 2023 nono project ! 4: // Licensed under nono-license.txt ! 5: // ! 6: ! 7: // ! 8: // X68030 勝手に拡張メモリ ! 9: // ! 10: ! 11: #pragma once ! 12: ! 13: #include "device.h" ! 14: ! 15: class ExtRAMDevice : public IODevice ! 16: { ! 17: using inherited = IODevice; ! 18: public: ! 19: ExtRAMDevice(); ! 20: virtual ~ExtRAMDevice() 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: int GetSize() const { return ram_size; } ! 36: // 拡張メモリ容量(MB単位)を取得 ! 37: int GetSizeMB() const { return ram_size / 1024 / 1024; } ! 38: ! 39: private: ! 40: inline uint32 Decoder(uint32) const; ! 41: ! 42: std::unique_ptr<uint8[]> ram {}; ! 43: ! 44: // 拡張メモリの開始アドレス ! 45: uint32 ram_addr {}; ! 46: ! 47: // 拡張メモリ容量(バイト単位)。ram[] の確保したバイト数 ! 48: uint ram_size {}; ! 49: }; ! 50: ! 51: static inline ExtRAMDevice *GetExtRAMDevice() { ! 52: return Object::GetObject<ExtRAMDevice>(OBJ_EXTRAM); ! 53: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.