home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* MEMORY.PAS *)
- (* Ermittelt gesamtes und freies RAM/EMS/Extended Memory *)
- (* Turbo Pascal Versionen 4.0 und 5.x *)
- (* Copyright (c) 1989 Karsten Gieselmann & TOOLBOX *)
- (* ------------------------------------------------------ *)
-
- PROGRAM Memory;
-
- {$M 2048, 0, 655360}
- {B-,I-,R-,S-,V-} (* keine Laufzeitprüfungen! *)
-
- USES
- DOS, EMS, XMS, Utility;
-
- VAR
- MemAvail, MaxAvail, TotalEms,
- AvailEms, Version, Revision : WORD;
-
- FUNCTION DosVersion : WORD;
- (* ermittelt die DOS-Versionsnummer; High-Byte enthält
- die Haupt-, Low-Byte die Unterversionsnummer. *)
- VAR
- Regs : Registers;
- BEGIN
- Regs.AH := $30;
- MsDos(Regs);
- DosVersion := Regs.AX;
- END;
-
- FUNCTION ExtendedMemorySize : WORD;
- (* prüft, ob und wieviel Extended Memory installiert
- ist; die Methode funktioniert unabhängig vom HIMEM-
- Treiber. Der saubere Weg über den Interrupt 15h funk-
- tioniert leider nicht, da HIMEM.SYS die betreffende
- Funktion abfängt und "Kein Extended Memory" meldet! *)
- VAR
- Lo, Hi : WORD;
- BEGIN
- Port[$70] := $30; Lo := Port[$71]; (* CMOS-RAM lesen *)
- Port[$70] := $31; Hi := Port[$71];
- ExtendedMemorySize := Hi*256 + Lo;
- END;
-
- BEGIN (* Hauptprogramm *)
- StartUp('MEMORY - RAM/EMS/Extended Memory Information');
- WriteLn('Hauptspeicher verwaltet von DOS ',
- VersionStr(Lo(DosVersion), Hi(DosVersion)));
- WriteLn(MemW[$40:$13]:6, ' KByte installiert,');
- WriteLn(MemW[PrefixSeg-1:3] div 64:6, ' KByte frei.');
- WriteLn;
-
- IF ExtendedMemorySize <> 0 THEN BEGIN
- IF XMS.Installed THEN BEGIN
- XMS.GetVersion(Version, Revision);
- XMS.QueryMemory(MemAvail, MaxAvail);
- WriteLn('Extended Memory verwaltet von XMS ',
- VersionStr(Hi(Revision), Lo(Revision)));
- WriteLn(ExtendedMemorySize:6, ' KByte installiert,');
- IF XMS.HMA_Avail THEN BEGIN
- Write(' 64 KByte High Memory Area ');
- IF XMS.RequestHMA($FFFF) THEN BEGIN
- WriteLn('frei,');
- XMS.ReleaseHMA;
- END ELSE BEGIN
- WriteLn('belegt,');
- END;
- END;
- WriteLn(MemAvail:6, ' KByte gesamt frei,');
- WriteLn(MaxAvail:6, ' KByte verfügbar.');
- END ELSE BEGIN
- WriteLn('Extended Memory wird nicht verwaltet,');
- WriteLn(ExtendedMemorySize:6, ' KByte installiert.');
- END;
- END ELSE BEGIN
- WriteLn('Extended Memory ist nicht installiert!');
- END;
- WriteLn;
-
- IF EMS.Installed THEN BEGIN
- EMS.QueryMemory(TotalEms, AvailEms);
- WriteLn('Expanded Memory verwaltet von EMS ',
- EMS.GetVersion shr $04, '.',
- EMS.GetVersion and $0F);
- WriteLn(TotalEms*16:6, ' KByte installiert,');
- WriteLn(AvailEms*16:6, ' KByte frei.');
- END ELSE BEGIN
- WriteLn('Expanded Memory ist nicht installiert!');
- END;
-
- END.
- (* ------------------------------------------------------ *)
- (* Ende von MEMORY.PAS *)