--- nono/m88xx0/m88100core.cpp 2026/04/29 17:04:34 1.1.1.2 +++ nono/m88xx0/m88100core.cpp 2026/04/29 17:04:38 1.1.1.3 @@ -182,6 +182,12 @@ m88kcpu::Exception(int vec) void m88kcpu::ExceptionCore(int vec, ExceptionKind cause) { + // 例外履歴に記録 (例外発生はブランチ履歴にも記録) + exhist.AddEntry(xip, 0, 0xfc000000 | vec); + brhist.AddEntry(xip, 0, 0xfc000000 | vec); + // デバッガに通知 (例外ブレーク用) + debugger_notifyexception(vec); + if (psr & PSR_SFRZ) { if (cause != ExceptionKind::TRAP) { gMPU->putlog(2, "SFRZ Error Exception"); @@ -260,8 +266,11 @@ m88kcpu::ExceptionCore(int vec, Exceptio SetPSR(psr | PSR_SUPER | PSR_SFD1 | PSR_IND | PSR_SFRZ); fip = vbr + (vec << 3); - brhist.AddEntry(xip, fip); fetch(); + // ここでベクタに飛ぶのだが、ベクタ内の2命令でおそらく必ずもう一度 + // 分岐してそっちでも履歴が残るので、ここでブランチ履歴を残すのは + // ちょっと冗長という気もする。 + if (OpIsBusErr(opF)) { if (cause == ExceptionKind::ERROR) { // double bus fault