Re: [stella] Animating the Marbles

Subject: Re: [stella] Animating the Marbles
From: Thomas Jentzsch <tjentzsch@xxxxxx>
Date: Thu, 4 Jul 2002 00:17:15 +0200
At 03.07.2002, 23:11, Paul Slocum wrote:
> I tried the idea of interleaving the color data, but I ran into a
> problem:  to make it work right I have to AND out the zero bit on the X 
> register, which best I can tell, takes as many cycles as doing an ASL on 
> the X like I was doing.  I couldn't figure out a way to solve this.

I see. Coding the loop twice would help, but that is not what we are
looking for. Must think about a better solution.

> I just accepted that as a fact of life early on.  :o(  But if other games 
> can get away with an HMOVE comb, I figure I can get away with 
> that.  !o)  It doesn't look quite as bad on a real Atari.  I might try to 
> clean up the timing a bit when the game is done and I know the kernal won't 
> change any more.

Agreed, it's a good idea to do this at the very end.

> I just don't think there's any hope of finding 4 bytes.  Notice I'm using 
> everything from $80 to $FF during the kernal.  I cringe to think about 
> trying to find even 2 bytes.

Hm, I don't see the routine for drawing the score, but you might be able
to reuse the pointers used there. Are you reusing registers at
all (except for title screen)?

> I think I'm just going to hope to squeeze out enough cycles to do your 
> original trick.  It looks like it would take 20 cycles to do both 
> marbles.  Maybe I could even find a way to alternate doing this check on 
> player 1 and 2 with each loop cycle.

Do I understand you right? You want to check once per loop if you have
to draw a marble in one of the following 13 lines. If yes, the pointer
should point to valid data and if not, it points to zero bytes. Right?
Sounds like a good idea.

> And I would change it to this at a max cost of 10 cycles, I think:

>          tya               ;2
>          adc #13           ;2
>          adc pMarble       ;3
>          bcc noMarbleReset ;2/3

>          sta pMarble       ;3
>          jmp marbleReset   ;3

> noMarbleReset
>          lda (pMarble),y   ;4*
>          sta GRP0          ;3

> marbleReset

Hm, I do not understand how this should work. How do you initialize

Have fun!
Thomas Jentzsch         | *** Every bit is sacred ! ***
tjentzsch at web dot de |

Archives (includes files) at
Unsub & more at

Current Thread