Re: [hatari-devel] Hatari freeze on XaAES quit with TT + MMU + 24-bit emulation

[ Thread Index | Date Index | More lists.tuxfamily.org/hatari-devel Archives ]


Le 06/07/2022 à 21:50, Thomas Huth a écrit :
Am Sun, 3 Jul 2022 23:05:07 +0200
schrieb Nicolas Pomarède <npomarede@xxxxxxxxxxxx>:

Le 03/07/2022 à 15:08, Thomas Huth a écrit :
Am Sun, 26 Jun 2022 12:35:02 +0300
schrieb Eero Tamminen <oak@xxxxxxxxxxxxxx>:
On 26.6.2022 9.27, Thomas Huth wrote:
...
Yes, I can reproduce it with EmuTOS v1.1.1 - and only if CPU cycle exact
mode is enabled, too. Seem like 030 + MMU + CE is pretty much defunc in
Hatari right now. In m68k_run_mmu030() I can see:

					if (!currprefs.cpu_cycle_exact) {

						count_instr (regs.opcode);
						do_cycles (cpu_cycles);

						cpu_cycles = (*cpufunctbl[regs.opcode])(regs.opcode);
					} else {
#ifdef WINUAE_FOR_HATARI
						currcycle = 0;
#endif
						(*cpufunctbl[regs.opcode])(regs.opcode);
						wait_memory_cycles();
					}

However, if cpu_cycle_exact is enabled, currcycle is often still 0 after
the emulated instruction has been run via cpufunctbl.
Looks like cpufunctbl is either pointing to the wrong table, or the table
has been somehow generated badly? ... no clue yet ... Nicolas, do you maybe
have an idea?

Hi

I need to look in more detail, but I guess it's possible that with cycle
exact some instructions are 0 cycles because of emulated behaviour where
tail/head cycles for some instruction are "overlapping"

running this with emutos 1.1.1 :

/hatari --tos tos.img --machine tt -s 14 --fast-boot on --mmu on
--log-level debug --cpu-exact on

I see that after a while it loops on these instructions :

cpu video_cyc=531003 651@261 423252551 : 00e0d612 2039 0000 04ba
    move.l $000004ba [*00000a4a],d0
cpu video_cyc=531003 651@261 423252551 : 00e0d618 b081
    cmp.l d1,d0
cpu video_cyc=531003 651@261 423252551 : 00e0d61a 6c0e
    bge.b #$0e == $00e0d62a (F)
cpu video_cyc=531003 651@261 423252551 : 00e0d61c 1038 fa01
    move.b $fa01,d0
mfp read gpip fffa01=0xb1 video_cyc=531003 651@261 pc=e0d61c instr_cycle 0
IO read.b $00fffa01 = $b1 pc=e0d61c
cpu video_cyc=531010 658@261 423252558 : 00e0d620 0800 0005
    btst.l #$0005,d0
cpu video_cyc=531010 658@261 423252558 : 00e0d624 66ec
    bne.b #$ec == $00e0d612 (T)

Is that what you see ?

In "normal" operation yes, it's only updating the cycle count after a
couple of instruction. It could be that this is related to the cache
emulation, fair.

But when the hang happens, it seems like the emulated code is looping
through the whole cleared memory, only executing op_0000_35_ff() in
cpuemu_35.c. And this never seems to add any cycles anymore, thus Hatari
completely hangs in the m68k_run_mmu030() loop, without ever generating an
interrupt and thus not reacting to user input anymore...


I had the feeling the hang happened on the above loop, but I will let hatari runs for longer until I read the point you mention (where input is not processed anymore)




Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/