
    Das Programm MCBLIST zeigt diverse Informationen zur Speicherbelegung

 Tastenfunktionen :
      F1 - diesen Text anzeigen
      F2 - Memory Control Blocks anzeigen (Default)
      F3 - Interrupt Vektoren anzeigen
      F4 - Speicherkonfiguration anzeigen
      F5 - Anzeige der Gerätetreiber
      F6 - Anzeige der Datei C:\CONFIG.SYS
      F7 - alle Fenster schließen
      F8 - Erweiterte Information zu den MCBs
      F9 - Memory- Dump (HEX / ASCII)
     F10 - Ändern Anzeigemodus für MCB- Größe
                                                 ( mehr mit Cursor abwärts )
Alt Esc  - Programmende ( egal, wieviele Fenster offen sind )
Shift F1 oder <Esc> - das oberste Fenster schließen
Shift F5 - Restaurieren der Interrupt- Vektoren aus File MCBLIST.SAV und
           Freigabe der über Save Interrupts gelegenen MCBs
Shift F6 - wie Shift F5, mit Abschalten des Maus Event
Shift F9 - Speichern der Interrupt Vektoren in MCBLIST.SAV

  Alt F5 - wie Shift F5 unter Umgehung der Mutterprozess- Sperre
  Alt F6 - wie Shift F6 unter Umgehung der Mutterprozess- Sperre
 Alt F5 / Alt F6 sind nur als absolute Notfall- Lösung zu verwenden !

 Mit den Cursortasten kann im aktuellen Fenster gescrollt werden
 (wenn möglich auch horizontal)
 Mit Control-Cursortasten kann die Lage,
 mit Alt-Cursortasten die Größe der Fenster verändert werden.

 MCBLIST.EXE darf nicht umbenannt werden !

   Mausbedienung :
   ═══════════════
 Wenn ein Maustreiber neueren Datums vorhanden ist, ist ein Mauscursor zu
 sehen. Dann können in den oberen 2 Bildschirmzeilen die Funktionstasten
 mit einem Mausklick aktiviert werden.
 Im aktiven Fenster sind die Rahmen '═' Scrollbalken zum auf- bzw. abwärts
 Scrollen (linke Taste) und rechts/links Scrollen (rechte Taste).
 Das Zeichen '╒' hat die HOME- Funktion, '╛' die END- Funktion.
 Weitere Buchstaben, die als Tasteneingabe interpretiert werden sind '+-'.
 Die rechte und linke Maustaste zusammen haben die Funktion der <Esc>- Taste.
 Im DUMP- Fenster können HEX- Werte durch anklicken mit der Maus eingegeben
 werden. ( Linke Taste = Segment, rechte Taste = Offset der Dump- Adresse,
 mittlere Taste oder Shift- linke Taste = Segment und Offset ).
 Bei Werten, die byteweise angezeigt werden ( im DUMP- Fenster 2-stellig ), 
 muß entsprechend der INTEL Low/High- Notation des Prozessors das Lowbyte 
 angeklickt werden.
 Das DUMP- Fenster wird automatisch aktiviert, wenn auf einem HEX- Digit ein
 Mausklick erfolgt.

   Kommandozeilenparameter :
   ═════════════════════════
   Parameter können mit oder ohne führendem '-' oder '/' eingegeben werden,
   Groß- Kleinschreibung ist nicht relevant.
 MCBLIST ? = Anzeige dieses Textes
 MCBLIST M = Anzeige Interrupt- Vektoren
 MCBLIST S = Speichern Interrupt- Vektoren
 MCBLIST R = Restaurieren Interrupt- Vektoren
 MCBLIST RM = wie MCBLIST R mit Abschalten des Maus- Event- Interrupt
 MCBLIST R, RM oder S läßt sich auch aus Batchfiles benutzen.

   Interrupt Vektoren speichern :
   ══════════════════════════════
 Mit diesem Kommando werden die Interrupt- Vektoren $00..$CF im File
 MCBLIST.SAV im Directory von MCBLIST.EXE gespeichert.
 Zusätzlich wird der letzte MCB (ggf. auch über dem Video- Adapter)
 gespeichert - diese Adresse wird in der Liste mit
  <─────  save Interrupts  ─────>   bzw.
  <─────  save Interrupts (jenseits)  ─────> markiert.
 Residente Programme, die hinter dieser Marke geladen sind, können
 durch Restaurieren der Interrupt- Vektoren aus dem Speicher entfernt
 werden.
 Soll ein Programm entfernt werden, das den Maus- Event- Interrupt nutzt
 (z.B. ein Mausmenü- Programm), muß UNBEDINGT der Maus- Event deaktiviert
 werden ! ( MCBLIST RM oder <Shift-F6> statt <Shift-F5> )
 Der Maus- Event- Vektor ist für MCBLIST leider nicht immer sichtbar.

   Interrupt Vektoren restaurieren :
   ═════════════════════════════════
 Die Interruptvektoren können nur restauriert und die Programme nach SAVE
 INTERRUPS freigegeben werden, wenn bei diesem Vorhaben nicht der Mutter-
 prozess von MCBLIST betroffen ist. Der Mutterprozess könnte z.B. ein
 nach dem SAVE INTERRUPTS geladener COMMAND oder NORTON COMMANDER sein.

 Nach Freigabe von MCBs sind diese bis zum Verlassen des Programms
 noch vorhanden und auch auf dem Bildschirm zu sehen.
 Nach Beenden des Programms räumt MSDOS aber mit ihnen auf.

   Anzeige der Memory Control Blocks :
   ═══════════════════════════════════
 Unter MCB wird die Adresse des MCB angezeigt, unter PSP die Adresse des
 Programm Segment Prefix, zu dem der MCB gehört.
 Mehrere MCBs können auf einen PSP verweisen.
 Im Allgemeinen existiert für jedes Programm ein MCB für das Environment
 und ein MCB für das Programm selbst.
 Der Environment- MCB hat nur wenige Bytes Länge - abhängig von der Größe
 der ENVIRONMENT- Variablen und seines eigenen Programmnamens ( incl.
 Suchpfad). Im Environment kann der Programmname gefunden werden, im PSP
 die Kommandozeile.
 Ausnahmen bilden Environments für Batchfiles (meistens 48 Bytes groß).
 Ein Programm kann auch sein Environment freigeben, dann wird dies
 vom Environment des nächsten geladenen Programms überschrieben.
 Außerdem kann ein Programm zusätzliche MCBs anfordern, für dynamisch
 verwaltete Treiber oder Pufferspeicher. (Ächt ätzend)

 Der vom DOS belegte Speicherplatz besitzt keinen MCB.
 Der MCB mit PSP- Adresse 8 markiert den Speicherplatz, der von CONFIG.SYS
 für Buffer, Stacks, FCBs und SYS- Files belegt wird.
 Bei Nutzung des Speichers hinter dem Video- Adapter können eventuell auch
 2 MCBs mit PSP- Adresse 8 existieren.
 Der letzte MCB markiert den freien Speicher.
 Bei Nutzung des Speichers hinter dem Video- Adapter ist natürlich auch vor
 dem Video- Adapter freier Speicher zu sehen.
 Der MCB vor dem freien Speicher enthält das aktuelle Environment und somit
 den Pfad und Programmnamen von MCBLIST.EXE
 Weiterhin existiert ein Ur- Environment mit der Größe, die im SHELL =
 Kommando in CONFIG.SYS angegeben wurde.
 Der erste COMMAND.COM (falls mehrere existieren ist das interessant) ist
 mit '<1>' gekennzeichnet.

 Ist PSP = 0, ist der Zugehörige Speicherblock freigegeben, das ist
 auch mit Videoattribut Dunkelgrau markiert.
 Bei Environments wird der Programmname angezeigt.
 Bei PSPs wird die Kommandozeile eingeschlossen in '≥≤' angezeigt
 Die Anzeige '≥φ≤' zeigt eine ungültige Kommandozeile an.
 Mit '≡' wird ein Batchfile markiert
 Die hellen Zahlen sind die aktuellen Interrupt- Vektor- Nummern (HEX), die
 in den entsprechenden Speicherblock zeigen.
 Blau unterlegt sind Unterschiede zum gespeicherten Zustand und grün mit
 schwarzem Hintergrund sind die Vektoren beim Speichern.

 Der SHUTDOWN- Pointer wird als 'SDP' angezeigt.
 Der MODE- Vektor wird als 'MODE' angezeigt.
 Der MODE- Vektor wird vom residenten MODE.COM zur Ausgabeumleitung benutzt
 Programme, die den MODE- Vektor auf sich umgeleitet haben, sollten nicht
 freigegeben werden !

 Nach der Länge wird eingeschlossen in '[]' ein eventuell vorhandener Text
 angezeigt, der im MCB gefunden wurde.

 Die Anzeige !!!!! im letzten MCB fehlen nnn Bytes !!!!! weist darauf hin,
 daß sich ein Programm am Ende des Speichers versteckt hat - Vorsicht !
 Bei Speicher <= 640k Bytes wird eine Warnung gegeben, wenn die Speicher-
 größe kein ganzzahliges Vielfaches von 64k Bytes ist, immer, wenn die
 Speichergröße kein ganzzahliges Vielfaches von 32k- und 16k Bytes ist;
 in diesem Fall vermute ich ein verstecktes Virus.
 Die Meldung !!!!! Speichergröße ist kein Vielfaches von 64k !!!!! ist bei
 PS/2- Systemen und bei einigen Plattencontrollern normal, solange kein 
 SAVE- File existiert, weil diese immer Speicherplatz vom Systemspeicher 
 abzweigen. Erscheint diese Warnung trotz bestehenden SAVE- Files, ist wirk-
 lich etwas faul !

   Interrupt Vektoren Anzeigen :
   ═════════════════════════════
 Hintergrund Blau   : seit Save veränderte Vektoren
 Schrift Dunkelgrau : Vektor = NIL
 Schrift Hellgrau   : Vektor zeigt ins BIOS
 andere Farben dienen nur zur Unterscheidung ungleicher aufeinander-
 folgender Adressen.
 ! hinter dem Vektor markiert, daß er auf IRET zeigt.
 * hinter dem Vektor zeigt an, daß er vom BIOS als illegaler Interrupt 
 behandelt wird ( falls diese Anzeige funktioniert ).

 Bei Nutzung von Speicher über dem Video- Adapter ist es bei den meisten
 NEAT BIOS Varianten möglich, im Segment F000 32k Speicher zu verwenden.
 Trotzdem haben die Interrupt- Vektoren das Segment F000 !

   Speicherbelegung Anzeigen :
   ═══════════════════════════
 Die Speicherbelegungsanzeige zeigt bei Nutzung von Speicher oberhalb des
 Video- Adapters als (BIOS) einen höheren Wert als (SETUP).

 Ist ein HIMEM- Treiber installiert, wird angezeigt :
 HMA - der Speicher über 1 MB, der im REAL-MODE verfügbar ist.
 XMA - Extended Memory, das für den HIMEM- Treiber verfügbar ist
  (hier sind schon die Werte für RAMDISK, CACHE und ähnliches abgezogen).
 UMA - Speicherbereich in den Segmenten $0A000..$0F000
  ( falls der Treiber diese Funktion unterstützt ).

 Bei vorhandenem EMS- Treiber werden die Version, die Pageframe- Adresse,
 der gesamte und der verfügbare EMS- Speicher angezeigt.

 Die Anzeige des Extended RAM zeigt den über INT 15H ermittelten Wert; der
 Wert kann bei vorhandenem HIMEM- Treiber manchmal 0 sein, obwohl Extended
 RAM frei ist. In jedem Fall sind eventuell vorhandene RAMDISKs und CACHE-
 Speicher vom Totalen Extended RAM abgezogen.

 MCBLIST kann keine Adresskonflikte im Extended RAM erkennen !

 Die Anzahl verfügbare File- Handles kann 20 nicht überschreiten, auch wenn
 andere Programme bei FILES = >20 in CONFIG.SYS eventuell mehr Filehandles
 verwalten können.

 Die Speicherbelegung A000..F000 zeigt in 16-k Blocks an, wo in diesem
 Speicherbereich RAM, BIOS- EPROMs und die EMS- Pageframe erkannt wurden.
 Bei NEAT- Boards kann BIOS auch im RAM liegen; RAM wird natürlich nur dort
 erkannt, wo der Schreibzugriff erlaubt ist.
 'undefin.' zeigt an, daß an dieser Adresse kein definierter Wert aus dem
 Speicher gelesen werden kann.

 Es werden auch Informationen zum evtwl. vorhandenen Maustreiber angezeigt.

 Noch einige kleine Hinweise :
 MCBLIST braucht SEHR viel Speicher - wenn alle Fenster offen sind, 
 deutlich über 200k Bytes.
 Wenn Sie MCBLIST neu compilieren, fügen Sie anschließend mit 
 ADDTEXT MCBLIST MCBLIST.HLP 
 das Helpfile an MCBLIST.EXE an, dann muß MCBLIST.HLP nicht auf demselben
 Directory wie MCBLIST.EXE sein.
 Wenn Sie MCBLIST.HLP verändern, werden die Änderungen natürlich auch nur
 nach dem ADDTEXT angezeigt.
 Zum Compilieren von MCBLIST müssen alle UNITs im FAR- Model compiliert
 werden - den ersten Absturz wegen nichtberücksichtigung dieser Tatsache 
 habe ich schon hinter mir.

 --- diesen Text nicht länger als 249 Zeilen machen ! ---
