
                               FULLSCREEN FOR GFA

                            FULLSCREEN IN GFA-BASIC:
                             "GfA has no limits..."

     by Jedi of Sector One (still a crew from The Heavy Killers)

     First, everyone said: "GfA-Basic, pfff... wot  a lame language to code
     demos...". Then came the first  screens  coded  in GfA-Basic, like the
     "AXIA DEMO" who were, mmm...,  yeah,  they  were  demos. Then came the
     "Ultimate GfA-Demo" by the  Overlanders.  It  was  so good that nobody
     wanted to believe that it was  coded  in  Basic. But some shrewd minds
     tried to understand the  trick,  found  how  (relatively  !) fast were
     instructions like CARD{}, and recognized  that  it was really coded in
     Basic.

     So, for most the people, it  was  possible  to code some demo-stuff in
     GFA-Basic, but only simple  and  classic  things  like sprites, dists,
     screxx, stars, and so on. But  there  was  one thing that betrayed all
     screens coded in Basic: rasters weren't stable.

     But  when  the  "Kidney  Bean  Demo"  was  released...surprise  !  The
     Overlanders-screen used stable rasters, as  well  as my "Genious Demo"
     that featured...plasmas !!! We  explained  the technique and everybody
     answered that it was finally easy  and  that  we had broken a limit of
     the GfA.

     Ok, rasters in GfA were  possible,  but  demos  coded in this language
     were still  old-fashioned  compared  to  assembly  ones  that featured
     things like soundtrack, fullscreen, syncscroll,... But it seemed to be
     something close to the Basic.

     But in a little coding-party organized in France by Dr Snake, I worked
     on a syncscroll in  GFA-Basic.  First,  everybody  was laughing. Then,
     they were weeping... When our "Bee  Forol Demo" was released, everyone
     had to say that GFA-Basic was finally not so lame and that a new limit
     was broken.

     There was only one thing never  done  in Basic: a full screen-routine.
     Even after having seen the  main-menu  of  the  Bee Forol Demo (by the
     way: press [*] to unshift  the  planes...and  read the screx next time
     !), everyone said that it was impossible  to  do. Even I said the same
     thing, as in assembly, toggles were  too  fast for Basic. Anyway, some
     dangerous dudes tried and  failed,  excepted  Dogue  de Mauve from the
     Overlanders who told me that he managed  to kick out the right border,
     but that the other one was impossible to delete.

     Time passed... And a beautiful day,  I  decided to focus on fullscreen
     in Basic, because I didn't  feel  like  working on assembly demos. The
     first thing I did  was  calculating  how  much  time  was  taken by an
     instruction like
                            BYTE{&HFFFF820A}=2

     I compiled it, disassembled it, peeked  at my cycle-table and found 20
     cycles, or an equivalent of 5 NOPS. So, I took an assembly fullscreen-
     routine and tried to recode it  about  to  gap  every toggle of 6 NOPS
     from the previous one. A bit  afraid,  I assembled it, closed the eyes
     and launched it. When I timidly opened  the right eye... Yoohoo !!! It
     works !!! I  knew  that  the  shifter  had  some  key-positions, but I
     thought that reading its status  too  late after those positions would
     lead to a very unstable result.  But  no,  it  wasn't the case, if you
     leave apart some vertical parasitics  happening  one time out of five.
     In this case, switching off the  computer  and  turning it on anew was
     enough to avoid this problem.

     The conversion in GFA-Basic was easy: as the BYTE{adr.w}=number.s took
     20 cycles and a number.s (<127 because it generates a MOVEQ) 4 cycles,
     I translated the assembly-source into GfA-Basic  to set all toggles to
     the same time. The only problem was  finding  how many cycles I had to
     wait after the stabilisation. I had to do many tries till it worked...

     The low-border was added with  the  same  technique.  I also wanted to
     delete the upper-border, but it's  very  difficult: VSYNC isn't stable
     at all (it moves on more than  one scanline even though all interrupts
     are cut) . The only solution  would  have  been waiting after the last
     line of the  low-border.  But  in  those  conditions:  whaddaya  do to
     include music, huh ???  ODC and I are still trying to solve this nasty
     problem...

     During this time, I give  you  a  little  present: the fully commented
     source of my routine. Of course, it  must be compiled to work. I think
     it should work on all kinds  of  computer,  but who knows... Just note
     that sometimes, odd rows  can  appears  every  32  pixels. It can't be
     avoided, so the only way to get  a correct fullscreen is switching off
     the computer, waiting a bit  and  then  turning  it on again... As you
     seem to be a cool guy,  I've added the assembly-sourcecode I converted
     into basic. Enjoy... You can find  those  sources on this disk, in the
     folder containing this text-file...

     Tot ziens...See ya...A+...

       _________________________________________________________________
      /////////////////////////// J E D I \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
      \\\\\\\\\\\\\\\\\\\\\ S E C T O R   O N E /////////////////////////
       
     You can get in touch with me at the following address:

                                Frank DENIS
                            54 rue Saint Denis
                            F- 93100 MONTREUIL
                                  FRANCE

     Frogs can write a little message  on  RTEL (bal JEDI/SCT1 - et surtout
     pas JEDI tout court), GEN4  or  STMAG  (bal  SECTOR ONE - precisez que
     c'est pour moi !!!), LEADER (bal JEDI) ou EINSTEL (bal JEDI aussi) .
