--- nono/vm/pluto.cpp 2026/04/29 17:05:17 1.1.1.9 +++ nono/vm/pluto.cpp 2026/04/29 17:05:25 1.1.1.11 @@ -44,6 +44,7 @@ PlutoDevice::rom[] = { 0x2039, 0x00ea, 0xc450, // move.l (ROMIO_LOAD),%d0 0x6b04, // bmi.s _err 0x2040, // move.l %d0,%a0 + 0x46fc, 0x2000, // move.w #0x2000,%sr 0x4e90, // jsr (%a0) //_err: 0x43fa, 0x000c, // lea.l (_errmsg),%a1 @@ -59,7 +60,7 @@ PlutoDevice::rom[] = { 0x2e00, // .dc.b ".",0 }; -uint64 +busdata PlutoDevice::Read8(uint32 addr) { uint32 offset = addr - baseaddr; @@ -74,10 +75,10 @@ PlutoDevice::Read8(uint32 addr) } } - return (uint64)-1; + return busdata::BusErr; } -uint64 +busdata PlutoDevice::Read16(uint32 addr) { uint32 offset = addr - baseaddr; @@ -86,10 +87,10 @@ PlutoDevice::Read16(uint32 addr) return rom[offset / 2]; } - return (uint64)-1; + return busdata::BusErr; } -uint64 +busdata PlutoDevice::Read32(uint32 addr) { uint32 offset = addr - baseaddr; @@ -107,10 +108,10 @@ PlutoDevice::Read32(uint32 addr) default: break; } - return (uint64)-1; + return busdata::BusErr; } -uint64 +busdata PlutoDevice::Write8(uint32 addr, uint32 data) { switch (addr) { @@ -124,14 +125,14 @@ PlutoDevice::Write8(uint32 addr, uint32 return 0; } -uint64 +busdata PlutoDevice::Write16(uint32 addr, uint32 data) { putlog(0, "未実装ワード書き込み $%06x", addr); return 0; } -uint64 +busdata PlutoDevice::Peek8(uint32 addr) { uint32 offset = addr - baseaddr; @@ -146,7 +147,7 @@ PlutoDevice::Peek8(uint32 addr) } } - return (uint64)-1; + return busdata::BusErr; } // @@ -163,12 +164,12 @@ PlutoDevice::ROM_Load() auto mainbus = GetMainbusDevice(); auto mainram = GetMainRAMDevice(); - auto mpu680x0 = GetMPU680x0Device(); + auto mpu680x0 = GetMPU680x0Device(mpu); auto sram = GetSRAMDevice(); // ホストファイルをロード LoadInfo info(gMainApp.exec_file); - if (mainram->LoadFromFile(&info) == false) { + if (mainram->LoadExec(&info) == false) { return -1; } @@ -203,15 +204,15 @@ PlutoDevice::ROM_Load() mpu680x0->reg.D[6] = 0xa1000004; mpu680x0->reg.D[7] = 0; - mpu680x0->reg.A[7] = sram->GetRAMSize(); - mpu680x0->reg.A[7] -= 4; - mainbus->Write32(mpu680x0->reg.A[7], info.end - info.start); // esym + uint32 a7 = sram->GetRAMSize(); + a7 -= 4; + mainbus->HVWrite32(a7, info.end - info.start); // esym + a7 -= 4; + mainbus->HVWrite32(a7, sram->GetRAMSize()); // physsize + a7 -= 4; + mainbus->HVWrite32(a7, 0x00000000); // firstpa - mpu680x0->reg.A[7] -= 4; - mainbus->Write32(mpu680x0->reg.A[7], sram->GetRAMSize()); // physsize - - mpu680x0->reg.A[7] -= 4; - mainbus->Write32(mpu680x0->reg.A[7], 0x00000000); // firstpa + mpu680x0->reg.A[7] = a7; return info.entry; }