|
|
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: // SRAM
9: //
10:
1.1 root 11: #pragma once
12:
13: #include "device.h"
1.1.1.3 root 14: #include "mappedfile.h"
1.1.1.10 root 15: #include <array>
1.1 root 16:
1.1.1.7 root 17: class SRAMDevice : public IODevice
1.1 root 18: {
1.1.1.3 root 19: using inherited = IODevice;
1.1.1.8 root 20:
1.1 root 21: static const uint32 baseaddr = 0xed0000;
22:
1.1.1.12! root 23: // サイズは (今のところ?) 16KB 固定。
! 24: static const uint sramsize = 16 * 1024;
! 25:
1.1.1.3 root 26: // Pluto-X によるホストファイル起動アドレス
27: static const uint32 plutoaddr = 0xeac000;
28:
1.1 root 29: public:
30: SRAMDevice();
1.1.1.11 root 31: ~SRAMDevice() override;
1.1 root 32:
1.1.1.3 root 33: bool Init() override;
1.1.1.8 root 34: void ResetHard(bool poweron) override;
1.1 root 35:
1.1.1.12! root 36: busdata Read(busaddr addr) override;
! 37: busdata Write(busaddr addr, uint32 data) override;
! 38: busdata Peek1(uint32 addr) override;
! 39: bool Poke1(uint32 addr, uint32 data) override;
1.1 root 40:
1.1.1.10 root 41: void WriteEnable(bool value);
1.1.1.11 root 42: bool IsWriteable() const { return writeable; }
1.1.1.10 root 43:
44: // SRAM $ed0008.L RAM 容量を返す (ホストファイル起動用)
45: uint32 GetRAMSize() const { return Get32(0x0008); }
1.1 root 46:
1.1.1.9 root 47: // SRAM $ed000c.L ROM 起動アドレスを返す (romemu 用)
1.1.1.10 root 48: uint32 GetROMAddr() const { return Get32(0x000c); }
49:
50: // SRAM の初期値
51: static std::array<uint8, 0x60> InitialData;
1.1.1.9 root 52:
1.1 root 53: private:
1.1.1.12! root 54: // SRAM の指定の位置の値を副作用なく読み出す
! 55: uint32 Get16(uint32 offset) const;
! 56: uint32 Get32(uint32 offset) const;
! 57:
1.1.1.9 root 58: // RAM 容量欄を設定値に同期させる。
59: void SyncRAMSize();
60:
1.1.1.2 root 61: // アドレスデコーダ
1.1.1.11 root 62: uint32 Decoder(uint32 addr) const;
1.1.1.2 root 63:
1.1.1.3 root 64: // ファイル
65: std::string filename {};
1.1.1.12! root 66: std::unique_ptr<MappedFile> file {};
1.1.1.3 root 67: uint8 *mem {};
1.1 root 68:
1.1.1.4 root 69: bool writeable {};
1.1 root 70: };
71:
1.1.1.10 root 72: static inline SRAMDevice *GetSRAMDevice() {
73: return Object::GetObject<SRAMDevice>(OBJ_SRAM);
74: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.