Makes it possible to use PPaint under Amithlon with screens and images
greater than 1008 pixels in width. No more 800x600 screen limit.
WARNING: DANGER: ATTENTION:
!!! THIS PROGRAM IS A HACK !!!
!!! THE AUTHOR TAKES NO RESPONSIBLE FOR ITS RELIABLITY - ALL USE IS
AT YOUR OWN RISK !!!
"SetAgnus" can lead to crashes in case a program relies on results
set in GfxBase related variables.
It is, and was always a better behaviour to query the display info
database instead of direct "peeking" the GfxBase.
This program "pokes" directly into GfxBase in order to allow other
programs not querying the display info database to get more likely
results.
WARNING:
!!! PROGRAMS BANGING WITH THE HARDWARE DIRECTLY WILL IMMEDIATELY
FAIL WHEN THIS PROGRAM HAS MODIFIED FLAGS SET IN GFXBASE !!!
Background:
PPaint asks for a special flag set in GfxBase which tells
that so called "BIG BLITS" can be used.
Since Amithlon emulates a normal Agnus Chip Set as found in
old A500 computers, this flag isn't set.
SetAgnus now sets this flag - although no "FatAgnus" is
installed nor can be emulated. Hence, it's dangerous...
How to get rid of 800x600 screens only?
Go to your CLI or Shell and enter:
1> setagnus
That's all.
Afterward you call PPaint normally - but you can now use any screen
size!
You are also able to choose a default screen with any screen size
supported by your gfx-card hardware, but pay attention: before you
can use PPaint with such screens, "SetAgnus" has to be called.
So, enter somewhere in your "startup-sequence" or "user-startup":
SetAgnus >NIL:
in order allowing PPaint permanently dealing with big screens.
--------------------------------------------------------------------
Source code: (since it is so tiny...)
/*
WARNING: THIS IS A (BAD) HACK
Normally, PPaint isn't able to display images/screens with more than 1008 pixels in width on Amithlon,
because it checks whether GFXF_BIG_BLITS is enabled (GfxBase). This program now will set this flag
without care (it cannot care, since no real ECS/AA hardware is installed) and since PPaint relies on
this flag, it now will open the desired screen without displaying any message.
You may place a call to SetAgnus in your "startup-sequence" right behind the "SetPatch" call:
....
....
C:MountAmigaHDDs >NIL:
EndIf
SetPatch QUIET ! <<<< !
SetAgnus >NIL: ! <<<< !
C:Version >NIL:
....
....
SetAgnus should be placed in your C: drawer...
Written 2003 ONIX, public domain.
*/
#include <graphics/gfxbase.h>
extern struct GfxBase *GfxBase;
int main( int argc, char **argv)
{
printf( "GfxBase ChipRev0 original set to: %s, %s, %s, %s\n",
(GfxBase->ChipRevBits0 & GFXF_HR_AGNUS) ? "HiRes Agnus" : "Normal Agnus",
(GfxBase->ChipRevBits0 & GFXF_HR_DENISE) ? "HiRes Denise" : "Normal Denise",
(GfxBase->ChipRevBits0 & GFXF_AA_ALICE) ? "AA Alice" : "Not AA",
(GfxBase->ChipRevBits0 & GFXF_AA_ALICE) ? "AA Lisa" : "Not AA");
GfxBase->DisplayFlags = PAL | REALLY_PAL; // Amithlon uses PAL all the time
GfxBase->ChipRevBits0 = SETCHIPREV_AA; // Say, we're AA (not only FAT-Agnus)
printf( "GfxBase DisplayFlags set to: %s, %s\n", (GfxBase->DisplayFlags & PAL) ? "PAL" : "NTSC", (GfxBase->DisplayFlags & REALLY_PAL) ? "REALLY_PAL" : "NTSC");
printf( "GfxBase ChipRev0 set to: %s, %s, %s, %s\n",
(GfxBase->ChipRevBits0 & GFXF_HR_AGNUS) ? "HiRes Agnus" : "Normal Agnus",
(GfxBase->ChipRevBits0 & GFXF_HR_DENISE) ? "HiRes Denise" : "Normal Denise",
(GfxBase->ChipRevBits0 & GFXF_AA_ALICE) ? "AA Alice" : "Not AA",
(GfxBase->ChipRevBits0 & GFXF_AA_ALICE) ? "AA Lisa" : "Not AA");
if (GfxBase->ChipRevBits0 & GFXF_BIG_BLITS)
printf( "PPaint is now able to deal with big blits > 1008 pixels in width\n");
else
printf( "PPaint isn't able to deal with big blits...\n");
}
|