|
|
1.1 root 1: //
2: // nono
3: // Copyright (C) 2024 nono project
4: // Licensed under nono-license.txt
5: //
6:
7: //
8: // virt68k の I/O 空間担当
9: //
10:
11: #pragma once
12:
13: #include "device.h"
14: #include <array>
15:
16: class V68kIODevice : public IODevice
17: {
18: using inherited = IODevice;
19: public:
20: V68kIODevice();
21: ~V68kIODevice() override;
22:
23: bool Create() override;
24: bool Init() override;
25:
26: busdata Read8(uint32 addr) override;
27: busdata Read16(uint32 addr) override;
28: busdata Read32(uint32 addr) override;
29: busdata Write8(uint32 addr, uint32 data) override;
30: busdata Write16(uint32 addr, uint32 data) override;
31: busdata Write32(uint32 addr, uint32 data) override;
32: busdata Peek8(uint32 addr) override;
33: bool Poke8(uint32 addr, uint32 data) override;
34:
35: private:
36: inline IODevice *SearchDevice(uint32 addr) const;
37:
38: std::unique_ptr<IODevice> pGFPIC1 {};
39: std::unique_ptr<IODevice> pGFPIC2 {};
40: std::unique_ptr<IODevice> pGFPIC3 {};
41: std::unique_ptr<IODevice> pGFPIC4 {};
42: std::unique_ptr<IODevice> pGFPIC5 {};
43: std::unique_ptr<IODevice> pGFPIC6 {};
44: std::unique_ptr<IODevice> pGFTimer {};
45: std::unique_ptr<IODevice> pGFRTC {};
46: std::unique_ptr<IODevice> pGFTTY {};
47: std::unique_ptr<IODevice> pPROM {};
48: std::unique_ptr<IODevice> pQemuSysCtlr {};
49: std::unique_ptr<IODevice> pVirtIONone {};
50: std::array<std::unique_ptr<IODevice>, 128> pVirtIO {};
51:
52: IODevice *buserr {};
53:
54: // メインテーブル。
55: // $ff00'xxxx から $1000 ずつ、当面 $ff07'0000 (の手前) まで。
56: std::array<IODevice*, 7 * 16> table {};
57:
58: // VirtIO 用スロット。
59: std::array<IODevice*, 128> viotable {};
60: };
61:
62: static inline V68kIODevice *GetV68kIODevice() {
63: return Object::GetObject<V68kIODevice>(OBJ_V68KIO);
64: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.