Annotation of nono/vm/xpbus.h, revision 1.1.1.1

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: }

unix.superglobalmegacorp.com

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