--- nono/vm/romemu_luna88k.cpp 2026/04/29 17:04:59 1.1.1.8 +++ nono/vm/romemu_luna88k.cpp 2026/04/29 17:05:06 1.1.1.10 @@ -177,7 +177,7 @@ Luna88kPROMEmuDevice::Init() // 元の PSR を r10 に保存しつつ割り込み許可 ms.Write32(OP_ldcr (r10, psr)); - ms.Write32(OP_clr (r2, r10, 2, 1)); // clear IND,SFRZ + ms.Write32(OP_clr (r2, r10, 2, 0)); // clear IND,SFRZ ms.Write32(OP_stcr (r2, psr)); ms.Write32(OP_or_u (r3, r0, ROMIO_BASE >> 16)); @@ -198,7 +198,7 @@ Luna88kPROMEmuDevice::Init() // _back: ms.Write32(OP_ld (r2, r3, (ROMIO_ENTRY - ROMIO_BASE))); // 起動先がなければループ - ms.Write32(OP_bcnd (ne0, r2, 0xfffd)); // 0xfffd = _prompt + ms.Write32(OP_bcnd (eq0, r2, 0xfffd)); // 0xfffd = _prompt // _go: // 起動先があれば後始末して @@ -299,15 +299,22 @@ Luna88kPROMEmuDevice::ROM_Init() goto done; } - // DIPSW#1-1 が UP なら自動起動、DOWN なら ROM モニタ起動なので、 - // これを真似する。 - if ((gPIO0->GetDIPSW1() & 1)) { - if (gMainApp.exec_file) { - // ホストのファイルを読み込んでエントリポイントアドレスを - // この Read アクセスの読み出し値として返す。 - // エラーがあればエラーメッセージは呼び出し先側で表示してある。 - entry = LoadHostFile(); - } else { + // -X file + // DIPSW の状態に関わらず、ファイルをロードし実行する。 + // --load-only file + // DIPSW の状態に関わらず、ファイルをロードし、プロンプトで止まる。 + if (gMainApp.exec_file) { + // ホストのファイルを読み込んでエントリポイントアドレスを + // この Read アクセスの読み出し値として返す。 + // エラーがあればエラーメッセージは呼び出し先側で表示してある。 + b_entrypoint = LoadHostFile(); + if (gMainApp.load_and_exec) { + entry = b_entrypoint; + } + } else { + // DIPSW#1-1 が UP なら自動起動、DOWN なら ROM モニタ起動なので、 + // これを真似する。 + if ((gPIO0->GetDIPSW1() & 0x80)) { // NVRAM の設定に従ってブート先を探す。 errmsg.clear();