--- nono/vm/rom.cpp 2026/04/29 17:05:06 1.1.1.8 +++ nono/vm/rom.cpp 2026/04/29 17:05:17 1.1.1.11 @@ -4,8 +4,10 @@ // Licensed under nono-license.txt // -// ROM の共通部分 // +// ROM の基本クラス +// + // IODevice // | // | +-----------+ @@ -18,8 +20,8 @@ // | +-- CGROMDevice (X680x0 の CGROM) // | +-- LunaPROMEmuDevice (LUNA PROM エミュレーションの共通部分) // | | -// | +-- Luna1PROMEmuDevice (LUNA1 の PROM エミュレーション) -// | +-- Luna88kPROMEmuDevice (LUNA88K の PROM エミュレーション) +// | +-- Luna1PROMEmuDevice (LUNA-I の PROM エミュレーション) +// | +-- Luna88kPROMEmuDevice (LUNA-88K の PROM エミュレーション) // | // +-- PROM0Device (LUNA* のブートページ切り替え用プロキシ) // +-- IPLROM0Device (X680x0 のブートページ切り替え用プロキシ) @@ -36,8 +38,8 @@ // ROM 共通部 // -ROMDevice::ROMDevice(const std::string& objname_) - : inherited(objname_) +ROMDevice::ROMDevice(int objid_) + : inherited(objid_) { mask = 0xffffffff; } @@ -93,7 +95,6 @@ ROMDevice::LoadROM(const char *name, int // 大きすぎるほうはワーニングだけでいいか warnx("%s is too large (ignore %zd bytes)", filename.c_str(), (ssize_t)st.st_size - size); - return false; } // 読み込む @@ -116,7 +117,7 @@ ROMDevice::LoadROM(const char *name, int uint64 ROMDevice::Read8(uint32 addr) { - gMPU->AddCycle(wait); + mpu->AddCycle(wait); uint32 data; data = mem[addr & mask]; putlog(4, "$%08x.B -> $%02x", addr, data); @@ -126,9 +127,9 @@ ROMDevice::Read8(uint32 addr) uint64 ROMDevice::Read16(uint32 addr) { - gMPU->AddCycle(wait); + mpu->AddCycle(wait); uint16 data; - data = be16toh(*(uint16 *)&mem[addr & mask]); + data = be16toh(*(const uint16 *)&mem[addr & mask]); putlog(4, "$%08x.W -> $%04x", addr, data); return data; } @@ -136,9 +137,9 @@ ROMDevice::Read16(uint32 addr) uint64 ROMDevice::Read32(uint32 addr) { - gMPU->AddCycle(wait); + mpu->AddCycle(wait); uint32 data; - data = be32toh(*(uint32 *)&mem[addr & mask]); + data = be32toh(*(const uint32 *)&mem[addr & mask]); putlog(4, "$%08x.L -> $%08x", addr, data); return data; } @@ -146,7 +147,7 @@ ROMDevice::Read32(uint32 addr) uint64 ROMDevice::Write8(uint32 addr, uint32 data) { - gMPU->AddCycle(wait); // ? + mpu->AddCycle(wait); // ? putlog(4, "$%08x.B <- $%02x", addr, data); return write_op; } @@ -154,7 +155,7 @@ ROMDevice::Write8(uint32 addr, uint32 da uint64 ROMDevice::Write16(uint32 addr, uint32 data) { - gMPU->AddCycle(wait); // ? + mpu->AddCycle(wait); // ? putlog(4, "$%08x.W <- $%04x", addr, data); return write_op; } @@ -162,7 +163,7 @@ ROMDevice::Write16(uint32 addr, uint32 d uint64 ROMDevice::Write32(uint32 addr, uint32 data) { - gMPU->AddCycle(wait); // ? + mpu->AddCycle(wait); // ? putlog(4, "$%08x.L <- $%08x", addr, data); return write_op; } @@ -172,3 +173,14 @@ ROMDevice::Peek8(uint32 addr) { return mem[addr & mask]; } + +// ファイル名を返す。なければ NULL を返す。 +const char * +ROMDevice::GetFilename() const +{ + if (filename.empty()) { + return NULL; + } else { + return filename.c_str(); + } +}