[uae] Re: Lupo Alberto issue [Was Re: E-UAE 0.8.27-RC1 released]
- From: Toni Wilen <twilen@xxxxxxxxxx>
- To: uae@xxxxxxxxxxxxx
- Date: Sat, 23 Oct 2004 22:48:40 +0300
I'm sorry, but i have just subscribed so i couldn't directly reply to
the message (before i used to read the archive). I only want to notify
Giulio and Richard that the freeze during the game with Lupo Alberto is
a winuae issue too. It was reported in this message in the EAB forum by
>P.S.: "Lupo Alberto", an old Italian platform by Idea, locks up after
some minutes >(this has ALWAYS happened and has nothing to do with my
problem). What could >the cause be?
unfortunately, Toni didn't have a clue. Now, it seems to me that with
very old version of Winuae i was able to play this funny game, but i
can't remember which (maybe the famous 0.8.8R8). Giulio, maybe you tryed
with more recent version of uae/e-uae: is this a regression?
If this game worked in older versions, it was only due to an accident or
due to quite incorrectly timed blitter and cpu..
00022aae 4eba 001c JSR.L (PC,$001c) == $00022acc
Now I do have a clue :)
ok, here game starts the blitter
00022ae6 3290 MOVE.W (A0),(A1) (A1 = DFF058)
00022ae8 4e75 RTS -> 22AB2
gah. and here it clears the blitter interrupt AFTER blit has been
started.. -> blitter interrupt is lost if blit finishes before this line
(usually happens when scrolling because "scroll" blit is only 1x16
words) -> basically programmers did very stupid thing..
00022ab2 33fc 0040 00df f09c MOVE.W #$0040,$00dff09c
It seems this won't work until cpu and blitter timing is perfect. I
don't want to do any random tweaks because they will break other programs.
btw, 68000 is very "interesting" because it uses microcode. Different
addresssing modes can have totally different memory access order and
this really needs to be emulated properly too (probably affects Lupo
Alberto).. for example:
move.w z(ax),(ay): fetch "z", prefetch next instruction opcode, fetch
word pointed by z(ax), write word to (ay)
move.w (a0)+,$12345678.w: fetch $1234 (high word), fetch word pointed by
(a0), fetch $5678 (low word), write word to $12345678, prefetch.
Fortunately there is nice blitter trick that can be used to "trace"
cpu's memory accesses without any extra hardware. Unfortunately this is
ultra-boring, in theory all 40000+ instructions needs to be checked..
Other related posts: