' Diskparameter DECLARE FUNCTION HexDump$ (z$) ' $INCLUDE: 'qb.bi' TYPE lwParameter groe AS INTEGER iFlags AS INTEGER nZylinder AS LONG nKoepfe AS LONG nSektoren AS LONG nLBASektLo AS LONG nLBASektHi AS LONG sektGroe AS INTEGER EDDoffs AS INTEGER EDDseg AS INTEGER DPIpraesent AS INTEGER DPIlaenge AS STRING * 1 reserv1 AS STRING * 1 reserv2 AS INTEGER HostbusTyp AS STRING * 4 InterfaceTyp AS STRING * 8 InterfacePfad AS STRING * 8 DevicePfad AS STRING * 16 Reserviert AS STRING * 1 Pruefsumme AS STRING * 1 END TYPE DIM dosIntEin AS RegTypeX, dosIntAus AS RegTypeX DIM lwp AS lwParameter WIDTH 80, 50 ' Alle Festplatten durchgehen FOR i% = &H80 TO &HFF ' Parameter konventionell (CHS) abfragen dosIntEin.ax = &H800 dosIntEin.dx = i% dosIntEin.es = 0 ' gem„ss Hinweis aus http://www.ctyme.com/intr/rb-0621.htm dosIntEin.di = 0 CALL INTERRUPTX(&H13, dosIntEin, dosIntAus) IF dosIntAus.flags AND 1 THEN fe1$ = "Fehler:" + HEX$(dosIntAus.ax) + " " chsja% = 0 ELSE PRINT "Disk "; HEX$(i%); "h "; zyl% = ASC(RIGHT$(MKI$(dosIntAus.cx), 1)) + 4 * (dosIntAus.cx AND 192) + 1 koe% = ASC(RIGHT$(MKI$(dosIntAus.dx), 1)) + 1 sek% = dosIntAus.cx AND 63 chs$ = LTRIM$(STR$(zyl%)) + "/" + LTRIM$(STR$(koe%)) + "/" + LTRIM$(STR$(sek%)) PRINT "Anzahl Festplatten:"; dosIntAus.dx AND 255 PRINT "C/H/S-Geomentrie: "; chs$ PRINT "Grösse aufgrund CHS:"; CLNG(zyl%) * CLNG(koe%) * CLNG(sek%) PRINT "Hersteller-Vektor: "; HEX$(dosIntAus.es); ":"; HEX$(dosIntAus.di) PRINT "Hersteller BL: "; dosIntAus.bx AND 255 dummy$ = INPUT$(1) chsja% = -1 END IF ' Abfrage, ob LBA berhaupt m”glich dosIntEin.ax = &H4100 dosIntEin.bx = &H55AA dosIntEin.dx = i% CALL INTERRUPTX(&H13, dosIntEin, dosIntAus) IF (dosIntAus.flags AND 1) = 0 AND dosIntAus.bx = &HAA55 THEN PRINT "Disk "; HEX$(i%); "h mit LBA Version "; HEX$(dosIntAus.ax); " und LBA-Flags:"; IF dosIntAus.cx AND 1 THEN PRINT " Paketstruktur"; END IF IF dosIntAus.cx AND 2 THEN PRINT " Sperre/Auswurf"; END IF IF dosIntAus.cx AND 4 THEN PRINT " EDD"; END IF PRINT ' Details holen lwp.groe = LEN(lwp) dosIntEin.ax = &H4800 dosIntEin.dx = i% dosIntEin.ds = VARSEG(lwp) dosIntEin.si = VARPTR(lwp) CALL INTERRUPTX(&H13, dosIntEin, dosIntAus) IF dosIntAus.flags AND 1 THEN PRINT "Fehler bei Parameterabruf:"; HEX$(dosIntAus.ax) lbaja% = 0 ELSE PRINT "Gr”sse effektiv:"; lwp.groe PRINT "Infoflags:"; IF lwp.iFlags AND 1 THEN PRINT " DMA-Transparenz"; END IF IF lwp.iFlags AND 2 THEN PRINT " Geomentrie_gltig"; END IF IF lwp.iFlags AND 4 THEN PRINT " Wechselmedium"; END IF IF lwp.iFlags AND 8 THEN PRINT " Schreiben_mit_Prfen"; END IF IF lwp.iFlags AND 16 THEN PRINT " Linienwechsel"; END IF IF lwp.iFlags AND 32 THEN PRINT " Sperren"; END IF IF lwp.iFlags AND 64 THEN PRINT " max_Geomentrie"; END IF PRINT PRINT "Zylinder:"; lwp.nZylinder PRINT "K”pfe:"; lwp.nKoepfe PRINT "Sektoren:"; lwp.nSektoren PRINT "LBA-Gr”sse:"; lwp.nLBASektLo; "/"; lwp.nLBASektHi PRINT "Gr”sse Sektor:"; lwp.sektGroe; "Bytes" PRINT "EDD-Struktur: "; HEX$(lwp.EDDseg); ":"; HEX$(lwp.EDDoffs) PRINT "DPI verfgbar: "; lwp.DPIpraesent PRINT "DPI-L„nge: "; ASC(lwp.DPIlaenge) PRINT "Reserviert 1:"; ASC(lwp.reserv1) PRINT "Reserviert 2:"; lwp.reserv2 PRINT "Hostbus-Typ: >"; lwp.HostbusTyp; "<" PRINT "Interface-Typ: >"; lwp.InterfaceTyp; "<" PRINT "Interface-Pfad: "; HexDump$(lwp.InterfacePfad) PRINT "Device-Pfad: "; HexDump$(lwp.DevicePfad) PRINT "Reserviert 3:"; ASC(lwp.Reserviert) PRINT "Prfsumme:"; ASC(lwp.Pruefsumme) lbaja% = -1 dummy$ = INPUT$(1) END IF ELSE ' PRINT "LBA="; HEX$(dosIntAus.ax) lbaja% = 0 END IF NEXT i% PRINT "Ende" dummy$ = INPUT$(1) FUNCTION HexDump$ (z$) h$ = "" FOR i% = 1 TO LEN(z$) h2$ = HEX$(ASC(MID$(z$, i%, 1))) IF i% > 1 THEN h$ = h$ + " " END IF h$ = h$ + STRING$(2 - LEN(h2$), "0") + h2$ NEXT i% HexDump$ = h$ END FUNCTION