From 03c6e8de0250c69abe97a9d9aeedec57eef88b33 Mon Sep 17 00:00:00 2001 From: Bobbi Webber-Manners Date: Thu, 31 Oct 2019 21:38:50 -0400 Subject: [PATCH] Modified EOF handling in F_READ, F_READRAND --- SOFTCARD80.ASM#040000 | 29 +++++++++++++---------------- SOFTCARD80.BIN#041000 | Bin 43011 -> 43011 bytes zapple2.po | Bin 819200 -> 819200 bytes 3 files changed, 13 insertions(+), 16 deletions(-) diff --git a/SOFTCARD80.ASM#040000 b/SOFTCARD80.ASM#040000 index 2ee39e1..4ef2e8c 100644 --- a/SOFTCARD80.ASM#040000 +++ b/SOFTCARD80.ASM#040000 @@ -19,11 +19,13 @@ ; ; BDOS TODOs ; ---------- +; TODO: F_READ API handles EOF incorrectly it seems. Researching this. ; TODO: Need to implement the BIOS entry points and jump table (see MG's Ruby) ; TODO: Needs proper boot / warm boot entry points ; TODO: NAME2FCB needs to generate size information in some cases but not ; others. Right now this functionality is just commented out. ; TODO: Get STAT.COM to work. Think it is picky about arg handling. +; TODO: Debug various failures in PIP. ; 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. @@ -1083,7 +1085,7 @@ F_READ PUSH DE ; Copy pointer to FCB ... LD HL,SMMLI ; Pass address of 6502 JSR instruction CALL PRODOS ; Invoke ProDOS MLI - SET_MARK CP 4DH ; See if position was out of range - JP Z,FRBFCB ; If so, return invalid FCB code (9) + JP Z,FREOF ; If so, return EOF (1) CP 43H ; See if it was a bad file ref number JP Z,FRBFCB ; If so, return invalid FCB code (9) CP 0 ; See if there was some other error @@ -1111,11 +1113,7 @@ F_READ PUSH DE ; Copy pointer to FCB ... LD (IX+20H),A ; ... INC (IX+0CH) ; Increment the extent -FRS1 LD A,(FRMLITC) ; Get number of bytes read (LSB) - CP 128 ; See if it was 128 as expected - JP NZ,FREOF ; If not, return EOF - - XOR A ; Zero for success +FRS1 XOR A ; Zero for success LD L,A ; Return code in L also RET ; Done FREOF LD A,1 ; EOF return code @@ -1336,7 +1334,7 @@ F_READRAND PUSH DE ; Copy pointer to FCB ... LD HL,SMMLI ; Pass address of 6502 JSR instruction CALL PRODOS ; Invoke ProDOS MLI - SET_MARK CP 4DH ; See if position was out of range - JP Z,FRRBFCB ; If so, return invalid FCB code (9) + JP Z,FRRRUD ; If so, return reading unwritten data (1) CP 43H ; See if it was a bad file ref number JP Z,FRRBFCB ; If so, return invalid FCB code (9) CP 0 ; See if there was some other error @@ -1349,7 +1347,7 @@ F_READRAND PUSH DE ; Copy pointer to FCB ... LD HL,FRMLI ; Pass address of 6502 JSR instruction CALL PRODOS ; Invoke ProDOS MLI - READ CP 4CH ; See if it was EOF - JP Z,FRREOF ; If so, return EOF code (1) + JP Z,FRRRUD ; If so, return EOF code (1) CP 43H ; See if it was a bad file ref number JP Z,FRBFCB ; If so, return invalid FCB code (9) CP 0 ; See if there was some other error @@ -1361,14 +1359,10 @@ F_READRAND PUSH DE ; Copy pointer to FCB ... LD A,(IX+20H),A ; Update sequential record number LD B,(IX+0CH),B ; Update sequential extent number - LD A,(FRMLITC) ; Get number of bytes read (LSB) - CP 128 ; See if it was 128 as expected - JP NZ,FRREOF ; If not, return EOF - XOR A ; Zero for success LD L,A ; Return code in L also RET ; Done -FRREOF LD A,1 ; EOF return code +FRRRUD LD A,1 ; Reading unwritten data return code LD L,A ; Return code in L also RET ; Done (EOF) FRRBFCB LD A,9 ; Invalid FCB return code @@ -2120,9 +2114,13 @@ CTS1 CALL CMDSPC ; Handle space JP CTL1 ; Loop CTS2 LD A,' ' ; Fake an additional space on the end ... CALL CMDSPC ; ... so parser can get itself in correct state - LD HL,FILEBUF ; First byte is length of string + LD A,D ; Get string length of command tail + CP 1 ; If length is 1, is just a space + JP NZ,CTS3 ; If not length 1, store length, otherwise ... + LD D,0 ; ... Set length to zero +CTS3 LD HL,FILEBUF ; First byte is length of string LD (HL),D ; Write string length - RET + RET ; ; Helper function to reset the PATHBUF buffer pointer & character count ; PATHBUF is used to store the filename for creating an FCB @@ -2518,7 +2516,6 @@ PRDS2 LD E,'.' ; ; Erase file(s) ; Pattern for erase is in FCB1 ; TODO: Should prompt Y/N if wildcards used -; TODO: Not working with wildcards for some reason!! ERASE LD HL,FILEBUF ; Reset DMAADDR to 0080H LD (DMAADDR),HL ; ... diff --git a/SOFTCARD80.BIN#041000 b/SOFTCARD80.BIN#041000 index f968bf63e7aa51f988e95195cd24a8c6ff6e26e9..549473f59014edc612bd9ac57bbd05305f568d9b 100644 GIT binary patch delta 2519 zcmZ`*Z*UXG72mUEAsJalws8}=b#xL5#SS#R0b*365@>WB7oN|XZwVaBknJO7g$Idj=)AUO_{iCCA z?X&>lz!!$dDAd^`y^(*VlKfu%^Do ziGljJPTn2DYzHQr1kO3etr+86W1M@89Y(=+#3B^D0|os^o5Ve%k+oWCBj3-*`ICH- z7kPz$lRrB;#ZU8p<`1NArdx!2gtMb(M-NQ=X!JqGu?BqNk599SksR4A6f5OCL6UjP z7))}Vh(W8|!GC7iPqGl$MCxEN{O@cf=H>b@`*pgQt^rJXq)MzgUx@|6orrB1bD{w^ zuwwZqb;v}2{0QSk?zoAJT#~Eh0Itp?!y#;kI+Fx5%qRVcz1X)GlS4`RbtcJH5r{XE zZ1Wh?joiVCnCEVZi-Vs>WDYdOZG;F4`$cX5}AF*>nU@G@kR=gxsvK?x2x*JY{l~U(5LFvpr=kY2Fw%c&r|tQ z3}g?!l4?&tfVTf1;EOy2fDcmd<7)v{W7cEEw=}zrdu{b?|9A6M|8%3=@T;>otX7ZL zs`>8W36orJ?WJ9{A-+l}vC}!&-c`uG?_0D&*Q*vo_ym7P?+DhN!(j(nXzn%Lb3fs) zuiC2qm=F8WCC-m@uS=moo)32b(1G+W0NEd4{TZnH2e`AAbIS+YTBQM zlpjt*%KOu`l$X@hQd=e8pDx)x4omh1S@rD0+yj_yTU+%cS4p=6b@k)LZ*0adFK(ZE zF}=8BJ7%}gYTn+{4{3b(AoZi$@t2ewG`o#I+UjNTX}vp^6r7gsch%B)g{}qc60JD%cU`Vt3VA}tA9?Hwi@?}cS27? z55g@)9;OYD5}~(Qc{$Mh{Bp)pAg`sx$gMI^^j2%3$Zvkt7#DY5RxgUJAx~uGq-Y0QADe;sVOQ=sjXK zsqfiTgwU?AbL_GakisiqxJL@RV7ONbyJ6t)m!tvz6VjTmJ-d+5$$$jMR6kBq(s3e6 z&yo~=LAtAYhkNj^r0(EmIeY>^lu5~~Q~x1_Pa!i*$CK#B1Bb|;PQ(4ZQr?j0m&szr zqLKZIHYxQ(^{<7R;^xrY9@&h(zem0ih-vrBBq_5e(0r-fj+}^+j33IB7BIdilYJTO zpiF)y!#5IuamZxUQ!+dj!|40^Jo{X3zEUoCB0Us}!y;ahyW=;u?SfBTC=rV3-Q9NQ z?$Y4^A@!HC4(6Z8E^;CB3Wp0ZL&iRWpp#qpzc}D{?7kkJJm-ln!UttgZ$GBL}b(>mPlhC zvm{tF;PvWrwVCNqaZLtIgZff!rkhT+;Z>Mjz!RA-CqByT^j}s#&V*WYMiF>=MIU2*JkjQ_AP=|E>ZVzN*kia#A5%Puu?j5X5vgk>aR5(|uD^r31+Zd^7lp zvL#_EzJrK9ZRjd7740v|JgB|sv3am8LmRm#jk~fD&!p&m^rNGvgLxV2hf$PzZj3M7&)&&Z!+*h08L#Rk1`|YK~m?&qje+ar>Xqb z2jkJkk@J*e5z!$kQvS8Sk4Nh*4NMHjxu^s1VOw{-^)u6%;JGM6ZAf=jcxU6eXdQ4V TIJ@mrx$w}$qxiKpWt;0irKgI< delta 2515 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 delta 2606 zcmZ`*e{37o9e+-Ij-AAgorJ)gHu&sR5eZcE2B=u6S19xcECjXCt)xpV{;0GLfi|?c z9n^N)DYY->JKJY-s#2sWt$+rT6apKHu;6eSf_7{XQp?Tr$bczH4vub|Lgf;V#tXh~<(?L%x5ZrhI_E}PnD>sX8_IF-!8=gUk2I`oFF8knakWm0F2-MdOA(mg4%54S8L`CYk**54H`Yj-|qO zc_rrIo|f4W>d)YJWU^gciFK4#Vu5fUV%ngaPYG~uz8RxZXmso;u>MV zR!S;7BwMDG6sRe@!1xn;WZxc{Or+@SNRg2YNG_z<+l#g#AXL-}>KHjpkucx4)2rCO`TJ=`XlbIa9upt`l492J8Rxx{Uj+52gZj1gT+8(Zjv z)Ze5Bd#tp2WR@}6-`3AJ*lU4LH@Poh99G{+m#Q(K+ryo*kyOv8l_w;oXBSvn^ZzZ~ z%Y!ADkh+m?SXwKy-KHgzvt7T>V&61$j}j1>Z&(+A{dGOcojkFn%oDUyb%d|ysmhW9 z9I6+&p86h5%SUyEBYgeD2k$^QY)4BSczIV3!mJ=;N74j_4cFCo_)FeR>T7)1k7hYP z!X9Ui0(1Or;a)&`5gr7TJtX6o-~g5sA~JVHt?WL}R`&(T^Z%9IXQv=$n2@?}suA-o z*&U~BGx__bs@5Jq5v`-LGCMwHW;XG(%&p*c{l(Ps zmd9lFA)42l$NV|91QSxfxar6($p_AM{T~*4l_NBDy)KxVtg4}j{iL4QK4I{0iXkzq zZ9)lTnfq<~mEBpUFHsiaMnFFyI1d`F`n2Gz#!!2x8q$smPGG372_fx-5Lr**YRG}8 za9J?=)pJ5*qw|2#tY5Ko>{MwMwpocG{23(BgGxUP4I5syD!?k_37E?^^{>Kb@uiN@ z<*^=gpwsan3UwWXA`E8^7;P}ejrICnnNDM)+7F2HdVeO;-)VPiwhUG1s{b5LZJly= z4zAlC8A=lx7}-hd;&=v1o>f)@x4*Jl;#Q!fO=luEY9NBUOiz*D_?CV;v-OO6F4Gli zkF=dtU(c8g0^(ol0B@_A#R^#v%C#~0{ybBz0rn|uf=d`02(%G$A>*_Sn9T-&Vdytb z5NV_B#c->CvP2O=+rpmW8U0?s;q!nP_QGda4Ex~ouySXf8TH4-{znciB`}!~;nL!l z$#L;z@~U`<99L3#=FWPD?^fQ*Geg0xQur_eLs&GLRF@P!ii|M*9zhEaO^`nygYN!S zo>`w5m&m`erW_g1X;^#$j^O=}J8t~+>NAoNz5a}}5Qu5pB$Acb!)UQu>p>1gh4e{@ ziUstfMD}L2=Ops31al++UwBD=gcsRNVR5Ba>q9scii7o8X(+z1c^gbkp->DD4M7bn zvoh0~P$g{G)Gs9`Ih}opgYKD?7UwI_7wCHg%V`Nx9NEGx6e6SC$A!oU_uE4GV$F^r zHUo5<)pglbx_iyHtf6ZO+tr~gHW+p1D&YkC-2aevsAHxahP#c_?*n}{3l?qaizZ2J zA2um)8t`T{(^wgHb-FLM^4b@_KmIHCaub<9OK(SUP%izdCcnMGBYh{cB==_CqGtm~|lm_K!gMk3Lcx5JP z6HWo8UY|)sn}kz@F5X+3iM9%-sE{d12~+<48#B>nlL1nC`^l&s@TA4N)cdvN<-wCt z8?`~cStmXiJ{fHSSqfg+{vW#hlts_&QkXZok2Sx^z;M85f#HPVg3&tH{ASzANB;(+ C)|tTo