--- nono/vm/ram.h 2026/04/29 17:04:28 1.1.1.1 +++ nono/vm/ram.h 2026/04/29 17:05:09 1.1.1.9 @@ -1,31 +1,61 @@ // // nono -// Copyright (C) 2018 isaki@NetBSD.org +// Copyright (C) 2020 nono project +// Licensed under nono-license.txt +// + +// +// メインメモリ // #pragma once #include "device.h" -class RAMDevice - : public IODevice +class RAMDevice : public IODevice { - typedef IODevice inherited; + using inherited = IODevice; public: RAMDevice(); - virtual ~RAMDevice(); + virtual ~RAMDevice() override; + + bool Init() override; + void ResetHard(bool poweron) 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; + + // RAM 容量(バイト単位)を取得 + int GetSize() const { return ram_size; } + // RAM 容量(MB単位)を取得 + int GetSizeMB() const { return (uint)ram_size / 1024 / 1024; } + + // アクセスウェイトを設定 + void SetWait(uint32 wait); + + // ホストの filepath をロードする + uint32 LoadFile(const char *filepath); + // file, filesize で示されるバッファをロードする + uint32 LoadFile(const char *name, const uint8 *file, size_t filesize); + + private: + uint32 LoadGzFile(const char *filepath, const uint8 *file, size_t filesize); + uint32 Load_aout(const char *name, const uint8 *file, size_t filesize); + uint32 Load_elf32(const char *name, const uint8 *file, size_t filesize); + bool Load_elf32_exec(const char *name, const uint8 *file, size_t filesize); + uint32 Load_elf32_rel(const char *name, const uint8 *file, size_t filesize); - virtual bool Init(); + // RAM 容量(バイト単位)。ram[] の確保したバイト数 + int ram_size {}; - virtual uint64 Read8(uint32 addr); - virtual uint64 Read16(uint32 addr); - virtual uint64 Read32(uint32 addr); - virtual uint64 Write8(uint32 addr, uint32 data); - virtual uint64 Write16(uint32 addr, uint32 data); - virtual uint64 Write32(uint32 addr, uint32 data); - virtual uint64 Peek8(uint32 addr); + uint32 read_wait {}; + uint32 write_wait {}; }; -extern uint8 *ram; -extern int ram_size; +extern std::unique_ptr mainram; extern RAMDevice *gRAM;