|
|
1.1 ! root 1: // ! 2: // nono ! 3: // Copyright (C) 2020 nono project ! 4: // Licensed under nono-license.txt ! 5: // ! 6: ! 7: // ! 8: // メインメモリ ! 9: // ! 10: ! 11: #pragma once ! 12: ! 13: #include "device.h" ! 14: #include "bootloader.h" ! 15: ! 16: class MainRAMDevice : public IODevice ! 17: { ! 18: using inherited = IODevice; ! 19: public: ! 20: MainRAMDevice(); ! 21: virtual ~MainRAMDevice() override; ! 22: ! 23: bool Init() override; ! 24: void ResetHard(bool poweron) override; ! 25: ! 26: uint64 Read8(uint32 addr) override; ! 27: uint64 Read16(uint32 addr) override; ! 28: uint64 Read32(uint32 addr) override; ! 29: uint64 Write8(uint32 addr, uint32 data) override; ! 30: uint64 Write16(uint32 addr, uint32 data) override; ! 31: uint64 Write32(uint32 addr, uint32 data) override; ! 32: uint64 Peek8(uint32 addr) override; ! 33: uint64 Poke8(uint32 addr, uint32 data) override; ! 34: ! 35: // RAM 容量(バイト単位)を取得 ! 36: int GetSize() const { return ram_size; } ! 37: // RAM 容量(MB単位)を取得 ! 38: int GetSizeMB() const { return (uint)ram_size / 1024 / 1024; } ! 39: ! 40: // アクセスウェイトを設定 ! 41: void SetWait(uint32 wait); ! 42: ! 43: // path で指定されたホストファイルをロードする ! 44: bool LoadFromFile(LoadInfo *); ! 45: // data, size で指定されたバッファをロードする ! 46: bool LoadFromData(LoadInfo *); ! 47: ! 48: static std::unique_ptr<uint8[]> mainram; ! 49: ! 50: private: ! 51: // RAM 容量(バイト単位)。ram[] の確保したバイト数 ! 52: int ram_size {}; ! 53: ! 54: uint32 read_wait {}; ! 55: uint32 write_wait {}; ! 56: }; ! 57: ! 58: static inline MainRAMDevice *GetMainRAMDevice() { ! 59: return Object::GetObject<MainRAMDevice>(OBJ_MAINRAM); ! 60: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.