From 92359c64f2c88cc1602576df32aabc08627be9a9 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Sun, 19 Jul 2020 09:46:04 +0200 Subject: [PATCH] temporary strings are now freed when needed --- bin/basic_generic.rom | Bin 8192 -> 8192 bytes bin/basic_ultimate64.rom | Bin 8192 -> 8192 bytes bin/kernal_generic.rom | Bin 8192 -> 8192 bytes bin/kernal_ultimate64.rom | Bin 8192 -> 8192 bytes bin/mega65.rom | Bin 131072 -> 131072 bytes bin/mega65_pxlfont.rom | Bin 131072 -> 131072 bytes src/,,config_generic.s | 4 +-- src/,,config_ultimate64.s | 4 +-- src/basic/basic_commands/cmd_print.s | 3 +- src/basic/board_m65/mega65_imports.s | 1 + src/basic/engine_runtime/do_new_clr_restore.s | 5 +--- src/basic/engine_variables/tmpstr_free.s | 2 +- src/basic/engine_variables/tmpstr_free_all.s | 26 ++++++++++++++++-- src/basic/engine_variables/varstr_free.s | 6 ++-- 14 files changed, 36 insertions(+), 15 deletions(-) diff --git a/bin/basic_generic.rom b/bin/basic_generic.rom index 62954140c1caa0b0ab1282840747865c29cb6041..217ffa26cdc08aed101d50c37eed953a3e2219ca 100644 GIT binary patch delta 4251 zcmZu!3s76fxjuUE5(WVVB4TW>c`H0@7rT~mgdID89IsozPMfw)dISbbest1KJJZ35 zMP|GW!z8Wf=}n09s4ihaN4$;-m^Zk&k;_R;du~cPb=!C_0)pMCbKKamxpAZWuW)*O zXQF}Ke|P`=clUpM|9=|yH13gN^cf;YjI@|!&}}4B)S{kV33)hL(Na83Z7szf&R-#X zX2`^elQ_1WZ)xrC|Gh>7f0mvo?jIV>%Te47PSee4dNdl-DNf^?;IyxCT2;S1t=!^y zG}G_a;Z0uAfQm-LR7Y}qif~SUE;(u3qw!l64e!zWtum)ZPAhi=9I>$w9bSN8j9j8d zAb-D!hsMJ5aLpW&OY(@BJi?pma!8I_yOhfdzluQG$$sH{MEhQ>_ePuOBMBM{1ttot z6gE)U#x}c?mL5^!m&}S`DNl)9%2l*WIe9$Iw_MYZ23l~9Bd2-c)5N06-`@B{z4^~i zZ!Omzx}EmfosrJFD{o#s_dlQCd*@$Mp)ZbxIL#$3LOT7x{OYf}t80FAem)4}(E%Xl zhv)qx^9%FA;6l*r4F-kyeppejeP=sY!biRDST^vcG3?!d3?BwMq3u6OwI@&su~m~ zqOvvDh0_sf!o8^dS!JCLAKKm7rbA_&v_uZ6YufZ-vSTM2A8PyJ9G>p&cSiqMv*vk9 z?WmbjCp5yfnDkxGQxkm_9rK~5J3zxZwC(}==mT`^19Z(QE$lI5YhOJt95Z~&Zlc9? zm82L%Y~#g9G&qj}Bj`%#Y{t(rNtTBbw~%a_b-8ZdU7#e;%*#iH-I+=h&A1#h=6-l7 z+d?x|V#dHJGgpoblT4bmQa4Ysq#2ssQZ;=cQn_H_g$=Q3LhD28_aJT*C5?+5a);0{ zD&?cHjwqvI~KX7aC6rx-*Z#Ivd(L>VIm3cl!B7IWV?8kd>z$| zxsjL+gN4;Wxp)Bv!PUW|=z}00?P|95avGDf@l8&PzSk~%mXhgut4q98AkIJ>fb%am zPrno<&{OUBtuA!?x<}`?+M4`Up98dy)a&4nv&`+m`{fKJmd@@Eky$YVk9Bvv z1G3A#U%sRyO~WQztL?qH7^wyw=)^tU^2`IXS_z}7PW)s~H{)tHyL@w4DnZ}wba)-| zFBC1AomO5G&)BkN6Vl8sIZ0h><`tu()h7PdGlDjBIlTCzZU^|S@ZRi^z0lq0kwehwdgVrG1B5j@Xe~n+VxNYlhBdXguonOWV%ZZ{ z;EBgi_oBCYm^`yuh=p5mrlPRycz}qgCA)GHr+AqpF#KMm9hR(KhwXC8Rk!gh7DMC! zeoiQf-?*{(s%<0-{!^~n@PGDz_7Bhl$|VO60(AK8VS&Uy7G<-wX(2>}M^lmZ&%MGk zsYr8MaHXbcf7KgH`n^a0h^d;n{!Dz?33m?q?m~xb=W4J=&mQ)1&oU$xiTAQUc1D+XK7? z@7(vp9oPq7>lQf|DTjxk^q`voyM-rZa0g@zN(NX6Q|`NRmbzBXRwLOSy`PrFG?Frr zD-at=94&`IIW3b9t8wxnC5@KLhn2NhGXlhZIA~@}mZ6h5=cOwTD1vhL<1g~gI z=;_d^+BPFD>*N7#!l_G#FZOZ1~L2oL{7dZwEABWJ91<~j+qR|le2)qz3 z(EvBR`x`k6x}<)T5)^P!W_(IeGEVy&Cv>dz_d4@Ufr{DOK8uA3z<A%7-~EO@IvFZFf~&<8KO00jMkEIP{fB5C@|pG z;VdtDDJbcXt53}DC~Pl6e-6Ryy-r~!F~{})xnLfG?reKAfH8CqlHwrAVlw`Gz(Nb5 z&d8!gV1R5>b6pn6q1g~PxwO!-XoV`JXt9)-v3US|#7bgWAQ@>aTZ*MdSTa)MH4frm zhqd00ShTJaU+MhzQ{Tz|?)Q#7{ml1ydrj@py82@d=kXIKPYrzaPk1AJi}1sBTZQB4 zTMaD4^V=dA;5`$YC(J}1bWwZ2sa8tgq)yACUCxuX%hB%j)NXP{6FaRV&(fo$4peg# zR8%W+q(=SIlHF8aQ(s$uw7#zXS+-sI2dmRyod7TFa1uLD?TbzsNt;1h8g(*hPI{7@ zq9@2ndYqg9{^ROjmz<^z^~dW^)Ss+B6&Caf69mhIvD%4~Z%JI67Y@g?g;X_u5YWHb zhJM%Q@GUDh#59sBrjmzv9zVVaz9RfCIn(vZC|tW{rDc@VNY|Q8&MlDTni4+Z`K`s9 z3-gP2Y~5T4A!)hhbH~dD$sk9mv2u)>cE8?)B?yBkfFUtT`MYRPK3<)PmHlcgn~hOE z6l0bD7S|{KZ(_Fc;P(9v3aNZ7^G1h-qD2?&eQs` zA0+5-c2Ic1l+NmZhV9P^&lXVw1X9ufs~n3d!1-#zyVx79 z2dP~(qBFhd#a`B)=>>B#$8()Ua1>mq-ZLt$VB=Who-M<-zQ(M}ENk*oCv*XkS(ns{ z9+CsRx#7B+=0HS|97%gIm*#@yfhmXBQR)LqrwFqCNJra%oI0#M-cJ{5?WE>v`%JW3qe)M`D-gaL2%eu@>JGyAi<(5$; zg4!>?GRm`+7kgB%Q6iAARq=CvyM6@ypB0$}BHxNWK_N3M}Zg&|IUc z6Fn?(13Z%*=z@9qA!c5PfWBBN{&J(If^hhDhO-# zZGF2R4r?G*$k?Pb!m8--ok^I1d;mH#n`jbTA6`IDjsXeQSu>fkxe;s3Y$asH%`xbdKCXHogSqOBZru!f}uMZ0vG z2Ulm7K;T>u3{c;>i`W-SAVt+nSxQ_JkjX%%DOx~BSWRGew6QytI*1j!rYwN+YUC>V y@h@0>yUeQv4}&tSM#%@&7?v3MIozK)3Y~{LJAz-C4`T*9naNY4Kp;E8!v8N|ZGxQu delta 4127 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 Ym{WuJ<*9gtDmN?qBm*#1Zm_Zc3%vs_P5=M^ delta 3904 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 SHyjN2o7}CwKP~=^=l=kJ_I@+~ diff --git a/bin/mega65.rom b/bin/mega65.rom index aa8a0643cf4e4250647fcdbd33f852d2432dc46c..eb0abc7e748f62683f6a1d45f7eaa77c521d854d 100644 GIT binary patch delta 3626 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 delta 3300 zcmZ8j3se->8J=0*3y2cH6{B83SO|z9njnbLM3m^zXc9nC!>kH|u|1xqz7`a6bg0K9 z&6*oyUN%$0T^thET{i0M1283Pcat=(K~qgkWgjL|ZC$$NfHr3PUub&L&e^&9-{<`E zec%88)7l!{+8QnLsWYpGs-9h|sJXr7`!z?aKdAn+I%7>!<^HOQ4JLMOGG4voarSL| zWXBfvD!#vC7kd=%*r`>V_2J>2$?SO?wQE|*ttttlQlC^Ku0tJ_?Fw-win}hQitA}F zLS$&KQtTV=B|;B9UDX~XGF;qs{N}DwT)QhbQJNy8NGZZ(k|Qi3xx!=pOYo*-{D zYtZ*=+M}V-*7UBfJjJ4AzHy5It376Xf~&Nw#v69OyEsFvax0~EVx>D=$^i#1SBi{j zes)4&xho-%-PNoiB}7Y%5CykZQV31x9X)1A%0tb5VhYqP4^U)WfgA>2udB$K0 z_PpWUY&hcmt|!OukfwIRqn4qI9yGzC3-8w!@j@ALdJt- z#F{-i@B#x*Jj3%M)4ra&Xp4x5jEq*W;bT`+*b#l*XI-By{muN%Th4#~`W36K&u_Bn z`|Mt?-|DlGoT4FC(30FCMrh)t45YD`^B9us3I*dB{JwsB3vx&lk3@#TxR`<6AyhMhPT%Hw^{C#?eSQX7kvU-D ze(XUm6FTdY7^DlKGP^Moh%rAABE|WWNV22Y9Zr%Q3v@~}xy9cK1kzQ_esg*VDEV7A z_k1Tdb(PEMJzB_GUqg5A~)!X!NM+ z(hiq8qhU0wF8y#RYB@Q!0p(e-vveI-M4XcQJve zZ#C{=&Y|zuQs5S&ueyvS#~aG8X!JP4pe}CFms_^OtedktRySlpEvO6WiM#P z+%Sq7`^>eYNZt8W4Kxixa)Xd0C2{2*+-6YcQL@7+*?Q|>v{BI>&A;f|-_cA`JN=z) z24ZVIiFCw#e+0RE%p)VXgQ%1GN5EYYUuYZuf51F~=HhE)Wk$`QPDxfdG(l-DddE&Q zB6D~-is|5zybw5iM;6NSbAEH%$zsJ+`q;QJje#-YCu1Tt@QkiwDdg}2OGc@viUW56 zgB4wpr(BA}Hw{x;(juwe03Igz;2oFJJo%2YtGStsk0|fB!psqLL}%3(-w2)@CJTfT zQYG_VPN|s3qCSTN>z>F5DbeNAs9pjmCb@N@f1T+7+f6e3=Y-?+k^dD z?!1Bd?{zq~(R|pP9Nsd1p8K|Mwr@7)GVv0d3&MTTii+G&elRt+SRuz%L>#Kx9qvG5= zGS@LL!1AQPQOK9m)VSVmTneINgk)d|dU&Vh7coX)(5<9#`e)1ZI29?ZgY7!SxASA6}sR}1Gh@elwynr&zqxzc9E9^Vwjwp;iIUuFyEmO*4zZ;!XZ5kHV~ zi^S)LflM2O=Ng2q4MJm}fN0zaq!IG^R$(J~PT0gfYf#lSnnO2HmrZ0%%Y`&2H0h$k zwERsCb8zA)EFhXd0$MMl-x_GUUIzSVGCqJn4)8klqE))fCD_o}XH49I4vMEH*nN{U z215#prcf`5LMAL!lSZWWkj$d%8X*&2MNQO&R}~~v(4dq)lQQ#FJHSmPa*%AR%`&x@o~5*f|tA7Wt6Yk|86K_y?RrL?fIb8)5S%!LH(Qoaa#m z08!ydr+@o;o=yXwx~T_6yo%?kx2mx-Vg{kWe;3;JLx{&0q_mdTZ*YI5rCGxRhyNmt z?r=d92#%8ifD;YnW1N(sR^TL>sD~Kc=fISDVCB6rW>P&WvK`62sD2P+nMvw?W^ewP zz3FH6#{bx}=!S=c?Iasm%>q`{z-lH4Porv#Hs8D}Xehr$=Cu*6ASDLZ+84$@`IKU5 zSykTL{QO4>ig0aTY6);pbN(Ef+e!jCPyr}P6DNwy$C`i=o%O(HiIc;9bdl1P8yJLD z5$?-SfqDF4-`puK-wX6~KJn348DW)*q(O+K=@jSE&7nR8n#r~=5r?^+5JfSCqA12% z`V4O}VFxFUh~bt`4S46^%yb?;1B?k$JbVQJO34G-b0i6%Cr^zB`DzGqJYty}m1BpD zJWGM!9jspg$>J3&)kAS`%LN#=Ux26uHZldZkR@ab5AmwHOd%6sRsU3|-gf+yFr^&* z?2bHiIb^PN@OV^GD{AfMdJc~_&IO7;s_?r*6^U-)r8g=ft_rUZv101QidAmmWv+J+4|)q(BTn+w zD4ibeRWpK*pNn`m6#v9Q+-aLRZL^++2eTy3^NYF{sI4)0Y5u?>c0VhyAI0$ diff --git a/bin/mega65_pxlfont.rom b/bin/mega65_pxlfont.rom index cabc4485c688d7a73fad4ac75151e5a9b04fe26e..9e2a96b50c84fb3654eb7b0a1d399a0b22e76333 100644 GIT binary patch delta 3626 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 delta 3300 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 diff --git a/src/,,config_generic.s b/src/,,config_generic.s index 391de569..42fa2925 100644 --- a/src/,,config_generic.s +++ b/src/,,config_generic.s @@ -36,9 +36,9 @@ // Memory model -// #define CONFIG_MEMORY_MODEL_38K +#define CONFIG_MEMORY_MODEL_38K // #define CONFIG_MEMORY_MODEL_46K -#define CONFIG_MEMORY_MODEL_50K +// #define CONFIG_MEMORY_MODEL_50K // #define CONFIG_MEMORY_MODEL_60K diff --git a/src/,,config_ultimate64.s b/src/,,config_ultimate64.s index b463c918..e30ec05d 100644 --- a/src/,,config_ultimate64.s +++ b/src/,,config_ultimate64.s @@ -36,9 +36,9 @@ // Memory model -// #define CONFIG_MEMORY_MODEL_38K +#define CONFIG_MEMORY_MODEL_38K // #define CONFIG_MEMORY_MODEL_46K -#define CONFIG_MEMORY_MODEL_50K +// #define CONFIG_MEMORY_MODEL_50K // #define CONFIG_MEMORY_MODEL_60K diff --git a/src/basic/basic_commands/cmd_print.s b/src/basic/basic_commands/cmd_print.s index 2c81a2de..c4c260c2 100644 --- a/src/basic/basic_commands/cmd_print.s +++ b/src/basic/basic_commands/cmd_print.s @@ -29,8 +29,9 @@ cmd_print_loop: cmd_print_after_comma: - // Now evaluate the expression + // Now evaluate the expression and check what to print + jsr tmpstr_free_all jsr FRMEVL lda VALTYP bpl cmd_print_float diff --git a/src/basic/board_m65/mega65_imports.s b/src/basic/board_m65/mega65_imports.s index c7aa9c34..a9891af5 100644 --- a/src/basic/board_m65/mega65_imports.s +++ b/src/basic/board_m65/mega65_imports.s @@ -25,6 +25,7 @@ .label JREADST = KERNAL_0.JREADST .label plot_set = KERNAL_0.plot_set .label init_oldtxt = BASIC_0.init_oldtxt +.label tmpstr_free_all_reset = BASIC_0.tmpstr_free_all_reset .label rom_revision_basic_string = BASIC_0.rom_revision_basic_string .label print_hex_byte = BASIC_0.proxy_B1_print_hex_byte .label print_integer = BASIC_0.proxy_B1_print_integer diff --git a/src/basic/engine_runtime/do_new_clr_restore.s b/src/basic/engine_runtime/do_new_clr_restore.s index 0323e5ad..28fbfed7 100644 --- a/src/basic/engine_runtime/do_new_clr_restore.s +++ b/src/basic/engine_runtime/do_new_clr_restore.s @@ -71,10 +71,7 @@ do_clr: // This is a good place to reset the temporary string stack - lda #$19 - sta TEMPPT - lda #$16 - sta LASTPT + jsr tmpstr_free_all_reset // FALLTROUGH (confirmed on real C64 that CLR indeed resets DATPTR) diff --git a/src/basic/engine_variables/tmpstr_free.s b/src/basic/engine_variables/tmpstr_free.s index b9d6c494..5d0086b8 100644 --- a/src/basic/engine_variables/tmpstr_free.s +++ b/src/basic/engine_variables/tmpstr_free.s @@ -67,7 +67,7 @@ tmpstr_free_loop: sty DSCPNT+0 phx_trash_a - jsr varstr_free + jsr varstr_free_non_0 plx_trash_a // Mark empty string as free and quit diff --git a/src/basic/engine_variables/tmpstr_free_all.s b/src/basic/engine_variables/tmpstr_free_all.s index 6f5c354c..303cff6e 100644 --- a/src/basic/engine_variables/tmpstr_free_all.s +++ b/src/basic/engine_variables/tmpstr_free_all.s @@ -9,12 +9,32 @@ tmpstr_free_all: ldx #$19 - // XXX implement this - //FALLTROUGH tmpstr_free_all_loop: - // XXX finish, deduplicate part with CLR + // Free all the strings, one by one + + cpx TEMPPT + beq tmpstr_free_all_reset + + lda $00, x + beq !+ + + phx_trash_a + jsr varstr_free_non_0 + plx_trash_a +!: + inx + bne tmpstr_free_all_loop // branch always + +tmpstr_free_all_reset: // entry point for CLR + + // RESET TEMPPT and LASTPT to default values + + lda #$19 + sta TEMPPT + lda #$16 + sta LASTPT rts diff --git a/src/basic/engine_variables/varstr_free.s b/src/basic/engine_variables/varstr_free.s index 8d9b5f4f..1f57d165 100644 --- a/src/basic/engine_variables/varstr_free.s +++ b/src/basic/engine_variables/varstr_free.s @@ -16,9 +16,11 @@ varstr_free: // Check the string size - do not do anything if 0 lda DSCPNT+0 - bne !+ + bne varstr_free_non_0 rts -!: + +varstr_free_non_0: // entry point to be used when it is clear that string is not empty + // Check if string is above FRETOP (in string area) // XXX move this check out of the routine