From 790bfd51b514793a694440a143ab1f849f677940 Mon Sep 17 00:00:00 2001 From: pkali Date: Sat, 3 Jun 2023 23:27:06 -0400 Subject: [PATCH] smol optimization by moving out a portion of a proc to a separate subroutine --- Atari/textproc.asm | 46 ++++++++++++++++++++++++--------------------- C64/textproc.asm | 22 ++++++++++++++++++++++ grafproc.asm | 17 +---------------- scorch.bin | Bin 32768 -> 32768 bytes scorch.xex | Bin 56299 -> 56274 bytes scorchC64.prg | Bin 39493 -> 39497 bytes 6 files changed, 48 insertions(+), 37 deletions(-) diff --git a/Atari/textproc.asm b/Atari/textproc.asm index 282507b..782b917 100644 --- a/Atari/textproc.asm +++ b/Atari/textproc.asm @@ -2022,27 +2022,10 @@ AngleDisplay ;------------------------------------------------- .proc DisplayWeaponName ; nr of weapon in A, address to put in weaponPointer -@weapon_index = temp +@weapon_index = TextNumberOff sta @weapon_index ;get back number of the weapon - -@inverse_counter = temp+1 - - mwa #0 @inverse_counter - tay ; ldy #0 mwa #(NamesOfWeapons-1) LineAddress4x4 - -@ - inw LineAddress4x4 - lda (LineAddress4x4),y - spl:inc @inverse_counter - lda @weapon_index - beq zeroth_talk ; special treatment of talk #0 - cmp @inverse_counter - bne @- - - inw LineAddress4x4 ; we were pointing at the char with inverse, must go 1 further -zeroth_talk - + jsr _calc_inverse_display ; now copy text to screen dey ; ldy #-1 @ @@ -2058,6 +2041,27 @@ clearingOnly bne clearingonly rts .endp - - +;------------------------------------------------- +.proc _calc_inverse_display +; optymalization station. not a real function +; or is it? +@weapon_index = TextNumberOff +@inverse_counter = temp+1 + + mwa #0 @inverse_counter + tay ; ldy #0 +@ + inw LineAddress4x4 + lda (LineAddress4x4),y + spl:inc @inverse_counter + lda @weapon_index + beq zeroth_talk ; special treatment of talk #0 + cmp @inverse_counter + bne @- + + inw LineAddress4x4 ; we were pointing at the char with inverse, must go 1 further +zeroth_talk + rts +.endp + .endif \ No newline at end of file diff --git a/C64/textproc.asm b/C64/textproc.asm index 8998e1f..5e98710 100644 --- a/C64/textproc.asm +++ b/C64/textproc.asm @@ -340,6 +340,28 @@ DisplayAngle rts .endp ;------------------------------------------------- +.proc _calc_inverse_display +; optymalization station. not a real function +; or is it? +@weapon_index = TextNumberOff +@inverse_counter = temp+1 + + mwa #0 @inverse_counter + tay ; ldy #0 +@ + inw LineAddress4x4 + lda (LineAddress4x4),y + spl:inc @inverse_counter + lda @weapon_index + beq zeroth_talk ; special treatment of talk #0 + cmp @inverse_counter + bne @- + + inw LineAddress4x4 ; we were pointing at the char with inverse, must go 1 further +zeroth_talk + rts +.endp +;------------------------------------------------- .endif \ No newline at end of file diff --git a/grafproc.asm b/grafproc.asm index e8bbd64..cb6a0a3 100644 --- a/grafproc.asm +++ b/grafproc.asm @@ -1599,25 +1599,10 @@ NotHigher ; all text start from `talk` and end with an inverse. ; we go through the `talk`, count number of inverses. ; if equal to TextNumberOff, it is our text, printit - inverse_counter = temp+1 - tya tax ; save Y - mwa #0 inverse_counter - tay ; ldy #0 mwa #(talk-1) LineAddress4x4 - -@ - inw LineAddress4x4 - lda (LineAddress4x4),y - spl:inc inverse_counter - lda TextNumberOff - beq zeroth_talk ; special treatment of talk #0 - cmp inverse_counter - bne @- - - inw LineAddress4x4 ; we were pointing at the char with inverse, must go 1 further -zeroth_talk + jsr _calc_inverse_display ; now find length of the text @ diff --git a/scorch.bin b/scorch.bin index e85bb6eb6ed9f161906cafa85167c1b784fbf7c8..e9ee31b5a5eeb96a8130db0faa5b7adc6dc15ecd 100644 GIT binary patch delta 4880 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 delta 4818 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 H*Ny)V0Zs}~ delta 4740 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 DAlV?D