Improve the performance of the centipede segment draw function.

This commit is contained in:
Jeremy Rand 2020-09-06 02:05:33 -04:00
parent 07f8df4b4f
commit f5d1aa9ee6
3 changed files with 23 additions and 39 deletions

View File

@ -35,10 +35,8 @@ drawSegments entry
ldx #SEGMENT_MAX_OFFSET ldx #SEGMENT_MAX_OFFSET
drawSegments_nextSegment anop drawSegments_nextSegment anop
lda segmentStates,x lda segmentStates,x
bne drawSegments_cont beq drawSegments_skipSegment
jmp drawSegments_skipSegment
drawSegments_cont anop
lda segmentFacing,x lda segmentFacing,x
clc clc
adc segmentSpriteOffset adc segmentSpriteOffset
@ -54,23 +52,16 @@ drawSegments_head anop
jsl segmentHeadJump jsl segmentHeadJump
drawSegments_handleTiles anop drawSegments_handleTiles anop
phx _dirtyGameTileWithX segmentTileOffsetsUL
txa _dirtyGameTileWithX segmentTileOffsetsUR
asl a _dirtyGameTileWithX segmentTileOffsetsLL
asl a _dirtyGameTileWithX segmentTileOffsetsLR
tay
_dirtyGameTileWithY segmentTileOffsets
_dirtyGameTileWithY segmentTileOffsets+2
_dirtyGameTileWithY segmentTileOffsets+4
_dirtyGameTileWithY segmentTileOffsets+6
plx
drawSegments_skipSegment anop drawSegments_skipSegment anop
dex dex
dex dex
bmi drawSegments_done bmi drawSegments_done
jmp drawSegments_nextSegment bra drawSegments_nextSegment
drawSegments_done anop drawSegments_done anop
rtl rtl
@ -169,15 +160,10 @@ addBodySegment entry
stz segmentScreenShifts,x stz segmentScreenShifts,x
txa txa
asl a sta segmentTileOffsetsUL,x
asl a sta segmentTileOffsetsUR,x
tay sta segmentTileOffsetsLL,x
sta segmentTileOffsetsLR,x
txa
sta segmentTileOffsets,y
sta segmentTileOffsets+2,y
sta segmentTileOffsets+4,y
sta segmentTileOffsets+6,y
inc numSegments inc numSegments
@ -206,15 +192,10 @@ addHeadSegment entry
stz segmentScreenShifts,x stz segmentScreenShifts,x
txa txa
asl a sta segmentTileOffsetsUL,x
asl a sta segmentTileOffsetsUR,x
tay sta segmentTileOffsetsLL,x
sta segmentTileOffsetsLR,x
txa
sta segmentTileOffsets,y
sta segmentTileOffsets+2,y
sta segmentTileOffsets+4,y
sta segmentTileOffsets+6,y
inc numSegments inc numSegments
@ -233,7 +214,10 @@ segmentDirections dc 12i2'SEGMENT_DIR_RIGHT'
segmentFacing dc 12i2'SEGMENT_FACING_DOWN' segmentFacing dc 12i2'SEGMENT_FACING_DOWN'
segmentScreenOffsets dc 12i2'0' segmentScreenOffsets dc 12i2'0'
segmentScreenShifts dc 12i2'0' segmentScreenShifts dc 12i2'0'
segmentTileOffsets dc 48i2'0' segmentTileOffsetsUL dc 12i2'0'
segmentTileOffsetsUR dc 12i2'0'
segmentTileOffsetsLL dc 12i2'0'
segmentTileOffsetsLR dc 12i2'0'
SEGMENT_SPRITE_LAST_OFFSET gequ 7*4 SEGMENT_SPRITE_LAST_OFFSET gequ 7*4
segmentSpriteOffset dc i2'SEGMENT_SPRITE_LAST_OFFSET' segmentSpriteOffset dc i2'SEGMENT_SPRITE_LAST_OFFSET'

View File

@ -66,13 +66,13 @@ _drawDirtyGameRow_skip&tileOffset anop
mend mend
; This macro uses the Y register as an index into the tile offsets. This is ; This macro uses the X register as an index into the tile offsets. This is
; needed for segments because each segment has their own dirty tile offsets. ; needed for segments because each segment has their own dirty tile offsets.
macro macro
_dirtyGameTileWithY &tileOffset _dirtyGameTileWithX &tileOffset
ldx &tileOffset,y ldy &tileOffset,x
lda #TILE_STATE_DIRTY lda #TILE_STATE_DIRTY
sta tileDirty,x sta tileDirty,y
mend mend

View File

@ -8,7 +8,7 @@ s6d2 =
s7d1 = /Users/jrand/Library/Developer/Xcode/DerivedData/BuGS-bffpexoblaghkzcbtjtzxeulnuto/Build/Products/Debug/BuGS.2mg s7d1 = /Users/jrand/Library/Developer/Xcode/DerivedData/BuGS-bffpexoblaghkzcbtjtzxeulnuto/Build/Products/Debug/BuGS.2mg
g_limit_speed = 0 g_limit_speed = 3
bram1[00] = 00 00 00 01 00 00 0d 06 02 01 01 00 01 00 00 00 bram1[00] = 00 00 00 01 00 00 0d 06 02 01 01 00 01 00 00 00