A bunch of optimizations to reduce the number of instructions to draw tiles.

This commit is contained in:
Jeremy Rand 2020-07-17 02:46:36 -04:00
parent c79303d1dc
commit 3c0ac30fcb
4 changed files with 246 additions and 277 deletions

View File

@ -36,87 +36,56 @@ game start
drawDirtyGameTiles entry drawDirtyGameTiles entry
ldy #$0 ldy numDirtyGameTiles
beq dirtyTileLoopDone
dirtyTileLoop anop dirtyTileLoop anop
cpy numDirtyGameTiles dey
blt handleDirtyTile dey
stz numDirtyGameTiles
rtl
handleDirtyTile anop
phy phy
tya
asl a
tay
lda dirtyGameTiles,y
tax
ldx dirtyGameTiles,y
stz tiles,x stz tiles,x
ldy tiles+2,x
txy lda tiles+4,x
iny
iny
ldx tiles,y
iny
iny
lda tiles,y
jsl drawTile jsl drawTile
ply ply
iny bne dirtyTileLoop
bra dirtyTileLoop dirtyTileLoopDone anop
stz numDirtyGameTiles
rtl
drawDirtyNonGameTiles entry drawDirtyNonGameTiles entry
ldy #$0 ldy numDirtyNonGameTiles
beq dirtyTileLoopDone2
dirtyTileLoop2 anop dirtyTileLoop2 anop
cpy numDirtyNonGameTiles dey
blt handleDirtyTile2 dey
stz numDirtyNonGameTiles
rtl
handleDirtyTile2 anop
phy phy
tya
asl a
tay
lda dirtyNonGameTiles,y
tax
ldx dirtyNonGameTiles,y
stz tiles,x stz tiles,x
ldy tiles+2,x
txy lda tiles+4,x
iny
iny
ldx tiles,y
iny
iny
lda tiles,y
jsl drawTile jsl drawTile
ply ply
iny bne dirtyTileLoop2
bra dirtyTileLoop2 dirtyTileLoopDone2 anop
stz numDirtyNonGameTiles
rtl
drawTile entry drawTile entry
asl a tax
asl a
tay
lda tileJumpTable,y lda tileJumpTable,x
sta jumpInst+1 sta jumpInst+1
iny
iny
lda tileJumpTable,y lda tileJumpTable+2,x
sta jumpInst+3 sta jumpInst+3
jumpInst jmp >mushroom1 jumpInst jmp >mushroom1
@ -124,493 +93,493 @@ jumpInst jmp >mushroom1
drawAll entry drawAll entry
ldx #$2003 ldy #$2003
jsl mushroom1 jsl mushroom1
ldx #$200b ldy #$200b
jsl mushroom2 jsl mushroom2
ldx #$2013 ldy #$2013
jsl mushroom3 jsl mushroom3
ldx #$201b ldy #$201b
jsl mushroom4 jsl mushroom4
ldx #$2023 ldy #$2023
jsl poisonedMushroom1 jsl poisonedMushroom1
ldx #$202b ldy #$202b
jsl poisonedMushroom2 jsl poisonedMushroom2
ldx #$2033 ldy #$2033
jsl poisonedMushroom3 jsl poisonedMushroom3
ldx #$203b ldy #$203b
jsl poisonedMushroom4 jsl poisonedMushroom4
ldx #$2043 ldy #$2043
jsl letterA jsl letterA
ldx #$204b ldy #$204b
jsl letterB jsl letterB
ldx #$2053 ldy #$2053
jsl letterC jsl letterC
ldx #$205b ldy #$205b
jsl letterD jsl letterD
ldx #$2063 ldy #$2063
jsl letterE jsl letterE
ldx #$206b ldy #$206b
jsl letterF jsl letterF
ldx #$2073 ldy #$2073
jsl letterG jsl letterG
ldx #$207b ldy #$207b
jsl letterH jsl letterH
ldx #$2083 ldy #$2083
jsl letterI jsl letterI
ldx #$208b ldy #$208b
jsl letterJ jsl letterJ
ldx #$2093 ldy #$2093
jsl letterK jsl letterK
ldx #$209b ldy #$209b
jsl letterL jsl letterL
ldx #$2a03 ldy #$2a03
jsl letterM jsl letterM
ldx #$2a0b ldy #$2a0b
jsl letterN jsl letterN
ldx #$2a13 ldy #$2a13
jsl letterO jsl letterO
ldx #$2a1b ldy #$2a1b
jsl letterP jsl letterP
ldx #$2a23 ldy #$2a23
jsl letterQ jsl letterQ
ldx #$2a2b ldy #$2a2b
jsl letterR jsl letterR
ldx #$2a33 ldy #$2a33
jsl letterS jsl letterS
ldx #$2a3b ldy #$2a3b
jsl letterT jsl letterT
ldx #$2a43 ldy #$2a43
jsl letterU jsl letterU
ldx #$2a4b ldy #$2a4b
jsl letterV jsl letterV
ldx #$2a53 ldy #$2a53
jsl letterW jsl letterW
ldx #$2a5b ldy #$2a5b
jsl letterX jsl letterX
ldx #$2a63 ldy #$2a63
jsl letterY jsl letterY
ldx #$2a6b ldy #$2a6b
jsl letterZ jsl letterZ
ldx #$2a73 ldy #$2a73
jsl symbolC jsl symbolC
ldx #$2a7b ldy #$2a7b
jsl symbolP jsl symbolP
ldx #$2a83 ldy #$2a83
jsl symbolDot jsl symbolDot
ldx #$2a8b ldy #$2a8b
jsl symbolColon jsl symbolColon
ldx #$2a93 ldy #$2a93
jsl solid0 jsl solid0
ldx #$2a9b ldy #$2a9b
jsl solid1 jsl solid1
ldx #$3403 ldy #$3403
jsl solid2 jsl solid2
ldx #$340b ldy #$340b
jsl solid3 jsl solid3
ldx #$3413 ldy #$3413
jsl number0 jsl number0
ldx #$341b ldy #$341b
jsl number1 jsl number1
ldx #$3423 ldy #$3423
jsl number2 jsl number2
ldx #$342b ldy #$342b
jsl number3 jsl number3
ldx #$3433 ldy #$3433
jsl number4 jsl number4
ldx #$343b ldy #$343b
jsl number5 jsl number5
ldx #$3443 ldy #$3443
jsl number6 jsl number6
ldx #$344b ldy #$344b
jsl number7 jsl number7
ldx #$3453 ldy #$3453
jsl number8 jsl number8
ldx #$345b ldy #$345b
jsl number9 jsl number9
ldx #$345f ldy #$345f
jsl flea1 jsl flea1
ldx #$3467 ldy #$3467
jsl flea2 jsl flea2
ldx #$346f ldy #$346f
jsl flea3 jsl flea3
ldx #$3477 ldy #$3477
jsl flea4 jsl flea4
ldx #$347e ldy #$347e
jsl score300 jsl score300
ldx #$3486 ldy #$3486
jsl score600 jsl score600
ldx #$348e ldy #$348e
jsl score900 jsl score900
ldx #$3e04 ldy #$3e04
jsl leftScorpion1 jsl leftScorpion1
ldx #$3e14 ldy #$3e14
jsl leftScorpion1s jsl leftScorpion1s
ldx #$3e24 ldy #$3e24
jsl leftScorpion2 jsl leftScorpion2
ldx #$3e34 ldy #$3e34
jsl leftScorpion2s jsl leftScorpion2s
ldx #$3e44 ldy #$3e44
jsl leftScorpion3 jsl leftScorpion3
ldx #$3e54 ldy #$3e54
jsl leftScorpion3s jsl leftScorpion3s
ldx #$3e64 ldy #$3e64
jsl leftScorpion4 jsl leftScorpion4
ldx #$3e74 ldy #$3e74
jsl leftScorpion4s jsl leftScorpion4s
ldx #$4804 ldy #$4804
jsl rightScorpion1 jsl rightScorpion1
ldx #$4814 ldy #$4814
jsl rightScorpion1s jsl rightScorpion1s
ldx #$4824 ldy #$4824
jsl rightScorpion2 jsl rightScorpion2
ldx #$4834 ldy #$4834
jsl rightScorpion2s jsl rightScorpion2s
ldx #$4844 ldy #$4844
jsl rightScorpion3 jsl rightScorpion3
ldx #$4854 ldy #$4854
jsl rightScorpion3s jsl rightScorpion3s
ldx #$4864 ldy #$4864
jsl rightScorpion4 jsl rightScorpion4
ldx #$4874 ldy #$4874
jsl rightScorpion4s jsl rightScorpion4s
ldx #$5204 ldy #$5204
jsl spider1 jsl spider1
ldx #$5214 ldy #$5214
jsl spider1s jsl spider1s
ldx #$5224 ldy #$5224
jsl spider2 jsl spider2
ldx #$5234 ldy #$5234
jsl spider2s jsl spider2s
ldx #$5244 ldy #$5244
jsl spider3 jsl spider3
ldx #$5254 ldy #$5254
jsl spider3s jsl spider3s
ldx #$5264 ldy #$5264
jsl spider4 jsl spider4
ldx #$5274 ldy #$5274
jsl spider4s jsl spider4s
ldx #$5284 ldy #$5284
jsl spider5 jsl spider5
ldx #$5294 ldy #$5294
jsl spider5s jsl spider5s
ldx #$5c04 ldy #$5c04
jsl spider6 jsl spider6
ldx #$5c14 ldy #$5c14
jsl spider6s jsl spider6s
ldx #$5c24 ldy #$5c24
jsl spider7 jsl spider7
ldx #$5c34 ldy #$5c34
jsl spider7s jsl spider7s
ldx #$5c40 ldy #$5c40
jsl explosion1 jsl explosion1
ldx #$5c48 ldy #$5c48
jsl explosion2 jsl explosion2
ldx #$5c50 ldy #$5c50
jsl explosion3 jsl explosion3
ldx #$5c58 ldy #$5c58
jsl explosion4 jsl explosion4
ldx #$5c60 ldy #$5c60
jsl explosion5 jsl explosion5
ldx #$5c68 ldy #$5c68
jsl explosion6 jsl explosion6
ldx #$5c70 ldy #$5c70
jsl leftHead1 jsl leftHead1
ldx #$5c78 ldy #$5c78
jsl leftHead1s jsl leftHead1s
ldx #$5c80 ldy #$5c80
jsl leftHead2 jsl leftHead2
ldx #$5c88 ldy #$5c88
jsl leftHead2s jsl leftHead2s
ldx #$5c90 ldy #$5c90
jsl leftHead3 jsl leftHead3
ldx #$5c98 ldy #$5c98
jsl leftHead3s jsl leftHead3s
ldx #$6600 ldy #$6600
jsl leftHead4 jsl leftHead4
ldx #$6608 ldy #$6608
jsl leftHead4s jsl leftHead4s
ldx #$6610 ldy #$6610
jsl leftHead5 jsl leftHead5
ldx #$6618 ldy #$6618
jsl leftHead5s jsl leftHead5s
ldx #$6620 ldy #$6620
jsl leftBody1 jsl leftBody1
ldx #$6628 ldy #$6628
jsl leftBody1s jsl leftBody1s
ldx #$6630 ldy #$6630
jsl leftBody2 jsl leftBody2
ldx #$6638 ldy #$6638
jsl leftBody2s jsl leftBody2s
ldx #$6640 ldy #$6640
jsl leftBody3 jsl leftBody3
ldx #$6648 ldy #$6648
jsl leftBody3s jsl leftBody3s
ldx #$6650 ldy #$6650
jsl leftBody4 jsl leftBody4
ldx #$6658 ldy #$6658
jsl leftBody4s jsl leftBody4s
ldx #$6660 ldy #$6660
jsl leftBody5 jsl leftBody5
ldx #$6668 ldy #$6668
jsl leftBody5s jsl leftBody5s
ldx #$6670 ldy #$6670
jsl rightHead1 jsl rightHead1
ldx #$6678 ldy #$6678
jsl rightHead1s jsl rightHead1s
ldx #$6680 ldy #$6680
jsl rightHead2 jsl rightHead2
ldx #$6688 ldy #$6688
jsl rightHead2s jsl rightHead2s
ldx #$6690 ldy #$6690
jsl rightHead3 jsl rightHead3
ldx #$6698 ldy #$6698
jsl rightHead3s jsl rightHead3s
ldx #$7000 ldy #$7000
jsl rightHead4 jsl rightHead4
ldx #$7008 ldy #$7008
jsl rightHead4s jsl rightHead4s
ldx #$7010 ldy #$7010
jsl rightHead5 jsl rightHead5
ldx #$7018 ldy #$7018
jsl rightHead5s jsl rightHead5s
ldx #$7020 ldy #$7020
jsl rightBody1 jsl rightBody1
ldx #$7028 ldy #$7028
jsl rightBody1s jsl rightBody1s
ldx #$7030 ldy #$7030
jsl rightBody2 jsl rightBody2
ldx #$7038 ldy #$7038
jsl rightBody2s jsl rightBody2s
ldx #$7040 ldy #$7040
jsl rightBody3 jsl rightBody3
ldx #$7048 ldy #$7048
jsl rightBody3s jsl rightBody3s
ldx #$7050 ldy #$7050
jsl rightBody4 jsl rightBody4
ldx #$7058 ldy #$7058
jsl rightBody4s jsl rightBody4s
ldx #$7060 ldy #$7060
jsl rightBody5 jsl rightBody5
ldx #$7068 ldy #$7068
jsl rightBody5s jsl rightBody5s
ldx #$7070 ldy #$7070
jsl leftDownHead1 jsl leftDownHead1
ldx #$7078 ldy #$7078
jsl leftDownHead1s jsl leftDownHead1s
ldx #$7080 ldy #$7080
jsl leftDownHead2 jsl leftDownHead2
ldx #$7088 ldy #$7088
jsl leftDownHead2s jsl leftDownHead2s
ldx #$7090 ldy #$7090
jsl leftDownBody1 jsl leftDownBody1
ldx #$7098 ldy #$7098
jsl leftDownBody1s jsl leftDownBody1s
ldx #$7a00 ldy #$7a00
jsl leftDownBody2 jsl leftDownBody2
ldx #$7a08 ldy #$7a08
jsl leftDownBody2s jsl leftDownBody2s
ldx #$7a10 ldy #$7a10
jsl rightDownHead1 jsl rightDownHead1
ldx #$7a18 ldy #$7a18
jsl rightDownHead1s jsl rightDownHead1s
ldx #$7a20 ldy #$7a20
jsl rightDownHead2 jsl rightDownHead2
ldx #$7a28 ldy #$7a28
jsl rightDownHead2s jsl rightDownHead2s
ldx #$7a30 ldy #$7a30
jsl rightDownBody1 jsl rightDownBody1
ldx #$7a38 ldy #$7a38
jsl rightDownBody1s jsl rightDownBody1s
ldx #$7a40 ldy #$7a40
jsl rightDownBody2 jsl rightDownBody2
ldx #$7a48 ldy #$7a48
jsl rightDownBody2s jsl rightDownBody2s
ldx #$7a50 ldy #$7a50
jsl downHead1 jsl downHead1
ldx #$7a58 ldy #$7a58
jsl downHead2 jsl downHead2
ldx #$7a60 ldy #$7a60
jsl downHead3 jsl downHead3
ldx #$7a68 ldy #$7a68
jsl downBody1 jsl downBody1
ldx #$7a70 ldy #$7a70
jsl downBody2 jsl downBody2
ldx #$7a78 ldy #$7a78
jsl downBody3 jsl downBody3
ldx #$7a80 ldy #$7a80
jsl drawShip jsl drawShip
ldx #$7a88 ldy #$7a88
jsl drawShipShift jsl drawShipShift
ldx #$7a90 ldy #$7a90
jsl drawHalfShot jsl drawHalfShot
ldx #$7a98 ldy #$7a98
jsl drawHalfShotShift jsl drawHalfShotShift
ldx #$8400 ldy #$8400
jsl drawShot jsl drawShot
ldx #$8408 ldy #$8408
jsl drawShotShift jsl drawShotShift
rtl rtl

