|
|
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: bool Init() override;
25:
1.1.1.2 ! 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;
1.1 root 30:
31: private:
32: inline IODevice *SearchDevice(uint32 addr) const;
33:
34: std::unique_ptr<IODevice> pGFPIC1 {};
35: std::unique_ptr<IODevice> pGFPIC2 {};
36: std::unique_ptr<IODevice> pGFPIC3 {};
37: std::unique_ptr<IODevice> pGFPIC4 {};
38: std::unique_ptr<IODevice> pGFPIC5 {};
39: std::unique_ptr<IODevice> pGFPIC6 {};
40: std::unique_ptr<IODevice> pGFTimer {};
41: std::unique_ptr<IODevice> pGFRTC {};
42: std::unique_ptr<IODevice> pGFTTY {};
43: std::unique_ptr<IODevice> pPROM {};
44: std::unique_ptr<IODevice> pQemuSysCtlr {};
45: std::unique_ptr<IODevice> pVirtIONone {};
46: std::array<std::unique_ptr<IODevice>, 128> pVirtIO {};
47:
48: IODevice *buserr {};
49:
50: // メインテーブル。
51: // $ff00'xxxx から $1000 ずつ、当面 $ff07'0000 (の手前) まで。
52: std::array<IODevice*, 7 * 16> table {};
53:
54: // VirtIO 用スロット。
55: std::array<IODevice*, 128> viotable {};
56: };
57:
58: static inline V68kIODevice *GetV68kIODevice() {
59: return Object::GetObject<V68kIODevice>(OBJ_V68KIO);
60: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.