home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / dtx9203 / idetype / idetype.pas < prev   
Encoding:
Pascal/Delphi Source File  |  1992-03-31  |  2.7 KB  |  90 lines

  1. {$A+,B-,D-,E-,F-,G-,I-,L-,N-,O-,R-,S-,V-,X-}
  2. {$M 16384,0,1024}
  3.  
  4. (* ------------------------------------------------------- *)
  5. (*                      IDETYPE.PAS                        *)
  6. (*                Compiler: Turbo Pascal 6.0               *)
  7. (*   Programm zur Typbestimmung einer AT-Bus-Platte nach   *)
  8. (*  einer Anregung des PC-Hardwarebuches von H.-P.Messmer  *)
  9. (*          (C) 1992 Ralf Hensmann & DMV-Verlag            *)
  10. (* ------------------------------------------------------- *)
  11.  
  12. PROGRAM IDEType;
  13.  
  14. USES Dos;
  15.  
  16. CONST
  17.   Slave : BOOLEAN = FALSE;       (* 1. Platte *)
  18.  
  19. TYPE
  20.   WChar = RECORD
  21.             CHigh, CLow: CHAR;
  22.           END;
  23.  
  24. VAR
  25.   Buffer: ARRAY [0..255] OF WORD;
  26.   Ready : BOOLEAN;
  27.   Old76 : POINTER;
  28.  
  29. PROCEDURE WriteWord(VAR Buf; count: BYTE);
  30. VAR
  31.   St : ARRAY [0..255] OF WChar ABSOLUTE Buf;
  32.   i  : INTEGER;
  33. BEGIN
  34.   FOR i := 0 TO count - 1 DO Write(St[i].CLow,St[i].CHigh);
  35.   WriteLn;
  36. END;
  37.  
  38. PROCEDURE NewInt76; INTERRUPT;
  39. (* Ersetzt den Interrupt $76, IRQ 14 *)
  40. VAR
  41.   i: BYTE;
  42. BEGIN
  43.   (* Daten aus dem Sektor-Puffer auslesen *)
  44.   FOR i := 0 TO 255 DO BEGIN
  45.     Buffer[i] := PortW[$1F0];
  46.   END;
  47.   (* Unspezifischen EOI an Interrupt-Controller   *)
  48.   Port[$20] := $20;
  49.   Port[$A0] := $20;
  50.   Ready := TRUE;
  51. END;
  52.  
  53. BEGIN
  54.   GetIntVec($76, Old76);
  55.   SetIntVec($76, Addr(NewInt76));
  56.   Ready := FALSE;
  57.   (* Warten, bis Festplattencontroller frei...    *)
  58.   (* danach Befehl für LW-Info's in Sektorpuffer  *)
  59.   WHILE (Port[$1F7] AND $80) = $80 DO;
  60.   Port[$1F6] := $A0 + Ord(Slave) SHL 4;
  61.   Port[$1F7] := $EC;
  62.   (* Ergebnisphase abwarten, die durch NewInt76   *)
  63.   (* bearbeitet wird und alten Handler laden      *)
  64.   REPEAT UNTIL Ready;
  65.   SetIntVec($76, Old76);
  66.   WriteLn(^M^J'Laufwerksdaten der Festplatte:' +
  67.           ^M^J'------------------------------');
  68.   IF (Buffer[1] = Buffer[3]) AND      
  69.      (Buffer[3] = Buffer[6]) THEN     (* Datenmüll *)
  70.     WriteLn('Keine AT-Bus-Platte im System vorhanden.' +
  71.         ^M^J'Werte können nicht ermittelt werden.')
  72.   ELSE BEGIN
  73.     (* Laufwerks-Informationen ausgeben             *)
  74.     WriteLn('Zylinder                 : ', Buffer[1]);
  75.     WriteLn('Köpfe                    : ', Buffer[3]);
  76.     WriteLn('Sektoren pro Spur        : ', Buffer[6]);
  77.     WriteLn('unform. Bytes pro Sektor : ', Buffer[5]);
  78.     WriteLn('Anzahl ECC-Bytes         : ', Buffer[22]);
  79.     Write('Controller-Kennung       : ');
  80.     WriteWord(Buffer[23],4);
  81.     Write('Seriennummer             : ');
  82.     WriteWord(Buffer[10],10);
  83.     Write('Modell                   : ');
  84.     WriteWord(Buffer[27],20);
  85.   END;
  86. END.
  87.  
  88. (* ----------------------------------------------------- *)
  89. (*                  Ende vonIDETYPE.PAS                  *)
  90.