|
|
nono 0.4.0
//
// nono
// Copyright (C) 2020 nono project
// Licensed under nono-license.txt
//
//
// X68030 のメイン空間 ($000000-$FFFFFF) 担当
//
#pragma once
#include "device.h"
#include <array>
class XIOSpaceDevice : public IODevice
{
using inherited = IODevice;
public:
XIOSpaceDevice();
virtual ~XIOSpaceDevice() override;
bool Init() override;
uint64 Read8(uint32 addr) override;
uint64 Read16(uint32 addr) override;
uint64 Read32(uint32 addr) override;
uint64 Write8(uint32 addr, uint32 data) override;
uint64 Write16(uint32 addr, uint32 data) override;
uint64 Write32(uint32 addr, uint32 data) override;
uint64 Peek8(uint32 addr) override;
// ブートページを切り替える。
void SwitchBootPage(bool isrom);
private:
// アドレス addr に対応する IODevice* を返す。
// addr は 24bit マスクされていること。
inline IODevice *SearchDevice(uint32 addr) const
{
uint idx = addr / 8192;
__assume(idx < 2048);
return table[idx];
}
void AddDevice(IODevice *dev);
std::unique_ptr<Device> pADPCM {};
std::unique_ptr<Device> pAreaSet {};
std::unique_ptr<Device> pCGROM {};
std::unique_ptr<Device> pCRTC {};
std::unique_ptr<Device> pDMAC {};
std::unique_ptr<Device> pFDC {};
std::unique_ptr<Device> pGVRAM {};
std::unique_ptr<Device> pPEDEC {};
std::unique_ptr<Device> pIPLROM1 {};
std::unique_ptr<Device> pIPLROM2 {};
std::unique_ptr<Device> pMFP {};
std::unique_ptr<Device> pPlaneVRAM {};
std::unique_ptr<Device> pPluto {};
std::unique_ptr<Device> pPPI {};
std::unique_ptr<Device> pPrinter {};
std::unique_ptr<Device> pRTC {};
std::unique_ptr<Device> pSCC {};
std::unique_ptr<Device> pSRAM {};
std::unique_ptr<Device> pSPC {};
std::unique_ptr<Device> pSprite {};
std::unique_ptr<Device> pSysport {};
std::unique_ptr<Device> pVideoCtlr {};
std::unique_ptr<Device> pOPM {};
std::array<IODevice*, 2048> table {};
};
extern XIOSpaceDevice *gXIOSpace;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.