|
|
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.10! root 25: busdata Read8(uint32 addr) override;
! 26: busdata Read16(uint32 addr) override;
! 27: busdata Read32(uint32 addr) override;
! 28: busdata Write8(uint32 addr, uint32 data) override;
! 29: busdata Write16(uint32 addr, uint32 data) override;
! 30: busdata Write32(uint32 addr, uint32 data) override;
! 31: busdata Peek8(uint32 addr) override;
1.1.1.6 root 32:
33: private:
34: // アドレスデコーダ
35: static uint32 Decoder(uint32 addr);
36:
37: // 書き込みの共通部分
1.1.1.10! root 38: busdata Write();
1.1.1.6 root 39:
40: IODevice *prom {};
41: };
42:
1.1.1.5 root 43: class PROMDevice : public ROMDevice
1.1 root 44: {
45: using inherited = ROMDevice;
46: public:
47: PROMDevice();
1.1.1.10! root 48: ~PROMDevice() override;
1.1 root 49:
50: bool Init() override;
51:
1.1.1.9 root 52: int GetROMVer() const { return romver; }
53:
1.1 root 54: private:
1.1.1.4 root 55: bool InitLuna1();
1.1 root 56: bool InitLuna88k();
1.1.1.9 root 57:
58: // PROM バージョン。
59: // 100倍した整数形式で持つ。0 ならバージョン不明。
60: int romver {};
1.1 root 61: };
62:
1.1.1.9 root 63: static inline PROM0Device *GetPROM0Device() {
64: return Object::GetObject<PROM0Device>(OBJ_PROM_BOOT);
65: }
66:
67: // PROM(現物)と ROMEMU の共通層である ROMDevice を返す。
68: // 区別が必要なら呼び出し側でもう一度 dynamic_cast<> すること。
69: static inline ROMDevice *GetPROMDevice() {
70: return Object::GetObject<ROMDevice>(OBJ_PROM);
71: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.