File:  [Isaki's NoNo m68k/m88k emulator] / nono / vm / xiospace.h
Revision 1.1.1.10 (vendor branch): download - view: text, annotated - select for diffs
Wed Apr 29 17:05:14 2026 UTC (2 months, 3 weeks ago) by root
Branches: MAIN, Isaki
CVS tags: v016, HEAD
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;

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.