home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / spezial / 11 / map.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1989-04-17  |  3.4 KB  |  99 lines

  1. (* ┌───────────────────────────────────────────────────────────────────────┐
  2.    │    MAP (3.0)  -  Ausgabe des Belegungsplanes des PC-Hauptspeichers    │
  3.    │                                                                       │
  4.    │    Copyright (c) 1987,1988,1989  Karsten Gieselmann & DMV Software    │
  5.    └───────────────────────────────────────────────────────────────────────┘ *)
  6.  
  7. {$IFDEF Ver40}                      (* Compilerschalter für Turbo Pascal 4.0 *)
  8.   {$R-,S-,I-,F-,V-,B-,N-}
  9. {$ENDIF}
  10.  
  11. {$IFDEF Ver50}                      (* Compilerschalter für Turbo Pascal 5.0 *)
  12.   {$R-,S-,I-,F-,V-,B-,N-,A-,E-,O-}
  13. {$ENDIF}
  14.  
  15. {$M 2048, 1024, 655360}                             (* Speicherkonfiguration *)
  16.  
  17.  
  18. Program Map;
  19.  
  20. Uses  Dos, ProgMap;
  21.  
  22. Const LastIntr = $7F;              (* Test auf Anzapfen bis zu diesem Vektor *)
  23.  
  24. Var   IntrCount,                         (* Zähler für angezapfte Interrupts *)
  25.       i           : Byte;
  26.       FreeMemory  : LongInt;      (* Verbleibende RAM-Speichergröße in Bytes *)
  27.       ProgPtr     : EntryPtr;
  28.       IntrSegment,
  29.       NextSegment : Word;
  30.       Hooked      : Boolean;
  31.  
  32. Const HexDigit    : Array[0..$F] of Char = '0123456789ABCDEF';
  33.  
  34.  
  35. Function HexByte(b : Byte) : String;
  36.  
  37.    Begin
  38.    HexByte[0] := #2;
  39.    HexByte[1] := HexDigit[b shr  4];
  40.    HexByte[2] := HexDigit[b and $F];
  41.    End;
  42.  
  43.  
  44. Function HexWord(w : Word) : String;
  45.  
  46.    Begin
  47.    HexWord[0] := #4;
  48.    HexWord[1] := HexDigit[Hi(w) shr  4];
  49.    HexWord[2] := HexDigit[Hi(w) and $F];
  50.    HexWord[3] := HexDigit[Lo(w) shr  4];
  51.    HexWord[4] := HexDigit[Lo(w) and $F];
  52.    End;
  53.  
  54.  
  55. Begin
  56. SetIntVec($00, SaveInt00);                 (* benutzte Vektoren restaurieren *)
  57. SetIntVec($23, SaveInt23);
  58. SetIntVec($24, SaveInt24);
  59. MakeMemoryMap(ProgPtr);
  60. Write(^M^J'RAM Memory Map 3.0'^M^J,
  61.       'Copyright (c) 1987,1988,1989  Karsten Gieselmann & DMV Software'^M^J^M^J,
  62.       ' Address    Program    Seg    Bytes                Hooked Vectors'^M^J,
  63.       '─────────   ────────   ───   ──────   ──────────────────────────────────────'^M^J);
  64. While ProgPtr <> Nil do
  65.    Begin
  66.    With ProgPtr^ do
  67.       If Next <> Nil then
  68.          Begin
  69.          Write(HexWord(Segment), ':0000   ');
  70.          Write(Name, '':8-Length(Name));
  71.          Write(Segs:6, LongInt(Paragraphs) shl 4:9, ' ');
  72.          IntrCount := 0;
  73.          NextSegment := Next^.Segment;
  74.          If Name <> 'DOS' then           (* das DOS zapft keine Vektoren an! *)
  75.             For i:=$00 to LastIntr do
  76.                Begin
  77.                IntrSegment := MemW[0:i shl 2+2] + MemW[0:i shl 2] shr 4;
  78.                If Segment <= IntrSegment then
  79.                   If IntrSegment < NextSegment then            (* angezapft! *)
  80.                      Begin
  81.                      If IntrCount mod 10 = 0 then
  82.                         If IntrCount <> 0 then
  83.                            Write(^M^J, '':36);
  84.                      Write(HexByte(i):4);
  85.                      Inc(IntrCount);
  86.                      End;
  87.                End;
  88.          WriteLn;
  89.          End
  90.       else                         (* letzter Eintrag ist laufendes Progamm! *)
  91.          Begin
  92.          FreeMemory := LongInt(Paragraphs + UnUsed) shl 4;
  93.          WriteLn(^M^J'Free RAM Memory:', FreeMemory:19);
  94.          WriteLn(^M^J'Next PSP will be created at    ', HexWord(Segment));
  95.          End;
  96.    ProgPtr := ProgPtr^.Next;
  97.    End;
  98. End.
  99.