Re: [stella] Playfield using "inx" vs "using SLEEP"

Subject: Re: [stella] Playfield using "inx" vs "using SLEEP"
From: "Fernando Romo" <fromobal@xxxxxxxxxxx>
Date: Thu, 25 Aug 2005 13:30:19 -0400

  Excellent, is a pleasure receive this kind of feedback and support from
people like you and Lee Fastenau,,,,,you are MASTERS,,,sorry for ask basic

My best regards
Fernando Romo (from Monterrey, Mexico)

>From: "Andrew Davie" <atari2600@xxxxxxxxxxxxx>
>Reply-To: stella@xxxxxxxxxxxxxxxxxx
>To: <stella@xxxxxxxxxxxxxxxxxx>
>Subject: Re: [stella] Playfield using "inx" vs "using SLEEP"
>Date: Wed, 24 Aug 2005 09:33:11 -0400
>Hi Fernando
>Imagine we're the Atari, and we've just completed the section of code you
>understand.  Now we get to the bits you don't understand.  Here's a
>walkthrough of exactly what is happening...  remember, we are mostly
>a single scanline *in synch* with the sweeping of the TV beam across the
>television.  And that this all happens in 76 cycles of 6507 time (228
>clocks of TIA time).  What we're really interested with this sort of code
>where the TV beam *is* when the code executes.  They are tightly locked,
>that is the magic to doing interesting things on the '2600.
>      sta WSYNC
>OK, we've just restarted a brand new line.  The 6507 was halted, but now
>TIA is drawing a new line, the 6507 is active again.  And we're at cycle 0
>in the sanline....
>      lda #%00000000
>      sta PF1
>      sta PF2
>We've just cleared the playfield registers #1 and 2.  That took 8 cycles of
>6507 time -- 24 cycles of TIA time.  So the TV beam is 24/228 of the way
>across its horizontal line draw (but note:  only 160 colour clocks are
>visible -- the first 68 on any line are invisible, the 'horizontal blank'.
>So at the moment, we are still well off the left of the visible screen...
>that starts at TIA cycle 68 (or 6507 cycle 68/3  --> 22.666..)
>      lda #15
>      sta COLUPF
>      lda #%00010000
>      sta PF0
>We've just changed the colour of the playfield, and written a pattern (just
>one pixel on) to playfield 0.
>Note that the current *horizontal position* of the TV beam can be exactly
>determined, because we have executed *exactly* 2+3+3+2+3+2+3 cycles ( = 18
>cycles of 6507 time since the start of this scanline).  Remember, there are
>76 cycles in each scanline.  We're still operating *before* the TIA starts
>drawing any visible colour clocks.
>      SLEEP 2                          ; what?
>The above simply does "something" that takes 2 cycles.  It doesn't matter
>us what that is, all the macro does is ensure that the two cycles (no more,
>no less) are used.  So now we're on cycle #20 in the scanline.  There
>appears to be no particular reason for this;   I would guess that the above
>sleep could be omitted, and the following one changed to 27 with exactly
>same visual effect.
>      lda #0
>      sta COLUPF
>And we set the playfield colour to black.  So although the timing isn't
>really THAT crucial in this situation, whoever wrote this code wanted the
>playfield colour to be black between cycle #25  (20 +2 + 3)...
>      SLEEP 25                        ; for what?
>      lda #15
>      sta COLUPF
>... and cycle #55.
>The sleep above guarantees 25 cycles after the colour is changed to black,
>and it takes another 5 cycles to load and store the new colour.  Since we
>started at cycle #25, we end up at #55.
>And then...
>      lda #%10000000
>      sta PF2
>A pattern (a single pixel on) is written to playfield 2.  If you go to the
>'Programming for Newbies' tutorial on AtariAge, you should be able to find
>good timing diagram for the playfield, which clearly shows exactly when you
>can write values to registers for asymmetric playfields and what happens.
>If you don't know, an asymmetric playfield is where you modify the three
>playfield registers as the scanline is drawing so that you get a full 40
>pixels of playfield data, instead of the mirrored or duplicated 20 pixels.
>When you are doing this, you have to wait until the data from a register
>completely displayed BEFORE you change the data for the 2nd use of that
>register in the scanline display.
>      sta WSYNC
>The above simply says "we're done with this scanline, halt till the start
>the next one".  One should note that the playfield colour in this case is
>still #15, so that will remain in effect in the next line until it is set
>black (which happens on 6507 cycle #25.  In other words, I would expect to
>see colour #15 on the left of the screen up until TIA clock 75 (ie: 8
>at the left of screen), then black for 90 pixels, then colour #15 again for
>the rest of the line.
>      inx
>      cpx #176
>      bne Picture
>And that keeps us going until our line counter reaches 176.
>Hope this helps.  As always my timings may be wrong, but you get the idea,
>Archives (includes files) at
>Unsub & more at

T1msn Fotos: Todo lo que quieres saber sobre fotografma digital

Archives (includes files) at
Unsub & more at

Current Thread