From 15ef3e5ee2dcd616c708b2cdcd2510be29fd74d6 Mon Sep 17 00:00:00 2001 From: Bobbi Webber-Manners Date: Fri, 25 Oct 2019 23:58:17 -0400 Subject: [PATCH] Further cleanup of parsing code for CCP --- SOFTCARD80.ASM#040000 | 71 +++++++++++++++++++++++++++++++++--------- SOFTCARD80.BIN#041000 | Bin 43011 -> 43011 bytes zapple2.po | Bin 819200 -> 819200 bytes 3 files changed, 56 insertions(+), 15 deletions(-) diff --git a/SOFTCARD80.ASM#040000 b/SOFTCARD80.ASM#040000 index 809bb09..1a9282d 100644 --- a/SOFTCARD80.ASM#040000 +++ b/SOFTCARD80.ASM#040000 @@ -1978,6 +1978,7 @@ UCS1 LD (HL),A ; Put converted char back ; 3 in first argument ; 4 in whitespace segment following first argument ; 5 in second argument +; 6 in whitespace segment following second arg (or later) PARSE LD HL,PATHBUF+1 ; Skip first byte - buffer capacity PUSH HL ; HL->IY. Use IY as dest pointer into PATHBUF POP IY ; ... @@ -2041,7 +2042,8 @@ DLS1 DEC HL ; Put HL back to the beginning ; State 2: Do not emit space to FILEBUF ; State 3: Emit space to FILEBUF -> State 4 ; State 4: Do not emit space to FILEBUF -; State 5: Emit space to FILEBUF +; State 5: Emit space to FILEBUF -> State 6 +; State 6: Emit space to FILEBUF CMDSPC EX AF,AF' ; Save character for later LD A,B ; Get parser state CP 0 ; State 0 - eat the space @@ -2087,50 +2089,89 @@ CSS5 CP 5 ; State 5 LD (IX+0H),A ; Just emit the space INC IX ; ... INC D ; Character count -CSS6 RET + INC B ; Transition to state 6 + RET +CSS6 CP 6 ; State 6 + JP NZ,CSS7 ; + EX AF,AF' ; Get character back + LD (IX+0H),A ; Just emit the space + INC IX ; ... + INC D ; Character count +CSS7 RET ; Handle a non-space character in the command line ; Character is passed in A -; For all states, emit character to PATHBUF. -; State 0: Do not emit character to FILEBUF -> State 1 +; State 0: Do not emit character to FILEBUF +; Emit character to PATHBUF +; -> State 1 ; State 1: Do not emit character to FILEBUF +; Emit character to PATHBUF ; State 2: Emit character to FILEBUF -> State 3 +; Emit character to PATHBUF ; State 3: Emit character to FILEBUF +; Emit character to PATHBUF ; State 4: Emit character to FILEBUF -> State 5 +; Emit character to PATHBUF ; State 5: Emit character to FILEBUF -CMDNSPC LD (IY+0H),A ; Emit char to PATHBUF - INC IY ; ... - INC E ; Character count for PATHBUF - EX AF,AF' ; Save character for later +; Emit character to PATHBUF +; State 6: Emit character to FILEBUF +; Do not emit character to PATHBUF +CMDNSPC EX AF,AF' ; Save character for later LD A,B ; Get parser state CP 0 ; State 0 - eat the character JP NZ,CNS1 ; + EX AF,AF' ; Get character back + CALL EMTPATHBUF ; Emit char to PATHBUF INC B ; Transition to state 1 RET ; CNS1 CP 1 ; State 1 - eat the character JP NZ,CNS2 ; + EX AF,AF' ; Get character back + CALL EMTPATHBUF ; Emit char to PATHBUF RET ; CNS2 CP 2 ; State 2 JP NZ,CNS3 ; + EX AF,AF' ; Get character back + CALL EMTPATHBUF ; Emit char to PATHBUF + CALL EMTFILBUF ; Emit char to FILEBUF INC B ; Transition to state 3 - JP CNS7 ; Emit char to FILBUF + RET ; CNS3 CP 3 ; State 3 JP NZ,CNS4 ; - JP CNS7 ; Emit char to FILBUF + EX AF,AF' ; Get character back + CALL EMTPATHBUF ; Emit char to PATHBUF + CALL EMTFILBUF ; Emit char to FILEBUF CNS4 CP 4 ; State 3 JP NZ,CNS5 ; + EX AF,AF' ; Get character back + CALL EMTPATHBUF ; Emit char to PATHBUF + CALL EMTFILBUF ; Emit char to FILEBUF INC B ; Transition to state 5 - JP CNS7 ; Emit char to FILBUF + RET ; CNS5 CP 5 ; State 5 JP NZ,CNS6 ; - JP CNS7 ; Emit char to FILBUF -CNS6 RET -CNS7 EX AF,AF' ; Get character back - LD (IX+0H),A ; Emit char to FILEBUF + EX AF,AF' ; Get character back + CALL EMTPATHBUF ; Emit char to PATHBUF + CALL EMTFILBUF ; Emit char to FILEBUF + RET ; +CNS6 CP 6 ; State 6 + JP NZ,CNS7 ; + EX AF,AF' ; Get character back + CALL EMTFILBUF ; Emit char to FILEBUF +CNS7 RET + +; Write character at A to IX (which points into FILEBUF) +EMTFILBUF LD (IX+0H),A ; Emit char to FILEBUF INC IX ; ... INC D ; Character count for FILEBUF RET +; Write character at A to IX (which points into PATHBUF) +EMTPATHBUF LD (IY+0H),A ; Emit char to PATHBUF + INC IY ; ... + INC E ; Character count for FILEBUF + RET + ; Load and run a .COM file to 0100H ; DE is the address of the FCB describing the file to run RUNCOM LD HL,0080H ; Set DMAADDR to 0080H diff --git a/SOFTCARD80.BIN#041000 b/SOFTCARD80.BIN#041000 index 2cbb4f48102c59aa86d12917378dde60ceeea74c..46fee5ce147ab1a196775c1ef4ea532a0f7e8375 100644 GIT binary patch delta 1029 zcmZuvOH30{6n)e3X=zI-!ScsWi5P1HGTI;mb^&TkjDm)(rjqDFjJPY&1c;cFPFv=4 zJGwE3lt$wxd~A#?{6JyRDL#G%7sf8oxL`p-;!e}zn?j=!7xUh^=brcOc_%ZptQlI? zOx9`*CK($A*LJVPEJMAvLYJv6COO)voxNw!%S?gH7-YsMN2`W=Da}EEps$wl!j!Mf znUd%q5}pdCQ4DeHwv_S|GMzx50m3;h0#5KLk9i{Hv9UFX*2#IOL(gtQ+Gnk-1G+|4 zk&~?)TL)O;)7yzwj;Nr4t0?aROBdiAPFwXuiUDxDL1mc^u#8+)Ct)Qe|GF)J!Nqm+~frE04bdJq}Z zS3mZVS!EK8i&oP&kqp}}ssCbw1S?{>rAfj^d%er_o$rmzA%rOMAsc!>yAXC$-UvalwXj>`jl@+vzaDlMcq6JNBUC{~9{(A3 zYcma^O5~5Za|l1U(_66qQ+_xw=BCsUxPBKbmN$*LHAJkk%k6*gN=LK?q9wlpZ1=N( delta 1018 zcmZuvOK1~O6n&GA{n%E=PptjKOzOspA4W@I)CdZ0MC`(d3&l~;jnaafh(cSbNHfWF zX5M|R2!3PngJN5Q)P=vM3MTq$6>R+tRI#oM2-cm6zL%sb#l_4$_sqHXop+dyQAfw9 zqrc8M`#qs$X5d$gXcJiJtSZj+;(HQrat@uGJx=5|M1D);cO+iZ*&;Z8V9>*LLJ$VR zl?~6ZG=%AZo<#|yDHLZy6|xs34=}FY2Q+15LUZ~uA)n$!(ioYAwwEXrvSCm46qddg zCf94q6sFk7{z|RamDRg3)~`hmJM{=N~WFS^(f$2Dn!z*;~q}+w>PfpIib`7Q;8K$~}&y5e#!8N+pv`{#Ujy zQsw@FB^yI~q@gH(R2$rjRC{vRmU_tkL&98CvSSZ-aTd}MAB&|Tx<=Rno1&}vW@eyS zvJd*{H{%}zT6EgL^=RWdFUa$NyPd@O;AW20FM;&dBDk8~^lG7=-aH?qQl2lrO0_=i zQPJ0yT`L5k>Ggy0W4ce6mv=qQ-|wm)gqvN<8~wn7^m`B;(O9h21`AnIyJrv+GYJ(c zjPRmyayNC`P~Na|*HGTF^1x8u5x8Z1D6hf8%S_sDiams$gVScMuoLc>K4A}xnH&5; z;zg4zHFl1~jD0fcx~{-x`2q=SmoJjQHu(}XSkkWDR)wFkA4&f(gshIAF0YX^a0@ z8H=t67bHmVmeVJl`7SBCG5eHcqC6qag%$WfTQe39BihO$dqkV@@Ln7!m!l}KRMwGr z0`UnSdidy6Of3rb4kLsF_8>+Lor$SJu$Q64<(TRS_V#f6xG$!b279?CC*&X}fBH10 zI&&YGD)l<1x)|S%&_=%N+2=n!Z=Zi>t2v-Q3t+^3S#_`hPL7Iy@yptH6T}x-ru-YQ CJGPSm diff --git a/zapple2.po b/zapple2.po index 8df1e3ceb1b496cc61321b99a8ab689006d89627..4637b588ee6f56d6588f92991fd61361601dbeb6 100644 GIT binary patch delta 1129 zcmZuvOKcle6n$em&h;lBN5x6%He?dfilBZp5SdOw76~Av3KCE@T@*|ux}X(d=Ln?K zg2mM1IP-ZP-Ugw{iJ*McHX!5(LEAW9cwAmeiV6~{7o}p+MWjmXitKQo6BmeB+ z!(oSG{=LvBMA{r}D(1&%ElkB=^=v5MC_zUFIZD_m>^l!LlII|0*)$AF8e2|7&v4C_ z|FrpXwoZyfSGVk1vR#>?@=FwJL$6U@F>1+<%e7>`+DBw?{A4nqZn1hAqOk*1?h`Z| z9o5wXl-ovqt1_x1jUCZpZ|^jXOjGXD#rMlJzqx?S_jS3;VW)IZJ$Qbi!~S6{$4gnc zw4F$8DQu*3YgLteMY6y?3h8lL*B?IoXy<)FDY4R&(q@3e788czO zbe?@{qL?%67ZaWv&~km`5A+c4mQmjCCLdWCn@~1#W0T6Q+}O*?&urKN`P}OkRFkAS zxX0(#{l&MNnG3V1c-8`5wy+}=KWIR=?kSoL#8*Y#Tl~10)qTY;nixAR#X>U^7hlI@ z)pEC2xwRyz4eoR06bXs9f11W!JvO^!LA33jh1(vt#V>lqW*ZjtM&dR*eu-7d1t_{(1EBQpLwzNhFkuXRNlu%#>zy;JOB-`jL99&WYAM{!2pjB=$oj*Gf@9Z#{;{;+pNNAl zGO)`{(tGc@r#%RMW<@KCT@}d~Q`a=Yl6mR}tlftf>PPp>z`*UF$$U?eRVn^>?|I+n zJn#EH=i#Q)S~{(rIVX21yAk>w^}X<*amt_gU2hjl`YJagT2abkA*D3F|6L%&R zkFrN1fjzhhDA(!qSR?=uERIF+@_1;SYFDUsm1@^$ao`l5lzg`d%V+SAlw?a8+&^-O zsLO;esSkBNdqhZiht;w;1`hS+@Z-`Ub|8lz z6Z1jHgzCK#=QpkY2r+Y8LO#ji(S1=@+vy73o1|sq_NL+c-P+SZ_v6}upYP4r4&LLc zUBYegs7QWGtDeVCbT70`G4sR4;v0DowX-Gv?#0(L!$tPl41Rbt?t-!LFygBw*c`FI zbk&&M25f8x4AyJm%fRY`$+MaZr1oCJt*K(8M#^hit^b>hmu;*h?XA zXji44LiM2m{5mKdcjQV#D!t}Z8ottTM_!qA8XcvRjyUB~t_Ao@Q~;H`{c0MCmwl9h z0XH1B;o$J-k^^IEj`-i|4&R$;bC4A6;oqHVRTafg;Hm`u4(G1tXZ8UqJ{-5D1{