--- nono/vm/rom.cpp 2026/04/29 17:05:17 1.1.1.11 +++ nono/vm/rom.cpp 2026/04/29 17:05:25 1.1.1.12 @@ -114,66 +114,78 @@ ROMDevice::LoadROM(const char *name, int return true; } -uint64 +busdata ROMDevice::Read8(uint32 addr) { - mpu->AddCycle(wait); - uint32 data; + busdata data; data = mem[addr & mask]; - putlog(4, "$%08x.B -> $%02x", addr, data); + data |= wait; + putlog(4, "$%08x.B -> $%02x", addr, data.Data()); return data; } -uint64 +busdata ROMDevice::Read16(uint32 addr) { - mpu->AddCycle(wait); - uint16 data; + busdata data; data = be16toh(*(const uint16 *)&mem[addr & mask]); - putlog(4, "$%08x.W -> $%04x", addr, data); + data |= wait; + putlog(4, "$%08x.W -> $%04x", addr, data.Data()); return data; } -uint64 +busdata ROMDevice::Read32(uint32 addr) { - mpu->AddCycle(wait); - uint32 data; + busdata data; data = be32toh(*(const uint32 *)&mem[addr & mask]); - putlog(4, "$%08x.L -> $%08x", addr, data); + data |= wait; + putlog(4, "$%08x.L -> $%08x", addr, data.Data()); return data; } -uint64 +busdata ROMDevice::Write8(uint32 addr, uint32 data) { - mpu->AddCycle(wait); // ? + busdata r = write_op; putlog(4, "$%08x.B <- $%02x", addr, data); - return write_op; + r |= wait; + return r; } -uint64 +busdata ROMDevice::Write16(uint32 addr, uint32 data) { - mpu->AddCycle(wait); // ? + busdata r = write_op; putlog(4, "$%08x.W <- $%04x", addr, data); - return write_op; + r |= wait; + return r; } -uint64 +busdata ROMDevice::Write32(uint32 addr, uint32 data) { - mpu->AddCycle(wait); // ? + busdata r = write_op; putlog(4, "$%08x.L <- $%08x", addr, data); - return write_op; + r |= wait; + return r; } -uint64 +busdata ROMDevice::Peek8(uint32 addr) { return mem[addr & mask]; } +// アクセスウェイト [clock] を設定。 +void +ROMDevice::SetWait(uint32 wait_) +{ + uint32 clock_nsec = mpu->GetClock_nsec(); + + wait = busdata::Wait(wait_ * clock_nsec); +} + // ファイル名を返す。なければ NULL を返す。 const char * ROMDevice::GetFilename() const