home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1991 / 02 / tricks / diagnose.mod < prev    next >
Encoding:
Modula Implementation  |  1990-11-06  |  3.6 KB  |  146 lines

  1. (* ------------------------------------------------------ *)
  2. (*                    DIAGNOSE.MOD                        *)
  3. (*         (c) 1991 Michael Rother & TOOLBOX              *)
  4. (* ------------------------------------------------------ *)
  5. IMPLEMENTATION MODULE Diagnose;
  6.  
  7. FROM SYSTEM IMPORT ASSEMBLER;
  8.  
  9.   PROCEDURE DiskSize(Laufwerk : INTEGER) : LONGCARD;
  10.   VAR
  11.     cx, al, dx, Ergebnis : LONGCARD;
  12.   BEGIN
  13.     cx := 0L;
  14.     al := 0L;
  15.     dx := 0L;
  16.     ASM
  17.       MOV DL, Laufwerk
  18.       MOV AH, 28
  19.       INT 21H
  20.       MOV cx, CX            (* Sektorgroesse             *)
  21.       MOV al, AL            (* Sektoren pro Cluster      *)
  22.       MOV dx, DX            (* Zylinder pro Laufwerk     *)
  23.     END;
  24.     Ergebnis := cx * al * dx;    (* Kapazitätsberechnung *)
  25.     RETURN Ergebnis;
  26.   END DiskSize;
  27.  
  28.   PROCEDURE DiskFree(Laufwerk : INTEGER) : LONGCARD;
  29.   VAR
  30.     cx, ax, bx, Ergebnis : LONGCARD;
  31.   BEGIN
  32.     cx := 0L;
  33.     ax := 0L;
  34.     bx := 0L;
  35.     ASM
  36.       MOV DL, Laufwerk
  37.       MOV AH, 54
  38.       INT 21H
  39.       MOV cx, CX             (* Sektorgroesse             *)
  40.       MOV ax, AX             (* Sektoren pro Cluster      *)
  41.       MOV bx, BX             (* Anzahl freie Cluster      *)
  42.     END;
  43.     Ergebnis := cx * ax * bx;          (* freie Kapazität *)
  44.     RETURN Ergebnis;
  45.   END DiskFree;
  46.  
  47.   PROCEDURE DosVersion(VAR Hoch, Tief : CARDINAL);
  48.   BEGIN
  49.     ASM
  50.       MOV AH, 30H
  51.       INT 21H
  52.       LES DI, Tief          (* VAR-Parameter!             *)
  53.       MOV BYTE ES:[DI], AH  (* untergeordnete VersionsNr  *)
  54.       LES DI, Hoch
  55.       MOV BYTE ES:[DI], AL  (* übergeordnete  VersionsNr  *)
  56.     END;
  57.   END DosVersion;
  58.  
  59.   PROCEDURE DosMemory() : CARDINAL;
  60.   VAR
  61.     KBytes : CARDINAL;
  62.   BEGIN
  63.     ASM
  64.       INT 12H
  65.       MOV KBytes, AX                  (* Groesse in KByte *)
  66.     END;
  67.     RETURN KBytes;
  68.   END DosMemory;
  69.  
  70.   PROCEDURE ExtendedMemory() : CARDINAL;
  71.   VAR
  72.     KBytes : CARDINAL;
  73.   BEGIN
  74.     KBytes := 0;
  75.     ASM
  76.       MOV AX, 8800H
  77.       INT 15H
  78.       MOV KBytes, AX                  (* Groesse in KByte *)
  79.     END;
  80.     RETURN KBytes;
  81.   END ExtendedMemory;
  82.  
  83.   PROCEDURE Ist_AT() : BOOLEAN;
  84.   VAR
  85.     AT : CARDINAL;
  86.   BEGIN
  87.     AT := 0;
  88.     ASM
  89.       PUSH DS               (* Datensegment retten        *)
  90.       MOV AX, 0F000H        (* neues Segment (BIOS)       *)
  91.       MOV DS, AX
  92.       MOV BX, BYTE 0FFFEH   (* neuer Offset  (BIOS)       *)
  93.       MOV AL, [BX]          (* Wert auslesen              *)
  94.       MOV AT, AL
  95.       POP DS                (* Datensegment restaurieren  *)
  96.     END;
  97.     IF AT = 252 THEN
  98.       RETURN TRUE;
  99.     ELSE
  100.       RETURN FALSE;
  101.     END;
  102.   END Ist_AT;
  103.  
  104.   PROCEDURE CoProzessor() : BOOLEAN;
  105.   VAR ax : CARDINAL;
  106.   BEGIN
  107.     IF AT = TRUE THEN
  108.       ASM
  109.         INT 11H
  110.         AND AX, 2          (* Bit 1 ausmaskieren          *)
  111.         MOV ax, AX
  112.       END;
  113.       IF ax = 2 THEN
  114.         RETURN TRUE;       (* Bit 1 gesetzt = CoProzessor *)
  115.       ELSE
  116.         RETURN FALSE;
  117.       END;
  118.     END;
  119.   END CoProzessor;
  120.  
  121.   PROCEDURE VideoModus() : Modus;
  122.   VAR
  123.     ax   : CARDINAL;
  124.     Modi : Modus;
  125.   BEGIN
  126.     ASM
  127.       INT 11H
  128.       AND AX, 48          (* Bits 4 und 5 ausmaskieren    *)
  129.       MOV ax, AX
  130.     END;
  131.     CASE ax OF
  132.       16 :   Modi := Farbe; RETURN Modi;
  133.     | 32 :   Modi := Farbe; RETURN Modi;
  134.     | 48 :   Modi := Mono;  RETURN Modi;
  135.     ELSE
  136.              Modi := Unbekannt; RETURN Modi;
  137.     END;
  138.   END VideoModus;
  139.  
  140. BEGIN
  141.   AT := Ist_AT();
  142. END Diagnose.
  143. (* ------------------------------------------------------ *)
  144. (*               Ende von DIAGNOSE.MOD                    *)
  145.  
  146.