--- nono/vm/ram.cpp 2026/04/29 17:04:50 1.1.1.7 +++ nono/vm/ram.cpp 2026/04/29 17:04:53 1.1.1.8 @@ -24,7 +24,7 @@ std::unique_ptr gRAM; // RAM はロングワード単位でホストバイトオーダ配置なので、 // バイトアクセス、ワードアクセス時は HLB(), HLW() マクロを使用のこと。 -std::unique_ptr ram; +std::unique_ptr mainram; RAMDevice::RAMDevice() { @@ -122,13 +122,21 @@ RAMDevice::Init() } ram_size = ram_size_MB * 1024 * 1024; - ram.reset(new uint8[ram_size]); + mainram.reset(new uint8[ram_size]); // devtable[] への RAM デバイスの配置はこの後 VM::Init 側で行っている return true; } +bool +RAMDevice::PowerOn() +{ + // XXX ノイズを用意する + + return true; +} + void RAMDevice::ResetHard() { @@ -144,7 +152,7 @@ RAMDevice::Read8(uint32 addr) { gMPU->AddCycle(read_wait); uint32 data; - data = ram[HLB(addr)]; + data = mainram[HLB(addr)]; putlog(4, "$%08x.B -> $%02x", addr, data); return data; } @@ -154,7 +162,7 @@ RAMDevice::Read16(uint32 addr) { gMPU->AddCycle(read_wait); uint32 data; - data = *(uint16 *)&ram[HLW(addr)]; + data = *(uint16 *)&mainram[HLW(addr)]; putlog(4, "$%08x.W -> $%04x", addr, data); return data; } @@ -164,7 +172,7 @@ RAMDevice::Read32(uint32 addr) { gMPU->AddCycle(read_wait); uint32 data; - data = *(uint32 *)&ram[addr]; + data = *(uint32 *)&mainram[addr]; putlog(4, "$%08x.L -> $%08x", addr, data); return data; } @@ -173,7 +181,7 @@ uint64 RAMDevice::Write8(uint32 addr, uint32 data) { gMPU->AddCycle(write_wait); - ram[HLB(addr)] = data; + mainram[HLB(addr)] = data; putlog(3, "$%08x.B <- $%02x", addr, data); return 0; } @@ -182,7 +190,7 @@ uint64 RAMDevice::Write16(uint32 addr, uint32 data) { gMPU->AddCycle(write_wait); - *(uint16 *)&ram[HLW(addr)] = data; + *(uint16 *)&mainram[HLW(addr)] = data; putlog(3, "$%08x.W <- $%04x", addr, data); return 0; } @@ -191,7 +199,7 @@ uint64 RAMDevice::Write32(uint32 addr, uint32 data) { gMPU->AddCycle(write_wait); - *(uint32 *)&ram[addr] = data; + *(uint32 *)&mainram[addr] = data; putlog(3, "$%08x.L <- $%08x", addr, data); return 0; } @@ -199,7 +207,7 @@ RAMDevice::Write32(uint32 addr, uint32 d uint64 RAMDevice::Peek8(uint32 addr) { - return ram[HLB(addr)]; + return mainram[HLB(addr)]; } // アクセスウェイトを設定 (X68030 でシステムポートから呼ばれる) @@ -387,7 +395,7 @@ RAMDevice::Load_aout(const char *name, c copylen = aout.textsize + aout.datasize; if (copylen >= filesize) { copylen = filesize; - warnx("warning: Load_aout \"%s\" coruppted? " + warnx("warning: Load_aout \"%s\" corrupted? " "(text=%u + data=%u, filesize=%d); loading %d bytes", name, aout.textsize, aout.datasize, (int)filesize, copylen); /* FALLTHROUGH */