From 77ded96a313b63fbdd9b71727423cd54f700c5fc Mon Sep 17 00:00:00 2001 From: Bobbi Webber-Manners Date: Sat, 19 Oct 2019 14:37:18 -0400 Subject: [PATCH] Added DRV_DPB system call --- README.md | 1 + SOFTCARD80.ASM#040000 | 23 ++++++++++++++++++++--- SOFTCARD80.BIN#041000 | Bin 32771 -> 32771 bytes zapple2.po | Bin 819200 -> 819200 bytes 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index bb5884b..bd6bfea 100644 --- a/README.md +++ b/README.md @@ -101,6 +101,7 @@ calls. Only console I/O has been tested and confirmed to be working so far: - BDOS call 1AH: `F_DMAOFF` - Set DMA address - BDOS call 1CH: `DRV_SETRO` - Software write-protect current drive - BDOS call 1DH: `DRV_ROVEC` - Return bitmap of read-only drives +- BDOS call 1FH: `DRV_DPB` - Get Drive Parameter Block address - BDOS call 20H: `F_USERNUM` - Get/set user number - BDOS call 22H: `F_SIZE` - Compute file size - BDOS call 25H: `DRV_RESET` - Selectively reset disk drives diff --git a/SOFTCARD80.ASM#040000 b/SOFTCARD80.ASM#040000 index db7f1a8..de4970e 100644 --- a/SOFTCARD80.ASM#040000 +++ b/SOFTCARD80.ASM#040000 @@ -15,12 +15,11 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; -; TODO: Finish F_SFIRST, F_SNEXT directory calls ; TODO: Implement missing system calls: ; - Random read/write (F_READRAND,F_WRITERAND,F_RANDREC) ; - RS232 (A_READ, A_WRITE) ; - Printer (LWRITE) -; - Other (DRV_ALLOCVEC, F_ATTRIB, DRV_DPB, F_WRITEZF) +; - Other (DRV_ALLOCVEC, F_ATTRIB, F_WRITEZF) ; TODO: IOBYTE doesn't do anything ; TODO: User number doesn't do anything ; TODO: Software R/O disk setting is not respected @@ -510,6 +509,7 @@ B_DRV_GET EQU 19H ; Return current drive B_F_DMAOFF EQU 1AH ; Set DMA address B_DRV_SRO EQU 1CH ; Software write-protect current drive B_DRV_ROVEC EQU 1DH ; Return bitmap of read-only drives +B_DRV_DPB EQU 1FH ; Get Drive Parameter Block address B_F_USERNUM EQU 20H ; Get/set user number B_F_SIZE EQU 23H ; Compute file size B_DRV_RESET EQU 25H ; Selectively reset disk drives @@ -577,7 +577,7 @@ BDOSVEC DEFW C_TERMCPM ; C=00H DEFW DRV_SETRO ; C=1CH DEFW DRV_ROVEC ; C=1DH DEFW UNIMP ; C=1EH (F_ATTRIB) - DEFW UNIMP ; C=1FH (DRV_DPB) + DEFW DRV_DPB ; C=1FH DEFW F_USERNUM ; C=20H DEFW UNIMP ; C=21H (F_READRAND) DEFW UNIMP ; C=22H (F_WRITERAND) @@ -1155,6 +1155,10 @@ DSRL2 RL B ; DRV_ROVEC LD HL,(ROVEC) ; Bit 0 of L is A:, bit 7 of H is P: RET +; Return pointer to Drive Parameter Block in HL +DRV_DPB LD HL,DPB ; Pointer to drive parameter block + RET + ; Get/set user number ; E contains the user number to set, or 0FFH to get current user number ; If E is 0FFH then user number is returned in A @@ -1560,6 +1564,19 @@ N2H2 OR 0F0H ; ; Additional private scratch space for BDOS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Drive parameter block (CP/M 2.2 format) +; See Johnson-Laird Pg 33-34 +DPB DEFW 32 ; # 128 byte records per track (for Disk II) + DEFB 7 ; Block shift (16384 byte allocation blocks) + DEFB 127 ; Block mask (16384 byte allocation blocks) + DEFB 7 ; Extent mask + DEFW 2047 ; # allocation blocks on disk (32MB) + DEFW 1023 ; # directory entries + DEFB 0 ; Directory allocation bitmap byte 1 + DEFB 0 ; Directory allocation bitmap byte 2 + DEFW 0 ; Checksum vector size + DEFW 0 ; # of reserved tracks + ; 64 byte buffer for storing a file path as a Pascal style string PATHBUF PATHLEN DEFB 0 diff --git a/SOFTCARD80.BIN#041000 b/SOFTCARD80.BIN#041000 index 2f19ff5af5486da74f217e27b64e6abfd5189064..bde1822fe4ad790e58df0b6ea165ff2a6e11dda3 100644 GIT binary patch delta 992 zcmZ8gT}TvB6h7lFyQ{80yNX!~IXgt8Sg;h)AUDB&h#u;xw_<+oy$Mm9X}e0gyApvf z5wZ_SPZ0z{5rr@Ir0$eB8xw40QZUjM`jCV|;6v1GXLgOm19J~^?)RO0&bi;covyf@ zu6XYERK4O>n3G~GG(Q#c2p6knd326Pvpi~KS`}JT&{y*1-pN?15gxOIUp z60klqrCatJ)Qz7Ah0+hAPf*ADpYiSb{*z%;R}x z8_X(`948Ud3O&BgX5CVyh3ojh($YN2PERpLL{$v4tlBxw6@fM$!O_Qa1`xs#4}S`3qy z%AK=sC<2L>+e$|3^!6qwbzZNFe%fKo*=673RrMxm{#d75tFvF}T5`4STqq5LVIN2hLk=vY2A%4Kq;oJAWMOZOu}MQ?;0qW5hC^P#i$noL zn!x&^;nY;-2F_gG5ioZK&h&0W5HNH`iUkar4Q@HG$2p!GVyC9FcUXgz3XQr5QlX2UmzrP4>kW z7BBO(JjxqNC>4sFT|s&oZ@%iMR_Xd^k4Se4VlhKxHI4{}9>O_`fii_s+)#3CZ<*3)pF z?niGv{Opk&L2W~>IcU?Gu+WMNWt%WJsny~$(Mk&S1~50TGC|}DEK?DMGBmwryr9_} zO7-I8MJys+%G#0#{9A!{)!-&rim7NXY-+5SYo??Qtu(&`Izs?uO#_ zbr;P$5)&LKv^5;6P#UX|-Fc?X6y^Bsh=+90P0jE+*GyO`IFIj(Dt8JAwmU+Jq8r8-($%E1^213$QH6AyO#o zBaO$&iHw;w`#G~OAR;ru@43;tqkWP)s5Ovq6cfRT!b|OD1ev^e%66V2+{q8;{HX-7 z_A$cV%ehk;VIf<_n|yMRu#iYRA$)R-h$pSE$rqyng}s||q!tTcr-hyX{@)1F*SQ$- zAQAQOVIY4d+z9fx{e|z+#H#j-)J9qAb(SapkgA8Mm`yqC zK+E-gf%*M`mK%EzB1&GPVm=EY-De$)j^x@>{q+1oVubqmGO_e^;wBZNwveEc9~B^= zXLK!NyeH`_I6~8w+@3=b9pnZ&1GO0sD9be1s)Rrobjbqdi>1O`d17h@3om&=m{J!~ zTU3|^w@rl^a7C&x3yy`KPv_8Wk%3)1pn7ZT)%ymg4jJ|8P>u5#*w$vl($i1vUY|a9 LR!tm^H~anpA%uz| diff --git a/zapple2.po b/zapple2.po index c53808c09b097e912387ce79d29fcd9791424cd9..54bec76e7b5f9a3287e2207f2c7dbed5c7e6d5ff 100644 GIT binary patch delta 1963 zcma)6e@qis9Dk*y+`G0w!6;7R-q9`mP|zN3YGtQ^>SV*oG|_*St#`e5(jYx-D?c`+ zb;~mMhuNHtGny=B*@%f|)0lbq7t$i(YHDB;nI<)324ZFwOqQ61Y-R7-f(-xIUh=(n z_kEww_xt_4_q`X1u#pIRxgxjd01)F~Z~4l603L$$%PCiGsbzKgyKry$>inyG?!G+3 zR^|L7Sn|=R^^;MnfmjYPBQX=PTw-QodFrT@`chU(>W$}mk5X7!S5BY1)9w@1@*v04@rq4iJOz{!>V1OX8u&2pF?wn-Mweud+z3X2;mmg@S1bS zPWA16_`R+7K6I&LXDDO-O6Q!+0oDju6JR5Ny&`17#R8OkjKa=GvlyiS(;ZZxHb!!xYYtPpsczJH-?vC60t*I zG|8|Az_JNU3ciQOrVP#GQxV;0&mrFkk(%4W%9g<2Ia52@RfJd zQZ{>arCHuBchF-Zu_KG(O9Zd)mEcXB<>!Gn+Jc@ut|LZp24eHYB$=?j>C9O@$7d68 zxsmG#D;FkUT`99p(mo*PFym!Qf#xEn16PT9@V=j6PVX#jQn~vuYB^22%0YC6SXCuf zjwdIRhnZxkj04F|$D&Gy%0eERQykN<&LAnCX;>N_7JE`CenzCaQ*>MrsbnXxI+Bi9 zSft28^lQ-(J0o&6x;yDG106gpQe7!y{ALDh($SX)|L;zqJ!T>xA8_E1qmGb&5}9Kl zA7wr*(O<>KJ<|od?GeybWCo7n?i3gaccm;NJ*k?w6&IOov8ST_I51N&3X{E`BIir` zqHH-x{34LOL*>Nw;0hkT|ipvTRb(MxFwEFlBorc>5X`S1knhJbRg-&#Bod+%G3Qy9Cf5)DT2A9 z_h-r$y^_U}BYxd=L+X#uV%H#VtSE`r%%d<&)?owR80P^yl~!J-keeIA~KX?r>SkK{0R1}P>$WC z%YJx={>G-1T%lck`Se$+>k>U&+&e^Pu7w=s@*_xH9ksHCQ-wJ(Wx!02s5v+36s5dH zTMCqdS$a+1ZF;RTc%5d|gR}HyO4@@%hXa1pF8ll;96%u%xdXlqjGFlX--dNp{XyB= zihO>wv&pt_F*Ug%+}X5t{*r2bMi)x{3D%MAUo$)z((mZm?x4aBttSAJ($u z!X!7Q13B4ENazk>6u@3NAO=ypE-kJ+P@CS(sKID`AD6J>>jOk?m#cktB=>J6xFJ#@`6~g`y(y7^k_QOri&CaZv z=aM5*hNw%ZsAYH6&zG_vI@hzcS&rx<(nE5f88{eK0 z?R<{%UkrAk{A`kj7VK>e9&SS&>1t5W_dcG-l)@~?fnd^Kt(BcXo6bZ)Sllu=a~b#AJM>^GG+w7%8aew1!#X>K^!)O>h{ zu{yN>)x)&Z+9n4<#t$fDjC}t7pUHekXFaSt`_u&&YWT^^KxA6n-`2oK&5NT)vO4 z_L0?7pF(T-wpR`ve5nya_!Rxz)71?JXu7<<=}1d`h5;K<*fE72SJ(+udL2pyeg1_&pTEz)jOQx#m3)mm#)w@gS5);gSlpy!&53r@?aMeQqjAp?@_V*CY> z2MK;Pk*>TZb7?v2NnzKB=o}NZZ2Z?7d=EZSo3f8MmoIAWOzk>0`U5Np0 zNO%bR{&>4T-`5$(I0DPVVss{GTskvkobkyGSY-Bf2GPh3SX+7;zro!ATM7~!76Vi) z z7ec<1F()tOz!n2Ng5&?~0*Sj!7&rhAPIzl^@KuR90~{2c+uLIE=#M2>(o4!NOF{fE z$@vkml5vZSZ+#KJEM|nK2xzxNe2cHihGF*`8w^t$4ZDx7L+~KpBJ-;Y*pzS^CxdO7 zy5vc@AsRa)yS;Ya_Fe2vneWY#3%9bg36ttec`>d1D5Vy#lH`;@!3#J^0#guk4>M5v zKqiT@EK{+e7IT%vn4b-1W(s1FH7tJI=edXyP2Q8aF{~cQ+&ESyg`2>N#J@VhfVX)9 z&nWK>bd_vZ-qjeTTidR5Z?Qav$Gw%ZnJ=#FbGZ}hGk4&0F{&CM-6o+8`7ctBAbk;f z(b