From f5d1aa9ee6ccb6a851b9d279e63a18adb1b7b883 Mon Sep 17 00:00:00 2001 From: Jeremy Rand Date: Sun, 6 Sep 2020 02:05:33 -0400 Subject: [PATCH] Improve the performance of the centipede segment draw function. --- BuGS/gameSegments.s | 52 +++++++++++++++----------------------------- BuGS/global.macros | 8 +++---- BuGS/make/config.txt | 2 +- 3 files changed, 23 insertions(+), 39 deletions(-) diff --git a/BuGS/gameSegments.s b/BuGS/gameSegments.s index daab9c1..261177b 100644 --- a/BuGS/gameSegments.s +++ b/BuGS/gameSegments.s @@ -35,10 +35,8 @@ drawSegments entry ldx #SEGMENT_MAX_OFFSET drawSegments_nextSegment anop lda segmentStates,x - bne drawSegments_cont - jmp drawSegments_skipSegment + beq drawSegments_skipSegment -drawSegments_cont anop lda segmentFacing,x clc adc segmentSpriteOffset @@ -54,23 +52,16 @@ drawSegments_head anop jsl segmentHeadJump drawSegments_handleTiles anop - phx - txa - asl a - asl a - tay - - _dirtyGameTileWithY segmentTileOffsets - _dirtyGameTileWithY segmentTileOffsets+2 - _dirtyGameTileWithY segmentTileOffsets+4 - _dirtyGameTileWithY segmentTileOffsets+6 - plx + _dirtyGameTileWithX segmentTileOffsetsUL + _dirtyGameTileWithX segmentTileOffsetsUR + _dirtyGameTileWithX segmentTileOffsetsLL + _dirtyGameTileWithX segmentTileOffsetsLR drawSegments_skipSegment anop dex dex bmi drawSegments_done - jmp drawSegments_nextSegment + bra drawSegments_nextSegment drawSegments_done anop rtl @@ -169,15 +160,10 @@ addBodySegment entry stz segmentScreenShifts,x txa - asl a - asl a - tay - - txa - sta segmentTileOffsets,y - sta segmentTileOffsets+2,y - sta segmentTileOffsets+4,y - sta segmentTileOffsets+6,y + sta segmentTileOffsetsUL,x + sta segmentTileOffsetsUR,x + sta segmentTileOffsetsLL,x + sta segmentTileOffsetsLR,x inc numSegments @@ -206,15 +192,10 @@ addHeadSegment entry stz segmentScreenShifts,x txa - asl a - asl a - tay - - txa - sta segmentTileOffsets,y - sta segmentTileOffsets+2,y - sta segmentTileOffsets+4,y - sta segmentTileOffsets+6,y + sta segmentTileOffsetsUL,x + sta segmentTileOffsetsUR,x + sta segmentTileOffsetsLL,x + sta segmentTileOffsetsLR,x inc numSegments @@ -233,7 +214,10 @@ segmentDirections dc 12i2'SEGMENT_DIR_RIGHT' segmentFacing dc 12i2'SEGMENT_FACING_DOWN' segmentScreenOffsets 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 segmentSpriteOffset dc i2'SEGMENT_SPRITE_LAST_OFFSET' diff --git a/BuGS/global.macros b/BuGS/global.macros index 5a11c3c..c635171 100644 --- a/BuGS/global.macros +++ b/BuGS/global.macros @@ -66,13 +66,13 @@ _drawDirtyGameRow_skip&tileOffset anop 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. macro - _dirtyGameTileWithY &tileOffset - ldx &tileOffset,y + _dirtyGameTileWithX &tileOffset + ldy &tileOffset,x lda #TILE_STATE_DIRTY - sta tileDirty,x + sta tileDirty,y mend diff --git a/BuGS/make/config.txt b/BuGS/make/config.txt index 6e02df5..4cf9182 100644 --- a/BuGS/make/config.txt +++ b/BuGS/make/config.txt @@ -8,7 +8,7 @@ s6d2 = 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