|
|
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.3 root 23: // Pluto-X によるホストファイル起動アドレス
24: static const uint32 plutoaddr = 0xeac000;
25:
1.1 root 26: public:
27: SRAMDevice();
1.1.1.11! root 28: ~SRAMDevice() override;
1.1 root 29:
1.1.1.3 root 30: bool Init() override;
1.1.1.8 root 31: void ResetHard(bool poweron) override;
1.1 root 32:
1.1.1.11! root 33: busdata Read8(uint32 addr) override;
! 34: busdata Read16(uint32 addr) override;
! 35: busdata Write8(uint32 addr, uint32 data) override;
! 36: busdata Write16(uint32 addr, uint32 data) override;
! 37: busdata Peek8(uint32 addr) override;
! 38: bool Poke8(uint32 addr, uint32 data) override;
1.1 root 39:
1.1.1.10 root 40: void WriteEnable(bool value);
1.1.1.11! root 41: bool IsWriteable() const { return writeable; }
1.1.1.10 root 42:
43: // SRAM の指定の位置の値を副作用なく読み出す
44: uint32 Get8(uint32 offset) const;
45: uint32 Get16(uint32 offset) const;
46: uint32 Get32(uint32 offset) const;
47:
48: // SRAM $ed0008.L RAM 容量を返す (ホストファイル起動用)
49: uint32 GetRAMSize() const { return Get32(0x0008); }
1.1 root 50:
1.1.1.9 root 51: // SRAM $ed000c.L ROM 起動アドレスを返す (romemu 用)
1.1.1.10 root 52: uint32 GetROMAddr() const { return Get32(0x000c); }
53:
54: // SRAM の初期値
55: static std::array<uint8, 0x60> InitialData;
1.1.1.9 root 56:
1.1 root 57: private:
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 {};
66: MappedFile file {};
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.