From eb0ed22c2a9bf3ddb2e608fda2d74b621e2bb00a Mon Sep 17 00:00:00 2001 From: David Schmenk Date: Fri, 14 Feb 2025 05:58:07 -0800 Subject: [PATCH] Assembly-ize poolalloc for massive speedup --- images/apple/PLASMA-2.20.po | Bin 33553920 -> 33553920 bytes src/toolsrc/ed.pla | 50 +++++++++++++++++++++--------------- 2 files changed, 30 insertions(+), 20 deletions(-) diff --git a/images/apple/PLASMA-2.20.po b/images/apple/PLASMA-2.20.po index bd4fa787924a0765dc23a5f6c280410009c06f3b..dc26ebc9dfadac3407aeb4df2bcfd8aae0cd2130 100644 GIT binary patch delta 2580 zcmW;M36xJ&0D$rTn=xi=G1jt#7F*V_OonWU?Aaw-wwPq6Qp!%qlE$QUWF5OSOa>=55ZkJUJ`pwDinoSqW*$p@gJf)6%liOYhEccwx%I zeOc*668FXi#d9A@4o%KTNlQqo7Ii%}D>ewi3Y^a6S3~(fsq)6(RdlJ;8l#l zYj_=F@dn<+IE=>xOvEHi#uQA&G`xlBn1Pvi8?!JQb1)b0U>@E@0_GzT?_mMn#|QWj zAK_zsf+Q@&r&xr=Sc0WkhUG}c3arE`ti~Fw#X79VXV`$xk%BLfiZAgMHewStV+*!o z8`7{HJFpYG@HKX05B6do_Tw9Tiv#!$-yVQ^*uHMa=!?0aMfzGsR5_^Pnkd zN}1B;A@i_##5`)sn6jpvDQ_y6$4o_2$y7E~OjT3O#F*-)hN)?4nOO667Mmqzsaa;0n`E=XtTe04YO}_yHS5fJ z^O@OTJ~t`m3zKTTG+&vGW|P@$wwSGEn@Ka<%?`8E>@r`Q-DZ#3YxbG_<{R^^Ibgms z-6Pj=CC~CUFu$0S=9D>Y&X`}#S#!?(X3m=o^SilVE}Bc` tvbkcenrr5|`NP~Wf11C{-{v24)7&!un*YpglWFdlyTLa8enG_I{{fV3AWZ-O delta 2602 zcmW;MWmFVx0EXe6#r;?lFtEkIz{Enu?gA`S>_$b!?!v%sMeM)=EKm{K6%!M?69XGN zK>6;+Ip@0HI`e1d%mk&TIRqif!;;Q>hlBH8PfNd3nKiST5>2LmTf5`i4K$lvV(mSQ zNW&+0e}`sV;Sp&WW+kLHO$)I_m_jymPfAK+v@wf`3%16D$eJRSd%%n$6R2E9-CajdU7eHU<1~To6{k6le)Z zaSX6?^0)Lh`zAOA+IiWVD)`%Vv=4uoHp=22+TPQ6XSl{TsBWyxXt=~aYGmZM7%riy z&5dIWhrNs;?3VU6mKrQ=K1MXlVJ(cIX2$2OjC^dz8f}c?y2;JYh_<+7HJM#wANv{h zMvg*e^OTZi(-e19Lk-lQnbN_48Fokq3;u&WtVoXx$cRkHj4W_~Bb<;G*^nJM;EbHe zh1|%4yvT?AC;%4}L?IML5xAl#ilI14zzro)3Z+p7Wl;|9D31!Lh)Spo4^%-_RD&m~ zqXufC7HXpo>Y^U>EE=F88lf?opedT6IlSNvAGAPAv_fmNfiK#k9ooYW9ncY-&>3CO z72VJsJMZ=kG|-K{s_PT48$M=VlakaD28D;MqngHVKl~IEXH9xCSW2aVKRa+ z1yeB%(-Djrn2A}KjX9W$d6r6Sr_1cW@W?a32rw5RdQ}Pw*7akcj7aftPrNB)rBO zyu~}b#|L~wGCtumzThjq;X8idCw}2KQjm&2_=~i;eESQbm=!xEonle`Q|uM1l3vN6 zWK=RKnUySxgW{+-DOr_lN_HiO;;iIUaw)l$JW5_ApORlGptvXnl|o8krHJCH6jh2T z#g!6@n^ICKrIc36C}ov$in~%?si0I;Dk+r}52cDyRjHDfQd_B`)K%&! z^_2!nL#2_@SZSg(RhlWy6)(kG@ljeREtOVEYo(3itF%?xDeV`-uGo|lN}O_1Ii;Ld&M0SSDZiBzB~|&O{56jA_cJV;{|E3JCs_ah diff --git a/src/toolsrc/ed.pla b/src/toolsrc/ed.pla index c004923..108eb6e 100755 --- a/src/toolsrc/ed.pla +++ b/src/toolsrc/ed.pla @@ -7,7 +7,7 @@ include "inc/cmdsys.plh" include "inc/args.plh" include "inc/fileio.plh" -//sysflags nojitc // Keep JITC from compiling and pausing while editing +sysflags nojitc // Keep JITC from compiling and pausing while editing // // Hardware constants // @@ -218,7 +218,15 @@ asm sizemask(size)#1 LDA #$00 STA ESTKH,X RTS --- INX +-- DEY ; THIS IS NEXT MAP BYTE FROM BELOW + CPY #$FF + BNE + + DEC DSTH + DEC ESTKH+1,X + LDA ESTKH+1,X + CMP #$FF + BNE + + INX INX INX ++ LDA #$00 @@ -226,7 +234,7 @@ asm sizemask(size)#1 STA ESTKH,X RTS end -asm poolmap(strbase, mapbase, idx, mask)#1 +asm poolalloc(poolbase, mapbase, idx, mask)#1 LDA ESTKL+2,X ; MAPBASEL STA DSTL LDA ESTKH+2,X ; MAPBASEH @@ -234,22 +242,24 @@ asm poolmap(strbase, mapbase, idx, mask)#1 ADC ESTKH+1,X ; IDXH STA DSTH LDY ESTKL+1,X ; IDXL - LDA (DST),Y ++ LDA (DST),Y CMP #$FF - BEQ -- + BEQ -- ; MAP BYTE FULL, TRY NEXT LDA #$00 - STA ESTKL+2,X ; OFST -- LDA ESTKL,X - AND (DST),Y + STA TMP ; OFST + LDA ESTKL,X + STA ESTKH,X +- AND (DST),Y BEQ ++ - INC ESTKL+2,X ; OFST++ - ASL ESTKL,X ; MASK <<= 1 - BCS -- ; NO FIT, EXIT + INC TMP ; OFST++ + ASL ESTKH,X ; MASK <<= 1 + BCS -- ; NO FIT, TRY NEXT MAP BYTE + LDA ESTKH,X BCC - -++ LDA ESTKL,X ; UPDATE MASK +++ LDA ESTKH,X ; UPDATE MAPMASK ORA (DST),Y STA (DST),Y - LDA ESTKL+2,X ; OFST + LDA TMP ; OFST ASL ASL ASL @@ -303,12 +313,12 @@ def strpoolalloc(size) byte szmask word straddr, i - szmask = sizemask(size) - for i = strplmapsize - 1 downto 0 - straddr = poolmap(strpool, strpoolmap, i, szmask) - if straddr - return straddr - fin + straddr = poolalloc(strpool, strpoolmap, strplmapsize - 1, sizemask(size)) + if straddr + return straddr + fin + //szmask = sizemask(size) + //for i = strplmapsize - 1 downto 0 //if ^(strpoolmap + i) <> $FF // mapmask = szmask // ofst = 0 @@ -322,7 +332,7 @@ def strpoolalloc(size) // fin // until mapmask & $100 // No fit //fin - next + //next puts(@nomem) return 0 end