RE: [stella] New demo, skipdraw with isb

Subject: RE: [stella] New demo, skipdraw with isb
From: "Aaron" <stella-receiver@xxxxxxxxxxxxxxxxx>
Date: Fri, 12 Nov 2004 15:23:25 -0600 (CST)
Dennis Debro said:
> Could you supply the source too? I'd like to see how this benefits your
> situation.

Sure.

> Are your sprites not stored upside down in ROM?

No, they're upside down, though they could be made right side up without
much trouble I think...  The code I used to actually /draw/ the sprites is
mostly independent of what I'm talking about.  But I've used the
skipdraw-with-isb for related stuff...

The source will explain it better than I can (which isn't saying much).

>> The nice thing is that it leaves the a register with useful information
>> that you can use to draw the sprite.  In the dcp version you need to
>> reload the value out of SpriteEnd,
>
> Huh? Wouldn't SpriteEnd been an offset for your sprite?

Maybe I didn't say that right...  here's the relevant code:

  ldy sprite_list_index
  lda sprite_list_span,y
  sta REFP1
  and #%00000111
  sec
  isb sprite_list_section,y

  ;other stuff...

  bcs .set_sprite

  ;more unrelated stuff...

.set_sprite:
	tax
	lda x6_table,x
	adc sprite_list_lsb,y
	sta sp1ptr

Now, instead of a constant SPRITEHEIGHT, I have a value stored in
sprite_list_span,y - so the height can change for every sprite (it doesn't
in the demo though).  I also used bit 3 of this value for the
reflection... but you can probably ignore that.

sprite_list_section,y is equivalent to SpriteEnd.

Anyway, we get down to .set_sprite and it turns out the quantity
(sprite_list_span,y - sprite_list_section,y) is useful.  The version of
skipdraw with dcp just throws that result away since dcp is based on cmp,
see?

Attachment: source.zip
Description: Zip archive

Current Thread