Le 08/03/2021 à 13:11, Mark Cave-Ayland a écrit : > If a NuBus slot doesn't contain a card, the Quadra hardware generates a > physical > bus error if the CPU attempts to access the slot address space. Both Linux and > MacOS use a separate bus error handler during NuBus accesses in order to > detect > and recover when addressing empty slots. > > According to the MC68040 users manual the ATC bit of the SSW is used to > distinguish between ATC faults and physical bus errors. MacOS specifically > checks > the stack frame generated by a NuBus error and panics if the SSW ATC bit is > set. > > Update m68k_cpu_transaction_failed() so that the SSW ATC bit is not set if the > memory API returns MEMTX_DECODE_ERROR which will be used to indicate that an > access to an empty NuBus slot occurred. > > Signed-off-by: Mark Cave-Ayland <mark.cave-ayl...@ilande.co.uk> > Reviewed-by: Laurent Vivier <laur...@vivier.eu> > --- > target/m68k/op_helper.c | 12 +++++++++++- > 1 file changed, 11 insertions(+), 1 deletion(-) > > diff --git a/target/m68k/op_helper.c b/target/m68k/op_helper.c > index 202498deb5..59a6448296 100644 > --- a/target/m68k/op_helper.c > +++ b/target/m68k/op_helper.c > @@ -468,7 +468,17 @@ void m68k_cpu_transaction_failed(CPUState *cs, hwaddr > physaddr, vaddr addr, > > if (m68k_feature(env, M68K_FEATURE_M68040)) { > env->mmu.mmusr = 0; > - env->mmu.ssw |= M68K_ATC_040; > + > + /* > + * According to the MC68040 users manual the ATC bit of the SSW is > + * used to distinguish between ATC faults and physical bus errors. > + * In the case of a bus error e.g. during nubus read from an empty > + * slot this bit should not be set > + */ > + if (response != MEMTX_DECODE_ERROR) { > + env->mmu.ssw |= M68K_ATC_040; > + } > + > /* FIXME: manage MMU table access error */ > env->mmu.ssw &= ~M68K_TM_040; > if (env->sr & SR_S) { /* SUPERVISOR */ >
Applied to my m68k-for-6.0 branch Thanks, Laurent