--- nono/vm/rom.cpp 2026/04/29 17:05:25 1.1.1.12 +++ nono/vm/rom.cpp 2026/04/29 17:05:29 1.1.1.13 @@ -38,7 +38,7 @@ // ROM 共通部 // -ROMDevice::ROMDevice(int objid_) +ROMDevice::ROMDevice(uint objid_) : inherited(objid_) { mask = 0xffffffff; @@ -52,11 +52,11 @@ ROMDevice::~ROMDevice() // name はパスを含まないファイル名のみ。パスはこちらで探す。 // 失敗した場合はエラーメッセージを表示して false を返す。 bool -ROMDevice::LoadROM(const char *name, int size) +ROMDevice::LoadROM(const char *name, uint size) { struct stat st; - assert(size > 0); + assert(size != 0); // ファイル名 filename = gMainApp.SearchFile(name); @@ -68,7 +68,7 @@ ROMDevice::LoadROM(const char *name, int // メモリを確保 imagebuf.reset(new uint8 [size]); if ((bool)imagebuf == false) { - warnx("ROM \"%s\": Cannot allocate memory (%d bytes)", + warnx("ROM \"%s\": Cannot allocate memory (%u bytes)", filename.c_str(), size); return false; } @@ -87,14 +87,14 @@ ROMDevice::LoadROM(const char *name, int } if (st.st_size < size) { - warnx("ROM \"%s\" is too short (filesize is expected %d but %jd)", + warnx("ROM \"%s\" is too short (filesize is expected %u but %jd)", filename.c_str(), size, (intmax_t)st.st_size); return false; } if (st.st_size > size) { // 大きすぎるほうはワーニングだけでいいか - warnx("%s is too large (ignore %zd bytes)", - filename.c_str(), (ssize_t)st.st_size - size); + warnx("%s is too large (ignore %zu bytes)", + filename.c_str(), (size_t)st.st_size - size); } // 読み込む @@ -115,64 +115,31 @@ ROMDevice::LoadROM(const char *name, int } busdata -ROMDevice::Read8(uint32 addr) +ROMDevice::Read(busaddr addr) { busdata data; - data = mem[addr & mask]; - data |= wait; - putlog(4, "$%08x.B -> $%02x", addr, data.Data()); - return data; -} - -busdata -ROMDevice::Read16(uint32 addr) -{ - busdata data; - data = be16toh(*(const uint16 *)&mem[addr & mask]); - data |= wait; - putlog(4, "$%08x.W -> $%04x", addr, data.Data()); - return data; -} -busdata -ROMDevice::Read32(uint32 addr) -{ - busdata data; - data = be32toh(*(const uint32 *)&mem[addr & mask]); + uint32 paddr = addr.Addr() & ~3U; + data = be32toh(*(const uint32 *)&mem[paddr & mask]); data |= wait; - putlog(4, "$%08x.L -> $%08x", addr, data.Data()); + data |= BusData::Size4; + putlog(4, "$%08x -> $%08x", paddr, data.Data()); return data; } busdata -ROMDevice::Write8(uint32 addr, uint32 data) -{ - busdata r = write_op; - putlog(4, "$%08x.B <- $%02x", addr, data); - r |= wait; - return r; -} - -busdata -ROMDevice::Write16(uint32 addr, uint32 data) -{ - busdata r = write_op; - putlog(4, "$%08x.W <- $%04x", addr, data); - r |= wait; - return r; -} - -busdata -ROMDevice::Write32(uint32 addr, uint32 data) +ROMDevice::Write(busaddr addr, uint32 data) { busdata r = write_op; - putlog(4, "$%08x.L <- $%08x", addr, data); + putlog(4, "$%08x.%u <- $%0*x", addr.Addr(), addr.GetSize(), + addr.GetSize() * 2, data); r |= wait; + r |= BusData::Size4; return r; } busdata -ROMDevice::Peek8(uint32 addr) +ROMDevice::Peek1(uint32 addr) { return mem[addr & mask]; }