--- nono/vm/rom.h 2026/04/29 17:04:59 1.1.1.7 +++ nono/vm/rom.h 2026/04/29 17:05:25 1.1.1.11 @@ -4,6 +4,10 @@ // Licensed under nono-license.txt // +// +// ROM の基本クラス +// + #pragma once #include "device.h" @@ -12,25 +16,28 @@ class ROMDevice : public IODevice { using inherited = IODevice; public: - ROMDevice(const std::string& objname_); - virtual ~ROMDevice() override; + ROMDevice(int objid_); + ~ROMDevice() override; + + busdata Read8(uint32 addr) override; + busdata Read16(uint32 addr) override; + busdata Read32(uint32 addr) override; + busdata Write8(uint32 addr, uint32 data) override; + busdata Write16(uint32 addr, uint32 data) override; + busdata Write32(uint32 addr, uint32 data) override; + busdata Peek8(uint32 addr) 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; + // ファイル名を取得。なければ NULL。 + const char *GetFilename() const; - // アクセスウェイトを設定 - void SetWait(uint32 wait_) { wait = wait_; } + // アクセスウェイト [clock] を取得/設定 + void SetWait(uint32 wait_); protected: bool LoadROM(const char *name, int size); // Read*()/Peek8() がアクセスするメモリ領域をさすポインタ。 - uint8 *mem {}; + const uint8 *mem {}; // アクセスマスク。 // LUNA の PROM のように、この ROM の折り返しミラーが見える構造なら @@ -48,8 +55,8 @@ class ROMDevice : public IODevice // ライトアクセス時の動作 (Write*() の戻り値)。 // 派生クラスが指定すること。 - uint64 write_op {}; + busdata write_op {}; // アクセスウェイト - uint32 wait {}; + busdata wait {}; };