program park_heads; (* This program will park heads on hard disk MSDOS drives. *) (* Contributed to public domain for any noncommercial use *) procedure park; type regtype = record ax,bx,cx,dx,bp,si,di,ds,es,flags: integer end; var reg: regtype; drive: integer; numdrv: integer; maxcyl: integer; begin reg.ax := $0801; { Get # of drives } reg.cx := $0000; reg.dx := $0080; intr($13,reg); numdrv := reg.dx and 7; writeln('Number of fixed disk drives: ',numdrv); writeln; for drive := 0 to numdrv-1 do begin reg.ax := $0801; { Get drive parameters for next drive } reg.cx := $0000; reg.dx := drive or $0080; intr($13,reg); maxcyl := ((reg.cx shr 8) or ((reg.cx shl 2) and $0300)) + 1; writeln('Parking drive ',drive,' at cylinder ',maxcyl,'.'); reg.ax := $0C01; { Seek to the max cylinder + 1; sector #1 } reg.cx := ((maxcyl and $00FF) shl 8) or ((maxcyl and $0300) shr 2) or 1; reg.dx := drive or $0080; intr($13,reg); if reg.flags and 1 <> 0 then writeln('Error code on drive ',drive,': ',trunc(reg.ax/256)) else begin writeln('Drive ',drive,' parked successfully.'); writeln; end; end; end; begin park; writeln('***** Turn off the power now. *****'); while true do; end.