|
|
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.