View File

@ -15,7 +15,7 @@
ora #$0030 ora #$0030
sta $e1c068 sta $e1c068
clc clc
txa tya
tcs tcs
mend mend

View File

@ -40,15 +40,15 @@
#define ADD_DIRTY_GAME_TILE(tileNum) \ #define ADD_DIRTY_GAME_TILE(tileNum) \
if (!tiles[tileNum].dirty) { \ if (!tiles[tileNum].dirty) { \
tiles[tileNum].dirty = 1; \ tiles[tileNum].dirty = 1; \
dirtyGameTiles[numDirtyGameTiles] = ((tileNum) * sizeof(tTile)); \ dirtyGameTiles[numDirtyGameTiles / 2] = ((tileNum) * sizeof(tTile)); \
numDirtyGameTiles++; \ numDirtyGameTiles += 2; \
} }
#define ADD_DIRTY_NON_GAME_TILE(tileNum) \ #define ADD_DIRTY_NON_GAME_TILE(tileNum) \
if (!tiles[tileNum].dirty) { \ if (!tiles[tileNum].dirty) { \
tiles[tileNum].dirty = 1; \ tiles[tileNum].dirty = 1; \
dirtyNonGameTiles[numDirtyNonGameTiles] = ((tileNum) * sizeof(tTile)); \ dirtyNonGameTiles[numDirtyNonGameTiles / 2] = ((tileNum) * sizeof(tTile)); \
numDirtyNonGameTiles++; \ numDirtyNonGameTiles += 2; \
} }
/* Globals */ /* Globals */

