UAE4All 2.0


Fantastic!! I think I've a fair few AGA adfs on my card already, and the correct kickroms, looking forward to giving this a run through :)
 
Hello! What have we here? Commodore dead you say? Not on your nelly my son.Who wants to take up this chalice and pour forth miggy goodness? The amiga lords slumbering in their long forgotten tombs demand it.A sacrifice is required and hell 'aga' emulation would be sweet.
 
I can at least confirm now that the bug is in drawing.cpp and/or linetoscr.h (they belong together).


Just tried the old drawing.cpp and linetoscr.h and (after defining 3 values which are needed by other files to build) with those files the bug is gone.


But then there's of course no AGA...


So the bug is in one of these 2 files the drawing.cpp contained in this archive:


drawing_cpp_and_linetoscr_h_aga.zip


(edit: linetoscr.h confirmed to be fine)


For comparison these are the 2 files with which everything works fine (except AGA):


drawing_cpp_and_linetoscr_h_old.zip
 

Attachments

  • drawing_cpp_and_linetoscr_h_aga.zip
    17.4 KB · Views: 209
  • drawing_cpp_and_linetoscr_h_old.zip
    14 KB · Views: 229
Last edited by a moderator:
At points like this:


if AGA


/* AGA EHB playfield */


if (p>= 32 && p < 64) /* FIXME: what about sprite colors between 32 and 64? */


d = (colors_for_drawing.color_regs_aga[(p-32)^xor_val] >> 1) & 0x7F7F7F;


#else


/* OCS/ECS EHB playfield */


if (p >= 32)


d = xcolors[(colors_for_drawing.color_uae_regs_ecs[p-32] >> 1) & 0x777];


#endif


What happens if you // out the AGA stuff?


Maybe go though each function and // the AGA one at a time, and see if the issue stops at one point, then at least we might know which part of the code is causing the issue?


I'm sure you have noticed the //fixme stuff, too?


Also, this bit:


#if AGA


TYPE d = colors_for_drawing.acolors[pixdata.apixels[spix]^xor_val];


#else


TYPE d = colors_for_drawing.acolors[pixdata.apixels[spix]];


#endif


Why are they xor'ing it?
 
Last edited by a moderator:
What happens if you // out the AGA stuff?
Thanks for your suggestion.


Doesn't make a difference: linetoscr.h gets included (again and again) by drawing.cpp at runtime! If it needs the AGA-stuff it #defines AGA 1 and if it needs the OCS-stuff instead it #defines AGA 0. At the end of linetoscr.h AGA is then always #undefined.


When starting UAE4All AGA isn't selected so drawing.cpp only takes the non-AGA-stuff from linetoscr.h at that point. And the bug is already there if you don't select AGA.

I'm sure you have noticed the //fixme stuff, too?
Yes, but that's some stuff which should only affect very few games and not cause our bug.

Also, this bit:

#if AGA


TYPE d = colors_for_drawing.acolors[pixdata.apixels[spix]^xor_val];


#else


TYPE d = colors_for_drawing.acolors[pixdata.apixels[spix]];


#endif


Why are they xor'ing it?
No idea, but that's not the cause of the bug either since the screen also flashes with only the #else-part.
 
Last edited by a moderator:
There's some code starting at line 343 in drawing.cpp marked with #ifdef NO_THREADS


I can't see this is the old version, looks like it's related to the frameskip code. Is this define required?
 
Just had a thought in the car, someone said the odd game worked, the games which work, do they use dual playfield?


Or does every single game suffer from the same issue?
 
I don't know. Only tested Pinball Fantasies AGA and Pinball Illusions. Will try to identify the problem tomorrow by adding parts of the new code to the old until the problem occurs.

There's some code starting at line 343 in drawing.cpp marked with #ifdef NO_THREADS


I can't see this is the old version, looks like it's related to the frameskip code. Is this define required?
Thanks for the pointer. NO_THREADS was disabled in the Makefile. Enabled it and then rebuilt uae4all - but the screen is flashing as always. So I'll disable that define again.
 
Last edited by a moderator:
Any game I've tried has had the same issue where it looks like several frames are trying to be drawn simultaneously(if that makes sense). I've not tried Heimdall 2, but I recall from screenshots that there wasn't much scrolling or things, (I may be completely wrong with this!), so the flickering might not seem as apparent?


(null)
 
I can now confirm that linetoscr.h doesn't contain the bug. It works fine together with the old drawing.cpp if you replace the macro TYPE (which the old drawing.cpp didn't define) in it. No flashing screen.


So the problem is caused in the new drawing.cpp. Can't promise I'll find it today (it's a huge src file), but if anyone is still looking at linetoscr.h, don't bother: that file is correct.
 
Last edited by a moderator:
Fixed the screen-flashing.


Just played Pinball Fantasies AGA (cpu 68000, chipset AGA, 2MB chip and fast ram, KS 3.1) and Pinball Illusions (cpu 68020, rest the same) at quasi full speed - but now there's an annoying sound bug which occurs every half second.


But the emu is usable now.
 
Fixed the screen-flashing.


Just played Pinball Fantasies AGA (cpu 68000, chipset AGA, 2MB chip and fast ram, KS 3.1) and Pinball Illusions (cpu 68020, rest the same) at quasi full speed - but now there's an annoying sound bug which occurs every half second.


But the emu is usable now.
good news indeed i cant wait to try this out on my 1ghz pandora as i am currently pandoraless
 
Yay!1 well done John... perserverence pays off!!


Why is the first cpu 68000 with AGA? and the Illusions is 020?


020`s = AGA 68000`s were OCS right ?


Sound bug? ah nuts
 
is there a downloadable PND for this yet? I'll try out a few more games later if I get my hands on it!
 
PND will follow in about 2 hours (my pc at work has no slot for sd cards...).

Why is the first cpu 68000 with AGA? and the Illusions is 020?


020`s = AGA 68000`s were OCS right ?
Well, Pinball Fantasies AGA of course runs with 68020, too, but 68000 suffices for it. The anonymous engineer made it possible for us to use 68000+AGA for some games which in reality are kinda "OCS games enhanced with AGA colors".
 
Last edited by a moderator:
Yay!1 well done John... perserverence pays off!!


Why is the first cpu 68000 with AGA? and the Illusions is 020?


020`s = AGA 68000`s were OCS right ?

The graphics architecture was nothing to do with the CPU - hence, as long as the code didn't use any 020-specific commands it would run on an AGA-equipped 68000-based machine without issue.


Of course, the only machines that had AGA systems inside of them commercially were 020ec, the 030 and the 040.


D.
 
I'll keep my eyes peeled for that beta PND later then!


(null)
 
Back
Top