From d9b231e6f4cee49bd40769c36a33386068a39412 Mon Sep 17 00:00:00 2001 From: Bobbi Webber-Manners Date: Sat, 26 Oct 2019 23:04:23 -0400 Subject: [PATCH] Fixes to CCP command line argument handling --- SOFTCARD80.ASM#040000 | 113 ++++++++++++++++++++++++++++++------------ SOFTCARD80.BIN#041000 | Bin 43011 -> 43011 bytes zapple2.po | Bin 819200 -> 819200 bytes 3 files changed, 80 insertions(+), 33 deletions(-) diff --git a/SOFTCARD80.ASM#040000 b/SOFTCARD80.ASM#040000 index e2d13cc..5815c32 100644 --- a/SOFTCARD80.ASM#040000 +++ b/SOFTCARD80.ASM#040000 @@ -20,6 +20,8 @@ ; BDOS TODOs ; ---------- ; TODO: F_WRITE bug turns out to be bug in ProDOS 2.5.0a7 (SET_MARK) +; TODO: Maybe I should eliminate use of "EX AF,AF'" in BDOS since CP/M apps may +; expect exclusive use of alternate register set. ; TODO: Implement missing system calls: ; - F_ATTRIB (needs to support wildcards, leave FCB at DMAADDR) ; - RS232 (A_READ, A_WRITE) @@ -1535,13 +1537,13 @@ F2PS6 LD A,C ; Store length of string ; Trashes pretty much all registers (except IX, IY) NAME2FCB EX DE,HL ; Stash HL in DE so we can use HL here - LD HL,(DMAADDR) ; Set all 32 bytes to FCB to zero + LD HL,(DMAADDR) ; Set all 16 bytes to FCB to zero LD C,0 ; ... XOR A ; ... N2FL1 LD (HL),C ; ... INC HL ; ... INC A ; ... - CP 32 ; ... + CP 16 ; ... JP NZ,N2FL1 ; ... LD HL,(DMAADDR) ; Set all filename chars in FCB to space @@ -1593,22 +1595,24 @@ N2FS2 LD DE,(DMAADDR) ; Destination is start of extension JP N2FS1 ; Jump back into the read-write loop ; Handle file size info -N2FS3 LD DE,(DMAADDR) ; Pointer to start of FCB - LD IX,PATHBUF ; Destination buffer - CALL FCB2PATH ; Populate PATHLEN and PATH from new FCB - LD HL,GFIMLI ; Pass address of 6502 JSR instruction - CALL PRODOS ; Invoke ProDOS MLI - CP 0 ; See if there was an error - JP NZ,N2FERR ; Handle error - LD HL,(GFIMLIBU) ; Obtain the blocks used field - ADD HL,HL ; Mult x 4 to get 128 byte records - ADD HL,HL ; ... - CALL RECS2EXRC ; Puts extent in B, recs in A - LD DE,(DMAADDR) ; Pointer to start of FCB - PUSH DE ; Copy into IX - POP IX ; ... - LD (IX+0CH),B ; Store num extents in EX field of FCB - LD (IX+0FH),A ; Store num recs in RC field of FCB +; TODO This is commented out because it causes problems when called from parse +; We need a mode switch to turn this part of the function on and off +N2FS3 ; LD DE,(DMAADDR) ; Pointer to start of FCB + ; LD IX,PATHBUF ; Destination buffer + ; CALL FCB2PATH ; Populate PATHLEN and PATH from new FCB + ; LD HL,GFIMLI ; Pass address of 6502 JSR instruction + ; CALL PRODOS ; Invoke ProDOS MLI + ; CP 0 ; See if there was an error + ; JP NZ,N2FERR ; Handle error + ; LD HL,(GFIMLIBU) ; Obtain the blocks used field + ; ADD HL,HL ; Mult x 4 to get 128 byte records + ; ADD HL,HL ; ... + ; CALL RECS2EXRC ; Puts extent in B, recs in A + ; LD DE,(DMAADDR) ; Pointer to start of FCB + ; PUSH DE ; Copy into IX + ; POP IX ; ... + ; LD (IX+0CH),B ; Store num extents in EX field of FCB + ; LD (IX+0FH),A ; Store num recs in RC field of FCB RET N2FERR LD DE,(DMAADDR) ; Pointer to start of FCB PUSH DE ; Copy into IX @@ -1890,7 +1894,7 @@ N2H2 OR 0F0H ; ; - FILENAME.COM - Load and run FILENAME.COM at 0100H ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; TODO: BUG-- F_OPEN is trashing FILEBUF with it's damn DIRENT! +; TODO: Implement support for ^C in C_READ ; TODO: Implement the built-in commands using a table ; TODO: Built-in commands argument handling ; TODO: Parse * wildcard and generate FCB with ?s @@ -1949,6 +1953,7 @@ CCPS1 CP 3 ; Check if three chars ; Attempt to load .COM file from disk CCPS2 CALL PARSE ; Parse the command line + ; TODO Put in check for built-in commands here LD DE,PATHBUF2 ; Point to the FCB in PATHBUF2 CALL RUNCOM ; Try to run .COM file @@ -1982,16 +1987,13 @@ UCS1 LD (HL),A ; Put converted char back ; 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 ; ... +PARSE CALL RSTPATHBUF ; Set IY and E for writing PATHBUF LD HL,FILEBUF+1 ; Skip first byte - buffer capacity PUSH HL ; HL->IX. Use IX as dest pointer into FILEBUF POP IX ; ... - LD C,(HL) ; Get the length of source string - LD B,0 ; B is the state of the parser LD D,0 ; D is the count of chars for FILEBUF - LD E,0 ; E is the count of chars for PATHBUF + LD B,0 ; B is the state of the parser + LD C,(HL) ; Get the length of source string CTL1 LD A,C ; See if any chars are left in input CP 0 ; ... JP Z,CTS2 ; If 0, go update the length byte @@ -2010,6 +2012,18 @@ CTS2 LD A,' ' ; Fake an additional space on the end ... LD (HL),D ; Write string length RET +; Helper function to reset the PATHBUF buffer pointer & character count +; PATHBUF is used to store the filename for creating an FCB +; Sets IY to point to first character to be written to PATHBUF +; Resets count of chars written E +RSTPATHBUF PUSH HL ; Preserve HL + LD HL,PATHBUF+1 ; Use HL to initialize IY + PUSH HL ; HL->IY. Use IY as dest ptr into PATHBUF + POP IY ; ... + POP HL ; Restore original HL + LD E,0 ; Reset count of chars in PATHBUF + RET + ; Examines Pascal string pointed to by HL to see if it begins with a drive ; letter and a colon. If so, reduces string length by 2 and advances HL two ; positions, sets B to the drive number. If no drive is specified, sets B @@ -2041,16 +2055,16 @@ DLS1 DEC HL ; Put HL back to the beginning ; Handle a space character in the command line ; Character is passed in A ; State 0: Do not emit space to FILEBUF -; State 1: Do not emit space to FILEBUF +; State 1: Do space to FILEBUF ; Set length byte for PATHBUF & create FCB in PATHBUF2 ; -> State 2 ; State 2: Do not emit space to FILEBUF ; State 3: Emit space to FILEBUF -; Set length byte for PATHBUF & create FCB in FCB1 TODO +; Set length byte for PATHBUF & create FCB in FCB1 ; -> State 4 ; State 4: Do not emit space to FILEBUF ; State 5: Emit space to FILEBUF -; Set length byte for PATHBUF & create FCB in FCB1 TODO +; Set length byte for PATHBUF & create FCB in FCB2 ; -> State 6 ; State 6: Emit space to FILEBUF CMDSPC EX AF,AF' ; Save character for later @@ -2060,11 +2074,14 @@ CMDSPC EX AF,AF' ; Save character for later RET ; CSS1 CP 1 ; State 1 - eat the space JP NZ,CSS2 ; + EX AF,AF' ; Get character back + CALL EMTFILBUF ; Emit char to FILEBUF LD A,E ; Write length byte to PATHBUF LD (PATHBUF),A ; ... - LD E,0 ; Reset length for next time - ; TODO RESET IY - PUSH HL ; Preserve HL + CALL RSTPATHBUF ; Reset IY & E for next use + PUSH HL ; Preserve HL, BC, DE + PUSH BC ; ... + PUSH DE ; ... LD HL,PATHBUF2 ; DMAADDR to PATHBUF2 - will put FCB there LD (DMAADDR),HL ; ... LD HL,PATHBUF ; NAME2FCB will use filename at PATHBUF @@ -2076,8 +2093,10 @@ CSS1 CP 1 ; State 1 - eat the space LD (PATHBUF2+10),A ; ... LD A,'M' ; ... LD (PATHBUF2+11),A ; ... + POP DE ; Restore DE, BC, HL + POP BC ; ... + POP HL ; ... INC B ; Transition to state 2 - POP HL ; Restore HL RET ; CSS2 CP 2 ; State 2 - eat the space JP NZ,CSS3 ; @@ -2086,6 +2105,20 @@ CSS3 CP 3 ; State 3 JP NZ,CSS4 ; EX AF,AF' ; Get character back CALL EMTFILBUF ; Emit char to FILEBUF + LD A,E ; Write length byte to PATHBUF + LD (PATHBUF),A ; ... + CALL RSTPATHBUF ; Reset IY & E for next use + PUSH HL ; Preserve HL, BC, DE + PUSH BC ; ... + PUSH DE ; ... + LD HL,FCB1 ; DMAADDR to FCB1 - will put FCB there + LD (DMAADDR),HL ; ... + LD HL,PATHBUF ; NAME2FCB will use filename at PATHBUF + CALL DRVLETTER ; Handle any x: drive letter prefix + CALL NAME2FCB ; Create FCB at FCB1 + POP DE ; Restore DE, BC, HL + POP BC ; ... + POP HL ; ... INC B ; Transition to state 4 RET ; CSS4 CP 4 ; State 4 - eat the space @@ -2095,8 +2128,22 @@ CSS5 CP 5 ; State 5 JP NZ,CSS6 ; EX AF,AF' ; Get character back CALL EMTFILBUF ; Emit char to FILEBUF + LD A,E ; Write length byte to PATHBUF + LD (PATHBUF),A ; ... + CALL RSTPATHBUF ; Reset IY & E for next use + PUSH HL ; Preserve HL, BC, DE + PUSH BC ; ... + PUSH DE ; ... + LD HL,FCB2 ; DMAADDR to FCB2 - will put FCB there + LD (DMAADDR),HL ; ... + LD HL,PATHBUF ; NAME2FCB will use filename at PATHBUF + CALL DRVLETTER ; Handle any x: drive letter prefix + CALL NAME2FCB ; Create FCB at FCB2 + POP DE ; Restore DE, BC, HL + POP BC ; ... + POP HL ; ... INC B ; Transition to state 6 - RET + RET ; CSS6 CP 6 ; State 6 JP NZ,CSS7 ; EX AF,AF' ; Get character back diff --git a/SOFTCARD80.BIN#041000 b/SOFTCARD80.BIN#041000 index a43eda5ba3ffa91b735b650b5f710d554183bbe6..4ce2d849ceb696f5ff93555afa58efeea67ec353 100644 GIT binary patch delta 1655 zcmZuxZA@EL7(TarBLgaI5ndgX3FBSm>6SkeNQh$M)u?0_dV}< z&Uwyr-sj%I8N=X=;fn&!kirv%T&W?yDnxH%N2=RcO&-rM=cI?ms)^Q&=uo~jB-lbi zWk}dEQE~2dj%y^|;mX!P3~Q+vCkdMohl=y8Cc+mGdfBTXg_FcGl5`ac z#|eLg)oM-<8pcUiQ6%ZIh?^15hq6&?9-snJX?X+TpI%wHQxY49zVl9r=gD@->^?<| zrwGlG*!$8j{m=&ty%KK^adwnv?ZgqG3oo}+m)5O~4(oWjO9DaDQk+j~-HOH3mX@y%z2YdC&V9S4{T#o+DR%Wzciz zuhoR;_Yz3B=Y!t!pRO<1&#y>L(t5PVpygb>8y76=!}W!!3>$CbO!EV)&B1w$9rUV0Dr(!cN- zh@?W^<~}WpXAx|j!kR&8ki|iyi7XDF`CTtlJRF6I4CN>*XuDYiz+M)Ikk$r~b_D=J z-;s@pApOk``3rAp=!R`WpVo70K-QcK1M{E-%aOaLD;ZD%eD*PUFv)#o!FB8i@QBlm z3%2C?!A&OC>VN&fUKe0Lx@SqsUvAtVpxcI37{jFl#Mn-10-eQE0pm$T-SAmlrBi|E zMe=^YnI9f!m^6?jY50wj zF=s}40#Gr_m@^aV{rcSW_6LUFImVnEqoB B0FD3v delta 1657 zcmZuxZ)_7~7=N!@yLNW#DqBrxt-W>$t_YeF7Q8_DGn~;e8bm+gpQ^!s7)MM<1;;w1 zMtAM)z24iJK(a5}5)#9#I!)jM|E?_IT3#5Kp)o13BwPG41D_1W-hAF(C%X9I-sjKz zd!FZ>=lR_opS2vHwS42`EMaB3mFuuHH|J=J5?LB>JIT5RZ&S^5H%~_!3dv?$PH4&r z_MG6D_I+`X<2s2v(iu%=>5M#At>h`e#!``!1V7?XnJZ_*3 z3!4bPj@*^JRvY1~DrrlJj{vIu|4?tFyp0`%caq^$cavG@YjQ5-_0;q-Ka+j)0M~{b zFTDzL=1b)FRDeqoSNdu05a~%j#qvV+5Bc)jL3$5As4k_wiCT3w$X&%!+UO~6O2Mdp zOxMx(vH8+@=!S#G@t>~xiLjlp-rDOsTUjH#n=JNqlT(X3ZhGX!o*jgLhAj;mXBGR4 zugIiRe%S0ylvh9g?{ch^#Vp6V`l-&7lpJ1A$)FtI?vOEgiVKjw(H9bn`#flQ2g}Iw zqk!z{qW59b9>f-L&{>YV^tu&6<+zg_E@lbqOZm!_0wKI$U3_MARIK zdQ86H$C0H9VDwdxG}MY#8(WJTaqk&z8(tN1Mjkq=g>jxS&4z{+T)@2;o}Z(eM{iU> zgz$|DxZZ*sdR_+-0u^ZwwsUK0qy@)j;H@1Xql}_Pi*~?-K86r_PPFCD6sNJ+1mY|f z?I12-(E(zHe2$}DPU+lvbRnVBI~Z7?4^p2pNCV1IkmMd-pE#k2#}MQWD~3gTUlETZ zLuB$(bZh(T6ps|(qCu0H!`R6r0G?+uiHsLP(moX+^jpO}lciTPpzl6xpev!4A>+u+ zDaDBWGNs%K#0w`C{e`fjFhS)onrj08aP z!{{SD6dHn8suHR^ns8-wgVQ!=J`s{xKbnVc0H)5q!rv4aXQW5CmW@P(>)A-ZFq>_x z=+M&+2x-vzGj@7D)2JJb+Fo#2wbzy%Htn67s@p#X1{?x?hT%9ZQBzq8xu!vU0xlY~ z6U!zfJGHFCjaB=8+0qT0b`Fg58ND1w?E9q7DC&pCw2Z$zs#TV(AS{PL$ zEkYVaIt3ZIk0BNjKo>6lFdl14P8NVT96ShIm#&P*xa1^g+RgEpB{@06^vk!$W6jA) zhN%IWQiEUlV?5SSy8u+NaU#|T{$Yf+vRtKA|JcmD8k~r6OrdM*%C!v>F-twu?6wE` Pja}34k(2G2ZN9$&mj~tS diff --git a/zapple2.po b/zapple2.po index f6412c9626e30b4d185fa35e12b37dc652b0b2e1..ed800d4412a854f26cde3896d397b263566095dd 100644 GIT binary patch delta 16092 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 Q&`hbUtoz2lvEtPK0U=WD+5i9m delta 42686 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%0DXt3rhWMcos+2yzd|mI=!SLH&@J4L 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 Xi~ileaNhk3FL`vK=cA9#^UVK$@vzE7