--- nono/vm/human68k.cpp 2026/04/29 17:05:29 1.1.1.13 +++ nono/vm/human68k.cpp 2026/04/29 17:05:33 1.1.1.14 @@ -86,7 +86,7 @@ Human68kDevice::Init() // $CBC.B MPU 種別 (3:68030) ds.Write1(0x0cbc, 3); // $CBD.B FPU 有無 (0xff:あり)。 - if (mpu680x0->HaveFPU()) { + if (mpu680x0->HasFPU()) { ds.Write1(0x0cbd, 0xff); } @@ -157,9 +157,9 @@ Human68kDevice::Init() // TRAP #15 ベクタを書き込む。 ds.Write4(0xbc, 0x1000); - // TRAP #15 ハンドラを書き込む。 - // エミュレータ内部命令 $f300 で処理して RTE するだけ。 - ds.Write2(0x1000, 0xf600); // .dw $f300 + // TRAP #15 (IOCS コール) ハンドラを書き込む。 + // オレオレ F ライン命令 (エミュレータ内部命令) で処理して RTE するだけ。 + ds.Write2(0x1000, 0xfa00); ds.Write2(0x1002, 0x4e73); // rte // STOP による停止。終了時に CPU を止めておくため。 @@ -417,7 +417,7 @@ bool Human68kDevice::FLineOp() { switch (mpu680x0->GetIR()) { - case 0xf600: // IOCS call emulation + case 0xfa00: // IOCS call emulation IOCS(); break; @@ -784,7 +784,7 @@ Human68kDevice::IOCS() // MPU 状態の取得 RegD(0) = ((250) << 16) // 25.0MHz - | ((mpu680x0->HaveFPU() ? 1 : 0) << 15) // FPU + | ((mpu680x0->HasFPU() ? 1 : 0) << 15) // FPU | ((0) << 14) // MMU | ((3) << 0); // MPU Type break; @@ -811,7 +811,8 @@ Human68kDevice::IOCS() break; default: - putlog(0, "PC=$%06x IOCS $%02x (NOT IMPLEMENTED)", pc, RegD(0) & 0xff); + printf("IOCS $%02x at $%06x (NOT IMPLEMENTED)\n", + RegD(0) & 0xff, pc); RequestExit(1); break; }