--- nono/vm/sram.h 2026/04/29 17:04:28 1.1.1.1 +++ nono/vm/sram.h 2026/04/29 17:04:45 1.1.1.5 @@ -1,44 +1,51 @@ // // nono -// Copyright (C) 2017 isaki@NetBSD.org +// Copyright (C) 2020 nono project +// Licensed under nono-license.txt // #pragma once #include "device.h" +#include "mappedfile.h" class SRAMDevice : public IODevice { - typedef IODevice inherited; + using inherited = IODevice; private: static const uint32 baseaddr = 0xed0000; + // Pluto-X によるホストファイル起動アドレス + static const uint32 plutoaddr = 0xeac000; + public: SRAMDevice(); - virtual ~SRAMDevice(); + virtual ~SRAMDevice() override; - virtual bool Init(); + bool Init() override; - virtual uint64 Read8(uint32 addr); - virtual uint64 Read16(uint32 addr); - virtual uint64 Write8(uint32 addr, uint32 data); - virtual uint64 Write16(uint32 addr, uint32 data); - virtual uint64 Peek8(uint32 addr); + uint64 Read8(uint32 addr) override; + uint64 Read16(uint32 addr) override; + uint64 Write8(uint32 addr, uint32 data) override; + uint64 Write16(uint32 addr, uint32 data) override; + uint64 Peek8(uint32 addr) override; void write_enable(bool value); private: - std::string filename; - int fd = 0; + // アドレスデコーダ + uint64 Decoder(uint32 addr) const; - // バイト順はファイルイメージそのまま - uint8 *mem = NULL; + // ファイル + std::string filename {}; + MappedFile file {}; + uint8 *mem {}; - // mmap する長さ - int memlen = 0; + bool writeable {}; - bool writeable = false; + // ホストファイル起動用の読み出し値を返す + uint32 PeekHostBoot(uint32 offset) const; }; -extern SRAMDevice *gSRAM; +extern std::unique_ptr gSRAM;