Re: RE: [stella] "Zombie" optimizations

Subject: Re: RE: [stella] "Zombie" optimizations
From: Christopher Tumber <christophertumber@xxxxxxxxxx>
Date: Fri, 17 Jan 2003 14:49:44 -0500
>For "Mortal Kurling" I'm using a similar routine but one which contains data for both ENABL (on/off) and CTRLPF (width). However, the extra 5 (7-2 for larger table) cycles >to do this eliminates any advantage over your NEW (which I should probably.. uh.. borrow now) routine but since you're only actually checking and enabling ENAM0 on >the first scanline perhaps some hybrid routine which also skips ENABL after the fist Scanline and uses a different table to eliminate the need for the two ASLs? (Would >use a lot of ROM). Nah, then you're just back to your solution with the added overhead of another indexed LDA.

Better yet, since you're dealing with a Missile instead of the Ball and you want to be writing to ENAM0, NUSIZ0 and HMM0 you could pack all that into 1 byte.

      tya                          ;2 Cycles 1 Byte
      sbc Vertical_Position        ;3 Cycles 2 Bytes
      tax                          ;2 Cycles 1 Byte
      lda Missile_Data_Table,x     ;4 Cycles 3 Bytes
      sta HMM0                     ;3 Cycles 2 Bytes
      sta ENAM0                    ;3 Cycles 2 Bytes
      asl                          ;2 Cycles 1 Byte
      asl                          ;2 Cycles 1 Byte
      sta NUSIZ0                   ;3 Cycles 2 Bytes

Missile_Data_Table - 255 bytes:
Bits 7-4 = HMM0 (deltaX for next scanline)
Bits 3-2 = NUSIZ0 (Missile width)
Bit 1 = ENAM0 (On/Off)
Bit 0 = Unused

24 Cycles, so still slower than your routine. However, with this routine you can blank the missile in the middle of the "sprite". Whether or not that's worth 3 cycles and all the extra ROM space....


Archives (includes files) at
Unsub & more at

Current Thread