Re: Aw: [stella] My playfield fiddlings...

Subject: Re: Aw: [stella] My playfield fiddlings...
From: Jake Patterson <jpatters@xxxxxxxxxxx>
Date: Wed, 5 Sep 2001 14:52:36 -0400 (EDT)

On Wed, 5 Sep 2001 cybergoth@xxxxxxxx wrote:

> Hi Jake!
>
> > Just got done with a silly little demo kind of thing, it draws a somewhat
> > detailed asymetrical multicolored illustration with playfield graphics,
> > and then some text.
>
> Cool. How many different colors per line are doable like this and
> what spacings are possible between two colors?
>
> Maybe the 'Stella At the Movies' thing would work with
> colored PF1 & PF2 graphics?
>

Well, in my demo, until the "ELEKTRO VISION" text gets drawn, there isn't
enough time to load the different colors and playfield bitmaps from a
table, instead, each set of six scanlines (there is also one set of
twelve and one set of 24) has its own loop and the data is loaded
"immediately" so it only takes five cycles to do a load and store instead
of seven.  I also kept $00 for black in the A register since that color
gets switched to four times per scanline.  It all ads up to about 1000
lines of code for that one frame. It is possible that there is some way of
setting it up that I missed, that would allow all of the data to be loaded
from tables and therefore to be changed each frame, but I don't see any
way to do that unfortunately.  If there is something I have missed I would
love to here about it!  As it stands, I don't see myself using this
"splash screen" in an actual game, since it is probably more then 2k or so
by itself.  Maybe after a couple of years I will have a vast library of
games that I have written, and I could use it as the first slot in a
multicart containing all of them.  The "ELEKTRO VISION" text could scroll
away and then it could say "PRESENTS" and then "THE ELEKTRO COLLECTION"
(in more tightly constructed text) and then that could turn into the menu
screen.  I sure hope the name "Elektro Vision" is not taken!

As far as number of color changes goes, the most tightly timed part of it
is the six scanlines starting with the dark brown "handle" on the side of
that Commodore 1702 monitor.  That dark brown "hair" color gets used three
times per scanline there, but it could be three different colors easily.
Here is the code for that:


Loop0004

    LDY #hair                ; [5]  + 2
    STA COLUBK               ; [7]  + 3  A is already #black
    STY COLUPF               ; [10] + 3

    LDY #%00001111           ; [13] + 2
    STY PF1                  ; [15] + 3  PF0 is already %11000000

    LDY #sideenclosure       ; [17] + 2
    NOP                      ; [19] + 2
    NOP                      ; [21] + 2
    STY COLUBK               ; [23] + 3

    LDY #screen              ; [26] + 2  this is the light blue color
    STY COLUPF               ; [28] + 3

    LDY #%11100111           ; [31] + 2
    STY PF2                  ; [33] + 3

    LDY #hair                ; [36] + 2  we could just load this with a
    STY COLUBK               ; [38] + 3  different color if we wanted

    STA COLUPF               ; [41] + 3  A is already #black
    STA COLUBK               ; [44] + 3

    LDY #%11111000           ; [47] + 2
    STY PF1                  ; [49] + 3

    LDY #flesh               ; [52] + 2
    STY COLUBK               ; [54] + 3

    LDY #%00011100           ; [57] + 2
    STY PF2                  ; [59] + 3

    LDY #hair                ; [62] + 2  again, this could be any
    STY COLUPF               ; [64] + 3  arbitrary color

    STA COLUBK               ; [67] + 3

    LDY #12                  ; [70] + 2  counter for next set of lines

    STA WSYNC                ; [72]

    DEX                      ; [0]  + 2  X was set to 6 at the end of the
    BNE Loop0004             ; [2]  + 3  previous loop

Since the free time to set a counter happened at the end of each loop, the
rolls of the X and Y registers alternate for each loop and the next.  I
tried putting the counter setting and the STA WSYNC at the beginning of
each loop, but I couldn't get the timing to work out like that every time.
I wanted the basic flow of every loop to be the same.  Another notable
thing about this snippet of code is that I am counting on PF0 to still be
%11000000 from the prevous loop, since it never gets reset to something
different in the middle of the screen until the section at the bottom of
the illustration above the text.  So to more directly answer your
question, it can do nine carefully timed color changes per scanline, with
up to seven different colors... but at the cost of it being static in
nature.  As far as spacing goes, it is a little tricky, in the loop above
I had to add the #flesh color "ear" because I couldn't change COLUPF to
the #hair color quite fast enough at the end.  I think it looks better
that way anyway.

--                                         ,
                                         ,@[
                                       ,@@@[
                                     ,@@@@'@@@@'
`@@@@@@@@@@@@@@@@',@@@'            ,@@@@',@@@'
  `@@@@@@@@@@@@',@@@',aa.       ,aa.   ,@@[  ]@@',@@@' ,aa.'aaaaaaa, aa'
    `@@@@@@@@',@@@|@@@@@@@'  ,@@@@@@'  ]@@[  ]',@@@',@@@@@@@''@@@@',@'
      `@@@@',@@@']@7`,@@',@[]@@@@@',@@[]@@[  ]@@[  ]@7`,@@',@[ '@@@'
        `@a@@@'  ]@,@@',@@@[]@@@' ,@@@[]@@[  ]@@[  ]@,@@',@@@[ ,@@@,
          `@'     `@@@@@@@'  `@@@@@@@' ]@@[  ]@@[   `@@@@@@@',@@@',@@,
                     `~'        `~'    `~~'  `~~'      `~'  '~~' ~~~~~'

.....................................GCE Vectrex - Entertaining New Ideas



-
Archives (includes files) at http://www.biglist.com/lists/stella/archives/
Unsub & more at http://www.biglist.com/lists/stella/

Current Thread