home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1990 / 04 / algorith / memory.pas < prev    next >
Pascal/Delphi Source File  |  1989-12-28  |  3KB  |  94 lines

  1. (* ------------------------------------------------------ *)
  2. (*                      MEMORY.PAS                        *)
  3. (*  Ermittelt gesamtes und freies RAM/EMS/Extended Memory *)
  4. (*           Turbo Pascal Versionen 4.0 und 5.x           *)
  5. (*    Copyright (c) 1989  Karsten Gieselmann & TOOLBOX    *)
  6. (* ------------------------------------------------------ *)
  7.  
  8. PROGRAM Memory;
  9.  
  10. {$M 2048, 0, 655360}
  11. {B-,I-,R-,S-,V-}              (* keine Laufzeitprüfungen! *)
  12.  
  13. USES
  14.   DOS, EMS, XMS, Utility;
  15.  
  16. VAR
  17.   MemAvail, MaxAvail, TotalEms,
  18.   AvailEms, Version, Revision : WORD;
  19.  
  20. FUNCTION DosVersion : WORD;
  21.   (* ermittelt die DOS-Versionsnummer; High-Byte enthält
  22.      die Haupt-, Low-Byte die Unterversionsnummer.        *)
  23. VAR
  24.   Regs : Registers;
  25. BEGIN
  26.   Regs.AH := $30;
  27.   MsDos(Regs);
  28.   DosVersion := Regs.AX;
  29. END;
  30.  
  31. FUNCTION ExtendedMemorySize : WORD;
  32.   (* prüft, ob und wieviel Extended Memory installiert
  33.      ist; die Methode funktioniert unabhängig vom HIMEM-
  34.      Treiber. Der saubere Weg über den Interrupt 15h funk-
  35.      tioniert leider nicht, da HIMEM.SYS die betreffende
  36.      Funktion abfängt und "Kein Extended Memory" meldet!  *)
  37. VAR
  38.   Lo, Hi : WORD;
  39. BEGIN
  40.   Port[$70] := $30;  Lo := Port[$71];   (* CMOS-RAM lesen *)
  41.   Port[$70] := $31;  Hi := Port[$71];
  42.   ExtendedMemorySize := Hi*256 + Lo;
  43. END;
  44.  
  45. BEGIN                                    (* Hauptprogramm *)
  46.   StartUp('MEMORY - RAM/EMS/Extended Memory Information');
  47.   WriteLn('Hauptspeicher verwaltet von DOS ',
  48.            VersionStr(Lo(DosVersion), Hi(DosVersion)));
  49.   WriteLn(MemW[$40:$13]:6, ' KByte installiert,');
  50.   WriteLn(MemW[PrefixSeg-1:3] div 64:6, ' KByte frei.');
  51.   WriteLn;
  52.  
  53.   IF ExtendedMemorySize <> 0 THEN BEGIN
  54.     IF XMS.Installed THEN BEGIN
  55.       XMS.GetVersion(Version, Revision);
  56.       XMS.QueryMemory(MemAvail, MaxAvail);
  57.       WriteLn('Extended Memory verwaltet von XMS ',
  58.                VersionStr(Hi(Revision), Lo(Revision)));
  59.       WriteLn(ExtendedMemorySize:6, ' KByte installiert,');
  60.       IF XMS.HMA_Avail THEN BEGIN
  61.         Write('    64 KByte High Memory Area ');
  62.         IF XMS.RequestHMA($FFFF) THEN BEGIN
  63.           WriteLn('frei,');
  64.           XMS.ReleaseHMA;
  65.         END ELSE BEGIN
  66.           WriteLn('belegt,');
  67.         END;
  68.       END;
  69.       WriteLn(MemAvail:6, ' KByte gesamt frei,');
  70.       WriteLn(MaxAvail:6, ' KByte verfügbar.');
  71.     END ELSE BEGIN
  72.       WriteLn('Extended Memory wird nicht verwaltet,');
  73.       WriteLn(ExtendedMemorySize:6, ' KByte installiert.');
  74.     END;
  75.   END ELSE BEGIN
  76.     WriteLn('Extended Memory ist nicht installiert!');
  77.   END;
  78.   WriteLn;
  79.  
  80.   IF EMS.Installed THEN BEGIN
  81.     EMS.QueryMemory(TotalEms, AvailEms);
  82.     WriteLn('Expanded Memory verwaltet von EMS ',
  83.              EMS.GetVersion shr $04, '.',
  84.              EMS.GetVersion and $0F);
  85.     WriteLn(TotalEms*16:6, ' KByte installiert,');
  86.     WriteLn(AvailEms*16:6, ' KByte frei.');
  87.   END ELSE BEGIN
  88.     WriteLn('Expanded Memory ist nicht installiert!');
  89.   END;
  90.  
  91. END.
  92. (* ------------------------------------------------------ *)
  93. (*                 Ende von MEMORY.PAS                    *)
  94.