From 4b2b5300171980413d7d0b585625846fc6185e4e Mon Sep 17 00:00:00 2001 From: Richard Russell Date: Fri, 31 May 2024 22:26:27 +0100 Subject: [PATCH] Beta3 2024/05/31: Fix keyword abbreviations --- WHATSNEW.TXT | 8 ++-- bin/cpm/BBCBASIC.COM | Bin 18944 -> 18944 bytes bin/cpm/MAKE.SUB | 18 +++---- src/CMOS.Z80 | 19 +++++--- src/MAIN.Z80 | 110 +++++++++++++++++++++---------------------- 5 files changed, 80 insertions(+), 75 deletions(-) diff --git a/WHATSNEW.TXT b/WHATSNEW.TXT index 41621cc..a2cf451 100644 --- a/WHATSNEW.TXT +++ b/WHATSNEW.TXT @@ -21,9 +21,9 @@ New features in BBC BASIC (Z80) version 5.00, May 2024: 2.3 REPORT$ 2.4 Binary constants 2.5 LEFT$ & RIGHT$ with last parameter omitted -2.6 MOD(array) -2.7 SUM(array) -2.8 SUMLEN(array) +2.6 MOD(array()) +2.7 SUM(array()) +2.8 SUMLEN(array()) 2.9 GET$#file 3. BASIC V whole array operations @@ -56,7 +56,7 @@ New features in BBC BASIC (Z80) version 5.00, May 2024: 5. Extensions to Acorn's BASIC V, compatible with BB4W, BBCSDL and BBCTTY 5.1 EXIT REPEAT / WHILE / FOR [var] -5.2 Address-of operator ^ +5.2 Address-of operator (^) 5.3 Byte variables and arrays (& suffix) 5.4 'BY len' and 'TO term' qualifiers to GET$#file 5.5 ELSE IF THEN; (trailing semicolon) diff --git a/bin/cpm/BBCBASIC.COM b/bin/cpm/BBCBASIC.COM index 7ca5625c02b49dcdadeb44e9a371eb8796611894..3541e8bc89aee66760f2d742bb8a027d62ecf45f 100644 GIT binary patch delta 12660 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 delta 12743 zcmZvC349aRoxkKmmTgJCz>M#acBkDQX-kuCvn}bykTey!h=mZbEWZ}9i1nn1AdDP9h#&_UaM1YweKKsjpU)qx znfHG0`2F7Re(%lDPvk>CksnBq7uKcQ>yzwLDfW{o_GQKPxMI7y*#1_leQS%owZ%Tr zVqYsPmglDV+k+dn9xsKuGUz;N+YV8X0N|KLFf2m6$(|)B$9MnD18_|*LDHjLc8-H4Z zLYi!?M(!tZDZcdK_B9#l1Mgwr+Ocq|gH))--AT57D_46guFK;HIEXsg=1=q&4F`An zPRR8_TTG!mMtC%4V}iV;v%6(&tMGA*Zux0b)5fM>n_Anwrq;ISOr4v~m^#g$o4T7e z$F#0p+qr&2tE+XLsikQ{D@#!5Y-0s^Y=%%2%Q2~~cXw`NpKtBz-q+gQ&A#4x_xd+l z@7~A?kH>aqs5;ke*x0mo?H@YVZTwGK?&gHi*qUW==B{sSXuWLi+SD3chu(i$*R?Ue ztGlzkbKQ8?#*WtR&7B)suXL?@sjIDx9qR(RlDGn)D^9D?tpCQw>Gj=REeF?kZD57L zxL5Ljhym*kZS4BN#-?WO*2eCpmezmW*lBKMlQsgaP!^xRNZQ3Nf zn>#wO_MZ6HQpOU$rTkZAOw#$pi;0&tr5C=r-x~ftp}*pz?7C z0c)8rAd9$Saqn`;Z2v`!)Wv4_Z0BZk?_z@EzR_o#>}JBHCy!Mc7*uo%!$nsuIl=+-@@+o@Bl)e2!ysYp8G z@cSb^(NC5MuPAdYQz>l^KKl5>+t>%6W@VyZ^pOD-@h3A1w=aFz~aL+k& za4RS%oH7$-JBTChl(K0vd0dq*JH56U03g#o5*rzmwdoFXNfWw3>9?1Dmc(3%_-XMR zNs8#uc$kfsUcdB45{l9iE|px+7~#yu#p?DdE~B>XK=EmsTP#9YIB%_mEedD#hl z5{T7T&*6{B$3hiY<2sd^OH9-s)^TC`sYI;YiH2&K-w`HiVOdfZjN9fL6t!EFa-}SI zaQyRR$%O~cdR?-%qnDHSyoAEKqZhQ|V7^S0C&;w-DACQEEREtJ4(cQ|SG-wDWn)}l zONFdFm$;MnOg+a=&CeM-Kc^;+`EvrYGD^i zKjJ1yyvmvD%$q)+oa^M(@HBi9c})l=Wos`dJN)3B{NC8$L6D~St@N*#3RH1}xT|Oo3NG_3I7Jin@mX&BI`#5%QWKb?G<|cWKT_5GBmU~t*;y1uOBNcJa zkY5VEWUd$%;+}*m>m~yp5~Fix1+2klKBe+MeW3<6m#nV{`N_1fM72n6653Qn*)zrD z0w?-mG0QMAl;!vOK5+sSxgdO3)vp#c29?BdUqlAy07+8o8v$9cO9xq2PNN}_QbpT! z)iRx*q|6h`$8ZU|tbb7hj8Oqm4PDN;F?WV44;sWjM;h>n>#oO>d7G`A*w{(oQg zAF^mEoJxN`&EA~z?VSFcpXcn)nQ6+--H`i-)Jxgvxid|lX7{D_rTsL0rfF%~_@bGn zhZbfooLex{l$EuNxskRNkeQ|fmW8h@n8v_gW>jY$XZq4A7oN{f&(SXYU8*~Krb)~( zEc{!}HcUf1&;MU2pJ{sUcD*LOFYSC@P5NVblzr;kjsR8-*FcTitDP|id$?N(3Eo|? z`@Fm2;4ic?S>Yu!42$rEg;(!3M`*Dojjs0Pv7s!PdodP~ zz$2H*g9nf>5Tas}!+zR+J%v`DaN7>CPfw+AJNl+ZIAxL|X8QBAOP>pWPtCK;HdPEZFkvOv)?=E52wjx%@Li$<3%b`>>6Nq zi#o5*tMfi1!{ce04R&vMG+>LP!Yk)IUL7@iSpAK(mGVkqNqUh*pA_6#8COfq@^Xs( zr|A(NsYthS=Vr|ru3hZk+vzedA(F;MboJpr5z4Wa)Z|C;d3~ZT07^o3MTVqfw-Hu{ zIXrZ6v(5~+L)=f5=X&*)R7<)7)YY{Gxle zL}x7ENKLwkgb=zrb~cq?%=iF~_~8Ia%tE(TyAZ)R;^Qj$66Vu+a5&ZG&^8#*(99+C zvE*5n{gT%+`ypOZR&H~%@g9cH=K9C*YIA_SZL6KXH$*RN>^AFW{2c~VyFHo ztPIk>8PSzpHT(I-uof>Zl#H2z8u_KuoF8(m&ZJ`0Y3riz9JJGVhPE;zDqig;6wa%T zAc%p?h#pi@I^a`|)L7DCehaKh;w)E&uhry-?z#2-e9GN(-fEfLTP>F{Asc2Mriuc$ z!LlJ z*|66aAMymqi$eJ#2G#(-2qiD)?t&Sb{m6{qsMeH3EiE1v$;SI!Hs%C1%ZhZHFHG~O z@!vD9{_xQSg`x4-!jJ=0{E7)f1;65e6DXNj@?yTv=6a6V=W1e;cw;mM;DH3*L3MSm z1J2jhKD^xWwfWHKprjtvrQUQ(x-tJE@O)6J8y{sTp42Qqu==dCvMhgOlA@rxPf03+=azQ3* zr3KQZDF_>c--j2pF;}s{EVfba){-V$;~>Y%Z3;R2UoeoU!4GB6FO^NQ+2o)8HB(N0 zS_l=fxjhc6b}0KFekRB-VY(xJ?4V?ktobo+)?>5H0~i;Hm1Bc!p{^2J5p~k6jI^q- z6PVuwU}HcV^vSSbrXix^W1y2@BfpX=rH+^1u2yT|1~0=%PQysPkn~(OO)ubZ6KUEB zU&($R%{!uK5ZnWI;(s3Z#q83YVN3hE_qmS~^Vl2A1j*EqpJ?}lL98DcD|x4dc@O|p z#U-*r(6IsOux1{D4n!qqn&4B=LtRW}nwS;yO(0qw zaZ~O9P1#0f3e5C83s70LuDa*g9><6M8|!B%|dHSM9-X|2>c2e z-Q-4vzbK-MBbC=vu;+k{+cMHK0@O1y=lYh**80c~aw(DECoG~!`+lz9tCg9@FA6`) zDgEZcbggWT?O;j>N^^58&*Y-S$5Y*-@gojNj|eOkB@(oZMMi!HxYuXp)D16guT0)s z&n1*dOsrNegYN{-Xdkt}l|MA zzGx&89bO-MiZ8e8g+Jvk-S*Q$c-ttmu@1^L@W2*)ltPGV;;2=%8B|7eJyOHbpJ;ba zjf@~;qo(iPBQ}cCQ}Nqw z2fS=6n}S#eVZWiR6nn;+3w&HJ)kYn8a&_z>w2{` z>7h2my&Skm3ojp+>W)ilCzNxP=6K_03bDb9?qM26`8aS~`T?hs{)ID0r6cfd!%jz3 z^X6?k4GiC_{n~tZG<P_3Q6UvmE zHwqKSUh;a_0m~$8A;mlCvxS@>c`%*ExLhV0fsk8{tr0jaCvO(+($=Rw1|nzV*pAa| z6Eq9I)@I9>3Wu}>S(J3fI^Uum3l<_gPdoWUSkYB&i5e@`@fA_y#<7#G&|q0sUe0xL zQt4gXwbGlVzve`4rpZ_8<~-cTr5|&--0!(`ZV?yZ99$FUEMK1KDm_;EY}rBXN~x10 z-0R$8u9W))#=KejN3Lw~e{nYMJ??!jmV1T!UhY-yPo>w(q_Q6UK7FsA=>Mhsy8dA4 z2a5-|?{d#_k8(fYdMz9Y>7?hmSn0bXHBu$Hp9snMxrKR?xmrR5)Sx=fKfu=R-94)5Z0jN@va} z8>SMV%VBg=PPZA0Lv;Ira2Zt;^1}*upaiLFV7N;OE;`9*kyHUEt{+j({-j7rX&jA` zbdl=irE=7i(?(&RF0WfzAWLL%38@z%Epbykb>7;iti!E<0>jI;dBMJWe5#xiq$Ia`GG4#+fk`V z$FZYb%gq}JRO?3urKI@uvwy3w%Y}D~xUAPpr5DEX%cKXmgUC;@30?|29JJ1UE?g^G zTvU@@Cz)Nnd^TGR)`*(Qn_g|BdAN&l(X`&{Cc=qdiuh#p99$|C1kzu zUU6k@Yzg+6)-HZ%6bCs6oP+5|3Q@^r!%iuHLjp;nj~OmaIt$U9;Y>I+z^2u%74l26 zEK5tJBrcTqzbA3gW4QIDaf89%9=f!?)R)Jcq;lifMBw~(DMa7|YU+~n5$f4wKwms2kdZh0v(l_AO0gb%?JbcpH~17d6`F7CA&K$;^9-KM4w@1SwA7Bh!r37z zRFIW3_mCbv6Fphr*d*#iOy=OXm=+?HF-lTbJp3WLm&w*J%SfH@Wl2sP&Og+Grc`@h zT``V(L&xT57C+P6i-Z9)zR<#?)Az4hm?-;;kYlCDJ)&>8%L%$?nji>di^rJ)JVz(6 zOE^|Ofg#7rIrVWSi2|88a!h!+^e)Sq;t;|oV&||Eo7HQ4DRY$)lny_?hA(0!Q2_-J zKm1q(AdQS3#%Bz}Tq4+;MQWkG*w58Q5LJ~JADwj)SC9W(5JFlXy`#HHW^($8z zG3SFuFo5=S4b-rj%h>&fn-J15;HW`(l+!MXl7k$|URaFP{Gr6vH)bp*&j_z`nYGYp zNbQfDCkkgv9psr3=p(Em=k+yvaNRq574eS_b}11IN>iw?~s){ z+(3;T9b2|8kvRr+>A8Hym|iH*S0}A0CJ&U;Q5S?BeOWOm8szNoc+gU_cQDrK)!NIs zI9kI>`QoTX3vcTg`F{(a>Pr@pe6P>CaZRv$K92|}WZw!NAVi2OZ$zR;cfg~3e3Y*! zFCOJ{qFbA(6y>b3SUHKrB<#3I%c4z$%tQ0i7abz-7)}mHgNt8#T*oN_-(eIh!O4^L_5s3YpV`gv^J!r3V0coXqKZ$3uQo0(G|ad7v57 zh0SY_)DF{lhND$|k|Vh0tT`^&oM=PkCeGZG`wp@<;9|G;){@jEH|fDO-vIZl!*H*^ z2Vx^XT0*zl?s*Aj&^-&TG=5)^=uNcI(O)5uH6@DCE(IlDOXC|5jWq2R43;YN%4-8L_dlRT8?T|gc}B1ri~DGqMMQ4@O( zIw|OvbnruHtfZbXdiv)B{!!_a<|wk%P0J&C?Xnf*aMeUdrtDN{WrB3!WKk9Kty4*r zDbmf;Z&yu_7x3e%m~WhltyGXVswS8|bYDUVuC#Z)dJ|5DX|qO9u5wuFR)F7js8L_b5}T4`=Pt4fL1 z3FYamsv_Rk9axK zSKp}XZvXiGRrmXNuWJVv!$+(__wohzB&@i7-+-N=+qT#0#B>uBlhWuUeGu-_=(A)V zTyQG2GDiy4jPS8c#ylwHlyU+mbB|PE!~}$Mu*<3acqP>PljY@F#frhm+p?)1E{OZ# zGbC%p(To-BwZ1l=Q-{h3DSlT~bxtmi2w$$qvbNPy}#~U z?aI12Z$6ts{dB~arKvmTZZ!%12H7j z25K^ECJeHg-x;2)A>;hO8{7B(u2;PMa#G0t?R(z>Wd0R}yt94pyMWBU=KHt?$mu5j zbCS{|YGle$`*|Ki$%$$!`M{`=U8VKr#(}+!l`kp>wblt+J=El=Ec(Tp7R19ckL-4i% zas1E5({CD2|JCUF2=mMttyf*QoY8st^s(zJ)vD2f{YuxY>z1P#w`?-;(ddgmOKEoP z7RSqwpt%gLEKFt$%ui;+Yz6&4H`s!X-jNwiZ$#eOg@&u#3 zQ{)yMXBOP4j53LLiX%986X}m8xoc~=g!%nj%gtzQ)>ZDx6J5D@q+W|cF1YId88XiA zeph^FkEmeTn0BkvH9)0)o(HRlNBEW@-}3LZpcHu}-cQo^tH!h?4~uF4eO6Sw=mh5v zj=Bbpq}Gx-qy0@I8EXoYbUq|i@UoHUMDu$?NSohhqCEKRtv8K*)?4R!O75%RD8KMX zR2y8kTutLgjQyvETuZ@s2NX$WGK-e^H}4}mpcj4O_>Ly>$0jQ&YjWjmc~so;D3mO! z7yF*;a(xt~4}2%zr~{8_0sP()E#D@d#2a&S_b?jZ_M;qv%b1FLEA0BHfLyLSt*8lw zr()0TucJesY9xPZEVKS0t@??QGx5it8X5Y&vj5ln_wU~;!@nVl0DlnUcwMxw@OEvE z{CQ!lwt|CV>{=z}$^YiYY2!j;$hC({T=dzTk!S4JS56JR3w#vApM-+CvWKAz;cHK> z3Qga$YRVEc9UFS?pEVE)*o9^J>aZ01lQn5Omx*aN7KsWAWgnjj=3if_Qp2Ls;#P`j zRbPoDt+8J-WQbAMBQ1&YfG$LMyDrCahvE>BDGG=N0cFjv+@+?dhWMf64 z%J|vYRjylfeVJ6~&#y|m_W?2Oj}xL|a9$m-LM#AEAE=?UDQbwn7Tr~9KE}iCaFg$> zf?k8iu8-0(Hi~J-$1$>;Xc`qVLvGsh*<#u+`$ffb02q|8Aw`V+@p@3JkUQ>hUU+&{ zG4~IGFV_`>PiNMI;tHscs51ds3+nlpF!qbD3bs|H+y1*TOlfZqy~>+B=4xehx?Q@wX?p`R8B&?q(&|=SU&Hi_@MXQOXAZuY{EU~DC}iV5<)v0$ zHvR~YYgVO|jX%W3yg&NtbDDiou~@r2dF!j5gr69R`Wf|+XN^wfu_a162s%Lr zjle664p1AX)C>D~on=d-=we)1$^%MKHNr1|5k&h;4b3z<2i_C^{GRAUR-FV#$je6g zp#mBxsDld;u926C+k5fXZSmkLYaLc)y50=e%ZnebKDldy!@* zqPySL)aAWM6%-nuSwpP@Wh@+38Lh%Ty*Q!3UGO9V0fdznkHcT*mOus|7&h@@aTA}kN?(&UaXz{t7xb}I&1SnwGPPh3k z$C}X4hZex~gZ1B(S$v6BQut$lbhhNKg(#e4zyu2T47Bi>R5(rt>IzjhzT1n>NWEcm^5bA#^Ml*iCm(#` zVHuwtz{CM3&K0SgsE9`RGnnvTOIE}B)mgZ&+5N7QXFdM3hh8+oruwmiD+zt^(mcz{!Bcq*(-} z;HICA?+1^r^3rXVJk7*C%QFt7}}-zVV*o^^RAY=fZp)))&HWaLS^iOTF&YROCw}UN)>)s9i5yZ7Z;JtzJ2< z>%bDNS1Eyq?RDwZ3p~6ce-66qwvI{}T)vdUZC?K1YNxmD8qOgl3qIjIJA%@wCMU0S zVr+pS$sgQ`vq#?qzGU$D^OaEt1yAET7C!w@a|q`qPQUiS)q~YCpS5PhL(=8$<5Et| zh{aEPK8r6mC7(0w!BJLm2l-&z$Jmw|t9b zHRk@9SMNIdTE`NZnPU~Q!8lw#g#A57M>>2Ve2_zxBwy(#sKTlB$8&P)czs7#8sF)` zMArV8z?v$Fn?tcGBP6z$exFdM)HS=&U*8joCha+k2 zs}*tChmq*(G6rG9F{#tT?dIOJHLC+~A7I59XH9tpcR#Ph$cp38VD7Gs_h)41q-Vfv zuDk8|otr`URO)V4w^_*S%*ubQgYnRAnVWW%<9gw>4qpAi$S!9^wVF@BhtB5CcZD6D GN&gS-`dh*P diff --git a/bin/cpm/MAKE.SUB b/bin/cpm/MAKE.SUB index 4827b77..f14a362 100644 --- a/bin/cpm/MAKE.SUB +++ b/bin/cpm/MAKE.SUB @@ -1,12 +1,12 @@ -m80 dist,dist.lst=dist.z80 /z -m80 main,main.lst=main.z80 /z -m80 exec,exec.lst=exec.z80 /z -m80 eval,eval.lst=eval.z80 /z -m80 asmb,asmb.lst=asmb.z80 /z -m80 cmos,cmos.lst=cmos.z80 /z -m80 math,math.lst=math.z80 /z -m80 hook,hook.lst=hook.z80 /z -m80 data,data.lst=data.z80 /z +z80asm dist/rmf +z80asm main/rmf +z80asm exec/rmf +z80asm eval/rmf +z80asm asmb/rmf +z80asm cmos/rmf +z80asm math/rmf +z80asm hook/rmf +z80asm data/rmf era bbcbasic.com link bbcbasic=dist,main,exec,eval,asmb,math,hook,cmos,/p:4B00,data hexbin bbcbasic diff --git a/src/CMOS.Z80 b/src/CMOS.Z80 index 792d2ad..539ee06 100644 --- a/src/CMOS.Z80 +++ b/src/CMOS.Z80 @@ -39,6 +39,7 @@ EXTRN FREE EXTRN HIMEM EXTRN CURLIN + EXTRN AUTONO EXTRN USER EXTRN VERMSG ; @@ -1256,7 +1257,8 @@ WRCH1: CALL BDOS0 SET 1,(HL) RET ; -TOGGLE: LD A,(FLAGS) +TOGGLE: LD BC,0 + LD A,(FLAGS) XOR 00000100B LD (FLAGS),A RET @@ -1319,6 +1321,8 @@ LIMIT: CALL Z,KEYGET ;READ KEYBOARD OR A ;TEST FOR ESCAPE LD A,C JP M,OSEXIT + CP 'P' AND 1FH + JP Z,TOGGLE CP (IX-11) ;CURSOR UP (IX-11) JP Z,LEFT CP (IX-10) ;CURSOR DOWN (IX-10) @@ -1328,13 +1332,11 @@ LIMIT: CALL Z,KEYGET ;READ KEYBOARD JR Z,BACK CP (IX-9) ;START OF LINE (IX-9) JR Z,LEFT - CP (IX-7) ;CLEAR RIGHT (IX-7) - JR Z,DELETE CP (IX-8) ;END OF LINE (IX-8) JP Z,RIGHT + CP (IX-7) ;CLEAR RIGHT (IX-7) + JR Z,DELETE LD C,0 ;INHIBIT REPEAT - CP 'P' AND 1FH - JP Z,TOGGLE CP (IX-1) ;INSERT / OVR (IX-1) JP Z,INSERT CP (IX-6) ;DELETE LEFT (IX-6) @@ -1359,10 +1361,15 @@ OSEXIT: LD A,(HL) JP NZ,ABORT ;ESCAPE LD A,LF CALL OSWRCH - LD DE,(CURLIN) XOR A LD L,A LD (EDPTR),HL + LD DE,(CURLIN) + CP D + RET NZ + CP E + RET NZ + LD DE,(AUTONO) CP D RET NZ CP E diff --git a/src/MAIN.Z80 b/src/MAIN.Z80 index 1d2e026..341655f 100644 --- a/src/MAIN.Z80 +++ b/src/MAIN.Z80 @@ -10,7 +10,7 @@ ; ;VERSION 2.3, 07-05-1984 ;VERSION 3.0, 01-03-1987 -;VERSION 5.0, 27-05-2024 +;VERSION 5.0, 31-05-2024 ; EXTRN XEQ EXTRN RUN0 @@ -174,7 +174,7 @@ PURGE: LD (HL),A ;CLEAR SCRATCHPAD CALL NEWIT JP NZ,CHAIN0 ;AUTO-RUN CALL TELL -VERMSG: DEFM 'BBC BASIC (Z80) Version 5beta2' +VERMSG: DEFM 'BBC BASIC (Z80) Version 5beta3' DEFB CR DEFB LF NOTICE: DEFM '(C) Copyright R.T.Russell 2024' @@ -220,7 +220,10 @@ NOAUTO: LD HL,ACCS JR NZ,NOTCMD ADD A,A LD C,A - LD B,0 + LD A,H + OR L + JR NZ,INAUTO + LD B,A LD HL,CMDTAB ADD HL,BC LD A,(HL) ;TABLE ENTRY @@ -231,6 +234,7 @@ NOAUTO: LD HL,ACCS CALL NXT JP (HL) ;EXECUTE COMMAND ; +INAUTO: LD IY,ACCS NOTCMD: LD A,H OR L CALL Z,LINNUM @@ -339,8 +343,6 @@ KEYWDS: DEFB 80H DEFM 'CHAIN' DEFB 0BDH DEFM 'CHR$' - DEFB 01H - DEFM 'CIRCLE' ; v5 DEFB 0D8H DEFM 'CLEAR ' DEFB 0D9H @@ -353,6 +355,8 @@ KEYWDS: DEFB 80H DEFM 'COS' DEFB 9CH DEFM 'COUNT ' + DEFB 01H + DEFM 'CIRCLE' ; v5 DEFB 0DCH DEFM 'DATA' DEFB 9DH @@ -365,16 +369,14 @@ KEYWDS: DEFB 80H DEFM 'DIM' DEFB 0DFH DEFM 'DRAW' - DEFB 02H - DEFM 'ELLIPSE' ; v5 - DEFB 0CBH - DEFM 'ENDCASE ' ; v5 - DEFB 0CDH - DEFM 'ENDIF ' ; v5 DEFB 0E1H DEFM 'ENDPROC ' DEFB 0CEH DEFM 'ENDWHILE ' ; v5 + DEFB 0CBH + DEFM 'ENDCASE ' ; v5 + DEFB 0CDH + DEFM 'ENDIF ' ; v5 DEFB 0E0H DEFM 'END ' DEFB 0E2H @@ -389,16 +391,18 @@ KEYWDS: DEFB 80H DEFM 'ERROR' DEFB 0C5H DEFM 'EOF ' - DEFB 10H - DEFM 'EXIT ' ; v5 DEFB 82H DEFM 'EOR' DEFB 9FH DEFM 'ERR ' + DEFB 10H + DEFM 'EXIT ' ; v5 DEFB 0A1H DEFM 'EXP' DEFB 0A2H DEFM 'EXT ' + DEFB 02H + DEFM 'ELLIPSE' ; v5 DEFB 0E3H DEFM 'FOR' DEFB 0A3H @@ -427,12 +431,12 @@ KEYWDS: DEFB 80H DEFM 'INKEY$' DEFB 0A6H DEFM 'INKEY' - DEFB 0CH - DEFM 'INSTALL' ; v5 DEFB 0A8H DEFM 'INT' DEFB 0A7H DEFM 'INSTR(' + DEFB 0CH + DEFM 'INSTALL' ; v5 DEFB 86H DEFM 'LINE' DEFB 92H @@ -455,24 +459,22 @@ KEYWDS: DEFB 80H DEFM 'MODE' DEFB 83H DEFM 'MOD' - DEFB 04H - DEFM 'MOUSE' ; v5 DEFB 0ECH DEFM 'MOVE' + DEFB 04H + DEFM 'MOUSE' ; v5 DEFB 0EDH DEFM 'NEXT' DEFB 0ACH DEFM 'NOT' - DEFB 05H - DEFM 'ORIGIN' ; v5 - DEFB 0CCH - DEFM 'OTHERWISE' ; v5 DEFB 0EEH DEFM 'ON' DEFB 87H DEFM 'OFF ' DEFB 0CAH DEFM 'OF ' ; v5 + DEFB 05H + DEFM 'ORIGIN' ; v5 DEFB 84H DEFM 'OR' DEFB 8EH @@ -483,6 +485,8 @@ KEYWDS: DEFB 80H DEFM 'OPENUP' DEFB 0FFH DEFM 'OSCLI' + DEFB 0CCH + DEFM 'OTHERWISE' ; v5 DEFB 0F1H DEFM 'PRINT' DEFB 90H @@ -495,12 +499,12 @@ KEYWDS: DEFB 80H DEFM 'PLOT' DEFB 0B0H DEFM 'POINT(' - DEFB 0EH - DEFM 'PUT' ; Token changed DEFB 0F2H DEFM 'PROC' DEFB 0B1H DEFM 'POS ' + DEFB 0EH + DEFM 'PUT' ; Token changed DEFB 06H DEFM 'QUIT ' ; v5 DEFB 0F8H @@ -551,18 +555,18 @@ KEYWDS: DEFB 80H DEFM 'SYS' ; v5 DEFB 0B7H DEFM 'TAN' - DEFB 8CH - DEFM 'THEN' - DEFB 0B8H - DEFM 'TO' DEFB 8AH DEFM 'TAB(' - DEFB 0FCH - DEFM 'TRACE' + DEFB 8CH + DEFM 'THEN' DEFB 91H DEFM 'TIME ' DEFB 0AH DEFM 'TINT' + DEFB 0B8H + DEFM 'TO' + DEFB 0FCH + DEFM 'TRACE' DEFB 0B9H DEFM 'TRUE ' DEFB 0FDH @@ -575,14 +579,14 @@ KEYWDS: DEFB 80H DEFM 'VAL' DEFB 0BCH DEFM 'VPOS ' - DEFB 0FEH - DEFM 'WIDTH' - DEFB 0BH - DEFM 'WAIT ' ; v5 - DEFB 0C9H - DEFM 'WHEN' ; v5 DEFB 0C7H DEFM 'WHILE' ; v5 + DEFB 0C9H + DEFM 'WHEN' ; v5 + DEFB 0BH + DEFM 'WAIT ' ; v5 + DEFB 0FEH + DEFM 'WIDTH' ;'LEFT' TOKENS: DEFB 0CFH DEFM 'PTR' @@ -832,7 +836,7 @@ LENSUB EQU $-TOKSUB DELETE: CALL DLPAIR DELET1: LD A,(HL) OR A - JP Z,WARM + JR Z,WARMNC INC HL LD E,(HL) INC HL @@ -856,7 +860,7 @@ LISTO: INC IY ;SKIP "O" EXX LD A,L LD (LISTON),A -CLOOP1: JP CLOOP + JP CLOOP ; ;LIST ;LIST line @@ -1006,10 +1010,7 @@ RENUM1: LD A,(HL) ;BUILD TABLE POP HL EX DE,HL JR C,RENUM1 ;CONTINUE - CALL EXTERR ;"Out of space" - DEFB 16H - DEFB 18H - DEFB 0 + JP ERROR ;'No room' (A = 0) ; RENUM2: EX DE,HL LD (HL),-1 @@ -1021,7 +1022,7 @@ RENUM2: EX DE,HL RENUM3: LD C,(HL) LD A,C OR A - JP Z,WARM + JR Z,WARMNC EXX EX DE,HL INC HL @@ -1114,6 +1115,15 @@ BAD: CALL TELL ;"Bad program' NEW: CALL NEWIT JR CLOOP0 ; +;LOAD filename +; +LOAD: CALL EXPRS ;GET FILENAME + LD A,CR + LD (DE),A + CALL LOAD0 + CALL CLEAR + JR WARM0 +; ;OLD ; OLD: LD HL,(PAGE) @@ -1131,15 +1141,6 @@ OLD: LD HL,(PAGE) CALL CLEAN CLOOP0: JP CLOOP ; -;LOAD filename -; -LOAD: CALL EXPRS ;GET FILENAME - LD A,CR - LD (DE),A - CALL LOAD0 - CALL CLEAR - JR WARM0 -; ;SAVE filename ; SAVE: CALL EXPRS ;FILENAME @@ -1203,7 +1204,7 @@ ERROR2: LD SP,(HIMEM) LD E,0 CALL C,OSSHUT ;CLOSE ALL FILES CALL CRLF - JP CLOOP + JR CLOOP0 ; ;SUBROUTINES: ; @@ -1442,12 +1443,9 @@ LOUT: BIT 0,E CALL OUT RET ; -INDADD: INC E - RET -; INDSUB: DEC E JP P,INDRET - INC E +INDADD: INC E INDRET: RET ; ;CRLF - SEND CARRIAGE RETURN, LINE FEED.