[stella] Earliest safe write to PF1 for asymmetrical playfield?
R Mundschau
rmundschau at frontiernet.net
Sat Jul 5 15:58:34 CDT 2008
Thanks for the detailed information. Its very handy!
Rob
On Jul 5, 2008, at 3:58 PM, seagtgruff at aol.com wrote:
> A while back, I created a table for myself that shows the latest
> cycles at which you can write to the playfield registers, for each
> playfield pixel (plus the beginning of HBLANK). I don't know how
> well this will reproduce here, because it uses four special
> characters-- the division symbol, plus superscripts 0, 1, and 2.
> The superscripted numbers represent thirds, so a superscript of 0
> is "no-thirds," a superscript of 1 is "one-third," and a
> superscript of 2 is "two-thirds." The chart shows the calculations
> for the two types of playfields, repeated and reflected. (What *do*
> we call the "non-reflected" playfield mode, anyway? :ponder:)
>
> As I was putting together the calculations for the chart, I tested
> each value. Since this was more than a year ago, I don't remember
> how much testing I did on an actual 2600; my recollection is that I
> tested each and every value in the Stella and z26 emulators, and
> tested a few choice values on an actual 2600 ("heavy sixer") to
> verify the behavior of the emulators. I don't think I tested any
> values on my early-model 7800. Note that for most pixels, the
> calculated cycles increment by 1, but for some pixels there's an
> increment of 2 cycles. In those cases, I also tested the "skipped"
> cycle (and I believe I tested some of those on my "heavy sixer" as
> well, to be sure). What I found is that the playfield pixels will
> *not* change partway through the display-- i.e., you will get
> either the old value or the new value for the entire playfield
> pixel. For example, the values for the left copy of PF0 are cycles
> 22, 23, 24, and 26. If you write to PF0, and the write ends on
> cycle 25, then all of the third pixel of PF0 will display the old
> value, and all of the fourth pixel will display the new value. This
> makes sense, because it conforms to the fact that we must drop any
> fractional portion of a cycle.
>
> Obviously, most of the time we'd want the entire playfield register
> to display either the old or the new value. However, there could
> conceivably be some cases where we'd want to change the playfield
> partway through the display, so that the first few pixels display
> the old value, and the last few pixels display the new value. The
> only legitimate example I can think of is where the change would
> make no difference for the first few pixels anyway (i.e., because
> they'd be the same for both values), and for some reason in a
> tightly-timed loop we can't manage the write for the new value at
> the optimum cycle, so we "fudge" by writing the new value at some
> other cycle that still gives us the results we're looking for.
>
> This chart is like a spreadsheet showing the calculations, and
> gives more detail than most people need or want to see-- I did it
> this way purely for my own benefit (partly to document how each
> final value was obtained, and partly to help me easily spot any
> errors in the final values). The important values are the ones in
> the last row. For example:
>
> ======================================
> | L. PF0 | 068 | 072 | 076 | 080 |
> | | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 |
> | | 22² | 24º | 25¹ | 26² |
> | | - ² | - ² | - ² | - ² |
> | | 22º | 23¹ | 24² | 26º |
> | |------|------|------|------|
> | | 22 | 23 | 24 | 26 |
> ======================================
>
> The first row shows the color clock on which each pixel of PF0
> (left copy) begins. Then we divide the color clock by 3 to get the
> (fractional) machine cycle in the third row. Then we subtract two-
> thirds of a cycle to get the (fractional) machine cycle in the
> fifth row. Finally, we truncate any fractional portion to get the
> machine cycle in the seventh row.
>
> Michael
>
> =================
> | HBLANK | 000 |
> | | ÷ 3 |
> | | 00º |
> | | - ² |
> | | 75¹ |
> | |------|
> | | 75 |
> ======================================
> | L. PF0 | 068 | 072 | 076 | 080 |
> | | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 |
> | | 22² | 24º | 25¹ | 26² |
> | | - ² | - ² | - ² | - ² |
> | | 22º | 23¹ | 24² | 26º |
> | |------|------|------|------|
> | | 22 | 23 | 24 | 26 |
> ==================================================================
> | L. PF1 | 084 | 088 | 092 | 096 | 100 | 104 | 108 | 112 |
> | | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 |
> | | 28º | 29¹ | 30² | 32º | 33¹ | 34² | 36º | 37¹ |
> | | - ² | - ² | - ² | - ² | - ² | - ² | - ² | - ² |
> | | 27¹ | 28² | 30º | 31¹ | 32² | 34º | 35¹ | 36² |
> | |------|------|------|------|------|------|------|------|
> | | 27 | 28 | 30 | 31 | 32 | 34 | 35 | 36 |
> ==================================================================
> | L. PF2 | 116 | 120 | 124 | 128 | 132 | 136 | 140 | 144 |
> | | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 |
> | | 38² | 40º | 41¹ | 42² | 44º | 45¹ | 46² | 48º |
> | | - ² | - ² | - ² | - ² | - ² | - ² | - ² | - ² |
> | | 38º | 39¹ | 40² | 42º | 43¹ | 44² | 46º | 47¹ |
> | |------|------|------|------|------|------|------|------|
> | | 38 | 39 | 40 | 42 | 43 | 44 | 46 | 47 |
> ==================================================================
> | R. PF0 | 148 | 152 | 156 | 160 |
> | | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 |
> | | 49¹ | 50² | 52º | 53¹ |
> | | - ² | - ² | - ² | - ² |
> | | 48² | 50º | 51¹ | 52² |
> | |------|------|------|------|
> | | 48 | 50 | 51 | 52 |
> ==================================================================
> | R. PF1 | 164 | 168 | 172 | 176 | 180 | 184 | 188 | 192 |
> | | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 |
> | | 54² | 56º | 57¹ | 58² | 60º | 61¹ | 62² | 64º |
> | | - ² | - ² | - ² | - ² | - ² | - ² | - ² | - ² |
> | | 54º | 55¹ | 56² | 58º | 59¹ | 60² | 62º | 63¹ |
> | |------|------|------|------|------|------|------|------|
> | | 54 | 55 | 56 | 58 | 59 | 60 | 62 | 63 |
> ==================================================================
> | R. PF2 | 196 | 200 | 204 | 208 | 212 | 216 | 220 | 224 |
> | | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 |
> | | 65¹ | 66² | 68º | 69¹ | 70² | 72º | 73¹ | 74² |
> | | - ² | - ² | - ² | - ² | - ² | - ² | - ² | - ² |
> | | 64² | 66º | 67¹ | 68² | 70º | 71¹ | 72² | 74º |
> | |------|------|------|------|------|------|------|------|
> | | 64 | 66 | 67 | 68 | 70 | 71 | 72 | 74 |
> ==================================================================
>
> ======================================================================
> =
>
> =================
> | HBLANK | 000 |
> | | ÷ 3 |
> | | 00º |
> | | - ² |
> | | 75¹ |
> | |------|
> | | 75 |
> ======================================
> | L. PF0 | 068 | 072 | 076 | 080 |
> | | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 |
> | | 22² | 24º | 25¹ | 26² |
> | | - ² | - ² | - ² | - ² |
> | | 22º | 23¹ | 24² | 26º |
> | |------|------|------|------|
> | | 22 | 23 | 24 | 26 |
> ==================================================================
> | L. PF1 | 084 | 088 | 092 | 096 | 100 | 104 | 108 | 112 |
> | | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 |
> | | 28º | 29¹ | 30² | 32º | 33¹ | 34² | 36º | 37¹ |
> | | - ² | - ² | - ² | - ² | - ² | - ² | - ² | - ² |
> | | 27¹ | 28² | 30º | 31¹ | 32² | 34º | 35¹ | 36² |
> | |------|------|------|------|------|------|------|------|
> | | 27 | 28 | 30 | 31 | 32 | 34 | 35 | 36 |
> ==================================================================
> | L. PF2 | 116 | 120 | 124 | 128 | 132 | 136 | 140 | 144 |
> | | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 |
> | | 38² | 40º | 41¹ | 42² | 44º | 45¹ | 46² | 48º |
> | | - ² | - ² | - ² | - ² | - ² | - ² | - ² | - ² |
> | | 38º | 39¹ | 40² | 42º | 43¹ | 44² | 46º | 47¹ |
> | |------|------|------|------|------|------|------|------|
> | | 38 | 39 | 40 | 42 | 43 | 44 | 46 | 47 |
> ==================================================================
> | R. PF2 | 148 | 152 | 156 | 160 | 164 | 168 | 172 | 176 |
> | | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 |
> | | 49¹ | 50² | 52º | 53¹ | 54² | 56º | 57¹ | 58² |
> | | - ² | - ² | - ² | - ² | - ² | - ² | - ² | - ² |
> | | 48² | 50º | 51¹ | 52² | 54º | 55¹ | 56² | 58º |
> | |------|------|------|------|------|------|------|------|
> | | 48 | 50 | 51 | 52 | 54 | 55 | 56 | 58 |
> ==================================================================
> | R. PF1 | 180 | 184 | 188 | 192 | 196 | 200 | 204 | 208 |
> | | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 |
> | | 60º | 61¹ | 62² | 64º | 65¹ | 66² | 68º | 69¹ |
> | | - ² | - ² | - ² | - ² | - ² | - ² | - ² | - ² |
> | | 59¹ | 60² | 62º | 63¹ | 64² | 66º | 67¹ | 68² |
> | |------|------|------|------|------|------|------|------|
> | | 59 | 60 | 62 | 63 | 64 | 66 | 67 | 68 |
> ==================================================================
> | R. PF0 | 212 | 216 | 220 | 224 |
> | | ÷ 3 | ÷ 3 | ÷ 3 | ÷ 3 |
> | | 70² | 72º | 73¹ | 74² |
> | | - ² | - ² | - ² | - ² |
> | | 70º | 71¹ | 72² | 74º |
> | |------|------|------|------|
> | | 70 | 71 | 72 | 74 |
> ======================================
>
>
> -----Original Message-----
> From: Dennis Debro <dennis at debrofamily.com>
> To: 'Atari 2600 programming list' <stella at atari2600.org>
> Sent: Sat, 5 Jul 2008 12:38 pm
> Subject: Re: [stella] Earliest safe write to PF1 for asymmetrical
> playfield?
>
> Hi there,
>
> I'd go with Michael's explanation. I just checked my work and my
> answers
> were based on my PF data for Pac-man so it was specific to the way
> the PF
> data was structured.
>
> Take care,
> Dennis
>
>
>
> _______________________________________________
> Stella mailing list
> Stella at atari2600.org
> http://atari2600.org/mailman/listinfo/stella
> The Famous, the infamous, the lame - in your browser. Get the TMZ
> Toolbar Now!
> _______________________________________________
> Stella mailing list
> Stella at atari2600.org
> http://atari2600.org/mailman/listinfo/stella
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://atari2600.org/pipermail/stella/attachments/20080705/72d5ab41/attachment-0001.html
More information about the Stella
mailing list