PRINT "Select a source drive:"
PRINT "1. First floppy (drive A:)"
PRINT "2. Second floppy (drive B:)"
PRINT "3. Hard drive 0"
PRINT "4. Hard drive 1"
PRINT "5. Exit to DOS"
PRINT
PRINT "Choose an option: ";
LOCATE , , 1
DO
key$ = INKEY$
SELECT CASE key$
CASE "1"
srcdrv = 0
EXIT DO
CASE "2"
srcdrv = 1
EXIT DO
CASE "3"
srcdrv = &H80
EXIT DO
CASE "4"
srcdrv = &H81
EXIT DO
CASE "5"
PRINT "5"
END
CASE ELSE
END SELECT
LOOP
PRINT key$
PRINT
PRINT "Resetting drive " + HEX$(srcdrv) + "h... ";
diskCall.ax = 0
diskCall.dx = MakeReg(0, srcdrv)
CALL interruptx(&H13, diskCall, diskReturn)
PRINT "OK!"
PRINT "Getting drive info from drive " + HEX$(srcdrv) + "h..."
diskCall.ax = MakeReg(&H8, 0)
diskCall.dx = MakeReg(0, srcdrv)
CALL interruptx(&H13, diskCall, diskReturn)
DIM cr AS LONG
DIM tmp AS LONG
DIM sentkb AS LONG
bn$ = ""
tmp = diskReturn.cx
cr = 32768
FOR num = 1 TO 16
IF tmp - cr >= 0 THEN
tmp = tmp - cr
bn$ = bn$ + "1"
ELSE
bn$ = bn$ + "0"
END IF
cr = cr / 2
NEXT num
cy$ = LEFT$(bn$, 10)
diskSpecs.Cylinders = 0
cr = 1
FOR num = 10 TO 1 STEP -1
IF MID$(cy$, num, 1) = "1" THEN diskSpecs.Cylinders = diskSpecs.Cylinders + cr
cr = cr * 2
NEXT num
diskSpecs.Cylinders = diskSpecs.Cylinders * 2
se$ = RIGHT$(bn$, 6)
cr = 1
diskSpec.Sectors = 0
FOR num = 6 TO 1 STEP -1
IF MID$(se$, num, 1) = "1" THEN diskSpecs.Sectors = diskSpecs.Sectors + cr
cr = cr * 2
NEXT num
diskSpecs.Sides = HighByte(diskReturn.dx)
DO
diskSpecs.Capacity = diskSpecs.Cylinders + 1
diskSpecs.Capacity = diskSpecs.Capacity * diskSpecs.Sectors
diskSpecs.Capacity = diskSpecs.Capacity * diskSpecs.Sides
diskSpecs.Capacity = diskSpecs.Capacity * 512
mb$ = MID$(STR$(FIX(((diskSpecs.Capacity / 1024) / 1024) * 100) / 100), 2)
PRINT "Cylinders:" + STR$(diskSpecs.Cylinders + 1)
PRINT "Sectors:" + STR$(diskSpecs.Sectors)
PRINT "Heads:" + STR$(diskSpecs.Sides + 1)
PRINT "Capacity:" + STR$(diskSpecs.Capacity) + " bytes (" + mb$ + " MB)"
PRINT
PRINT "Is the above information correct? (Y/N): "; : LOCATE , , 1
okquit = 0
DO
key$ = INKEY$
SELECT CASE LCASE$(key$)
CASE "y"
PRINT key$
okquit = 1
EXIT DO
CASE "n"
PRINT key$
PRINT "Please manually specify disk parameters."
LINE INPUT "Cylinders: ", cyltmp$
LINE INPUT " Sectors: ", sectmp$
LINE INPUT " Heads: ", headtmp$
PRINT
diskSpecs.Cylinders = VAL(cyltmp$) - 1
diskSpecs.Sectors = VAL(sectmp$)
diskSpecs.Sides = VAL(headtmp$) - 1
EXIT DO
END SELECT
LOOP
LOOP UNTIL okquit = 1