home *** CD-ROM | disk | FTP | other *** search
- (* ┌───────────────────────────────────────────────────────────────────────┐
- │ MAP (3.0) - Ausgabe des Belegungsplanes des PC-Hauptspeichers │
- │ │
- │ Copyright (c) 1987,1988,1989 Karsten Gieselmann & DMV Software │
- └───────────────────────────────────────────────────────────────────────┘ *)
-
- {$IFDEF Ver40} (* Compilerschalter für Turbo Pascal 4.0 *)
- {$R-,S-,I-,F-,V-,B-,N-}
- {$ENDIF}
-
- {$IFDEF Ver50} (* Compilerschalter für Turbo Pascal 5.0 *)
- {$R-,S-,I-,F-,V-,B-,N-,A-,E-,O-}
- {$ENDIF}
-
- {$M 2048, 1024, 655360} (* Speicherkonfiguration *)
-
-
- Program Map;
-
- Uses Dos, ProgMap;
-
- Const LastIntr = $7F; (* Test auf Anzapfen bis zu diesem Vektor *)
-
- Var IntrCount, (* Zähler für angezapfte Interrupts *)
- i : Byte;
- FreeMemory : LongInt; (* Verbleibende RAM-Speichergröße in Bytes *)
- ProgPtr : EntryPtr;
- IntrSegment,
- NextSegment : Word;
- Hooked : Boolean;
-
- Const HexDigit : Array[0..$F] of Char = '0123456789ABCDEF';
-
-
- Function HexByte(b : Byte) : String;
-
- Begin
- HexByte[0] := #2;
- HexByte[1] := HexDigit[b shr 4];
- HexByte[2] := HexDigit[b and $F];
- End;
-
-
- Function HexWord(w : Word) : String;
-
- Begin
- HexWord[0] := #4;
- HexWord[1] := HexDigit[Hi(w) shr 4];
- HexWord[2] := HexDigit[Hi(w) and $F];
- HexWord[3] := HexDigit[Lo(w) shr 4];
- HexWord[4] := HexDigit[Lo(w) and $F];
- End;
-
-
- Begin
- SetIntVec($00, SaveInt00); (* benutzte Vektoren restaurieren *)
- SetIntVec($23, SaveInt23);
- SetIntVec($24, SaveInt24);
- MakeMemoryMap(ProgPtr);
- Write(^M^J'RAM Memory Map 3.0'^M^J,
- 'Copyright (c) 1987,1988,1989 Karsten Gieselmann & DMV Software'^M^J^M^J,
- ' Address Program Seg Bytes Hooked Vectors'^M^J,
- '───────── ──────── ─── ────── ──────────────────────────────────────'^M^J);
- While ProgPtr <> Nil do
- Begin
- With ProgPtr^ do
- If Next <> Nil then
- Begin
- Write(HexWord(Segment), ':0000 ');
- Write(Name, '':8-Length(Name));
- Write(Segs:6, LongInt(Paragraphs) shl 4:9, ' ');
- IntrCount := 0;
- NextSegment := Next^.Segment;
- If Name <> 'DOS' then (* das DOS zapft keine Vektoren an! *)
- For i:=$00 to LastIntr do
- Begin
- IntrSegment := MemW[0:i shl 2+2] + MemW[0:i shl 2] shr 4;
- If Segment <= IntrSegment then
- If IntrSegment < NextSegment then (* angezapft! *)
- Begin
- If IntrCount mod 10 = 0 then
- If IntrCount <> 0 then
- Write(^M^J, '':36);
- Write(HexByte(i):4);
- Inc(IntrCount);
- End;
- End;
- WriteLn;
- End
- else (* letzter Eintrag ist laufendes Progamm! *)
- Begin
- FreeMemory := LongInt(Paragraphs + UnUsed) shl 4;
- WriteLn(^M^J'Free RAM Memory:', FreeMemory:19);
- WriteLn(^M^J'Next PSP will be created at ', HexWord(Segment));
- End;
- ProgPtr := ProgPtr^.Next;
- End;
- End.