From 8d705f2f6d45a1c009f4cef60e07476ecc7a9197 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Wed, 1 Jul 2020 03:39:37 +0200 Subject: [PATCH] BASIC editor rework finished --- 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/aliases/,aliases_ram_lowmem.s | 18 +- src/basic/basic_commands_CC/cmd_merge.s | 14 +- src/basic/basic_commands_CC/cmd_old.s | 3 +- src/basic/basic_shift_mem_down.s | 76 ------- src/basic/basic_shift_mem_up.s | 211 ------------------ src/basic/editor/delete_line.s | 20 +- src/basic/editor/insert_line.s | 63 +++--- src/basic/editor/shell.s | 2 +- src/basic/editor/shift_txt_down.s | 43 ++++ src/basic/editor/shift_txt_up.s | 58 +++++ ...culate_vartab.s => update_vartab_do_clr.s} | 2 +- src/basic/memory/shift_mem_adapt_pointers.s | 36 +++ src/basic/memory/shift_mem_down.s | 59 +++++ src/basic/memory/shift_mem_down_38k.s | 28 --- src/basic/memory/shift_mem_up.s | 56 +++++ src/basic/memory/shift_mem_up_38k.s | 28 --- src/basic/memory/under_rom_routines_46k_50k.s | 11 +- 23 files changed, 302 insertions(+), 426 deletions(-) delete mode 100644 src/basic/basic_shift_mem_down.s delete mode 100644 src/basic/basic_shift_mem_up.s create mode 100644 src/basic/editor/shift_txt_down.s create mode 100644 src/basic/editor/shift_txt_up.s rename src/basic/editor/{calculate_vartab.s => update_vartab_do_clr.s} (96%) create mode 100644 src/basic/memory/shift_mem_adapt_pointers.s create mode 100644 src/basic/memory/shift_mem_down.s delete mode 100644 src/basic/memory/shift_mem_down_38k.s create mode 100644 src/basic/memory/shift_mem_up.s delete mode 100644 src/basic/memory/shift_mem_up_38k.s diff --git a/bin/basic_generic.rom b/bin/basic_generic.rom index 908d3719a23f9e64c95b545277b51ba872314d93..2d4664acf070770c7ba595b720694e21c4f93e36 100644 GIT binary patch delta 2949 zcma)8eQ*=U6+h`LTb4g0j4?8pu$b6jY#b9BteBdw;8e70a1*`~NI2P+V%dh0&U894 zX=SFY@c>S&+++sYKyNf&nX_W&jGJJ|lFhV)`e9OVnbW$Gbzc zgN)GwBpTqLU0iN2$`kO~kjx=t6umrwE=AFmQE?)pprks4ruy-rJ|SR4xBKNz)SHAk ze@rT0syTXYyrGxJ4IxoVt2VAz#H(qg#>-LBV4A)9$|!p0tdfrQMWLh_@0xWU4fo?$ z`cNp2H;f~9R5HN!R8BJpQd&yV(ydZX;E};8VU za>RMu2}KK;(?as)d|Wq8%N;ijq=Q!6 zv19&Hah7$h@lsHH%DQ;hr68Aj@Yd_p?3l^0drbrA=rzf3++RCM^Vx5XzcyhGX2dvS zB4g5D%j~D=XeGs0Mg@7RbXqHr&q>3YO}0wYnnm6y#kDlKPYQ{n>1D>1r^V^?5`OM! zVPw6n+2BXn;`z+NY=4Bh(5VRZ!cV-JS+v?8vD5wNg#q;9Sg$crO5G30%@4>;56F%8 zWO1FPgdOJv%l0g)n1*$0zy$CR%K-puL!z^=QhX?@&^Mr4FWS~5{@>>oO*qRsNutGK zx>e>IptqoM>xdKZcDui20L}CVc#vp~n$)ucX(=)II68kO@YT-&p?@%OqJ{g|`T<9J zxZjrk%fgMcXFm$ZeW7jGCsrv_PglJ7>k>UGSx)TPQ}s=0Rob=kdU;-YS{pEeUWZ6eLIku<@)M*YtTm)+CoY4S9C z+@Aexy7pH9J%N7GyoazUUg8p{YsRZ0`f`U!xTX;VIy6{D+nAX^zB8_QM~e6DlU&&zqKO&%%H)b?~?n-V{(YBLbt=c zNVY;{`d;Nb@zXSFvf)!ZF>@LY}mAZ%TrHp-dZQF%GxHn9#X`~yrS&-k&{M4_eI-3 zTCgtadG>Pm$Vu*gL%~Qldo1UCy&nYln8Bc0db7Xc433+YlLiA`Ag-MKyp8dUfV$s; z?E{Hjj*gt1eV2b|ZHVp#1hoT#+DH?)zLD-D9tM#B*R@~#)!dD90a~xtHIY~9nn_Qc zn;ffik)wD#E`C~6b5QThGU8Q?7g`;(4a7DO+Y|c)T25+d1zAID$#S}e zRHA3&wAQpnyJM%zy+*PexT+FAJc=&`;b4l5rM3tBYZm}Q<+7PnIM9h?yi@08twQc3 z4nT1=vW_}v^-TG|3hJ1tV9a4)$puzwgO%FtN8D{JB)kB4y4*421;kg*w32$fvZ;&!MWm}Wy3sB;1o3^#6Z3J&b%DiD zDOp06k}|SPu)9l1DI8;oxT|P^@0(1>15&8JipK+EXvc>rvkzYY&epBy*fcsk#Qw*o z!Po+hjUPhbSy1YcBJy2q9fOm>WM+G2_oqYD3&p!Kvpw<15-EkTOH$NNOMz5KDHwYR zT>^fogi)o$g$gE+KY}(z{u>%#=iuD^puI+K2^WUg9u>3-lZw3P$2)#TYOP7^UD5 zh5&n5)ui@0ghoDXB6IA5z!E?e+v{q*g5`r#gEYrxleqIP-GY`~18$ha*)cZCqE_f} z7-rJ0fYI0m=zcz8BzN`4F>Mx*8b7K1UCxHvh1pEzXgt7L++tpoxnVr{=Bme5ah&+m z1r7D*&ww4a``xc>?3)NqL>aPL(ERa0#@mgr@3?5Y3o^VCAK>h7H~whH>y0wsWj!sP%d#J7Qs92|jWi3W+-u#*KXkAp|+0r$duD-PChHlMOvp H8o2h~J$WCE delta 3126 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 diff --git a/bin/basic_ultimate64.rom b/bin/basic_ultimate64.rom index f0967126e27ca95fccc47d157d85335fc3386549..1d45b875eb779a128fe167e9cd828d661a89e4e7 100644 GIT binary patch delta 2844 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 delta 3132 zcmZ`*eQ;A%7Jo^aCT;o=ut+QvE`{>Zk1Wanp=>HBbpu|NMRu880bg1QN!mK-xc`7| zigJ;ypy|GKgh6+n+1}T_NYfPTwn>w=&RQnVE%H`ZcU@IRIli5tb;q1|Fg##mS@nS zDOVC+q`^a+EZUUfbQPV-J5V4OWYC3N40t@v@p)^je|cJZ8m4|QhJ2%aj9yw9cvxB&d61fjS!9R_{s%-oIf%Z@a602X z>vu)bUxy<3XiEmZ)HGpM3`iHnuXUrwIL`FmaU31X=V=F1@{{s)b-O2w3rm7R(9|dB z6@4%t2L*0ZxyvTm*EGd?aCis#{-C$8n+(P zlSeFQ)fCTAXO}Zc8@imTpZ!y$)z)Gm-lSReciVE<&IdYPRma!mq+a5rKGJ~Rk49t` zk7q;%eUd=$rjU0G{cG4k>n`g_T_~bIXYaPtLiA}4+}@KuQg_&nz>lja0ER^c-7q?t z=9z&5pV#%uvjz?*hNS#Iv50VSqgfArKWAKI&h+L^uUWl@;dU>m)`NLE7aZnJl`i(b zBT7P~FqG&|xe~9WT&y&ylt|~5D(UY4s>T>Bj2=sA;G9fL`PxpQM1I_r(8XQs9U{YR z(X}yG;=f}qR;a%O3jmje%|8#+sCKTFdXr^hz5*FqqbmJeY<} zxibYdMLXlvjl6N{g%@|ZVE+1@aU0!__JzoL4p3jSJ z7fu=&Xo~o_)gVg8XBouw@!1BL9U%j#avBe1xCNH`&ibt7I*Z7>&FIlrIrPF9_oAiT zZ|;+pz#ZrJL4aDN`bbd{{8TF;WjXerMt|r-i5wbN{d=fSo%Qi)Etch7eL4tf`PcYh zA4D*nqZqK1re%`ZYK$20M`;oR8>8_nfSex}2$rIAGfVNz_*SJ14dqtJrNAEA@+TR6 z5??)il!Z-#%+Zwv2{`D-xl8i5u!+bBF`h-S92|+;T=aBhPnyrcQRSN_gah3NaUwSp zNh0I=0eGBPT!kjn5U_l4Enk8k3Zp;wsmNHN)PW~qT#ezpFveAuEUg?(M?Z55e`nFoN zru9AbR1*(tqaGje@P=p;<2%^|4!+LPrU_qQy<9K*e`pDFw( zfev-LYWBNR3YVA_)b|RUd-mM2uz-)93As+VI#>8ZDIBRs?+M(o*^3M@KEp+3Uot{? zf0;S^_B}TY3;NTlYvzLUXz@ywQK*{?(IzrNn@QZpy*GDL6$G`S#wo8m(NzQd10)6T z^Gp=O==*7H8o2r;(~=F~>Xs3_E6k6Hv+%xQR5eZaZqAXt*f$K329xlqeuhzpy~;+a z-v7-hbgG~3ZG6URz_a?fL$-bFZOXW2qjg>&LI`;~-W3JwQm2bHxTx8YHQBsIR|w7P z@u-Ymr!l(Sqor0}Ps>!IozvyKXckO>@{6VA64@;SWvaz-_q0zp9xX5AlWPOWGN^w)2Nd!1?Z5a zkVcl#WmZjTDRHBF$I#9=+8m=QhE)Ws_?$fdd5vE6`g4t%o|GD3}LD3#}K{0gvYc33dPz zs5ORG(!keA8pIr_XH_w0FQ2>oZg;>P0N{T-+X)c>9}k)1A!TA24#l`r^B*X9^hOEu z@)t}l$Gy3*!p~ACWb_8o*6FgfI3d$FcyHGLUabc3K@HFj7`8wUf)UdCkF|gWW@`0= zS__~pQyyZONpiqHT6k*uYSnl7r%HgLXyh{++(Ub~-&Z{8?@yCLNFO|dV>wpT)y`B0 zv*Uobi1`Pwb=L|tcb5jVP%)^;&?*F|=VpTTfT$*l$5M{Vp+JdL7%7xYibX0=?gN5U zsYZ=~Gl~h?qDlT*ER?_U&kR|l0mY&Y7s#KA7Wp4yk$hfcjx##J1R1W6(M_0?r^1X5 z;tK+3oAjmfwDh2|8?EZ?)9I9_#Iy6FiwZ=W< zcw-AW*61d$;?We17zdQnpixEi04lypBk%%SLY(H$a2k8a5n8_j>Sr*RYBQ{uq{oy3 r6?!j4tMK&%e0b(?6vulGsorHf15;DzSC8OLTQ_ffV%w9CZ*TlRIh~GJ diff --git a/bin/kernal_generic.rom b/bin/kernal_generic.rom index 4e44e9bee2b9852c1c76ddf352c2d5e2c48fd22c..cf478edec450357c981dae1d08aa16e0aae23ae5 100644 GIT binary patch delta 920 zcmY*WU2GFa5MKN25QUncLD)+HM~ht#)U= zZ#47GPXCtvErJ|?-wX09F$=5JK_phedpY@GIWm=_m7+m8dAFD-rZ6QCmX8irh=?ZR z9*O(p%@TC-J}MNNWt2NQ1X>h-oZ%?FCgYl*7ir^3D`&MIRyo(zHUB)O{AY%t zL=|O>#zxkln5K+nlyU0B6jfCe_;p@nisH}EOX1ROCcL{SC!(THa42 z4E{3B@jPBg2Wrf_taVY`9uM@Gp}tvi%$Z2H#Lgjdc*R+NH|dcMcO!B{ax~{!$x(^T zwUJ|3xEQ!<_I~L-eujf-AeB|8j^t!h}`))VxK&xtkWwV{H3EE4pZFL#5{ZM+pvm&n( zJGc6r5Ljc`C_r6QMletSzgFzH7^XG27NJvhs(2fKA3wM*)F4&C zbb0*Kj#I2uMaOTC({iv;qQycj&nPex$ESk!ryj4V!`aDhXl!h1T+e>Eja`or{Umy> J{9$pt|1Y3BtEvD1 delta 920 zcma)4U1(Eh82*yeXqy-k>%@#P{VI+b^JAx|(a|XQLxpcRI_uSB=k({$)1=ZXFWQR) z^cynisOH9wF%E~mfiGnv{y>-7s25gxyb3FuOhIy*Cfa~_E(Y7xy7xr9-^bzbKHvMi z&-?Se*%R3l8IhyEZHVvn65Tmx5Zz0+)Wzj@$n_50X(7?CKXfQk>ykdI8Jl#1WR?OM zBD@EpJSpSN2dj;Vin}o>%lTukZHaBSbl0sL5qc2lc$Hn9eb0p+9)l!L#_9Q4=y*3K0e=HoELhhdNp!2ln`8VBq@8cIkVPzTi^ zbyyvD;wx`t$HS4uod}I9GAMP;q{aQH_91AFng(e;1}UC~QJzBnsQsd$h15|srKZ)f zmd;yQ1kk~egj9uVGRbwi&wDz`?D||T<)-2Mj_R&yiS4vlz=AQXERB_=_#kQyz$LCa zxefB|xSYG^{;DrvT{#Rd(?g(mFC7zF&0nlB{nl^*#Kv zv}SvRD?PtJer_08`Z2WiAq#tc>>3B zg#NXdfFt!t0TT77^G+^iNA8vabJBo+oU9ZmdxlWzF5I@k}efYr9_?eUO P&j`U$;dghXE%woW=?$jN diff --git a/bin/kernal_ultimate64.rom b/bin/kernal_ultimate64.rom index 7126d2b937ecf537b4aba216d02913b4d31b2bc5..666837c790e543633732d3e644fb8a92d18eb415 100644 GIT binary patch delta 953 zcmXYvZ)g)|9LJx#YZ6V=6s9cO==RY0M%#v3aSI*ogxUSQF^H&$qrF~paQV|AW3tf> zQmBtex3P>&Mj3;U^+|kmjaRicv5D!Mz;0AL9ln^ts7GRoI_Ehfct8~%fa5^`MLQCUuNgscr{d?nJ z|FWijo4L`pZ#i2oFV<#ix!l5HsaRaZ9Yqsal3dK26NV&TTao`+V2F${k&MH)kMy%T z>HVhkZk(!>Na8iCjgC~JiM`ei8mhz+9oAN=RYnspTMnRyl>pW3QKHe19U~z+Vn@jc zRqY5-<)t~CF9#U1kCWqc)Ybrs*&%?U_6R@`TWvrLeT9UK>jxyxBBA2q$8tz0A<=A) z^Pu@VA2MI(gLv@TtRV1XEJF4%gS>(t6cU(y2cp~*Z?OX)R+^#@#|m=t-qhQW!({EQ(YS*I@K-Fr{K@3Yr}N7^-tM(_J3@5gZi85yNRy&s2(ADN-C%*GOflD{H`c# z!*K9F=9Sblg<$!&LXA6^5L>97Zsqc9j*bOjL1T0r7BsHN-s;hzOa>{9t7l@%iGwTh zQq@G~_$K1@HgPE~vqh(&?E~uHydcfM;)_tJC@|bhn z^VHsK-DV!^Cfj0NPqw%8#PQBNLpV{#S`jZ*4G%7z!&ep(lH77u?lG9q30<*>KP=*K z&e((pGKPf1<(bY*2X*7ybpY+`sjicL>gE!h5yauW6v8sS>tOU4u*omo{~#zG7&z?j b>F$2DdyoIkH~f1Lk{@PaT>7=8>xKUSE|RTT delta 953 zcma)4U1$?o6uy&Wx|-C^sA(;(?%evaMAMjdU2Sz6>sqBQBVt7#6k*aIskSQ>78X*L zMD$7(E7dIQ4`m5MZ|g**VHMkqtq~P%RNPr*SrnB_(~dN-GG)~+3TDr!Pd<6>58rpr zcka2|dm^=w+OQJE_wve5F^WGsBcqrT7fvcaykpEecIhosw#QPI#QxTaN8@rq41ri| zqY_<4YN(e4B=ES$jgV$DIwc8r4JLS8HiDmIX|ZV+(>isRN;GILp&k4}qeUw*nzg_@ zqe&|=8a1a9A&o{*v)u?Ph;&GJ*+?2`c5!4l9ZA^5%NdcR@Xtd%bExY14^I0-2iefc z(Qm@n%6-fI6_sDCxSINM*2-1iDOJ^(p2w@#d{tD_)Et;tTf1)8*SBx4ue+qaw`^7g zoPsq9LsheC-?%yeU|7|4RlUnFrch*Od^RRgc9vzl4#v-S9cP(j0psC*DPZn87)e0@ zo&h);W*G%p8fO={Kqj{90NxWz5;wV9e8Biv%Tc4=6Cp;clg)X;ahd~?J610vEcds@ zac{qD2Sit=^Jby!z?_BqtMS> zI(5~@@$->Z2$fe&x=11#tXUkNAcn_8K@0OcXXoSQ|GA@|CI+ipu@wW=n_X|SeRLerrpCc zCDU#}yIhegLc+j_7rgL#0n+0NIM+mWca(qn EKbvK*CjbBd diff --git a/bin/mega65.rom b/bin/mega65.rom index 09a7addcfaaef96685981678320b3b1a3a45df98..cbdb8191ad7d89703f6bb4467248d98f6a592c1c 100644 GIT binary patch delta 2674 zcmZuze^gV~9e+uHgr7lv3|e(ug@ZpJDO#;e4YhUbfW6eUdS-EYd;wtu(0OL(TB`>( zeXOEeN8s{soXPdni1zJrc1#5|cXOM}+^-A|}y?fW|Cl{B>ds*U) zbw#w+SY-Z?xX`w5i4zKZ&?Ycwo*#9(P>hJ$x{8TzOv&jSPUR8V96IBLCsCi* zL{!Mtj*r+-sUPnr%+wDB9P^cH@ZE6)|GZF;!2t(^X2bLo-HJX6F3kj|Iv>?|?>-8$ zl5au85_9_V1{81OcMt2z^Gfg@5nh7KgeN^1=XR$jIQDJtp02T{2UYGr(Hf6zUwM1N z_K^I5TSZoKtC8MI46!8>M;}@k^s&evddQCr&(`iI!8H?W(}UY4O48xGW<}0A7Jbw0 zOhHONg3V_RHY2#E3fixQc;Lz=u;+!tTSfRDyUoO(ig# zlXIc@VcaG2N9+|!^)P?Ko(m7NB0GzP<~sCByH$Ors%=wW>LkSQ=jRU3NoZ^zH4n`ttEOYV#6fq)S35QvHD%W}Ul*7UUJ#J=c|19OaB(p)jV$I&ptbs9 z(g0xtgpH#+S#-kd%tR+ok>vE>q!1(5MXER-spkCIELBa?lxiSInF&&9;QoHcL8az| z*DWPdEjUii0m3LP$%U2_ys{HMNJX$HqMNRVCTp}M`F4xZzPF{y{zgkRZJr-Vf#gw- z8l`buFQPLcx|lWSy3D6_7Ah9;&vq`J`|3rr~;__*JKUikIB?PoIowA_bg*6mliR!0AW{r+*}5 z>8`AkbvUVm6%>WjNv@S)GN%SI-Kj$F$hJaz!E}bdrfAU}glr#p?`xFQ0V+XeFJuQy zIzb@u*&CscMUXtgP_iWnyr7NCv8{2tFd<BYF|=`)x#9LQoB>hd8Y(ZMA=&v zDWsH9>7=Gwm~+NR0xArlOVM7OCsHO8f`ySG=oTwoMPMWQ32XNbX`D){hIK@=eW@k< zOJY9%s`xDL7mH?9QvKAOPagPXlq46aa3%jh%w1a^MQ?}jhE7-}?i0W+@#riOUc)T&AP~-{42&c}w<_=%1fi{tScP3bX7C zjVydGD+FE|hf-|#gqJ#baAic9%@(u#3v%wJO`<&!o$JOo+leuvMO!@Rx1F@y;sFp@ ze4QLbAT5wmt;H)$VyzElcECO}`I? zcC^h$c5pSMk=srhxN1_*RRP-kHeXp2%JqYU+LtR26VlR)s}%rpm;$Ro#A5y4R{gjqQ}m zoB&K@)wCJ=QorMNvA_}ktH9>uN>Nx-C_Kk8REsXf(~72MXky@`1Vkt(IFb{rh|CL? zK{~?02FDImG6N<5L3Q`3gsVlguNzLM3^~~oLTP?<)QyjY_`ifUG*yZR%C*<5V0+f*EaNy3rAmsSN_ty9VB1HY zY!A1$biV5)J`^7y+hc2Djesn;E2Z^5oHQA5(qw`dk~+XPTca>1HI78cTDZ-$s_-rm zY_THdOYX>_iZqFP=U7GTm)yI=QZf5-#g8Ta#c*8mv@eM)-f9Pl9+z`8vup!_D*=Y( z$3vM-ckbMoR($c8qctU%0IsBtBnIOnPr$TiLd6uz;OU4OVnHqaQ%I0*P1hs_U6Dju z8!rtCiPGmnlGIPP$I$Ir80!{%+4n!YhdW)V-Mws(^FqE&8@+On+IccuVBB*DVMF!| hTPE*sU&!a#^mF3B`+vd#7(kf^2EttfVTEq?e*wwc)<*yU delta 2818 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 delta 2818 zcmZuzdvFuS89zzbk}bf-4-nBGTqShIWA+een>2T(8_ z@liIzK{o=c6G|Od!M__{reOGuj#|Y9{u4)K+A0&u2=lib^E-U~q#diBY9FJ7qpEws zZ@Sg!u!O$sccr8CF?bU7XPSfxDMWU^169jxYlKPtp);NWWfgn>0fPS}(E!7q@qlSF zPCn7y43l@hm9IoYPe>6~;C`YHG=*V$0BRkv9TrejxQF#pc?EZ zs0qKwH%Ft6fCo}Xc$07O>dg^asu+Qjy_y5&%h`|cE^acr$&o`}`&~1UQbtgx{Lt)N zlBeT1woc@)cvkTHog0*!;`}XVAv|mfT?e;U*Qm#>#9(1?8)>Z=Q^2Hcj861)Vj%{Y zw7}$!5nGAjjtTE1mWn%8*l9`aw9?7cnbDmN>u|RgJr}hz#Aq`P6O+woXQ0-&RoAG+ zmSGLG+e+YVE#P7)q&_V+Be7s3X~8CRR&)h9_FxnOCS|Zzj!nEdUgGX`hZXzZirw8~V2_L{|vek=B@IPN>)xkv1*(kksQm(tz`I9Ipyjsi5lag-5%Tnhb~g zk`@rb_aC3nT17~}KBL?|lU+Rk;Gjq;P3R}rVXHUUJ>y=t+1cJ*?|i4bfo>NhW&-}z zqvqfP)+|y?0eGrVwZ!KPlq(Rwc3|lO*TH}7edGM|e|qxc1%H0y?_ys}iiZ8N*Xx&k zPLb~(n3#{Moh~I7IgVmolfpU}nbhD06`9JSo=%9EbFRJ@a;oi$4{c@Wdj$1)*)9h_ z>Jvr@BtYB3{2vFm|1>0Nw1>D{qW?GX&tCgMwcXaNP&JGbE#0r z38BoXcNoxLlkN``fOAezlnV@6EF&fijxNnpKS#NnkkWNT0X;3;TxurwVgV9q`hWE5oe@6OBJRcpBJd!wcVCc+{ zC`po6`ZTFdcV(3Ja{j*$FZAy zr!U^uJ@6ZecvC2^8K&?yHDe>6?U-B3Zi*9Q4KdXaO~oCx&XQKskLL9?Q^x62j59Q+ zob5`IM~RScGmdIf!ZxZN22y~G1rrxFfV4WXEn|}3F!Hjvd{!U=Flzp6MyM@GW-M2+ zb^K$ou%s%9%Hr(C0Z4?sEC>uP!o|1*m*SIn8#mz zLM-F`Uz4Wlow!M`<09}YPEns<=FOis+YdxX+r7k!8%Z19L0WMGs7O83o!{=Q>3FIj z#0d2^VFSAEA;vUQ@P14m)3eZaqs(5BAqM*^y|u{K$2NthK)wGlfYps3qpkAIEig3W z{AQddope*tJhq7dnAixU#BY9-sB51Ub@WQK8EXOKpwDn^*~@?`(bNHo_^~N9{}wU74&eQnZ_D&L zQK%{xUc?Oamfsk;V9VZ>)(MSg`0etVmwxz~a$WV03@eu}U$ycD!%IIftYDZH`Lh3} z_mcnUAOn!0NI@UV9KG0}^h}~KP!Nhuz?XoRyo2RlhJyM-f4Ls~{---o)M}^u-~^VS zg_E`1F#%=z1${B4f%}0!3v~#J-WToAxFl`jG}=VFR=nsr#HilQerTU2UiBPOF<=Vp zzHF7yvTv435clP%0E;d>hzjEDP>jo2`#u9A*P|s;>Ayn@ZouYH>e_WmVU0`KtKqr| zy9?mTGusLh1;fN@D*#ZW6KiP)-w|G@{6NM3Hr%A!6o-S&XkDaNeY*a@>zA`9z=nT* zMc@3)&5=Mj5AIsOrumjxdwRpabPVEg#XBk;R?ZuGVE zQSLnC4nivk-Givu+Y6^(kTrJ*&~QS(FkjkHBXyZ!9vLonKzE|L9-%%7GD%U%_U z78LZKz(y^_u$HPQV9%iAXggCkpTw~_Vc^-J*dqO?C*-^CgPjZq1Z0Jn2itFG;=x&i z?FrRz@E^i-ptJ_(2UQR?-ykhkw?>l3Rz1JUrpV8wSYRj?oO8m9+=gqAGjEM8;?VARTAB - // .byte $f0,VARTAB - // .byte $0d - // .text "SHIFTING UP $" - // .byte $f1,memmove__size - // .byte $f0,memmove__size - // .text " BYTES FROM $" - // .byte $f1,memmove__src - // .byte $f0,memmove__src - // .text " TO $" - // .byte $f1,memmove__dst - // .byte $f0,memmove__dst - // .byte $0d,0 - - // To make life simple for the copy routine that lives in RAM, - // we have to adjust the end pointers down one page and set Y to the low - // byte of the copy size. - lda memmove__src+0 - sec - sbc memmove__size+0 - sta memmove__src+0 - lda memmove__src+1 - sbc #0 - sta memmove__src+1 - - lda memmove__dst+0 - sec - sbc memmove__size+0 - sta memmove__dst+0 - lda memmove__dst+1 - sbc #0 - sta memmove__dst+1 - - // Now make exit easy, by being able to check for zero on size high byte when done - inc memmove__size+1 - - // Then set Y to the number offset required - ldy memmove__size+0 - iny - - stx __tokenise_work3 - - // jsr printf - // .text "REVISED BOUNDS $" - // .byte $f1,memmove__size - // .byte $f0,memmove__size - // .text " BYTES FROM $" - // .byte $f1,memmove__src - // .byte $f0,memmove__src - // .text " TO $" - // .byte $f1,memmove__dst - // .byte $f0,memmove__dst - // .byte $0d,0 - - // Do the copy - jsr shift_mem_up - - // Now fix the pointer to the next line - - // First, we need to point the current BASIC line - // pointer to itself, so that we can add the shift - // to make it end up pointing to the next line - ldy #0 - - lda OLDTXT+0 - -#if CONFIG_MEMORY_MODEL_60K - ldx #VARTAB - // .byte $f0,VARTAB - // .text $d," BEFORE = $" - // .byte $f1,memmove__dst - // .byte $f0,memmove__dst - // .text ", AFTER = $" - // .byte $f1,memmove__src - // .byte $f0,memmove__src - // .byte $d - // .byte 0 - - // Write memmove__src back to current line pointer - ldy #0 - lda memmove__src+0 - -#if CONFIG_MEMORY_MODEL_60K - ldx #OLDTXT // .byte $f0,OLDTXT // .byte $0d,0 - - lda OLDTXT+0 - pha - lda OLDTXT+1 - - pha // Get number of bytes in tokenised line after line number lda __tokenise_work2 sec sbc __tokenise_work1 - // Add on the four bytes space we need + // Add on the five bytes space we need (2 bytes for linkage, 2 bytes for line number, 1 byte for terminator) clc - adc #5 - pha + adc #$05 tax // Make the space - jsr basic_shift_mem_up_and_relink + jsr shift_txt_up - // Now increase top of BASIC mem - pla - clc - adc VARTAB+0 - sta VARTAB+0 - lda VARTAB+1 - adc #0 - sta VARTAB+1 - - // Get pointer back - pla - sta OLDTXT+1 - pla - sta OLDTXT+0 - - // Write the line number - ldy #2 - lda LINNUM+0 + // Put dummy linkage, we will correct it later + ldy #$01 + tya #if CONFIG_MEMORY_MODEL_60K ldx # memmove__src + // + // This means we have to copy from the back end down. + // This routine assumes the pointers are already pointed to the end of the areas, and that .Y is correctly initialized + + php +!: + lda (memmove__src),y + sta (memmove__dst),y + iny + bne !- + inc memmove__src+1 + inc memmove__dst+1 + dec memmove__size+1 + bne !- + plp + rts + +#else + + jmp shift_mem_down_internal + +#endif diff --git a/src/basic/memory/shift_mem_down_38k.s b/src/basic/memory/shift_mem_down_38k.s deleted file mode 100644 index 583fe3c7..00000000 --- a/src/basic/memory/shift_mem_down_38k.s +++ /dev/null @@ -1,28 +0,0 @@ -// #LAYOUT# STD * #TAKE -// #LAYOUT# * BASIC_0 #TAKE -// #LAYOUT# * * #IGNORE - - -#if CONFIG_MEMORY_MODEL_38K - -shift_mem_down: - - // Move memmove__size bytes from memmove__src to memmove__dst, where memmove__dst > memmove__src - // - // This means we have to copy from the back end down. - // This routine assumes the pointers are already pointed to the end of the areas, and that .Y is correctly initialized - - php -!: - lda (memmove__src),y - sta (memmove__dst),y - iny - bne !- - inc memmove__src+1 - inc memmove__dst+1 - dec memmove__size+1 - bne !- - plp - rts - -#endif diff --git a/src/basic/memory/shift_mem_up.s b/src/basic/memory/shift_mem_up.s new file mode 100644 index 00000000..320c01db --- /dev/null +++ b/src/basic/memory/shift_mem_up.s @@ -0,0 +1,56 @@ +// #LAYOUT# STD * #TAKE +// #LAYOUT# * BASIC_0 #TAKE +// #LAYOUT# * * #IGNORE + + +// +// Copies the memory up +// +// Input: +// - memmove__src - pointer to the last byte of source +// - memmove__dst - pointer to the last byte of destination +// - memmove__size - number of bytes to copy +// +// All the input variables, .A, and .Y register, are destroyed. Also uses RESHO+4 variable. +// + + +shift_mem_up: + + // The copy routine is simplified, so that it is fast and (for memory model 60K) + // can fit in a small RAM area - therefore it requires to pre-set .Y, so that + // the copy ends when it reaches 0; so if copying one byte we want .Y = $01 + + ldy memmove__size+0 + + // Now we have to move down the memmove_src and memmove_dst pointers to compensate for .Y not being 0 + + jsr shift_mem_adapt_pointers + +#if CONFIG_MEMORY_MODEL_38K + +shift_mem_up_internal: + + // Move memmove__size bytes from memmove__src to memmove__dst, where memmove__dst > memmove__src + // + // This means we have to copy from the back end down. + // This routine assumes the pointers are already pointed to the end of the areas, and that .Y is correctly initialized + + php +!: + lda (memmove__src),y + sta (memmove__dst),y + dey + bne !- + dec memmove__src+1 + dec memmove__dst+1 + dec memmove__size+1 + bne !- + plp + rts + +#else + + jmp shift_mem_up_internal + +#endif diff --git a/src/basic/memory/shift_mem_up_38k.s b/src/basic/memory/shift_mem_up_38k.s deleted file mode 100644 index 81c0d9f3..00000000 --- a/src/basic/memory/shift_mem_up_38k.s +++ /dev/null @@ -1,28 +0,0 @@ -// #LAYOUT# STD * #TAKE -// #LAYOUT# * BASIC_0 #TAKE -// #LAYOUT# * * #IGNORE - - -#if CONFIG_MEMORY_MODEL_38K - -shift_mem_up: - - // Move memmove__size bytes from memmove__src to memmove__dst, where memmove__dst > memmove__src - // - // This means we have to copy from the back end down. - // This routine assumes the pointers are already pointed to the end of the areas, and that .Y is correctly initialized - - php -!: - lda (memmove__src),y - sta (memmove__dst),y - dey - bne !- - dec memmove__src+1 - dec memmove__dst+1 - dec memmove__size+1 - bne !- - plp - rts - -#endif diff --git a/src/basic/memory/under_rom_routines_46k_50k.s b/src/basic/memory/under_rom_routines_46k_50k.s index d7f7beef..261ae7da 100644 --- a/src/basic/memory/under_rom_routines_46k_50k.s +++ b/src/basic/memory/under_rom_routines_46k_50k.s @@ -70,7 +70,7 @@ peek_under_roms_via_FAC1_PLUS_1: -shift_mem_up: +shift_mem_up_internal: // Move memmove__size bytes from memmove__src to memmove__dst, where memmove__dst > memmove__src // @@ -96,13 +96,13 @@ shift_mem_up: bne !- #if HAS_OPCODES_65C02 - bra shift_mem_finalize + bra shift_mem_internal_finalize #else - jmp shift_mem_finalize + jmp shift_mem_internal_finalize #endif -shift_mem_down: +shift_mem_down_internal: // Move memmove__size bytes from memmove__src to memmove__dst, where memmove__dst > memmove__src // @@ -126,9 +126,10 @@ shift_mem_down: inc memmove__dst+1 dec memmove__size+1 bne !- + // FALLTROUGH -shift_mem_finalize: +shift_mem_internal_finalize: // Restore memory mapping and quit