|
|
1.1 root 1: //
2: // nono
1.1.1.3 root 3: // Copyright (C) 2020 nono project
4: // Licensed under nono-license.txt
1.1 root 5: //
6:
1.1.1.9 root 7: //
8: // X68030 のメイン空間 ($000000-$FFFFFF) 担当
9: //
10:
1.1 root 11: #pragma once
12:
13: #include "device.h"
1.1.1.4 root 14: #include <array>
1.1 root 15:
1.1.1.8 root 16: class XIOSpaceDevice : public IODevice
1.1 root 17: {
1.1.1.3 root 18: using inherited = IODevice;
1.1 root 19: public:
20: XIOSpaceDevice();
1.1.1.5 root 21: virtual ~XIOSpaceDevice() override;
1.1 root 22:
1.1.1.4 root 23: bool Init() override;
24:
1.1.1.3 root 25: uint64 Read8(uint32 addr) override;
26: uint64 Read16(uint32 addr) override;
27: uint64 Read32(uint32 addr) override;
28: uint64 Write8(uint32 addr, uint32 data) override;
29: uint64 Write16(uint32 addr, uint32 data) override;
30: uint64 Write32(uint32 addr, uint32 data) override;
31: uint64 Peek8(uint32 addr) override;
1.1 root 32:
1.1.1.7 root 33: // ブートページを切り替える。
34: void SwitchBootPage(bool isrom);
35:
1.1 root 36: private:
37: // アドレス addr に対応する IODevice* を返す。
38: // addr は 24bit マスクされていること。
1.1.1.2 root 39: inline IODevice *SearchDevice(uint32 addr) const
1.1 root 40: {
41: uint idx = addr / 8192;
42: __assume(idx < 2048);
43: return table[idx];
44: }
45:
46: void AddDevice(IODevice *dev);
47:
1.1.1.10! root 48: std::unique_ptr<Device> pADPCM {};
1.1.1.9 root 49: std::unique_ptr<Device> pAreaSet {};
50: std::unique_ptr<Device> pCGROM {};
51: std::unique_ptr<Device> pCRTC {};
52: std::unique_ptr<Device> pDMAC {};
53: std::unique_ptr<Device> pFDC {};
54: std::unique_ptr<Device> pGVRAM {};
55: std::unique_ptr<Device> pPEDEC {};
56: std::unique_ptr<Device> pIPLROM1 {};
57: std::unique_ptr<Device> pIPLROM2 {};
58: std::unique_ptr<Device> pMFP {};
59: std::unique_ptr<Device> pPlaneVRAM {};
60: std::unique_ptr<Device> pPluto {};
61: std::unique_ptr<Device> pPPI {};
62: std::unique_ptr<Device> pPrinter {};
63: std::unique_ptr<Device> pRTC {};
64: std::unique_ptr<Device> pSCC {};
65: std::unique_ptr<Device> pSRAM {};
66: std::unique_ptr<Device> pSPC {};
67: std::unique_ptr<Device> pSprite {};
68: std::unique_ptr<Device> pSysport {};
69: std::unique_ptr<Device> pVideoCtlr {};
70: std::unique_ptr<Device> pOPM {};
71:
1.1.1.4 root 72: std::array<IODevice*, 2048> table {};
1.1 root 73: };
1.1.1.6 root 74:
1.1.1.9 root 75: extern XIOSpaceDevice *gXIOSpace;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.