|
|
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:
15: // サブメモリ (基本クラス)
16: class SubRAMBaseDevice : public IODevice
17: {
18: using inherited = IODevice;
19: public:
1.1.1.3 root 20: SubRAMBaseDevice(uint objid_, uint ramsize_kb);
1.1.1.2 root 21: ~SubRAMBaseDevice() override;
1.1 root 22:
1.1.1.4 root 23: bool Init() override;
1.1 root 24: void ResetHard(bool poweron) override;
25:
1.1.1.3 root 26: busdata Read(busaddr addr) override;
27: busdata Write(busaddr addr, uint32 data) override;
28: busdata Peek1(uint32 addr) override;
29: bool Poke1(uint32 addr, uint32 data) override;
30:
31: // XP からのバイトアクセス
32: busdata Read1(uint32 addr) override;
33: busdata Write1(uint32 addr, uint32 data) override;
34:
35: // Lance からのワードアクセス (これは override ではない)
36: busdata Read2(uint32 addr);
37: busdata Write2(uint32 addr, uint32 data);
38: busdata Peek2(uint32 addr) const;
1.1 root 39:
40: private:
41: // アドレスデコーダ
1.1.1.2 root 42: uint32 Decoder(uint32 addr) const;
1.1 root 43:
1.1.1.3 root 44: // RAM 容量(バイト単位)を取得
45: uint GetSize() const { return mask + 1; }
46:
1.1 root 47: std::unique_ptr<uint8[]> ram {};
1.1.1.3 root 48: uint32 mask {};
1.1 root 49: };
50:
51: // サブメモリ (XP/Lance との共有 RAM)
52: class SubRAMDevice : public SubRAMBaseDevice
53: {
54: using inherited = SubRAMBaseDevice;
55: public:
1.1.1.3 root 56: explicit SubRAMDevice(uint ramsize_kb);
1.1 root 57: ~SubRAMDevice() override;
58:
59: void ResetHard(bool poweron) override;
60: };
61:
1.1.1.3 root 62: // サブメモリ 2 (XP の非共有部)
1.1 root 63: class SubRAM2Device : public SubRAMBaseDevice
64: {
65: using inherited = SubRAMBaseDevice;
66: public:
1.1.1.3 root 67: explicit SubRAM2Device(uint ramsize_kb);
1.1 root 68: ~SubRAM2Device() override;
69: };
70:
1.1.1.5 ! root 71: inline SubRAMDevice *GetSubRAMDevice() {
1.1 root 72: return Object::GetObject<SubRAMDevice>(OBJ_SUBRAM);
73: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.