From 6b0c3fa32719460b3bdcb194240c2f319689ec3c Mon Sep 17 00:00:00 2001 From: Bobbi Webber-Manners Date: Wed, 13 Oct 2021 12:44:43 -0400 Subject: [PATCH] Merge PR #120 'Updated BGET, BPUT, ARGS, EOF' --- applecorn.po | Bin 819200 -> 819200 bytes auxmem.hostfs.s | 143 ++++++++++++++++++++++++------------------------ mainmem.svc.s | 132 +++++++++++++++++++++++++------------------- 3 files changed, 148 insertions(+), 127 deletions(-) diff --git a/applecorn.po b/applecorn.po index a0bef70d618f0aa5d28a99f6d2906262ff2f5858..528a97a439f305accc711f659d65fc7600362b8e 100644 GIT binary patch delta 6771 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 delta 6712 zcmaJl3s_TEnm6|XIYbbAfKf|5SgS;Q;G>#pRfrG>5P1c-)OKd$)UJ`*Y3n?`)^^L) z8pOwC;tZWrJK)Al?Rsf18#|xvI^QDcLrbW&QD>&RIwDqqAR%0=gDss-_CE>OIFHSJ zoOAy3|L6Sg|J(?|azR+`Zj4F({UgkV%#2BlaGlAaomURW>^U5xf`^5NgNKe|;faGs z{odgi^m1k<;-wrho|l?jj26F@Be}#0h%^qlU|%EE*w;!INI@1_#BMDkZ=co7B_s>Y znfX?YV}*-p&o?M>c<5Wd@MjtE_BC=mPd6<*-*ln;Y> z2BAZS=`tR_L)I)qFCxUZqxHZEDf?8TfA7vRv`CdUzj26jDUCtydHtfAka_xtXxm@8 zw*4NsT_2L16=>!(o^M;n`mmhUAy)F3={RlS$+i{fH!1DqcwaGoq-Gp_HeITl7%pn2 z)!~Ub6W*NXh#kXbv&nW3UeuNnBVu0S#B{p)`*V2f>uozdaM#>j#mg#lr9^QSFC~dH z_+~BNJd>9`6jOQpLX8_mxRBVW^(Pql9$jLs1&bEidBK9qEwI}IbhmlDWDp;uz4>(C z59adY^ed?x*TQlb$7!DoldrDC_tl8!?*Zy@cBT7g7*{#sw8XMWCJH&Faj>H zy#k;l=+n%oJ5#M_+CQ#7w4U>K3L^&$9L(U0M)z9$n@aaG`GQe2aKdkKTh%xlhr?_{ zsR^c}eBl~xz7;Ofh7m5BptT8S83x39iWetSdA9Ll5|204xQjqS0EU%Y2ha%xOKP!} z>hEbPxTltPX&P&JcbdfD>wM$se0+;{CyUAafhlypGm&?*0;{*mQ+ZL(x1G*!IadP< zhqp@NBSdGyM4Rs+s-^@czU>Spz;#SV*J|Do=QS%@!62{Y#bRDw$BSmV$0r56d$I5* zEs_|MY>N174Gt(3f4fj zVx*A3O3e7aKc*sHCD$%$W+hk9RX;7C2%r=)XC>0kr(15~WtJ0v z$jcljKEcZ|oVc0dp0nPITX7fH%P5GlXyt{t2#akh&b{_|dA|p4G2SEpkbjktpWt6r z$(#9C*`IJC^2j^sJt1%k*MFUDNKf{Y2PJR}0=pQuG>vD^F7$tVr ztS;e>Jy%b&Zf=qAb1B~>Op(5C5;#d^nn=Mlku3F3li*!friqHC4qx0+gUM_w1`h7Y zj?H_DC)~F#+J9va2M#R1&qaH%nF?8;m(OxTot)TEEPu)kc{y=!vE0eo*Vxy|Ue3PO zp4|r*WfVM!p&rD72es`f2H_I>*1`qTUBZa)n7p^x%evFOj882$6#ME};c-|Rmid$e zjWrYlEua9g#MswM4tuT^bP`z@9MYXG#0K{i3%m7zI+V*(e)bj*qKbD{!`31>pYN30glLox)zIXJV~9I>7F5jCF(YC6p|f50`L z;hI0>nm^{`r+KpUbB$L0Q{Gf7|AZ$cpKG#Kfc92VE+TPb<-z;JP7d5p^m5>TVi(u^ z33r!GN!9ioPmX`C!F4ZvSH*OSIC+ED>Ep~v8^F(%G-}~-uY{n=7idWu_emiUe_SJt z(xC-%61Cn#bb0EcHR0r$Cd|ffOhivtI0&P}pI~M3L@>A`VHz&VGGzm@uZsZ=XyKxM z#`qE zI&cOZ7w>6nEm7EbRhvW`w(S@+y0x@w+G=Rgo+Wg)?XL?Tm0GBpuSXezuFDA5B#Uqb zTrx^SZWLxVPM8GSPm64yK#S5Gx@5X=dpy71`P&sEl|Eel8R1eS<;k9Jh;tp98J9<~ zmGGHmvfNNE#x~*PCY;(N?;$M(E*__;Tm&FEB znvEWeX(+`r$>D4?SJgm%4FG7~ABWGS@R{kDX_7GAXcFYDMu@t68G!h}$SKPD{(lvxKz8z~+|N(Q7E z5u{{_bP{(|;3F3Nd4<+0<>;+#qZVaqSNo{NyHrtk^{9Ne1+H<_V%65duSZpT_t-0E zv$~|#S+m4Zi?md{V`=%y0$vv1p3S!0v2+PvTH9c^6eoL@AqDHvwCYidiwOWo)2`wU z-LZtveXy=mbryiE`~H&*heH*PX&#jle=@|v_N)*mmEcL1&Q9U7)%&nJ&YR_cqnFld zI-s+>&2XJ(br#}YkFtJr0urpno{JY+tkMbiez3sz15LWz-@pt}Fb41--%HUj!#FIO zcJ%Mo`(=6doL?rho9n3ag40@?U6l^*oU5|=NTrKuJYl&shDYgyq=-AJVCG2WCD~pL z4tJzdxdF#xcarR?ROrwbi`P~O39b`P3x2W6F&RHrMUgtj;B2n7M)FVJnBK}TZ6~OD zliN>#VSI62u!~T~bqN7VhJY-JAOKeUd+fhM)?1xngUkejP-7peuLh$G9k5qR4DD;J z6J5O(OlPlFrnc8tdlxE+-UpO;Z?;kw>lX&JR=xG@6W{`e-nDc_&@_Msqp*cfSnipf zIQM@y%P>?*MTvt-8ZAig47Jyj0VBG9Qhl{D zw$JpM32&$-k6hKfLq5t!%h*v1!9AM!B&`6goWYKWF&C<|K1ajP)F1Z;@wv zG+Na;va^Q6=`S>C z@9io?St?cv5~oc)opctV*I7PD%C@R!sQC9@Dn`3hs%PE{nUR%M@x)q+^xFO9M=y#8 zAUS$6Y;8kaeM?)At3T}eIk{Gf9!!XW3{c4OwEgAnubz(()I`nZ(oA1Yc3RMERTg=+ z9HkJUMV&;REkl_pdui^49ij=I{0?b`EqU_uU?^RkNNa?r#!5%x9x_;lHmUZJ4dsyT z&r|#~7+otzD^+jZGs>l`rI5@Dgthy^E9k!RzNVx{@pmV(T}~OAq)Mac^T@FZbec`L zL7uUoxnyylCY3Z>(EO>7-`L?{e5%)Wj9H~0J1?6-wa@oy(p5dA#R62P`ZQ^()^Pt< z{hF*9^R9S9zA*dE@L>VWo0UJAr(7Wg{hAEb5cz8*N+tFEng_|Zm1qX}pkFgH0-dLN zg*;G&GVZrY3~Y62qp8u>UGF%swR`u$cO0!w)p5r$4BTz2Ld&O(U5OGUTvUswsxdiV zh3qqJ-FAn(wcCEs$)03K4mvtLQ+=bh9r$tbOf_1&F869~o+tNeUSS1&R}@woh2HM` z3Zqf*cN=nZjTVbA*j-szX*LQY-FZe!WkumLcjXQ!it9kcToHF2g35F&8ih?x*jY0OnFblxrw>rJ)?ynp09Y28U&+Yz9 z3W>K_SJ27gDm z_IIMNY~=jw>iJn0gEsv54Oq8LrFy;QO?vcs^DxlLaUAvo}d2WZ9smWWmKADH8`n&KdZ#9(=h6(o&O7@%ns|q&xuQ4|>e~ z^i8^dtzMLRJ=oCYyJMBG8Kx3$!1q}OUVVe$X7$FTFh^0qz0K;!&;*bKn$9%9iIxeu_JGDBN2$ndEI;}Snu84W&Z@rA=k1n z#^%mA@BFU$pSU`m2qz4?9u8v>+hO(nDM@src_2`f%0pq6iTkj6r8Xi=7%Mv9-Xf|@ zh)F=vkk5je2gZd?86aap&3qQxAN{*}x%L+~S{M~1G@Gdiet6FfFRPVRf4@1eee zzDN5u_x%js4SlXYx$k7(ds$BPQ5Et004=Fg`zxwScB}oyn!Rd&VM%`JK7bfY3>%CG z)P8fRAul8iSPa$1(0>f%8O_E@WBu%#8;T)(8fM?jjWqc+!YY4hS>^sm{N+`Jl|uc1 z$!IPM%^p~9uoUJBSvQM~kHXuSYbq6%-3)CgwFm_Rrcz5~zC~aS14NjQrq{jO-|17p z>PwU<_}%{GZ{QWVlmEwhq%TVe13P`1Fv=CL!TrDZP(S!L#MF^K6U^EN;WcJDI%wKw z(!k$KngN@2w9m(m_8;l9hJ(Fk5} z^=Yhtql`(cFJ6klU-*<^i8IkPb#=HPKyntKOv5%m{E3?~U>}AvonjxsieH(IxB2Y~ z?P+Ll1i16L-xzsQIXaAQhn_u3*~LwMw*=fa`N`W0&_Z34-!WNt)oXC{dJEh!1FJgW zEaCFImqTrXf16Zn3(K}}EPzO80h-I|{G|I!&Elmg1NfHDwa(cO?8PX1IdIM@ad3ylyb1@=3ji;!1TZ@xU_IB8vNVq^7);? z?_mEHd^xx+XbkKQW)Ce6EDx+M4y+EeT-(Q|{zKK$FLbx1H7Fo|b zV82c;LoeR3!hEuGd7XnBerfn1)(Mi%zO zF+p-U6IH7mB>hR0m-=p?^|h=xC*xq9v#mWU7voOB&kT_Ri%>dbdzzFu%mvArMd(Lt zYmls3jP|oIe&uUTS;F<;zHlDWC1Hh3-hwu&?vSlpP#!dGTi}=l68`6y29w)c&`;`W zoC@_ky#me$x4BA5JbmH9XBU3wWbzcFvKp?A{=S=^+v_w}H;J7`WAhW@Heiuu2X%^#gNe=uy;M2G`f3`r7#VT1|cJq&I65QvVN|?!+?y diff --git a/auxmem.hostfs.s b/auxmem.hostfs.s index b165d3f..9a19246 100644 --- a/auxmem.hostfs.s +++ b/auxmem.hostfs.s @@ -9,31 +9,24 @@ * Command line set by *RUN, and read by OSARGS * 20-Sep-2021 *FREE uses new PRDECIMAL routine * 12-Oct-2021 OSFIND checks return value from calling maincode. +* 12-Oct-2021 BGET and BPUT check for returned error. +* 13-Oct-2021 FIND, BGET, BPUT optimised passing registers to main. +* 13-Oct-2021 ARGS, EOF returns errors, optimised passing registers. * $B0-$BF Temporary filing system workspace -FSXREG EQU $B0 -FSYREG EQU $B1 -FSAREG EQU $B2 -FSCTRL EQU FSXREG -FSPTR1 EQU $B4 -FSPTR2 EQU $B6 * $C0-$CF Persistant filing system workspace -FSNUM EQU $C8 ; *TEMP* +FSXREG EQU $C0 +FSYREG EQU $C1 +FSAREG EQU $C2 +FSZPC3 EQU $C3 +FSCTRL EQU FSXREG +FSPTR1 EQU $C4 +FSPTR2 EQU $C6 +FSNUM EQU $C8 +FSZPCC EQU $CC FSCMDLINE EQU $CE -; B0-B3 addr -; B4-B7 sect -; B8-BB -; BC-BF -; C0-C3 num -; C4-C5 cblk -; C6-C7 -; C8-CB -; CC-CD -; CE-CF cmd - - * OSFIND - open/close a file for byte access FINDHND PHX @@ -45,16 +38,16 @@ FINDHND PHX JSR PARSNAME ; Copy filename->MOSFILE PLA ; Recover options >>> XF2MAIN,OFILE -:CLOSE >>> WRTMAIN - STY MOSFILE ; Write file number - >>> WRTAUX - >>> XF2MAIN,CFILE -OSFINDRET - >>> ENTAUX +:CLOSE +* >>> WRTMAIN +* STY MOSFILE ; Write file number +* >>> WRTAUX + >>> XF2MAIN,CFILE ; Pass A,Y to main code + +OSFINDRET >>> ENTAUX JSR CHKERROR ; Check if error returned PLY ; Value of A on entry - CPY #$00 ; Was it close? - BNE :S1 + BNE :S1 ; It wasn't close TYA ; Preserve A for close :S1 PLY PLX @@ -71,12 +64,12 @@ OSGBPBM ASC 'OSGBPB.' BPUTHND PHX PHY PHA ; Stash char to write - >>> WRTMAIN - STY MOSFILE ; File reference number - >>> WRTAUX - >>> XF2MAIN,FILEPUT -OSBPUTRET - >>> ENTAUX +* >>> WRTMAIN +* STY MOSFILE ; File reference number +* >>> WRTAUX + >>> XF2MAIN,FILEPUT ; Pass A,Y to main code +OSBPUTRET >>> ENTAUX + JSR CHKERROR CLC ; Means no error PLA PLY @@ -86,18 +79,18 @@ OSBPUTRET * OSBGET - read one byte from an open file BGETHND PHX PHY - >>> WRTMAIN - STY MOSFILE ; File ref number - >>> WRTAUX - >>> XF2MAIN,FILEGET -OSBGETRET - >>> ENTAUX - CLC ; Means no error - CPY #$00 ; Check error status - BEQ :NOERR - SEC ; Set carry for error - BRA :EXIT -:NOERR CLC +* >>> WRTMAIN +* STY MOSFILE ; File ref number +* >>> WRTAUX + >>> XF2MAIN,FILEGET ; Pass A,Y to main code +OSBGETRET >>> ENTAUX + CPY #$01 + BCC :EXIT ; If no error, return CC + LDA #$FE + CPY #$4C + BEQ :EXIT ; If at EOF, return CS + TYA + JSR CHKERROR :EXIT PLY PLX RTS @@ -146,41 +139,45 @@ ARGSHND PHX :S2 CMP #$FF ; Y=0,A=FF => flush all files BNE :IEXIT - >>> WRTMAIN - STZ MOSFILE ; Zero means flush all - >>> WRTAUX +* >>> WRTMAIN +* STZ MOSFILE ; Zero means flush all +* >>> WRTAUX JMP :FLUSH :IEXIT JMP :EXIT ; Exit preserved -:HASFILE >>> WRTMAIN - STY MOSFILE ; File ref num - STX MOSFILE+1 ; Pointer to ZP control block - >>> WRTAUX +:HASFILE +* >>> WRTMAIN +* STY MOSFILE ; File ref num +* STX MOSFILE+1 ; Pointer to ZP control block +* >>> WRTAUX CMP #$00 ; Y!=0,A=0 => read seq ptr BNE :S3 - >>> WRTMAIN - STZ MOSFILE+2 ; 0 means get pos - >>> WRTAUX - >>> XF2MAIN,TELL +* >>> WRTMAIN +* STZ MOSFILE+2 ; 0 means get pos +* >>> WRTAUX + TXA + >>> XF2MAIN,TELL ; A=ZP, Y=channel :S3 CMP #$01 ; Y!=0,A=1 => write seq ptr BNE :S4 >>> WRTMAIN + STY GMARKPL+1 ; Write to MLI control block LDA $00,X - STA MOSFILE+2 + STA GMARKPL+2 LDA $01,X - STA MOSFILE+3 + STA GMARKPL+3 LDA $02,X - STA MOSFILE+4 + STA GMARKPL+4 >>> WRTAUX - >>> XF2MAIN,SEEK + >>> XF2MAIN,SEEK ; A=???, Y=channel :S4 CMP #$02 ; Y!=0,A=2 => read file len BNE :S5 - >>> WRTMAIN - STA MOSFILE+2 ; Non-zero means get len - >>> WRTAUX - >>> XF2MAIN,TELL +* >>> WRTMAIN +* STA MOSFILE+2 ; Non-zero means get len +* >>> WRTAUX + TXA + >>> XF2MAIN,SIZE ; A=ZP, Y=channel :S5 CMP #$FF ; Y!=0,A=FF => flush file BNE :EXIT @@ -192,6 +189,7 @@ ARGSHND PHX RTS OSARGSRET >>> ENTAUX + JSR CHKERROR OSARGSDONE PLA LDA #0 ; Implemented PLY @@ -425,14 +423,17 @@ FSCCHDIR JMP CHDIR * Performs OSFSC Read EOF function * File ref number is in X -CHKEOF >>> WRTMAIN - STX MOSFILE ; File reference number - >>> WRTAUX +CHKEOF +* >>> WRTMAIN +* STX MOSFILE ; File reference number +* >>> WRTAUX + TXA ; A=channel >>> XF2MAIN,FILEEOF -CHKEOFRET - >>> ENTAUX +CHKEOFRET >>> ENTAUX TAX ; Return code -> X - RTS + TYA ; Y=any ProDOS error + JMP CHKERROR + * Perform CAT * A=5 *CAT, A=9 *EX, A=10 *INFO @@ -867,7 +868,7 @@ ERRHEX1 ERRMSG BRK DB $FF - ASC 'TEST: $00' + ASC 'ERR: $00' BRK MKERROR1 CMP #$40 diff --git a/mainmem.svc.s b/mainmem.svc.s index 607041c..877289b 100644 --- a/mainmem.svc.s +++ b/mainmem.svc.s @@ -13,6 +13,8 @@ * exits with MFI error, returns error if no more buffers, * OPENOUT doesn't try to delete if nothing to delete. * 13-Oct-2021 OSFIND implementes CLOSE#0. +* 13-Oct-2021 FIND, BGET, BPUT optimised passing registers to main. +* 13-Oct-2021 ARGS, EOF returns errors, optimised. INFOFILE >>> ENTMAIN @@ -283,6 +285,7 @@ COPY1FILE LDA #>> ENTMAIN @@ -356,7 +359,8 @@ BUFIDX DB $00 * ProDOS file handling for MOS OSFIND CLOSE call CFILE >>> ENTMAIN LDX #$00 ; Prepare for one file - LDA MOSFILE ; File ref number +* LDA MOSFILE ; File ref number + TYA ; File ref number BNE :CFILE1 ; Close one file LDX #$03 ; Loop through all files :CFILE0 LDA FILEREFS,X @@ -383,15 +387,15 @@ CFILE >>> ENTMAIN * ProDOS file handling for MOS OSBGET call * Returns with char read in A and error num in Y (or 0) FILEGET >>> ENTMAIN - LDA MOSFILE ; File ref number - STA READPL2+1 +* LDA MOSFILE ; File ref number +* STA READPL2+1 + STY READPL2+1 ; File ref number JSR MLI DB READCMD DW READPL2 - BCC :NOERR TAY ; Error number in Y - BRA :EXIT -:NOERR LDY #$00 + BCS :EXIT + LDY #$00 ; 0=Ok LDA BLKBUF :EXIT >>> XF2AUX,OSBGETRET @@ -399,87 +403,101 @@ FILEGET >>> ENTMAIN * Enters with char to write in A FILEPUT >>> ENTMAIN STA BLKBUF ; Char to write - - LDA MOSFILE ; File ref number - STA WRITEPL+1 +* LDA MOSFILE ; File ref number +* STA WRITEPL+1 + STY WRITEPL+1 ; File ref number LDA #$01 ; Bytes to write STA WRITEPL+4 LDA #$00 STA WRITEPL+5 JSR WRTFILE - >>> XF2AUX,OSBPUTRET + BCS :FILEPUT2 + LDA #$00 ; 0=Ok +:FILEPUT2 >>> XF2AUX,OSBPUTRET + * ProDOS file handling for OSBYTE $7F EOF * Returns EOF status in A ($FF for EOF, $00 otherwise) +* A=channel to test FILEEOF >>> ENTMAIN - - LDA MOSFILE ; File ref number +* LDA MOSFILE ; File ref number STA GEOFPL+1 STA GMARKPL+1 JSR MLI DB GEOFCMD DW GEOFPL - BCS :ISEOF ; If error, just say EOF + TAY + BCS :EXIT ; Abort with any error JSR MLI DB GMARKCMD DW GMARKPL - BCS :ISEOF ; If error, just say EOF + TAY + BCS :EXIT ; Abort with any error - LDA GEOFPL+2 ; Subtract Mark from EOF SEC + LDA GEOFPL+2 ; Subtract Mark from EOF SBC GMARKPL+2 - STA :REMAIN + STA GEOFPL+2 LDA GEOFPL+3 SBC GMARKPL+3 - STA :REMAIN+1 + STA GEOFPL+3 LDA GEOFPL+4 SBC GMARKPL+4 - STA :REMAIN+2 + STA GEOFPL+4 - LDA :REMAIN ; Check bytes remaining - BNE :NOTEOF - LDA :REMAIN+1 - BNE :NOTEOF - LDA :REMAIN+2 - BNE :NOTEOF -:ISEOF LDA #$FF - BRA :EXIT -:NOTEOF LDA #$00 + LDA GEOFPL+2 ; Check bytes remaining + ORA GEOFPL+3 + ORA GEOFPL+4 + BEQ :ISEOF ; EOF -> $00 + LDA #$FF ; Not EOF -> $FF +:ISEOF EOR #$FF ; EOF -> $FF, Not EOF ->$00 + LDY #$00 ; 0=No error :EXIT >>> XF2AUX,CHKEOFRET -:REMAIN DS 3 ; Remaining bytes + * ProDOS file handling for OSARGS flush commands FLUSH >>> ENTMAIN - LDA MOSFILE ; File ref number - STA FLSHPL+1 +* LDA MOSFILE ; File ref number +* STA FLSHPL+1 + STY FLSHPL+1 ; File ref number JSR MLI DB FLSHCMD DW FLSHPL >>> XF2AUX,OSARGSRET * ProDOS file handling for OSARGS set ptr command +* GMARKPL+1=channel, GMARKPL+2,+3,+4=offset already set SEEK >>> ENTMAIN - LDA MOSFILE ; File ref number - STA GMARKPL+1 ; GET_MARK has same params - LDA MOSFILE+2 ; Desired offset in MOSFILE[2..4] - STA GMARKPL+2 - LDA MOSFILE+3 - STA GMARKPL+3 - LDA MOSFILE+4 - STA GMARKPL+4 +* LDA MOSFILE ; File ref number +* STA GMARKPL+1 ; GET_MARK has same params +* LDA MOSFILE+2 ; Desired offset in MOSFILE[2..4] +* STA GMARKPL+2 +* LDA MOSFILE+3 +* STA GMARKPL+3 +* LDA MOSFILE+4 +* STA GMARKPL+4 JSR MLI DB SMARKCMD DW GMARKPL - >>> XF2AUX,OSARGSRET + JMP TELLEXIT +* >>> XF2AUX,OSARGSRET * ProDOS file handling for OSARGS get ptr command * and for OSARGs get length command -TELL >>> ENTMAIN - LDA MOSFILE ; File ref number - STA GMARKPL+1 - LDA MOSFILE+2 ; Mode (0=pos, otherwise len) - CMP #$00 +* A=ZP, Y=channel +SIZE LDX #$02 ; $02=SIZE, Read EXT + BNE TELL2 +TELL LDX #$00 ; $00=TELL, Read PTR +TELL2 +* >>> ENTMAIN +* LDA MOSFILE ; File ref number +* STA GMARKPL+1 +* LDA MOSFILE+2 ; Mode (0=pos, otherwise len) +* CMP #$00 + STY GMARKPL+1 ; File ref number + PHA ; Pointer to zero page + CPX #$00 ; OSARGS parameter BEQ :POS JSR MLI DB GEOFCMD @@ -488,8 +506,9 @@ TELL >>> ENTMAIN :POS JSR MLI DB GMARKCMD DW GMARKPL -:S1 LDX MOSFILE+1 ; Pointer to ZP control block - BCS :ERR +:S1 PLX ; Pointer to ZP control block + BCS TELLEXIT ; Exit with error +* LDX MOSFILE+1 ; Pointer to ZP control block >>> ALTZP ; Alt ZP & Alt LC on LDA GMARKPL+2 STA $00,X @@ -497,17 +516,18 @@ TELL >>> ENTMAIN STA $01,X LDA GMARKPL+4 STA $02,X - STZ $03,X + STZ $03,X ; Sizes are $00xxxxxx >>> MAINZP ; Alt ZP off, ROM back in -:EXIT >>> XF2AUX,OSARGSRET -:ERR LDX MOSFILE+1 ; Address of ZP control block - >>> ALTZP ; Alt ZP & Alt LC on - STZ $00,X - STZ $01,X - STZ $02,X - STZ $03,X - >>> MAINZP ; Alt ZP off, ROM back in - BRA :EXIT + LDA #$00 ; 0=Ok +TELLEXIT >>> XF2AUX,OSARGSRET +*:ERR LDX MOSFILE+1 ; Address of ZP control block +* >>> ALTZP ; Alt ZP & Alt LC on +* STZ $00,X +* STZ $01,X +* STZ $02,X +* STZ $03,X +* >>> MAINZP ; Alt ZP off, ROM back in +* BRA :EXIT * ProDOS file handling for MOS OSFILE LOAD call