From d2c5ef675f480f2a80aefb2cd18c2cdd31c6e8b5 Mon Sep 17 00:00:00 2001 From: blondie7575 Date: Mon, 25 Dec 2017 22:41:09 -0700 Subject: [PATCH] Much faster span cache management --- equates.s | 1 + gscats.2mg | Bin 819264 -> 819264 bytes terrain.s | 36 +++++++++++++++--------------------- 3 files changed, 16 insertions(+), 21 deletions(-) diff --git a/equates.s b/equates.s index 38589c5..092c765 100644 --- a/equates.s +++ b/equates.s @@ -26,6 +26,7 @@ SCRATCH1 = $1a SCRATCHL = $19 ; 16-bit version of scratch SCRATCHL2 = $67 ; Second 16-bit scratch PARAM24 = $67 ; 24-bit param (This is almost certainly messing up AppleSoft, but meh) +CACHEPTR = $6A ; General purpose cache pointer (This is almost certainly messing up AppleSoft, but meh) STACKPTR = $70 ; Cache for stack pointer in fast graphics SHADOWREGISTER = $72 ; Cache for shadow register in fast graphics STACKREGISTER = $73 ; Cache for stack register in fast graphics diff --git a/gscats.2mg b/gscats.2mg index c1e12fcd50be197d9475ce847bbee325c1353267..9cf6c253c1ea7e1ba23529567d4f8ced157be992 100644 GIT binary patch delta 1976 zcmY*aeQ*;+6yLoxAxYD4fQ1A__Gl$m#(H8}vzOKZQ3s(4rG7w}O3>*@GpK){IAt7r zGft#B-XIiu4OXn!YA$ds;vY3?$H)LSGjt|XTPP{ErGDU7H0a>?HP*Lxt?1pn-M7E@ z_U-TX?Y&LP%aii*V}jM`n~%^J$Q~{7wJftPy44&a7|!R=jjPt(b@!bs?_YcWT2Vv@ z*-j#YKCU#ZY!*{qXtee=TJaSbr+S}y5jW#J&Zq6{{c|@?<>MXdsTN${v?-X_?(j75 zNZA}r{OC~Xf{C0%*%BmMgWE#2ZO-W@mIynP3j+8mV}b_W6Gl5JkfJ5KLaQ^iTG$b> zX$Xoh>%vkZiGfWF|r1Wn_;M3vL;p5?)GY%`ifzUOn(8+(wHrLuy{*`T2i15huA2o* zdHde-wQNy5y-QVGIIn3)DEWIz84@&^3uK1`&|-n?h@gxJ`dJ~6%?L_HNDR6MG6L^v zZay<2@Rxzeu8@YI(T4=j6Q=V8&?W>(>(y!c7zCIUlt}^n1||glI(=80CwNee?!k^E)_n*(T0Qy^naenT2{U%Y$q= zJTG*NlhCsV*ma_QO7c^bs%PG3LRbBkfP2A*k%`OLm*PG4+(WvBW{ z5B77<`FfKZ@u#jL#UJ%+{yzV(|FVBhSy@?K*-K@KvTWH63t3I|gRI{~^>)^W=^j2gK`JWA*&u=VS1QPg3jGi> z{T0yPW>XhXeLsw=L{#MrkPid0t~U)!?4#F2y!v@bEYy$E)OwUF>GB4?U60tApDSMn zU~WN|*V6z9B+S+21=|{SoLXr}@1zS;9Lg0ao%CoYC9k^L57AJ2CzUV5(NXr(5NUJ) zE9EG4D&5r6@ETH%QEiG%CRMHgqk4;rxpvSH1c;N}`O|UQrh#{7fP)aY-B@KbUwz5V zH9l(6{beCzazbQ8FG;38z4!@{DG&)1SkqJhflwx5DuA>b2q^0$7Aj8f1wBsR8~?$I z)drqh3?(pHE$N$s(HcqL6l8THI?Tp~c23f_7#bTvUDWG>aD?Al7O?{!v5`H#=y}Nm zca;7I9F>4zbX;nWQKKZ)>eUi&sR~r+qmriqD33~znG}-4>OCj1yKq=i%#Jg@1Tq?|Ldsnkd*9*GwCWk|e2{%v(FR1kD+{ zC(YT(ELRGlbZLK*L+LCyFI;Fkdq4qy7lKm3+KfQH6qsv13twBwR=7f5tt9oJWVLDu zJ~mqn3zAb6Z0`>l$&S&`)jI+*0XxYGJ|i{HoHJAPACzV)JQ!goq)Nlij;9y)L>1<8 z3(7|&aaO7ai4OUvRL>O8$zz(8T`5pL%~=~O^>Ha@Yaf@YHktw01@Yuu?%K7VOEI7l z>-*Ue_`N!qvx#}H|LkDrSb3Xk$6mc36b kZb@2;cCR>%K{yZ#NFIn4#0D}8#17&BalW(Sbp8kb08lLdh5!Hn delta 2009 zcmY*aeQZ-z6u<9v>)Ni{IuLkoK)7!c%S7=3-Rync3<4%F#)p6CA4`Z0!e|#Z2q8q4 zXlt}mKAwmukHx7AVR3KpHWq^8iIoBl+hjA1`iJ2U1Pzvbbn6(C4~_HO*G{y}dH39N z&&ThcbMLv);Ie3N*;ygiW}S`DZ^+V8W<9nzcmC4M6v1>hix#cgxca4)FK$@3VVx)< zgv{R}jDD&%R;d+b-r1MiyDyiS3^F%*cfQAjnVdOJ^-%Ah`#{-@0@H2h$8q0;{mvm?-& z6x7#I$by#^NQnpFR%OtU^5`ueg6M4s>B;$>5dU+8ZpC8#Ng*)`7Fmz&7GoP7`u5@w zuf~x3w#C*NxwDM(Bi!k4Lk3)KpTBtEDsdFVVr$y@wIT}fzTmJsb(Ms+xAS$>aow4u zaIhsgKNdR-zPW?jw)dGGMV+x&R$uoQ2Y<}ORD-Phw)tKDHedet6z5MChRpgKt`L91 z))5YiPoLnnnd8YqQHXCZRz|E$>FV=@<_dNITg)$Px0J-UqQr!ezASvsPvOH>Prk)Q zl7)Siv&&VCKIDIgf7{elERs~V9A}m>N#*0?%;r1@$ww|YkG&>yy~PSMYi3|j04(yL zK(VC;1>ic|sgxk61Z`Mwr^W<%Owf~s17m{29uD`X1jjhwY4$>deL=o2fZo8Q;FzbSgn@BEd;)X^?hB$_8_N*}CIp2UVoJ-Bh4jd^vFNC| z8Ma94*JG}M?2F|CeZ=u3WL+8UWM|Q&XUOy$*Nv@~0V&wP(%~8#L9< zboN$j%nWvO*l9K=CVw854>*4nPog#^5_Tqv?%Xsb{y2QdsfzMpXOMubJe??lf%A(k zhnz83PcMLJ4g9hqs#ElMIdLm|_>gj@n{hEmdvA3!F?-obSC{J>*AK2Cm$~Apikgbu z6`xgnU%^&Nm3u3{tbA0t^7;3B`@d#hFfj*|{3yfcL<{i)Wl@xwpEF#A4=QV;j4Q`d z(0X2ZJIc%rM2O>6{2kFQk;E$PG!adBIngwdHsQ@g>!xE9(R%0@AV(b0oA~8wJnX^X z%2thEsnX8TrDCF8q^8dhO@(=_h-w$Oal#$cv>}P^t|r85qmnpFyG-JnP`bRGcMont zkoSONMsOZT({tK+&JQA}g1w!G#Tt5MP7|-Dlae@#(gm_k&gcYxU~fG~ysbJ3j>Gwo zRpQ0_?0`zXOl4$?spfg&1^Z6CKR@e61HmjR>6w;vgX12E zqI6$o-rSPGI#EJVToEbAq?F;afv<>^0XM)vybJ>paFdZ_7?AWB5@5DU)YT=j7Whl# z+%F@!jN*5&3!opi)JxhfPm52|nmn{^v<%U?!Hr1T9)qJZXp-7)5A=}>i$fNWhs^kt zvt?Au2*XSMBTP#Gu;rfA8X-n^sMG2thpBdbm6nz`KR`}PP?k6fHU#Krnz+UxNzN2b zu9w6m@tv%r989Lyr$?@FM3P600?R%r?m(gmZVJ9s6?|Y^Er=$rhug0CBzf5A+bQEa zCiLqhZNYi=I6{dfu_%iIi4-P?*;fEoAwe6f4F!5+dDyoi z%wXqKrX?{i-i<_Sa4gbeIaX=rDrWx$qb$6u> zz|s-9Yjr=Y_oU5Y&Zl>+^k~Z$i5GxB2CCOXWi0SA=sw9k=zy-QXN`5ArvslVP@tzi gyMM(s28abR0p$SY0-1sGfGj{(Alnx!uH}FA55pc9vj6}9 diff --git a/terrain.s b/terrain.s index e31e713..dd6b7dd 100644 --- a/terrain.s +++ b/terrain.s @@ -68,9 +68,10 @@ renderTerrainDone: ; renderTerrainSpans: pha - stz terrainSpanWriteCacheLen - lda #MAXTERRAINHEIGHT-1 + lda #terrainSpanWriteCache + sta CACHEPTR + lda #MAXTERRAINHEIGHT-1 renderTerrainSpansLoop: sta PARAML1 @@ -89,21 +90,18 @@ renderTerrainSpansLoop: unrenderTerrainSpans: SAVE_AXY - ldy #0 unrenderTerrainSpansLoop: - lda terrainSpanWriteCache,y + dec CACHEPTR + dec CACHEPTR + lda (CACHEPTR) + beq unrenderTerrainSpansDone tax lda #0 - sta VRAMBANK,x + bra unrenderTerrainSpansLoop - iny - iny - cpy terrainSpanWriteCacheLen - bne unrenderTerrainSpansLoop - - stz terrainSpanWriteCacheLen +unrenderTerrainSpansDone: RESTORE_AXY rts @@ -173,14 +171,10 @@ renderTerrainRowSpansLoop: sta VRAMBANK,x ; Cache the index we wrote to so we can erase later - phy - ldy terrainSpanWriteCacheLen txa - sta terrainSpanWriteCache,y - iny - iny - sty terrainSpanWriteCacheLen - ply + sta (CACHEPTR) + inc CACHEPTR + inc CACHEPTR ; Advance to end of span clc @@ -854,10 +848,10 @@ terrainSpanData: .endrepeat .endrepeat +terrainSpanWriteCacheNull: + .word 0 ; Null terminator for when popping off LIFO terrainSpanWriteCache: .repeat 512 - .word 0 + .word 0 ; LIFO for tracking span byte writes .endrepeat -terrainSpanWriteCacheLen: - .word 0