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