|
|
1.1 root 1: //
2: // nono
3: // Copyright (C) 2024 nono project
4: // Licensed under nono-license.txt
5: //
6:
7: //
1.1.1.2 root 8: // virt-m68k の I/O 空間担当
1.1 root 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:
1.1.1.2 root 25: busdata Read(busaddr addr) override;
26: busdata Write(busaddr addr, uint32 data) override;
27: busdata Peek1(uint32 addr) override;
28: bool Poke1(uint32 addr, uint32 data) override;
1.1 root 29:
30: private:
31: inline IODevice *SearchDevice(uint32 addr) const;
32:
33: std::unique_ptr<IODevice> pGFPIC1 {};
34: std::unique_ptr<IODevice> pGFPIC2 {};
35: std::unique_ptr<IODevice> pGFPIC3 {};
36: std::unique_ptr<IODevice> pGFPIC4 {};
37: std::unique_ptr<IODevice> pGFPIC5 {};
38: std::unique_ptr<IODevice> pGFPIC6 {};
39: std::unique_ptr<IODevice> pGFTimer {};
40: std::unique_ptr<IODevice> pGFRTC {};
41: std::unique_ptr<IODevice> pGFTTY {};
42: std::unique_ptr<IODevice> pPROM {};
43: std::unique_ptr<IODevice> pQemuSysCtlr {};
44: std::unique_ptr<IODevice> pVirtIONone {};
45: std::array<std::unique_ptr<IODevice>, 128> pVirtIO {};
46:
47: IODevice *buserr {};
48:
49: // メインテーブル。
50: // $ff00'xxxx から $1000 ずつ、当面 $ff07'0000 (の手前) まで。
51: std::array<IODevice*, 7 * 16> table {};
52:
53: // VirtIO 用スロット。
54: std::array<IODevice*, 128> viotable {};
55: };
56:
57: static inline V68kIODevice *GetV68kIODevice() {
58: return Object::GetObject<V68kIODevice>(OBJ_V68KIO);
59: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.