|
|
1.1 ! root 1: // ! 2: // nono ! 3: // Copyright (C) 2022 nono project ! 4: // Licensed under nono-license.txt ! 5: // ! 6: ! 7: // ! 8: // XP プロセッサの物理バス ! 9: // ! 10: ! 11: #pragma once ! 12: ! 13: #include "device.h" ! 14: #include <array> ! 15: ! 16: class SubRAM2Device; ! 17: class XPRAMDevice; ! 18: ! 19: // XP 外部バス ! 20: class XPbusDevice : public IOContainerDevice ! 21: { ! 22: using inherited = IOContainerDevice; ! 23: public: ! 24: XPbusDevice(); ! 25: ~XPbusDevice() override; ! 26: ! 27: bool Init() override; ! 28: void ResetHard(bool poweron) override; ! 29: ! 30: // addr はそれぞれアラインされていること。 ! 31: uint64 Read8(uint32 addr) override; ! 32: uint64 Read16(uint32 addr) override; ! 33: uint64 Read32(uint32 addr) override; ! 34: uint64 Write8(uint32 addr, uint32 data) override; ! 35: uint64 Write16(uint32 addr, uint32 data) override; ! 36: uint64 Write32(uint32 addr, uint32 data) override; ! 37: uint64 Peek8(uint32 addr) override; ! 38: ! 39: // RAM Control Register (RMCR) を設定/取得 ! 40: uint32 GetRMCR() const; ! 41: void SetRMCR(uint32); ! 42: // 内蔵 RAM の先頭番地を取得 (モニタ用) ! 43: uint32 GetXPRAMAddr() const { return ram_addr; } ! 44: ! 45: protected: ! 46: IODevice *GetDevice(uint32 addr) const override; ! 47: ! 48: private: ! 49: inline IODevice *SearchDevice(uint32 addr) const; ! 50: ! 51: // 3port RAM (非共有部) ! 52: std::unique_ptr<SubRAM2Device> pSubRAM2 /*{}*/; ! 53: // XP 内蔵 512 バイト RAM ! 54: std::unique_ptr<XPRAMDevice> pXPRAM /*{}*/; ! 55: ! 56: // XP 内蔵 512 バイト RAM の位置 ! 57: uint32 ram_addr {}; ! 58: ! 59: IODevice *subram {}; // 共有 SRAM ! 60: IODevice *nopio {}; ! 61: }; ! 62: ! 63: // XP 内蔵 RAM ! 64: class XPRAMDevice : public IODevice ! 65: { ! 66: using inherited = IODevice; ! 67: public: ! 68: XPRAMDevice(); ! 69: ~XPRAMDevice() override; ! 70: ! 71: uint64 Read8(uint32 addr) override; ! 72: uint64 Read16(uint32 addr) override; ! 73: uint64 Read32(uint32 addr) override; ! 74: uint64 Write8(uint32 addr, uint32 data) override; ! 75: uint64 Write16(uint32 addr, uint32 data) override; ! 76: uint64 Write32(uint32 addr, uint32 data) override; ! 77: uint64 Peek8(uint32 addr) override; ! 78: uint64 Poke8(uint32 addr, uint32 data) override; ! 79: ! 80: private: ! 81: std::array<uint8, 512> ram {}; ! 82: }; ! 83: ! 84: static inline XPbusDevice *GetXPbusDevice() { ! 85: return Object::GetObject<XPbusDevice>(OBJ_XPBUS); ! 86: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.