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

View File

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

View File

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

View File

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