|
|
1.1 root 1: //
2: // nono
3: // Copyright (C) 2020 nono project
4: // Licensed under nono-license.txt
5: //
6:
1.1.1.7 root 7: //
1.1.1.9 root 8: // PROM (LUNA-I, LUNA-88K 共通)
1.1.1.7 root 9: //
10:
1.1 root 11: #pragma once
12:
13: #include "rom.h"
14:
1.1.1.6 root 15: class PROM0Device : public IODevice
16: {
17: using inherited = IODevice;
18: public:
19: PROM0Device();
1.1.1.10 root 20: ~PROM0Device() override;
1.1.1.6 root 21:
22: bool Init() override;
1.1.1.7 root 23: void ResetHard(bool poweron) override;
1.1.1.6 root 24:
1.1.1.11 root 25: busdata Read(busaddr addr) override;
26: busdata Write(busaddr addr, uint32 data) override;
27: busdata Peek1(uint32 addr) override;
1.1.1.6 root 28:
29: private:
30: // アドレスデコーダ
31: static uint32 Decoder(uint32 addr);
32:
33: // 書き込みの共通部分
1.1.1.10 root 34: busdata Write();
1.1.1.6 root 35:
36: IODevice *prom {};
37: };
38:
1.1.1.5 root 39: class PROMDevice : public ROMDevice
1.1 root 40: {
41: using inherited = ROMDevice;
42: public:
43: PROMDevice();
1.1.1.10 root 44: ~PROMDevice() override;
1.1 root 45:
46: bool Init() override;
47:
1.1.1.11 root 48: uint GetROMVer() const { return romver; }
1.1.1.9 root 49:
1.1 root 50: private:
1.1.1.4 root 51: bool InitLuna1();
1.1 root 52: bool InitLuna88k();
1.1.1.9 root 53:
54: // PROM バージョン。
55: // 100倍した整数形式で持つ。0 ならバージョン不明。
1.1.1.11 root 56: uint romver {};
1.1 root 57: };
58:
1.1.1.12! root 59: inline PROM0Device *GetPROM0Device() {
1.1.1.9 root 60: return Object::GetObject<PROM0Device>(OBJ_PROM_BOOT);
61: }
62:
63: // PROM(現物)と ROMEMU の共通層である ROMDevice を返す。
64: // 区別が必要なら呼び出し側でもう一度 dynamic_cast<> すること。
1.1.1.12! root 65: inline ROMDevice *GetPROMDevice() {
1.1.1.9 root 66: return Object::GetObject<ROMDevice>(OBJ_PROM);
67: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.