View File

@ -43,63 +43,63 @@ typedef word tTileOffset; /* A tile offset is a tile number times the sizeof(t
typedef enum { typedef enum {
TILE_EMPTY = 0, TILE_EMPTY = 0,
TILE_MUSHROOM1 = 1, TILE_MUSHROOM1 = 1 * 4,
TILE_MUSHROOM2 = 2, TILE_MUSHROOM2 = 2 * 4,
TILE_MUSHROOM3 = 3, TILE_MUSHROOM3 = 3 * 4,
TILE_MUSHROOM4 = 4, TILE_MUSHROOM4 = 4 * 4,
TILE_POISON_MUSHROOM1 = 9, TILE_POISON_MUSHROOM1 = 9 * 4,
TILE_POISON_MUSHROOM2 = 10, TILE_POISON_MUSHROOM2 = 10 * 4,
TILE_POISON_MUSHROOM3 = 11, TILE_POISON_MUSHROOM3 = 11 * 4,
TILE_POISON_MUSHROOM4 = 12, TILE_POISON_MUSHROOM4 = 12 * 4,
TILE_SYMBOL_C = 5, TILE_SYMBOL_C = 5 * 4,
TILE_SYMBOL_P = 6, TILE_SYMBOL_P = 6 * 4,
TILE_SYMBOL_DOT = 7, TILE_SYMBOL_DOT = 7 * 4,
TILE_SYMBOL_COLON = 8, TILE_SYMBOL_COLON = 8 * 4,
TILE_LETTER_A = 13, TILE_LETTER_A = 13 * 4,
TILE_LETTER_B = 14, TILE_LETTER_B = 14 * 4,
TILE_LETTER_C = 15, TILE_LETTER_C = 15 * 4,
TILE_LETTER_D = 16, TILE_LETTER_D = 16 * 4,
TILE_LETTER_E = 17, TILE_LETTER_E = 17 * 4,
TILE_LETTER_F = 18, TILE_LETTER_F = 18 * 4,
TILE_LETTER_G = 19, TILE_LETTER_G = 19 * 4,
TILE_LETTER_H = 20, TILE_LETTER_H = 20 * 4,
TILE_LETTER_I = 21, TILE_LETTER_I = 21 * 4,
TILE_LETTER_J = 22, TILE_LETTER_J = 22 * 4,
TILE_LETTER_K = 23, TILE_LETTER_K = 23 * 4,
TILE_LETTER_L = 24, TILE_LETTER_L = 24 * 4,
TILE_LETTER_M = 25, TILE_LETTER_M = 25 * 4,
TILE_LETTER_N = 26, TILE_LETTER_N = 26 * 4,
TILE_LETTER_O = 27, TILE_LETTER_O = 27 * 4,
TILE_LETTER_P = 28, TILE_LETTER_P = 28 * 4,
TILE_LETTER_Q = 29, TILE_LETTER_Q = 29 * 4,
TILE_LETTER_R = 30, TILE_LETTER_R = 30 * 4,
TILE_LETTER_S = 31, TILE_LETTER_S = 31 * 4,
TILE_LETTER_T = 32, TILE_LETTER_T = 32 * 4,
TILE_LETTER_U = 33, TILE_LETTER_U = 33 * 4,
TILE_LETTER_V = 34, TILE_LETTER_V = 34 * 4,
TILE_LETTER_W = 35, TILE_LETTER_W = 35 * 4,
TILE_LETTER_X = 36, TILE_LETTER_X = 36 * 4,
TILE_LETTER_Y = 37, TILE_LETTER_Y = 37 * 4,
TILE_LETTER_Z = 38, TILE_LETTER_Z = 38 * 4,
TILE_NUMBER_0 = 39, TILE_NUMBER_0 = 39 * 4,
TILE_NUMBER_1 = 40, TILE_NUMBER_1 = 40 * 4,
TILE_NUMBER_2 = 41, TILE_NUMBER_2 = 41 * 4,
TILE_NUMBER_3 = 42, TILE_NUMBER_3 = 42 * 4,
TILE_NUMBER_4 = 43, TILE_NUMBER_4 = 43 * 4,
TILE_NUMBER_5 = 44, TILE_NUMBER_5 = 44 * 4,
TILE_NUMBER_6 = 45, TILE_NUMBER_6 = 45 * 4,
TILE_NUMBER_7 = 46, TILE_NUMBER_7 = 46 * 4,
TILE_NUMBER_8 = 47, TILE_NUMBER_8 = 47 * 4,
TILE_NUMBER_9 = 48, TILE_NUMBER_9 = 48 * 4,
TILE_SOLID1 = 49, TILE_SOLID1 = 49 * 4,
TILE_SOLID2 = 50, TILE_SOLID2 = 50 * 4,
TILE_SOLID3 = 51, TILE_SOLID3 = 51 * 4,
TILE_PLAYER = 52, TILE_PLAYER = 52 * 4,
} tTileType; } tTileType;