--- nono/vm/rom.h 2026/04/29 17:04:55 1.1.1.6 +++ nono/vm/rom.h 2026/04/29 17:04:59 1.1.1.7 @@ -7,7 +7,6 @@ #pragma once #include "device.h" -#include "mappedfile.h" class ROMDevice : public IODevice { @@ -16,8 +15,6 @@ class ROMDevice : public IODevice ROMDevice(const std::string& objname_); virtual ~ROMDevice() override; - void ResetHard() override; - uint64 Read8(uint32 addr) override; uint64 Read16(uint32 addr) override; uint64 Read32(uint32 addr) override; @@ -32,18 +29,26 @@ class ROMDevice : public IODevice protected: bool LoadROM(const char *name, int size); - // アドレスマスク + // Read*()/Peek8() がアクセスするメモリ領域をさすポインタ。 + uint8 *mem {}; + + // アクセスマスク。 + // LUNA の PROM のように、この ROM の折り返しミラーが見える構造なら + // このアクセスマスクを設定すること。 + // X680x0 の各 ROM などはミラーが不要なのでコンストラクタで初期化される + // 0xffffffff のままでよい。 uint32 mask {}; - // オープンしているファイル + // ファイル名 std::string filename {}; - MappedFile file {}; - // メモリ領域をさすポインタ。 - // 通常は ROM イメージファイルを読み込むだけなので - // mem = file.GetPtr() となる。 - // ROM イメージを自分で用意したい場合はこれを適当なところにむけてどうぞ。 - uint8 *mem {}; + // イメージ + // (ファイルから読み込んだ内容、あるいは自分で作ったバッファ) + std::unique_ptr imagebuf {}; + + // ライトアクセス時の動作 (Write*() の戻り値)。 + // 派生クラスが指定すること。 + uint64 write_op {}; // アクセスウェイト uint32 wait {};