From 041655cbe40d42a11bc3cb03ac8e08526936d497 Mon Sep 17 00:00:00 2001 From: Bobbi Webber-Manners Date: Mon, 21 Oct 2019 20:30:38 -0400 Subject: [PATCH] Further improvements to multi-extent handling --- SOFTCARD80.ASM#040000 | 40 ++++++++++++++++++++-------------------- SOFTCARD80.BIN#041000 | Bin 32771 -> 32771 bytes zapple2.po | Bin 819200 -> 819200 bytes 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/SOFTCARD80.ASM#040000 b/SOFTCARD80.ASM#040000 index a443c6f..f8ec675 100644 --- a/SOFTCARD80.ASM#040000 +++ b/SOFTCARD80.ASM#040000 @@ -1005,7 +1005,7 @@ F_READ PUSH DE ; Copy pointer to FCB ... LD A,(IX+20H) ; Obtain sequential record number LD B,(IX+0CH) ; Obtain extent from FCB - CALL RECS2LEN ; Leaves the length in bytes in HL + CALL EXRC2LEN ; Leaves the length in bytes in HL LD (SMMLIP1),HL ; Write 16 bit length in FRMLIP1,FRMLIP2 XOR A ; Set FRMLIP3 to zero LD (SMMLIP3),A ; ... @@ -1065,7 +1065,7 @@ F_WRITE PUSH DE ; Copy pointer to FCB ... LD A,(IX+20H) ; Obtain sequential record number LD B,(IX+0CH) ; Obtain extent from FCB - CALL RECS2LEN ; Leaves the length in bytes in HL + CALL EXRC2LEN ; Leaves the length in bytes in HL ;; ; DEBUG ;; PUSH HL @@ -1330,14 +1330,14 @@ FSERR LD A,0FFH ; File not found ; DE contains the pointer to the FCB to update ; Sets the random access record of the FCB to the value of the last record ; read or written sequentially -; TODO: This needs to be fixed to handle multiple extents F_RANDREC PUSH DE ; Copy pointer to FCB ... POP IX ; ... into IX - LD A,(IX+20H) ; Put sequential record number in A - DEC A ; Remember F_READ/F_WRITE increment this - LD (IX+21H),A ; Write seq rec # to LSB of random rec # - XOR A ; A=0 - LD (IX+22H),A ; Set MSB of random rec number to 0 + LD A,(IX+20H) ; Obtain sequential record number + LD B,(IX+0CH) ; Obtain extent from FCB + CALL EXRC2RECS ; Leaves the length in records in HL + DEC HL ; Because F_READ/F_WRITE advance this + LD (IX+21H),L ; Store in random access pointer ... + LD (IX+22H),H ; ... In little endian format RET ; Selectively reset disk drives @@ -1693,12 +1693,11 @@ LEN2RECS LD A,H ; Most significant byte of length OR B ; Leaves file length in records in A RET -; Convert number of 128 byte records to length in bytes -; Length in records is passed in A +; Convert pos in extent/recs format to a linear position in 128 byte records ; Extent number is passed in B -; Returns the length in bytes in HL -; HL = ((B*128)+A)*128 -RECS2LEN LD L,B ; Extent number in LSB of HL +; Records within the extent is passed in A +; Returns the length in records in HL - HL = (B*128)+A +EXRC2RECS LD L,B ; Extent number in LSB of HL LD H,0 ; ... ADD HL,HL ; Shift left seven times ADD HL,HL ; ... @@ -1710,13 +1709,6 @@ RECS2LEN LD L,B ; Extent number in LSB of HL LD B,0 ; Put recs in this extent in BC LD C,A ; ... ADD HL,BC ; Now we have total offset in records - ADD HL,HL ; Shift left seven times - ADD HL,HL ; ... - ADD HL,HL ; ... - ADD HL,HL ; ... - ADD HL,HL ; ... - ADD HL,HL ; ... - ADD HL,HL ; ... RET ; Convert random record number of 128 byte records to length in bytes @@ -1731,6 +1723,14 @@ RRN2LEN ADD HL,HL ; Shift left seven times ADD HL,HL ; ... RET +; Convert pos in extent/recs format to a linear position in bytes +; Extent number is passed in B +; Records within the extent is passed in A +; Returns the length in bytes in HL - HL = ((B*128)+A)*128 +EXRC2LEN CALL EXRC2RECS ; Does most of the work + CALL RRN2LEN ; Does the rest! + RET + ; Convert value in HL into an HEX ASCII string, pointed to by DE ; Courtesy of http://map.grauw.nl/sources/external/z80bits.html#5.2 ; Trashes A diff --git a/SOFTCARD80.BIN#041000 b/SOFTCARD80.BIN#041000 index 7be59a6199fc341d0dee3ee0ac45592f8de4ab3b..9b325f14a8661ecb7ae78d923ee1f4977ee4a519 100644 GIT binary patch delta 1193 zcmZ`%U2GIp6uz@RWp`V4+ip^dR@m8%A(qhS5K|bMRWMn2u_X}_5(Q^xckXrU0~*xn zCUmz_V`&YFP68p}0fYw#$Sm+uctK_WJA=1zNg89~JZwx!Orzn6__9;aovB8eILX|5 z&pF?Be(wDyCqk1Gp?WHu_(G){NPhWn*NL0!!+*V#m{Nt~sxYkzGy3z=2cfW{pOC!B zbwa!KuZkOMQI)=^EVP;iy^g(Q$14hbh(n$6>=fb00i<}y^ors%X=zDep70Ntum2}P zf5$B?Wwf-6*oXMf)iyK|2b5+UwxPH!k8(*AuX@NCl!ZFsFRi2!WwB0zQlbnreT%%V z_K0*nA~Ynk^>UG|f3mV;GJjI#Hluj<8a9MFZY{tROuD{V~# zo$X-eol@_5-*owc3b)#c;`w^hxOjE~+QXTe+wDuJX%$LDL1^9nMNBO+C}L z{$;s$%|AVUSI(p$Ng0x`t6nPiAJKm;_jRyo5!vj1%)1}y%jE%XP#;h>)J`i^FXO06 ztl}k{_mr5cp^luJv-T=62$)BdoTV!H0p@mdZHR$SE3q*z?3@a~5r!TIeoI6465Lo4 z86W0`fO|m!E0@gpX1jSqS*kuxjr{R;4;t%kL%DRtLvyt;uYIoS4LGjS9a(Grps;Xy z2*Vn}`Q;{f?6lt(dd_>zsl9~@ zv*sb3&UNJ5Z<%|rFFu&_aSB9N#fuB{tkP)0wi7p)LO+Ehwqb)bL7=pVW85ZR#^4wN zCC31Al?m5dYfcAHgwSqrN}Y8YSUe8f&sdy>&Bfx3Iva9+(;woUHT$LDv*C^4b?u{c z3pq+(A>*)*_eM6t_w>o82j}Kr?@rqpbm#kBnzSZbu^>4IKLXd?{hGu@D{wO3)ud3g zQefwMqneb6Rv5+yvV#ww`%II>Bu L4SLfiulD{8)imid delta 1182 zcmZ`%U1$_n6u!IJCi|1@8dK7w-Qv#9gEd-}5se+=)*ncz(kR%M`h%0%nR^)nYG0fz z#NBk0l!Db_r_cwr6j~_hCQKm+3byKO5oh!UR*d-I2n&r+q@XV%l%06)Oe`Acg*oS* zbH4BV+&N>T;jz*1Z>gsEmm2LRxrJlxU(IwkJwF&PYr>c&jBCP#@s4yn>?y`+$%{-8 z+Gcz+xT1tKno;K(b(2nEZ^7{fg)|DGWwC6TaKivnJ!E-<;y7vONx>%Eb>{22Md)9+ zp{LA-o)OcC`$B6*dt!jn&0{tcx8gO&$$CxNu%xL)wYc@ zN>|Iv9;cN|3X&X#B(jy_o9C_sK;TkEx1 z;{g;Q^pRNBE;+ZcI0ott7RN!|$KnL2hYZ9a;~w5}cvW!hmwJT0M@HxxauW2(uE+{F z&z`Kj@#E~aU`-WkTiPTd{4 zt)bh>!%`FlNt~GY10Nw0ku7T6YDkb>MRsu-N~n#&jcEw0glPDMCZc3ULq<`3giOuOgw?aWHkZ)coRu*!`KWY6unhu=XiQXdJ4S`sU@kWy z*e+6E#T7xl#m@%w!m~l_urjt+#cZY>0V)`l;vgdK=`rLoD5NooY7aLi*gl%4a(EnL zLi#F)2hx-^KcJ;USB1q_1vSG%_fu}V|4#4i_t=h#hDrvNp5epX7(aPa-OtYeXP+n5 z?g_(1@u`Y4ykm^l1CtOrrE}=nAK#Z9+m}vJ>pW0s!jrV=wcFZ+wse^ZPg?s_awZwd z<)Q-jmXHkLWOI(XR49!JVeVVO_LW}9mPEBzYor?!t?^bArCWAfupNf5vUnP8+yv?G z{eSw0G#xf3dU_%KeZlq)P2V?-Hki}eYN&mF8Z9ft=+?eabtmoF3Hb;1K> zIe6;GfAK!Y(fb|wJ^w+3W3_zU+zfc)g}N^0A?@+R&{n>AJo*A(XwRu*zl^r<`XEA` zsXQ3K5Px$@eV0tmz^|U4q|^Eeki^4r7*iNl)yW%@{iqZX#x1d!8oh&4-eG!11K z=1IqhIG&i~9f#mI%{xZnm*gFX#qo^94dwE$sD3D3p8n$SOz_6>z3Liauex3sg#X~O ztcT&dd#CK;iHRo)3gehL|8+yqwa7RS19k%}23!}m1ziT?0Gy&bg02kXKr=mm(-U-= zjRO>;1L;ABUpf$UW$FPy)g_JvU0DzqP6scaxX1iH4Ak@vb$tFXaRIIXEOkz*k@zjd z6@6}=IG5$@>S$D+O_<9gf1NWwXVL8l*sV`1KbNpB<>hncPDDXmhqH03vOQrguJseI zaf z@Geo7cM(i{-J;uvdC9-qEk~@&+3QPAa_l;U8?Y>4ue9e25Bo>S$q<{Zv>#wAlr0C? z)pYA^=#}&mNWV;c@>(b=Fwa60-N5f7Za>Hgh_Wd8sL=J?M(i1o37+qOVmZjJd^FvR zpeXMIh`bXd>5N!}THJvE>87dm%AFCmc-1|v!)u^__%Xbyp#qr8E9)%_jgIslWQifN zZ-nhKR6n>-Dl+h(>Q)Xd2wG57PL-u)wL05SV|{Duztcb;qe&tGyju#$SmO2KgOb08 zzMBs1=xF0;-U5=g$4>&XjY2w{ofb!lIHDRwU7v-}K$;p7;5 FU+oQHq3^;6G|YR{T!yFo5wS=X}rK z@B7X<-{7DyI4FEtl9s8=qvuwoEJ5fO#FP`8(^i;uGYiZ^&a@F{ngMnS>{QrB*vyv> zJ0s{!GX;*DUsJU_rSeW!_TiB{Y6|92{CBx|NEHsLf?pMeY5p|cpOSFVqtiHH99J|8 zeRBq{^dVIv(#-r^KpU46ccO`Qp#T|B7A_o8_&&&z5-5~txBHcOuT_XB`~~JKxuj^n z%JbgLz`U2(3lRURnvR+O|ot-yW-9C{&q8e5sTsSHRgfV&Qnl>QM0q4tNxJe8^p~y_hsB9mT zlYuFSj3zmf=&=XT;UOKORf=%Ys2JmucjxPsM*W&mQSW^wHWwSP3g0NgQ6)A&Vs(qO z+j8NzNx`6e{Z|$}xPVFgb;}NShSlPLIpX!M*f=vW-PzDCImc&PRLOl6s+N;e2sesn!u0ja*Jd;-P0fKQm#5gM z9t4s|AObTAld8QSn+&Ux^9+u17-)+_E?)LeRPM6<%is z>JLK+18fAY3){U;1L_AYwA<@ULH!PYjz)PO?d7Y`KU(b%d;dL589n{TB z@7!lz{+MwAT>E@MnVevpdh*ow!O0s~$fczxO=(}4Cnt=}wbdH&C4p49zX_h*rPEqP6 z0Izk_tgCC=(OlnJOH_A9H-y|C;(<;Ws-XtsqWYbyh4ovD*8sYV?C4fK66ui+kZ!4i z*jRH7EmfpTCf(3uSEue~*qu$yP;sH8qoVXaKH)B3i{v5O{zKsIP4)-mrNKv5a6c}= zq>7d5=;}Q!aHT;ka)0Gx2Vn~;oF3rPX}h1}=@vg%#g1G$pqnJqx`y!#CwlR2On3D|jp~GAzJvG9e31*CN V^@d>2>)g>oDu2SgeR`am{s*;5jZXjo