|
|
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.9 ! root 48: std::unique_ptr<Device> pAreaSet {};
! 49: std::unique_ptr<Device> pCGROM {};
! 50: std::unique_ptr<Device> pCRTC {};
! 51: std::unique_ptr<Device> pDMAC {};
! 52: std::unique_ptr<Device> pFDC {};
! 53: std::unique_ptr<Device> pGVRAM {};
! 54: std::unique_ptr<Device> pPEDEC {};
! 55: std::unique_ptr<Device> pIPLROM1 {};
! 56: std::unique_ptr<Device> pIPLROM2 {};
! 57: std::unique_ptr<Device> pMFP {};
! 58: std::unique_ptr<Device> pPlaneVRAM {};
! 59: std::unique_ptr<Device> pPluto {};
! 60: std::unique_ptr<Device> pPPI {};
! 61: std::unique_ptr<Device> pPrinter {};
! 62: std::unique_ptr<Device> pRTC {};
! 63: std::unique_ptr<Device> pSCC {};
! 64: std::unique_ptr<Device> pSRAM {};
! 65: std::unique_ptr<Device> pSPC {};
! 66: std::unique_ptr<Device> pSprite {};
! 67: std::unique_ptr<Device> pSysport {};
! 68: std::unique_ptr<Device> pVideoCtlr {};
! 69: std::unique_ptr<Device> pOPM {};
! 70:
1.1.1.4 root 71: std::array<IODevice*, 2048> table {};
1.1 root 72: };
1.1.1.6 root 73:
1.1.1.9 ! root 74: extern XIOSpaceDevice *gXIOSpace;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.