home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / tools / debugger / mdebug / mdebug21.exe / MDEBUG.PRT < prev   
Encoding:
Text File  |  1992-06-06  |  320.0 KB  |  10,441 lines

  1.     ───────────────────────────────────────────────────────────────────
  2.  
  3.  
  4.  
  5.  
  6.  
  7.                 ┌────────────────────────────────────────┐
  8.                 │                                        │█
  9.                 │             MDEBUG V2.00               │█
  10.                 │                                        │█
  11.                 │          Release 01.07.1992            │█
  12.                 │                                        │█
  13.                 │ Highperformance Debugging Tool für PCs │█
  14.                 │                                        │█
  15.                 └────────────────────────────────────────┘█
  16.                  ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  17.  
  18.  
  19.  
  20.  
  21.                       programmiert von:
  22.  
  23.                       ┌─────────────────────────┐
  24.                       │  Bernd Schemmer         │█
  25.                       │  Ondrup 117             │█
  26.                       │  D-4710 Lüdinghausen 2  │█
  27.                       └─────────────────────────┘█
  28.                        ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  29.  
  30.  
  31.  
  32.  
  33.  
  34.        ╔════════════════════════════════════════════════════════╗
  35.        ╟────────────────────────────────────────────────────────╢█
  36.        ║                                                        ║█
  37.        ║             Benutzer- und Referenz-Handbuch            ║█
  38.        ║                                                        ║█
  39.        ╚════════════════════════════════════════════════════════╝█
  40.         ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.     ───────────────────────────────────────────────────────────────────
  54.              Copyright (c) 1988 - 1992 by Bernd Schemmer
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.     Inhalt                                                 Seite
  66.     ────────────────────────────────────────────────────────────
  67.  
  68.  
  69.     Kurzbeschreibung von MDEBUG ..........................     1
  70.     Benutzung von MDEBUG .................................     2
  71.     Nichtgewerbliche Weitergabe von MDEBUG ...............     3
  72.     Vertrieb von MDEBUG über PD-Händler und Mailboxen ....     4
  73.     Garantieausschlußerklärung ...........................     5
  74.     System-Vorraussetzungen ..............................     6
  75.     Einschränkungen ......................................     6
  76.     Vorbereitungen vor dem Start .........................     7
  77.     Eintragen der Registrierungsnummer ...................     7
  78.     Passwort .............................................     8
  79.     Prozessnummer überprüfen .............................    10
  80.     Starten von MDEBUG ...................................    11
  81.     Parameter für MDEBUG .................................    11
  82.       INT=[0|{nn}{,N}] ...................................    11
  83.       CoM=nn .............................................    12
  84.       CoD=nn .............................................    12
  85.       CoHm=nn ............................................    12
  86.       RoM=nn .............................................    13
  87.       RoD=nn .............................................    13
  88.       RoH=nn .............................................    13
  89.       SEG=[nnnn|reg] .....................................    13
  90.       OFF=[nnnn|reg] .....................................    13
  91.       STD ................................................    13
  92.       STM ................................................    13
  93.       STH ................................................    14
  94.       KEY=X{n} ...........................................    14
  95.       SET ................................................    14
  96.       EXIT ...............................................    15
  97.       &name{,{nnnn}}{,{mmmm}}{,N} ........................    16
  98.       *name{,{nnnn}}{,{mmmm}}{,N} ........................    18
  99.       HELP{={pfad}{name}} ................................    19
  100.       NOHELP .............................................    19
  101.       BUF=nnnn ...........................................    20
  102.       TEXT{=nnnn}{,m} ....................................    20
  103.       GRAPH ..............................................    21
  104.       PRO=nn .............................................    21
  105.       ? ..................................................    21
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.     ────────────────────────────────────────────────────────────────────────────────
  120.     Inhalts-Verzeichnis                                                     I    1
  121.  
  122.  
  123.  
  124.  
  125.     Inhalt                                                 Seite
  126.     ────────────────────────────────────────────────────────────
  127.  
  128.  
  129.       DEF ................................................    21
  130.       # ..................................................    22
  131.       MAKE ...............................................    22
  132.       MF2 ................................................    23
  133.       NoMF2 ..............................................    23
  134.       @ ..................................................    23
  135.     Errorlevel ...........................................    24
  136.     Voreinstellungen .....................................    24
  137.     Aufruf über den Hotkey ...............................    25
  138.     Beschreibung des Monitors ............................    26
  139.       Aufbau des Monitor-Fensters ........................    26
  140.       Tastenbelegung im Monitor ..........................    29
  141.     Beschreibung der Online-Hilfe ........................    38
  142.       Aufbau des Fensters der Online-Hilfe ...............    38
  143.       Tastenbelegung in der Online-Hilfe .................    39
  144.     Beschreibung des Interpreters ........................    40
  145.       Aufbau des Interpreter-Fensters ....................    40
  146.       Tasten-Belegung im Interpreter .....................    43
  147.       Tastenumbelegungen im Interpreter ..................    49
  148.       Befehle des Interpreters ...........................    49
  149.         ?{...} ...........................................    50
  150.         V{...} {reg1}{,}{reg2} ...........................    51
  151.         #26{...} {seg1:}[reg1|wert1] {...}{#26} ..........    51
  152.         #27{...} {seg1:}[reg1|wert1] .....................    52
  153.         #27{...}H {seg1:}[reg1|wert1] ....................    53
  154.         D{UMP} Mn ........................................    53
  155.         P{OINTER} {seg1:}[reg1|wert1] ....................    53
  156.         A{DD} {seg1:}[reg1|wert1],{seg2:}[reg2|wert2] ....    53
  157.         S{UB} {seg1:}[reg1|wert1],{seg2}[reg2|wert2] .....    53
  158.         a{dd} {seg1:}[reg1|wert1],{seg2:}[reg2|wert2] ....    53
  159.         s{ub} {seg1:}[reg1|wert1],{seg2}[reg2|wert2] .....    54
  160.         + {seg1:}[reg1|wert1] ............................    54
  161.         - {seg1:}[reg1|wert1] ............................    54
  162.         > {seg1:}[reg1|wert1] ............................    54
  163.         < {seg1:}[reg1|wert1] ............................    54
  164.         » {seg1:}[reg1|wert1],{seg2:}[reg2|wert2] ........    54
  165.         « {seg1:}[reg1|wert1],{seg2:}[reg2|wert2] ........    55
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.     ────────────────────────────────────────────────────────────────────────────────
  180.     Inhalts-Verzeichnis                                                     I    2
  181.  
  182.  
  183.  
  184.  
  185.     Inhalt                                                 Seite
  186.     ────────────────────────────────────────────────────────────
  187.  
  188.  
  189.         & {seg1:}[reg1|wert1],{seg2:}[reg2|wert2] ........    55
  190.         | {seg1:}[reg1|wert1],{seg2:}[reg2|wert2] ........    55
  191.         ! {seg1:}[reg1|wert1],{seg2:}[reg2|wert2] ........    55
  192.         T {seg1:}[reg1|wert1],{seg2:}[reg2|wert2] ........    55
  193.         N{EG} {seg1:}[reg1|wert1] ........................    55
  194.         M{OV} {seg1:}[reg1|wert1],{seg2:}[reg2|wert2] ....    56
  195.         C{OP}Y ...........................................    56
  196.         I{NT} [reg|wert] .................................    56
  197.         B b1{{,}b2..{,}bn} ...............................    57
  198.         G{O} [reg|wert] ..................................    58
  199.         / hilfreg ........................................    59
  200.         \ hilfreg ........................................    59
  201.         # hilfreg ........................................    59
  202.         W{AIT} ...........................................    59
  203.         H{OME} {[reg|wert]} ..............................    60
  204.         H{...}N {[reg|wert]} .............................    60
  205.         ¿ [reg|wert] .....................................    61
  206.         ¿H [reg|wert] ....................................    62
  207.         F {n} ............................................    62
  208.         FX ...............................................    62
  209.         @ {...} ..........................................    62
  210.         Q{UIT} ...........................................    63
  211.         Q{UIT}R ..........................................    63
  212.         Q{UIT}L ..........................................    63
  213.         SH [suchmaske] {,}{...} ..........................    64
  214.       Bedeutung der Parameter ............................    69
  215.       Konstanten .........................................    73
  216.       Ausdruck ...........................................    75
  217.       Adressierung von Speicherstellen ...................    81
  218.       Syntax der Befehle .................................    81
  219.       Syntax der Operanden ...............................    84
  220.       Sonstiges ..........................................    84
  221.     Aufruf von MDEBUG im Graphikmodus ....................    86
  222.     Funktionen der Bildschirmtreiber .....................    87
  223.       Funktion 0  - Get Driver Status ....................    88
  224.       Funktion 1  - Init Driver ..........................    89
  225.       Funktion 2  - Save Graphik data ....................    89
  226.  
  227.  
  228.  
  229.  
  230.  
  231.  
  232.  
  233.  
  234.  
  235.  
  236.  
  237.  
  238.  
  239.     ────────────────────────────────────────────────────────────────────────────────
  240.     Inhalts-Verzeichnis                                                     I    3
  241.  
  242.  
  243.  
  244.  
  245.     Inhalt                                                 Seite
  246.     ────────────────────────────────────────────────────────────
  247.  
  248.  
  249.       Funktion 3  - Restore Graphik data .................    90
  250.       Funktion 4  - Show saved data ......................    90
  251.       Funktion 5  - Switch back to text screen ...........    91
  252.       Funktion 06 bis 7Fh - reserviert ...................    91
  253.       Funktion 80h bis 0FFh - reserviert .................    91
  254.     Erweiterungen von MDEBUG mittels Kommandotreiber .....    92
  255.     Funktionen der Kommandotreiber .......................    93
  256.       Funktion 0  - Get Status ...........................    94
  257.       Funktion 1  - Init Driver ..........................    95
  258.       Funktion 2  - Execute interpreter command ..........    96
  259.       Funktion 3  - Execute key in the monitor ...........   100
  260.       Funktion 4  - Execute key in the interpreter .......   101
  261.       Funktion 05h bis 0Ah - reserviert ..................   102
  262.       Funktion 10h - Get adress of the old interrupt 2Fh .   102
  263.       Funktion 11h - Start Driver ........................   103
  264.       Funktion 12h - End Driver ..........................   103
  265.       Funktion 13h bis 7Fh - reserviert ..................   104
  266.       Funktion 80h bis 0FFh - reserviert .................   104
  267.     Zusätzlicher User-Interrupt ..........................   105
  268.       Funktion 0 - Status ermitteln ......................   106
  269.       Funktion 1 - Ermittle Adresse der Hilfsregister ....   107
  270.       Funktion 2 - Status setzen .........................   108
  271.       Funktion 3 - Aufruf von MDEBUG .....................   109
  272.       Funktion 4 - Aufruf von MDEBUG mit den akt. Werten .   109
  273.       Funktion 5 - Lösche oder Setze Flags von MDEBUG ....   110
  274.       Funktion 6 - Ermittle Passwort-Status ..............   110
  275.       Funktion 7 - Ermittle aktiven Teil von MDEBUG ......   111
  276.       Sonstiges zum User-Int .............................   111
  277.     Anhang A .............................................   112
  278.       Fehlermeldungen beim Aufruf von MDEBUG .............   113
  279.       Meldungen des Interpreters von MDEBUG ..............   121
  280.       Weitere Meldungen des Interpreters von MDEBUG ......   122
  281.     Anhang B .............................................   123
  282.       Programm-Interna ...................................   123
  283.       Hinweise für die Fehlersuche - Trouble-Shooting ....   124
  284.       Stack-Überlauf .....................................   131
  285.       Tastatur-Codes .....................................   132
  286.  
  287.  
  288.  
  289.  
  290.  
  291.  
  292.  
  293.  
  294.  
  295.  
  296.  
  297.  
  298.  
  299.     ────────────────────────────────────────────────────────────────────────────────
  300.     Inhalts-Verzeichnis                                                     I    4
  301.  
  302.  
  303.  
  304.  
  305.     Inhalt                                                 Seite
  306.     ────────────────────────────────────────────────────────────
  307.  
  308.  
  309.       Make-Code der Aufruf-Taste .........................   134
  310.       Verträglichkeit gegenüber anderen Programmen .......   135
  311.     Anhang C .............................................   136
  312.       Installieren von MDEBUG ............................   137
  313.       Ändern der Tastenbelegung von MDEBUG ...............   138
  314.     Anhang D .............................................   145
  315.     Utilities und Beispieldateien zu MDEBUG ..............   145
  316.       MDEBUG.HLP .........................................   146
  317.       MDHELP.INP  (VV) ...................................   146
  318.       MDMKHLP.COM  (VV) ..................................   146
  319.       MDSHELP.COM  (VV) ..................................   152
  320.       SETMD.EXE ..........................................   152
  321.       SETREGNR.EXE  (VV) .................................   153
  322.       CALLMDB.COM  (VV) ..................................   153
  323.       TESTMD.PAS .........................................   157
  324.       TESTMD.EXE .........................................   157
  325.       CHECKMD.A86 ........................................   157
  326.       CHECKMD.OBJ ........................................   157
  327.       CALLMD.A86 .........................................   157
  328.       CALLMD.OBJ .........................................   157
  329.       MDCMD.A86 ..........................................   158
  330.       MDCMD.OBJ ..........................................   158
  331.       KONVERT.A86 ........................................   158
  332.       KONVERT.OBJ ........................................   158
  333.       UPSTR.BIN ..........................................   158
  334.       LOWSTR.BIN .........................................   158
  335.       UPSTR.A86 ..........................................   158
  336.       LOWSTR.A86 .........................................   158
  337.       SHOWINT.COM  (VV) ..................................   159
  338.       SHOW2FP.COM ........................................   167
  339.       FREESTCK.COM .......................................   167
  340.       MDCGADRV.ASM  (VV) .................................   167
  341.       MDHGCDRV.ASM  (VV) .................................   167
  342.       MDDRIVER.ASM  (VV) .................................   168
  343.       MDBSPDRV.ASM  (VV) .................................   168
  344.       MDBSPDRV.INC  (VV) .................................   168
  345.  
  346.  
  347.  
  348.  
  349.  
  350.  
  351.  
  352.  
  353.  
  354.  
  355.  
  356.  
  357.  
  358.  
  359.     ────────────────────────────────────────────────────────────────────────────────
  360.     Inhalts-Verzeichnis                                                     I    5
  361.  
  362.  
  363.  
  364.     Kurzbeschreibung von MDEBUG
  365.     ───────────────────────────
  366.  
  367.     MDEBUG ist  ein speicherresidentes Debugging-Tool für PCs bestehend
  368.     aus einem  Speichermonitor, einem  Interpreter mit eigener Program-
  369.     miersprache und einem interaktiven und selektiven DisAssembler.
  370.     MDEBUG  wurde ursprünglich für die Ermittlung  von undokumentierten
  371.     Strukturen des Betriebssystems MS-DOS  entwickelt,  kann aber viel-
  372.     fältig eingesetzt werden.  (z.B. zur Unterstützung bei der Program-
  373.     mierung).
  374.  
  375.     MDEBUG  sollte  nur von Programmierern mit gutem Wissen über  ihren
  376.     PC und dem Betriebssystem MS-DOS bzw. PC-DOS verwendet werden.
  377.  
  378.  
  379.  
  380.  
  381.  
  382.  
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.  
  401.  
  402.  
  403.  
  404.  
  405.  
  406.  
  407.  
  408.  
  409.  
  410.  
  411.  
  412.  
  413.  
  414.  
  415.  
  416.  
  417.  
  418.  
  419.     ────────────────────────────────────────────────────────────────────────────────
  420.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite    1
  421.  
  422.  
  423.  
  424.     Benutzung von MDEBUG
  425.     ────────────────────
  426.  
  427.     MDEBUG ist  ein  Shareware-Programm, dessen  Copyright  beim  Autor
  428.     liegt.
  429.  
  430.     Die Shareware-Version von MDEBUG kann für 4 Wochen getestet werden.
  431.     Danach  muß  entschieden werden, ob MDEBUG  weiter  benutzt  werden
  432.     soll oder  nicht. Falls  MDEBUG  nach der  Probezeit weiter benutzt
  433.     werden soll, muß die Vollversion erworben werden.
  434.  
  435.     Die Vollversion von MDEBUG kostet 75,- DM und kann mit dem Formular
  436.     aus der Datei MDEBUG.FRM bestellt werden.
  437.  
  438.     Die Vollversion von MDEBUG enthält:
  439.  
  440.     ┌───────────────────────────────────────────────────────────────────┐
  441.     │ - die neueste Version von MDEBUG incl. einer eigenen Registrie-   │█
  442.     │   rungsnummer.                                                    │█
  443.     │   Die Vollversion  ist  identisch  mit der Shareware-Version von  │█
  444.     │   MDEBUG. Allerdings kann die  Shareware-Meldung  beim Programm-  │█
  445.     │   start (incl.  der 'Wartezeit')  entfernt werden. Zudem ist der  │█
  446.     │   Parameter 'MAKE' nur in der Vollversion implementiert. (s.u.)   │█
  447.     │                                                                   │█
  448.     │ - mehrere  Utils zur  Unterstützung  von MDEBUG, teilweise incl.  │█
  449.     │   Quellcode                                                       │█
  450.     │                                                                   │█
  451.     │ - Unterstützung bei Problemen mit MDEBUG und bei der Programmie-  │█
  452.     │   rung von Bildschirm- oder Kommandotreibern für MDEBUG           │█
  453.     │                                                                   │█
  454.     │ - die Möglichkeit zum Bezug großer Updates von MDEBUG gegen eine  │█
  455.     │   Gebühr  deren  Höhe  sich  nach  der  Größe der  vorgenommenen  │█
  456.     │   Erweiterungen richtet.                                          │█
  457.     └───────────────────────────────────────────────────────────────────┘█
  458.      ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  459.  
  460.     Ein großes Update  ist eine Erweiterung von MDEBUG um neue Funktio-
  461.     nen - erkennbar daran, daß  die Hauptversionsnummer geändert wurde.
  462.     Die  Hauptversionnummer  besteht aus  den  Vorkommastellen  und der
  463.     ersten Nachkommastelle der Versionsnummer (bei V1.70 ist die Haupt-
  464.     versionsnummer z.B. 1.7).
  465.  
  466.  
  467.  
  468.  
  469.  
  470.  
  471.  
  472.  
  473.  
  474.  
  475.  
  476.  
  477.  
  478.  
  479.     ────────────────────────────────────────────────────────────────────────────────
  480.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite    2
  481.  
  482.  
  483.  
  484.     Ein  kleines Update  ist eine Korrektur von MDEBUG zur Behebung von
  485.     kleinen Fehlern  und Mängeln - erkennbar  daran,  daß sich  nur die
  486.     Revisions-Nummer (= 2. Nachkommastelle) oder nur das  Release-Datum
  487.     ändert  (ein kleines Update wäre z.B. der Wechsel von Version V1.70
  488.     zu V1.71).
  489.  
  490.     Kleine Updates können  von Besitzern der Vollversion gegen  Erstat-
  491.     tung  der  Porto- und  Verpackungskosten  jederzeit bezogen werden,
  492.     falls die Hauptversion der Vollversion von MDEBUG mit der Hauptver-
  493.     sion der aktuellen Version von MDEBUG übereinstimmt.
  494.  
  495.     Besitzer der  Vollversion von MDEBUG  dürfen diese  auf bis zu zwei
  496.     (ihnen gehörenden!) Computern gleichzeitig benutzen.
  497.  
  498.     Hinweis:
  499.  
  500.     Ein  gedrucktes  Handbuch  für  MDEBUG ist  im  Moment  noch  nicht
  501.     verfügbar,  Besitzer der Vollversion erhalten aber  eine Mitteilung
  502.     falls ein Handbuch verfügbar ist.
  503.  
  504.  
  505.     Nichtgewerbliche Weitergabe von MDEBUG
  506.     ──────────────────────────────────────
  507.  
  508.     Kopien  der Original-Diskette mit der Shareware-Version  von MDEBUG
  509.     können  und  sollen (!) beliebig oft  weitergegeben  werden solange
  510.     keins der Programme und keine der Dateien auf der Diskette geändert
  511.     oder  gelöscht  werden  und  keine  Dateien oder Programme ohne das
  512.     Einverständnis des Autors hinzugefügt werden.
  513.  
  514.     Die Vollversion darf - mit Ausnahme der Datei  MDEBUG_3.EXE - unter
  515.     Berücksichtigung der für  die Shareware-Version  angegebenen Bedin-
  516.     gungen ebenfalls weiter gegeben werden.  Die nur in der Vollversion
  517.     enthaltene  Datei MDEBUG_3.EXE  darf auf keinen Fall weiter gegeben
  518.     werden!
  519.  
  520.  
  521.  
  522.  
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532.  
  533.  
  534.  
  535.  
  536.  
  537.  
  538.  
  539.     ────────────────────────────────────────────────────────────────────────────────
  540.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite    3
  541.  
  542.  
  543.  
  544.     Vertrieb von MDEBUG über PD-Händler und Mailboxen
  545.     ─────────────────────────────────────────────────
  546.  
  547.     Jeder PD-Händler darf die  Shareware-Version von MDEBUG vertreiben,
  548.     solange folgende Punkte eingehalten werden:
  549.  
  550.     ┌───────────────────────────────────────────────────────────────────┐
  551.     │-Es dürfen keine Dateien auf der Diskette geändert oder gelöscht   │█
  552.     │ werden. D.h. alle in der Datei INHALT.LST aufgelisteten Dateien   │█
  553.     │ müssen in unveränderter Form vorhanden sein.                      │█
  554.     │                                                                   │█
  555.     │-Außer kleineren Info- oder Werbedateien dürfen ohne Absprache mit │█
  556.     │ dem Autor keine weiteren Dateien auf die Diskette kopiert werden. │█
  557.     │                                                                   │█
  558.     │-Es darf immer nur die neueste Version von MDEBUG vertrieben       │█
  559.     │ werden. Händler, die MDEBUG vertreiben wollen, sollten sich daher │█
  560.     │ auf meine Mailing-Liste für Update-Versionen setzen lassen. Der   │█
  561.     │ Bezug der Updates von MDEBUG kann auch über die DS (Deutsche      │█
  562.     │ Shareware) erfolgen.                                              │█
  563.     │                                                                   │█
  564.     │-Für den Vertrieb von MDEBUG darf eine Gebühr von bis zu 20,- DM   │█
  565.     │ verlangt werden, solange sichergestellt ist, daß der Käufer weiß, │█
  566.     │ das es sich hierbei um Gebühren des Vertriebs und NICHT um den    │█
  567.     │ Preis von MDEBUG handelt.                                         │█
  568.     │                                                                   │█
  569.     │-Der Katalog-Eintrag für MDEBUG muß immer auch den Namen des       │█
  570.     │ Autors - Bernd Schemmer - enthalten. Zudem muß aus dem Katalog    │█
  571.     │ klar ersichtlich sein, daß es sich um eine Shareware-Version      │█
  572.     │ handelt.                                                          │█
  573.     │ Die Begriffe Public Domain, Freie Software oder Freeware dürfen   │█
  574.     │ mit Bezug auf MDEBUG weder schriftlich noch mündlich verwendet    │█
  575.     │ werden.                                                           │█
  576.     └───────────────────────────────────────────────────────────────────┘█
  577.       ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  578.  
  579.      Für die  Katalog-Einträge sollte  die  Datei 'MDEBUG.TXT' bzw. ein
  580.      Auszug aus dieser verwendet werden.
  581.  
  582.      Für den  Vertrieb  von  MDEBUG über Mailboxen gelten ebenfalls die
  583.      obigen Bedingungen. Das  Packen ALLER  Dateien auf der Diskette in
  584.      ein neues Archiv ist für den Vertrieb über Mailboxen gestattet.
  585.  
  586.      Ich  behalte mir  vor,  Vertrieben oder Mailboxen, die gegen diese
  587.      Bedingungen verstoßen, den Vertrieb von MDEBUG zu untersagen.
  588.  
  589.  
  590.  
  591.  
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.  
  599.     ────────────────────────────────────────────────────────────────────────────────
  600.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite    4
  601.  
  602.  
  603.  
  604.     Garantieausschlußerklärung
  605.     ──────────────────────────
  606.  
  607.     Garantieausschlußerklärung für MDEBUG und die zugehörigen Utils und
  608.     Textdateien  mit  der  Dokumentation, im weiteren  'diese Software'
  609.     genannt, von  Bernd Schemmer, im weiteren 'der Autor' genannt:
  610.  
  611.     ┌───────────────────────────────────────────────────────────────────┐
  612.     │Der Autor gibt keine Garantien irgendeiner Art,  weder ausdrücklich│█
  613.     │noch implizit, einschliesslich unbegrenzt aller Garantien der  Ver-│█
  614.     │wendbarkeit und/oder Nichtverwendbarkeit für irgendeinen Zweck. Der│█
  615.     │Autor übernimmt keine Verpflichtungen für den Gebrauchswert  dieser│█
  616.     │Software  über den  Kaufpreis  dieser Software hinaus. Unter keinen│█
  617.     │Umständen  ist der  Autor  haftbar  für jedwede  Folgeschäden, ein-│█
  618.     │schliesslich aller entgangenen Gewinne  und Vermögensverluste, oder│█
  619.     │anderer  mittelbarer  und  unmittelbarer  Schäden,  die  durch  den│█
  620.     │Gebrauch  oder die  Nichtverwendbarkeit  dieser Software  und ihrer│█
  621.     │begleitenden Dokumentation entstehen. Dies gilt auch dann, wenn der│█
  622.     │Autor  über die  Möglichkeit solcher  Schäden unterrichtet war oder│█
  623.     │ist.                                                               │█
  624.     └───────────────────────────────────────────────────────────────────┘█
  625.       ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  626.  
  627.     Und noch was für die Juristen:
  628.  
  629.     ┌────────────────────────────────────────────────────────────────────┐
  630.     │Warenamen und eingetragene Warenzeichen werden in der Dokumentation │█
  631.     │ohne Gewährleistung einer freien Verwendung benutzt.                │█
  632.     └────────────────────────────────────────────────────────────────────┘█
  633.      ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  634.  
  635.  
  636.  
  637.  
  638.  
  639.  
  640.  
  641.  
  642.  
  643.  
  644.  
  645.  
  646.  
  647.  
  648.  
  649.  
  650.  
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658.  
  659.     ────────────────────────────────────────────────────────────────────────────────
  660.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite    5
  661.  
  662.  
  663.  
  664.     System-Vorraussetzungen
  665.     ───────────────────────
  666.  
  667.     Hardware:        IBM-PC/AT/Kompatibler mit einem beliebigem
  668.                      Graphikadapter (CGA, HGC, EGA, VGA, o.a.)
  669.  
  670.                      MDEBUG belegt ca. 16 K Hauptspeicher
  671.                      (Minimum, ohne Online-Hilfe und Treiber)
  672.                      Für die Installation von MDEBUG werden 64 K
  673.                      freier Speicher benötigt.
  674.  
  675.  
  676.     Software:        Betriebssystem MS-DOS/PC-DOS ab Version 3.0
  677.                      oder ein kompatibles Betriebssystem.
  678.                      Für die Übersetzung der Quelltexte wird der
  679.                      Assembler A86 V3.22 benötigt.
  680.  
  681.  
  682.     Einschränkungen
  683.     ───────────────
  684.  
  685.     MDEBUG läuft  auf meinem  Rechner fehlerfrei.  Allerdings  kann ich
  686.     natürlich nicht dafür garantieren daß  es auf allen Rechnern läuft.
  687.     (insbesondere  die Verträglichkeit  mit anderen  TSRs,  siehe  auch
  688.     'Verträglichkeit gegenüber anderen Programmen')
  689.  
  690.     Falls  MDEBUG auf  einem  Rechner  nicht läuft  bzw.  nicht korrekt
  691.     läuft, kann ich  versuchen  den Fehler  zu  finden  und  zu beheben
  692.     - falls mir dies mitgeteilt wird. Dies gilt auch für die Shareware-
  693.     Version von MDEBUG.
  694.     Dazu benötige ich dann  die Daten  über die genaue  Ausstattung des
  695.     Rechners  (Speicherausbau,  Graphikadapter,  etc.), die  Namen  und
  696.     Versionsnummern der  normalerweise  geladenen  Programme (incl. der
  697.     DOS-Version) und, bei einer Fehlfunktion von MDEBUG, eine möglichst
  698.     ausführliche Beschreibung des Fehlers.
  699.  
  700.     Da es mit dem Programm MDEBUG prinzipiell auch möglich ist Software
  701.     und Hardware zu beschädigen, übernehme ich für Fehler des Benutzers
  702.     und  für  bisher  von  mir nicht bemerkte  Programmfehler und  sich
  703.     daraus eventuell ergebende Schäden keinerlei Haftung!
  704.  
  705.     Änderungs-, Erweiterungswünsche und Kritik zu MDEBUG sind mir immer
  706.     willkommen.
  707.  
  708.  
  709.  
  710.  
  711.  
  712.  
  713.  
  714.  
  715.  
  716.  
  717.  
  718.  
  719.     ────────────────────────────────────────────────────────────────────────────────
  720.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite    6
  721.  
  722.  
  723.  
  724.     Vorbereitungen vor dem Start
  725.     ────────────────────────────
  726.  
  727.  
  728.     Vor dem ersten Start von MDEBUG muß einiges beachtet werden:
  729.  
  730.  
  731.     Eintragen der Registrierungsnummer
  732.     ──────────────────────────────────
  733.  
  734.     Besitzer der  Vollversion sollten als erstes  ihre  Registrierungs-
  735.     nummer in die Datei MDEBUG.COM eintragen. Hierzu dient das Programm
  736.     SETREGNR.EXE. SETREGNR  benötigt  keine Parameter  und erfragt alle
  737.     Daten im Dialog mit dem Benutzer.
  738.  
  739.     Hinweis:
  740.  
  741.     Der Parameter  'MAKE' von MDEBUG  kann erst nach der Eintragung der
  742.     Registrierungsnmmer benutzt werden!
  743.  
  744.  
  745.  
  746.  
  747.  
  748.  
  749.  
  750.  
  751.  
  752.  
  753.  
  754.  
  755.  
  756.  
  757.  
  758.  
  759.  
  760.  
  761.  
  762.  
  763.  
  764.  
  765.  
  766.  
  767.  
  768.  
  769.  
  770.  
  771.  
  772.  
  773.  
  774.  
  775.  
  776.  
  777.  
  778.  
  779.     ────────────────────────────────────────────────────────────────────────────────
  780.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite    7
  781.  
  782.  
  783.  
  784.     Passwort
  785.     ────────
  786.  
  787.     MDEBUG  ist  zur  Sicherung  vor  unbefugten  Benutzern  mit  einer
  788.     (abschaltbaren) Passwort-Abfrage versehen.
  789.  
  790.     Falls die  Passwort-Abfrage aktiv ist, wird das  Passwort bei jedem
  791.     Aufruf über  den Hotkey und  jedem Aufruf  einer der Funktionen des
  792.     User-Ints (mit Ausnahme der Funktion 6, s.u.) abgefragt.
  793.     MDEBUG überprüft vor der Passwort-Abfrage den Bildschirmmodus.  Ist
  794.     dieser nicht korrekt, wird die  Eingabe abgebrochen.
  795.  
  796.                                                      ┌──── MDEBUG ────┐
  797.     Aufbau des Fensters zur Eingabe eines Passworts: │ Passwort: **** │
  798.                                                      └────────────────┘
  799.  
  800.     Das  Passwort ist 4  Zeichen lang und  besteht nur aus  Zeichen mit
  801.     einem ASCII-Code  größer  oder gleich 32 (= Leerzeichen).  Es  wird
  802.     verdeckt  eingegeben, wobei die  Cursorposition die aktuelle Stelle
  803.     im Passwort bei der  Eingabe wiedergibt.  Die  Schreibweise  (groß/
  804.     klein) des Passwortes muß übereinstimmen.
  805.  
  806.     Bei der Eingabe gilt  immer der  Overwrite-Modus; zum Positionieren
  807.     des Cursors können die Tasten
  808.  
  809.          <Home>, <CursorRight>, <CursorLeft> und <BackSpace>
  810.  
  811.     verwendet werden.
  812.  
  813.     <ESC>  bricht die  Abfrage (d.h. den Aufruf)  ab, <RETURN>  beendet
  814.     die Eingabe des Passwortes.
  815.  
  816.     Bei falscher  Eingabe, wird der Aufruf abgebrochen und eine Fehler-
  817.     meldung  (incl.  Fehlerton) ausgegeben. Die Fehlermeldung  muß  mit
  818.     einem Tastendruck  quittiert werden. Die gedrückte Taste wird igno-
  819.     riert.
  820.     Für die Eingabe des Passwortes im Dialog stehen maximal 10 Sekunden
  821.     zur Verfügung  -  nachdem  diese Zeitspanne  abgelaufen ist, bricht
  822.     MDEBUG die Passwort-Abfrage ab.
  823.  
  824.                                       ┌──── MDEBUG ────┐
  825.     Ausgabe bei falschem Passwort:    │   INKORREKT    │
  826.                                       └────────────────┘
  827.  
  828.  
  829.  
  830.  
  831.  
  832.  
  833.  
  834.  
  835.  
  836.  
  837.  
  838.  
  839.     ────────────────────────────────────────────────────────────────────────────────
  840.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite    8
  841.  
  842.  
  843.  
  844.     Zur  Änderung  von Variablen  über  einen zweiten Aufruf von MDEBUG
  845.     mit dem Parameter 'SET'  müssen,  falls  die residente Version  mit
  846.     einem aktiven Passwort ausgestattet  ist, ebenfalls die  Passwörter
  847.     beider Versionen übereinstimmen.  Dies gilt auch für den Aufruf von
  848.     MDEBUG mit dem  Parameter 'EXIT'.
  849.  
  850.     Das  Passwort kann  nur in der Datei MDEBUG.COM durch  das Programm
  851.     SETMD.EXE  geändert  werden. Der Aktiv-Schalter des Passwortes kann
  852.     jederzeit während eines Aufrufes gesetzt oder gelöscht werden.
  853.     (s.u.)
  854.     Der Aktiv-Schalter  bestimmt, ob das Passwort abgefragt werden soll
  855.     ('ON') oder  nicht ('OFF'). Der Status des Aktiv-Schalters wird bei
  856.     installiertem Passwort auf dem oberen Rand des Interpreter-Fensters
  857.     angezeigt.
  858.  
  859.     Zu beachten ist, daß  nur immer EINE  Kopie von MDEBUG ein bestimm-
  860.     tes  Passwort hat.  D.h.  auch  wenn  über das  Programm SETMD ver-
  861.     schiedenen Kopien von MDEBUG.COM  das  gleiche  Passwort zugeordnet
  862.     wird, sind die Passwörter der Kopien  NICHT kompatibel.
  863.  
  864.     In der  Original-Version  von  MDEBUG ist  noch  kein Passwort ein-
  865.     gerichtet.
  866.  
  867.     Die Fenster zur  Passwort-Abfrage werden in der aktuellen Farbe des
  868.     Bildschirms  ausgegeben;  die aktuelle  Cursor-Form wird  ebenfalls
  869.     übernommen, d.h. falls der Cursor  gerade abgeschaltet ist  muß das
  870.     Passwort ohne Cursor eingegeben werden.
  871.  
  872.     Hinweis:
  873.  
  874.     Die Sicherheitskopie von MDEBUG sollte immer OHNE Passwort erstellt
  875.     werden!
  876.  
  877.  
  878.  
  879.  
  880.  
  881.  
  882.  
  883.  
  884.  
  885.  
  886.  
  887.  
  888.  
  889.  
  890.  
  891.  
  892.  
  893.  
  894.  
  895.  
  896.  
  897.  
  898.  
  899.     ────────────────────────────────────────────────────────────────────────────────
  900.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite    9
  901.  
  902.  
  903.  
  904.     Prozessnummer überprüfen
  905.     ────────────────────────
  906.  
  907.     MDEBUG  benutzt zur Kommunikation mit den Bildschirm- und Kommando-
  908.     treibern den Multiplex-Interrupt 2Fh. (siehe unten)
  909.  
  910.     Die voreingestellten  Prozessnummern,  die MDEBUG zur Kommunikation
  911.     über den Interrupt 2Fh  belegt, sind D0h und D1h. Vor dem Start von
  912.     MDEBUG  muß  überprüft  werden, ob diese  Prozessnummern  schon von
  913.     einem anderen Programm benutzt werden.
  914.  
  915.     Die Überprüfung  der Prozessnummern  kann mit  dem Util SHOW2FP.COM
  916.     gemacht werden. (Vor der Überprüfung der Prozessnummer sollten alle
  917.     Gerätetreiber  und  speicherresidenten Programme  die normalerweise
  918.     benutzt werden, geladen sein.) Der Aufruf von SHOW2FP lautet dann:
  919.  
  920.          SHOW2FP D0 <RETURN>
  921.  
  922.     Sollte  SHOW2FP nun  melden,  daß  eine  der  beiden Prozessnummern
  923.     (die  als  Parameter  angegebene oder die auf diese folgende) schon
  924.     belegt ist,  müssen zuerst zwei freie  aufeinanderfolgende Prozess-
  925.     nummern gesucht werden (Ansonsten kann MDEBUG ohne Änderung benutzt
  926.     werden).
  927.     Dazu ruft mensch SHOW2FP einmal ohne Parameter auf. Also:
  928.  
  929.          SHOW2FP <RETURN>
  930.  
  931.     SHOW2FP gibt nun  alle  belegten  Prozessnummern  zwischen  C0h und
  932.     FFh aus. Nun müssen  zwei aufeinanderfolgende  freie Prozessnummern
  933.     (also  zwei  die  NICHT von SHOW2FP ausgegeben wurden) zwischen C0h
  934.     und FFh gewählt  werden.  Bei JEDER Installation von MDEBUG muß nun
  935.     die niedrigere der beiden Nummern als Prozessnummer für MDEBUG über
  936.     den Parameter 'PRO=nn' explizit angegeben werden.
  937.     Die neuen Prozessnummern müssen ebenfalls beim Aufruf der Kommando-
  938.     und Bildschirmtreiber über den Parameter '/Pnn' angegeben werden.
  939.  
  940.     Besitzer  der Vollversion  können die  neue Prozessnummer natürlich
  941.     auch über den Parameter 'MAKE' als neue  Prozessnummer in die Datei
  942.     MDEBUG.COM eintragen. Sinnvollerweise sollten  die  neuen  Prozess-
  943.     nummern  auch über  den Parameter '/I'  in  die Kommando- und Bild-
  944.     schirmtreiber als Voreinstellungen übernommen werden.
  945.  
  946.     Es sei hier nochmals darauf hingewiesen,  daß eine falsche Prozess-
  947.     nummer für MDEBUG das System zum Absturz bringen kann!
  948.  
  949.  
  950.  
  951.  
  952.  
  953.  
  954.  
  955.  
  956.  
  957.  
  958.  
  959.     ────────────────────────────────────────────────────────────────────────────────
  960.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   10
  961.  
  962.  
  963.  
  964.     Starten von MDEBUG
  965.     ──────────────────
  966.  
  967.     Aufruf: MDEBUG {INT=[0|{nn}{,N}]} {KEY=X{n}}
  968.                    {CoM=nn} {CoD=nn} {CoHm=nn}
  969.                    {RoM=nn} {RoD=nn} {RoH=nn}
  970.                    {SEG=[nnnn|reg]} {OFF=[nnnn|reg]}
  971.                    {STD} {STM} {STH}
  972.                    {SET} {EXIT}
  973.                    {&name{,{nnnn}}{,{mmmm}}{,N}}
  974.                    {*name{,{nnnn}}{,{mmmm}}{,N}}
  975.                    {TEXT{=nnnn}{,m}} {GRAPH} {PRO=nn}
  976.                    {HELP{={pfad}{name}}} {NOHELP} {BUF=nnnn}
  977.                    {?} {#} {DEF} {MAKE}
  978.                    {MF2} {NoMF2}
  979.                    {@ kommentar}
  980.  
  981.     Hinweis:
  982.  
  983.     Beim  Aufruf  der  Shareware-Version  wird  eine  Shareware-Meldung
  984.     ausgegeben und  eine kurze  Zeit gewartet. Die Wartezeit kann durch
  985.     das Betätigen einer Taste beendet werden.
  986.  
  987.     Die  angegebenen  Voreinstellungen  beziehen  sich  alle  auf  eine
  988.     Original-Version von MDEBUG. (siehe Parameter 'MAKE')
  989.  
  990.     Eine über den Parameter 'MAKE'  angepasste Version  von MDEBUG gibt
  991.     zusätzlich bei jedem Aufruf die Meldung
  992.  
  993.          Version angepasst.
  994.  
  995.     auf die Standard-Ausgabe aus.
  996.  
  997.  
  998.     Parameter für MDEBUG
  999.  
  1000.  
  1001.     INT=[0|{nn}{,N}]
  1002.  
  1003.     'nn' ist die Nummer des  zusätzlich zu  installierenden Interrupts.
  1004.     (= User-Int, hex., Intervall: 60h .. 67h oder 0h, Voreinst.: 60h)
  1005.  
  1006.     Der angegebene Interrupt darf noch nicht belegt sein  (d.h. Segment
  1007.     und Offset in der Interrupt-Tabelle müssen 0 sein!).
  1008.  
  1009.  
  1010.  
  1011.  
  1012.  
  1013.  
  1014.  
  1015.  
  1016.  
  1017.  
  1018.  
  1019.     ────────────────────────────────────────────────────────────────────────────────
  1020.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   11
  1021.  
  1022.  
  1023.  
  1024.     Die  explizite Angabe von  0h als Interrupt-Nummer unterdrückt  die
  1025.     Installation eines zusätzlichen Interrupts.
  1026.     Da die  Routinen für den User-Int  aber trotzdem resident  gehalten
  1027.     werden, kann später ein  User-Int über den Aufruf mit dem Parameter
  1028.     'SET' eingerichtet werden.
  1029.  
  1030.     Der Zusatz ',N' verhindert die Überprüfung ob der angegebene Inter-
  1031.     rupt schon belegt ist.
  1032.  
  1033.  
  1034.     CoM=nn
  1035.  
  1036.     'nn' ist das Farb-Attribut des Monitors
  1037.     (hex., Intervall: 0..0FFh, Voreinst.: 70h)
  1038.  
  1039.     Aufbau des Farb-Attributes:
  1040.     ┌────────┬────────────────────────────────────────┐
  1041.     │ Bit(s) │ Bedeutung                              │
  1042.     ╞════════╪════════════════════════════════════════╡
  1043.     │  0..3  │ Binärcodierung der Vordergrund-Farbe   │
  1044.     │        │ Intervall: 0..0Fh                      │
  1045.     │  4..6  │ Binärcodierung der Hintergrund-Farbe   │
  1046.     │        │ Intervall: 0..07h                      │
  1047.     │  7     │ 1 = Blinken, 0 = kein Blinken          │
  1048.     │        │ oder (je nach Modus der Graphik-Karte) │
  1049.     │        │ 1 = Hell, 0 = normal                   │
  1050.     └────────┴────────────────────────────────────────┘
  1051.  
  1052.  
  1053.     CoD=nn
  1054.  
  1055.     'nn' ist das Farb-Attribut des Interpreters
  1056.     (hex., Intervall: 0..0FFh, Voreinst.: 70h)
  1057.     Aufbau des Attributes: siehe Parameter 'CoM'
  1058.  
  1059.  
  1060.     CoHm=nn
  1061.  
  1062.     'nn' ist das Farb-Attribut für die Hilfsfarbe m
  1063.     (m gleich 1, 2 oder 3).
  1064.     ('nn': hex., Invervall: 0..0FFh, Voreinstellungen:
  1065.      'm' = 1 -> 07h  'm' = 2 -> 0Fh  'm' = 3 -> 70h)
  1066.     Aufbau des Attributes: siehe Parameter 'CoM'
  1067.  
  1068.     Der Parameter wird ignoriert,  falls die Online-Hilfe nicht geladen
  1069.     ist.
  1070.  
  1071.  
  1072.  
  1073.  
  1074.  
  1075.  
  1076.  
  1077.  
  1078.  
  1079.     ────────────────────────────────────────────────────────────────────────────────
  1080.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   12
  1081.  
  1082.  
  1083.  
  1084.     RoM=nn
  1085.  
  1086.     'nn' ist die erste Zeile für die Anzeige des Monitors
  1087.     (hex., Intervall: 01h..0Eh, Voreinst.:02h)
  1088.  
  1089.  
  1090.     RoD=nn
  1091.  
  1092.     'nn' ist die erste Zeile für die Anzeige des Interpreters
  1093.     (hex., Intervall: 01h..0Ch, Voreinst.: 0Ch)
  1094.  
  1095.  
  1096.     RoH=nn
  1097.  
  1098.     'nn' ist die erste Zeile für das Window der Online-Hilfe
  1099.     (hex., Intervall: 01..0Eh, Voreinst.: 01h);
  1100.  
  1101.     Der  Parameter  hat keine  Wirkung,  falls die  Online-Hilfe  nicht
  1102.     geladen ist.
  1103.  
  1104.  
  1105.     SEG=[nnnn|reg]
  1106.  
  1107.     'nnnn' ist die Voreinstellung für den Wert des Registers SE.
  1108.     (hex., Intervall: 0000h..FFFFh, Voreinst.: FE00h)
  1109.  
  1110.     'reg' ist der Name des Registers  aus dem das  Segment der Monitor-
  1111.     Start-Adresse ermittelt wird. 'reg' muß ein Wort-Register sein.
  1112.  
  1113.  
  1114.     OFF=[nnnn|reg]
  1115.  
  1116.     'nnnn' ist die Voreinstellung für den Wert des Registers OF.
  1117.     (hex., Intervall: 0000h..FFFFh, Voreinst.: 0000h)
  1118.  
  1119.     'reg'  ist der Name des Registers  aus dem  der Offset der Monitor-
  1120.     Start-Adresse  ermittelt  wird. 'reg'  muß ein Wort-Register sein.
  1121.  
  1122.  
  1123.     STD
  1124.  
  1125.     Start beim Aufruf sofort im Interpreter
  1126.  
  1127.  
  1128.     STM
  1129.  
  1130.     Start beim Aufruf im Monitor (Voreinstellung)
  1131.  
  1132.  
  1133.  
  1134.  
  1135.  
  1136.  
  1137.  
  1138.  
  1139.     ────────────────────────────────────────────────────────────────────────────────
  1140.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   13
  1141.  
  1142.  
  1143.  
  1144.     STH
  1145.  
  1146.     Start beim Aufruf sofort in der Online-Hilfe
  1147.     Der  Parameter  hat  keine Wirkung,  falls  die  Online-Hilfe nicht
  1148.     geladen ist.
  1149.  
  1150.  
  1151.     KEY=X{n}
  1152.  
  1153.     'X' ist die Hotkey-Taste von MDEBUG
  1154.     (Zeichen, Intervall: 'A'..'Z', Voreinstellung: 'Y')
  1155.     Der SCAN-Code wird von MDEBUG selbstständig ermittelt.
  1156.     'n' ist die  Codierung  der  Umschalttasten  bei  Aufruf von MDEBUG
  1157.     über den Hotkey als hexadezimaler Wert.
  1158.     (hex., Intervall: 01..0Fh; Voreinstellung: 0Ch (=8+4) = <CTRL-ALT>)
  1159.  
  1160.     Für die Codierung der Umschalttasten gelten folgende Werte:
  1161.  
  1162.     ┌─────────────────┬────────┐
  1163.     │  Taste          │   Wert │       Kombinationen der Umschalttasten
  1164.     ╞═════════════════╪════════╡       können durch  Addition  erreicht
  1165.     │ SHIFT rechts    │    01  │       werden. Der Status der Umschalt-
  1166.     │ SHIFT links     │    02  │       tasten <SCROLLLOCK>, <CAPSLOCK>,
  1167.     │ CTRL-Taste      │    04  │       <NUMLOCK> und <INSERT> ist nicht
  1168.     │ ALT-Taste       │    08  │       abfragbar.
  1169.     └─────────────────┴────────┘
  1170.  
  1171.  
  1172.     SET
  1173.  
  1174.     Die explizit  angegebenen Parameter werden an eine  schon residente
  1175.     Version weitergegeben,  MDEBUG  installiert sich nicht zum zweiten-
  1176.     mal.  Zur Änderung der  Werte einer  residenten  Version  MUSS  der
  1177.     Parameter angegeben werden (auch für die Parameter HELP, *name  und
  1178.     &name, s.u.).
  1179.  
  1180.     Falls  die residente  Version mit  einem aktiven  Passwort versehen
  1181.     ist,  muß  das Passwort  des residenten MDEBUG mit dem Passwort des
  1182.     transienten  MDEBUG  übereinstimmen.
  1183.  
  1184.     Das Aktiv-Flag von MDEBUG und das Warte-Flag für den  automatischen
  1185.     Aufruf  falls DOS nicht  aktiv ist (s.u.)  werden auch bei falschem
  1186.     Passwort zurückgesetzt.
  1187.  
  1188.  
  1189.  
  1190.  
  1191.  
  1192.  
  1193.  
  1194.  
  1195.  
  1196.  
  1197.  
  1198.  
  1199.     ────────────────────────────────────────────────────────────────────────────────
  1200.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   14
  1201.  
  1202.  
  1203.  
  1204.     Der Aufruf zur Änderung von Variablen einer residenten Version kann
  1205.     auch aus der DOS-Shell eines Programms erfolgen, da sich MDEBUG nur
  1206.     einmal installieren lässt.
  1207.  
  1208.     Ist  noch keine  Version installiert,  wird der Parameter ignoriert
  1209.     und MDEBUG wird mit den angegebenen Parametern installiert.
  1210.  
  1211.     Für die  Übergabe von Parametern an eine schon installierte Version
  1212.     gilt:
  1213.  
  1214.     Falls  ein neuer  User-Int  erfolgreich installiert wurde, wird der
  1215.     Eintrag in der Interrupt-Tabelle für den alten User-Interrupt auf 0
  1216.     zurückgesetzt.  Falls  der als Nummer für  den User-Int 0 angegeben
  1217.     wird, wird der User-Int temporär deaktiviert.
  1218.  
  1219.     Nicht berücksichtigt werden die Parameter
  1220.  
  1221.          'STD', 'STM', 'STH',
  1222.          'BUF', 'NOHELP',
  1223.          'SEG=reg', 'OFF=reg'.
  1224.  
  1225.     Alle anderen  Parameter werden wie bei der Erst-Installation behan-
  1226.     delt und an die residente Version übergeben.
  1227.     Der Parameter  'SET'  arbeitet  unabhängig  davon, ob ein  User-Int
  1228.     installiert ist oder nicht.
  1229.  
  1230.  
  1231.     EXIT
  1232.  
  1233.     Entfernen von MDEBUG aus dem Speicher
  1234.  
  1235.     Vorraussetzung für  das Entfernen  von MDEBUG aus dem Speicher ist,
  1236.     daß  MDEBUG  das  letzte  Programm in  den Interrupt-Ketten für den
  1237.     Interrupt 08h  und dem  Interrupt 09h ist. Ist dies nicht der Fall,
  1238.     gibt  MDEBUG  eine  Fehlermeldung aus  und bleibt  resident und an-
  1239.     sprechbar.
  1240.  
  1241.     Der Parameter  wird bei  der Erstinstallation ignoriert,  ansonsten
  1242.     hat er Vorrang vor allen anderen  Parametern.  Eventuell zusätzlich
  1243.     angegebene Parameter werden  nur auf die Syntax geprüft, aber nicht
  1244.     ausgeführt.
  1245.     Vor dem  Entfernen von  MDEBUG  werden  die  Interrupts 09h und 08h
  1246.     wieder  auf die alte Routine gelenkt und die Adresse  eines instal-
  1247.     lierten User-Ints in der Interrupt-Tabelle wird auf die Adresse 0:0
  1248.     zurückgesetzt.
  1249.  
  1250.     Falls ein Passwort installiert ist, gilt dasselbe wie für den Para-
  1251.     meter 'SET'.
  1252.  
  1253.  
  1254.  
  1255.  
  1256.  
  1257.  
  1258.  
  1259.     ────────────────────────────────────────────────────────────────────────────────
  1260.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   15
  1261.  
  1262.  
  1263.  
  1264.     &name{,{nnnn}}{,{mmmm}}{,N}
  1265.  
  1266.     Einlesen einer Datei in das PSP von MDEBUG.
  1267.  
  1268.     'name' ist  der Name  (evtl. inclusive Pfad) der zu lesenden Datei.
  1269.     Hinter dem  '&' und vor und  hinter den Kommata dürfen  keine Leer-
  1270.     zeichen stehen.
  1271.  
  1272.     Die Datei wird beim Lesen folgendermaßen konvertiert:
  1273.  
  1274.     LineFeeds  (LF, ASCII-Code 0Ah)  werden  überlesen, CarriageReturns
  1275.     (CR, ASCII-Code 0Dh) werden  in Null-Bytes  umgewandelt und  hinter
  1276.     dem letzten gelesenen Zeichen fügt MDEBUG ein Null-Wort an.
  1277.     Das  Zeichen '@' gilt  als Kommentar-Einleitung, d.h. alle  Zeichen
  1278.     hinter einem '@' bis zum nächsten CR (= Zeilenende) in der Eingabe-
  1279.     datei werden überlesen. Zeilen die nur aus einem Kommentar bestehen
  1280.     werden vollständig überlesen, wobei auch das abschließende CR nicht
  1281.     übernommen wird. Falls das  Zeichen  '@' ins PSP  übernommen werden
  1282.     soll, muß es als '@@' angegeben werden.
  1283.  
  1284.     Beispiel für eine Eingabe-Datei für den Parameter '&name':
  1285.  
  1286.            0        1         2         3
  1287.     Spalte 123456789012345678901234567890...
  1288.            ─────────────────────────────────
  1289.            @ Kommentarzeile (wird nicht übernommen!)
  1290.            1. Zeile
  1291.            2. Zeile @ Kommentar (wird nicht übernommen)
  1292.            3. Zeile
  1293.            4. Zeile @@ kein Kommentar, wird übernommen
  1294.            5. Zeile @ weiterer Kommentar
  1295.            6. Zeile
  1296.            @ weitere Kommentarzeile
  1297.            @ weitere Kommentarzeile
  1298.            7. Zeile
  1299.            ...
  1300.  
  1301.     Bei der Erstinstallation wird durch diesen Parameter zusätzlich das
  1302.     Register SE mit dem PSP-Segment von MDEBUG und das  Register OF mit
  1303.     dem Wert 'nnnn' geladen.
  1304.     Falls  der  Parameter 'SE=nnnn' bzw. 'OF=nnnn' angegeben  ist, wird
  1305.     das entsprechende Register allerdings nicht überschrieben.
  1306.  
  1307.  
  1308.  
  1309.  
  1310.  
  1311.  
  1312.  
  1313.  
  1314.  
  1315.  
  1316.  
  1317.  
  1318.  
  1319.     ────────────────────────────────────────────────────────────────────────────────
  1320.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   16
  1321.  
  1322.  
  1323.  
  1324.     'nnnn' ist der Offset im PSP ab dem die Datei gelesen werden soll.
  1325.     (hex.,  Voreinstellung bei der Erstinstallation: 80h,  bei Aufrufen
  1326.      zur Änderung einer installierten Version: 00h;  Intervall  bei der
  1327.      Erstinstallation: 80h..0FDh,  bei Aufrufen  zur Änderung einer in-
  1328.      stallierten Version: 00h..0FDh)
  1329.  
  1330.     'mmmm' ist die Anzahl zu lesender Bytes.
  1331.     (dez.,  Voreinstellung: 256-nnnn, Intervall: 0..(256-nnnn))
  1332.  
  1333.     Der Zusatz ,N unterdrückt die Interpretierung der Zeichen der Datei
  1334.     (keine Kommentare,  keine Umwandlung von CR/LFs,  kein zusätzliches
  1335.     Null-Wort als Endekennung).
  1336.  
  1337.     Falls ein Schalter nicht angegeben werden  soll, ein folgender aber
  1338.     doch,  muß  der  weggelassene  Schalter  durch ein  Komma angegeben
  1339.     werden.
  1340.  
  1341.     Beispiel:  &psp.inp,,,n
  1342.  
  1343.     Es werden nur die ersten 1024 Bytes der Datei berücksichtigt.
  1344.  
  1345.     Die Zeilenlänge der Datei ist beliebig. Leerzeilen  in der Eingabe-
  1346.     Datei für '&name' führen zu einem Null-Wort im Speicher das bei der
  1347.     Sicherung  über den Parameter '*name'  ohne  den Schalter ',N'  als
  1348.     Ende-Kennung des  zu sichernden Speicherbereichs genommen wird.
  1349.  
  1350.     Falls  der  Parameter '&name' erfolgreich ausgeführt werden konnte,
  1351.     wird folgende Meldung auf die Standard-Ausgabe ausgegeben:
  1352.  
  1353.          xxxxx Bytes aus der Datei <name>
  1354.          nach nnnnh:mmmmh eingelesen
  1355.  
  1356.     Hierbei wird nnnn  durch  das  PSP-Segment der  veränderten MDEBUG-
  1357.     Version und mmmm durch den Offset ab dem die Datei eingelesen wurde
  1358.     ersetzt. xxxx ist die Anzahl der übernommen Bytes, also nicht unbe-
  1359.     dingt  die Anzahl  der  gelesenen Bytes da  CR und LF hier  als ein
  1360.     Zeichen gelten (falls der Schalter ',N' nicht angegeben ist).
  1361.  
  1362.     Falls der Parameter 'SET' angegeben ist,  wird das PSP der residen-
  1363.     ten Version als Zielbereich genommen (falls vorhanden).
  1364.  
  1365.  
  1366.  
  1367.  
  1368.  
  1369.  
  1370.  
  1371.  
  1372.  
  1373.  
  1374.  
  1375.  
  1376.  
  1377.  
  1378.  
  1379.     ────────────────────────────────────────────────────────────────────────────────
  1380.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   17
  1381.  
  1382.  
  1383.  
  1384.     *name{,{nnnn}}{,{mmmm}}{,N}
  1385.  
  1386.     Sichern des PSP einer residenten Version von MDEBUG in einer Datei.
  1387.  
  1388.     'name' ist  der  Name (evtl. inclusive  Pfad) der  zu  erstellenden
  1389.     Datei. Hinter dem '*'  und  vor und hinter den Kommata dürfen keine
  1390.     Leerzeichen stehen.
  1391.  
  1392.     Die Bytes im PSP ab dem Offset 'nnnn' bis zum ersten Null-Wort bzw.
  1393.     bis zum Offset 'nnnn+mmmm' werden in die Datei  'name' geschrieben.
  1394.     Dabei werden einzelne Null-Bytes in CR/LF-Sequenzen umgesetzt.
  1395.  
  1396.     'nnnn' ist  der Offset  im PSP ab  dem die  Byte geschrieben werden
  1397.     sollen.  (hex.,  Voreinstellung:  0h, Intervall: 0..0FFh)
  1398.  
  1399.     'mmmm' ist  die Anzahl  der  Bytes die  maximal  geschrieben werden
  1400.     sollen.  (dez., Voreinstellung: 256-nnnn, Intervall: 0..(256-nnnn))
  1401.  
  1402.     Der Zusatz ',N' unterdrückt die Umwandlung von Null-Bytes in CR/LF-
  1403.     Sequenzen und die Interpretierung von Null-Worten als Endekennung.
  1404.  
  1405.     Falls  ein Schalter nicht angegeben werden soll, ein folgender aber
  1406.     doch,  muß  der  weggelassene  Schalter  durch  ein Komma angegeben
  1407.     werden.
  1408.  
  1409.     Falls die Datei schon existiert, wird sie überschrieben.
  1410.  
  1411.     Falls  der Parameter '*name' erfolgreich  ausgeführt werden konnte,
  1412.     wird folgende Meldung auf die Standard-Ausgabe ausgegeben:
  1413.  
  1414.         xxxxx Bytes aus dem PSP ab nnnnh:mmmmh in die Datei
  1415.         <name> gespeichert.
  1416.  
  1417.     Hierbei  wird nnnn  durch  das  PSP-Segment der  benutzten  MDEBUG-
  1418.     Version,  mmmm durch den Offset ab dem die Bytes geschrieben wurden
  1419.     und  xxxx  durch  die Anzahl  der geschriebenen Bytes ersetzt. xxxx
  1420.     ist die  Größe  der Datei die größer  als der  Parameter mmmm  sein
  1421.     kann, da  hier CRs  und  LFs als jeweils ein Zeichen gezählt werden
  1422.     (falls der Parameter ',N' nicht angegeben wurde).
  1423.  
  1424.     Der Parameter ist nur wirksam bei Aufrufen zur Änderung einer schon
  1425.     installierten Version  von MDEBUG. Falls die Parameter  '&name' und
  1426.     '*name'  gleichzeitig  angegeben sind,  wird, falls möglich, zuerst
  1427.     der Parameter '*name' ausgeführt. Sollte in diesem Fall ein  Fehler
  1428.     beim Ausführen des Parameters '*name' auftreten, wird der Parameter
  1429.     '&name' auch nicht mehr ausgeführt.
  1430.     Die Dateinamen für '&name' und '*name' können identisch sein.
  1431.  
  1432.  
  1433.  
  1434.  
  1435.  
  1436.  
  1437.  
  1438.  
  1439.     ────────────────────────────────────────────────────────────────────────────────
  1440.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   18
  1441.  
  1442.  
  1443.  
  1444.     HELP{={pfad}{name}}
  1445.  
  1446.     Online-Hilfe installieren
  1447.  
  1448.     'name' ist der Name (inclusive Pfad) oder nur der Pfad (abgeschlos-
  1449.     sen mit '/', '\' oder ':') einer Hilfstextdatei. Vor und hinter dem
  1450.     Zeichen '=' darf kein Leerzeichen stehen.
  1451.  
  1452.     Voreinstellung für 'name' ist 'MDEBUG.HLP'.
  1453.     Diese  wird  im  aktuellen  Verzeichnis  und,  falls sie dort nicht
  1454.     gefunden wird,  im Verzeichnis in  dem die Datei 'MDEBUG.COM' steht
  1455.     gesucht.
  1456.     Der Inhalt  der gelesenen  Datei kann in MDEBUG über die Taste <F1>
  1457.     in einem separatem Fenster angezeigt werden.
  1458.  
  1459.     Nach der  Installation von  MDEBUG wird die  Datei nicht mehr benö-
  1460.     tigt.  Die Datei kann maximal 20480 Byte  groß  sein, bei  größeren
  1461.     Dateien  werden nur die ersten 20480 Bytes gelesen und es wird eine
  1462.     Warnung  ausgegeben.  Der  Speicherbedarf  von  MDEBUG  steigt  bei
  1463.     geladener  Online-Hilfe  um ca. 3000  Byte plus die Anzahl Byte für
  1464.     den Puffer für den Hilfstext.
  1465.  
  1466.     Falls schon eine Version von MDEBUG installiert  ist, kann über den
  1467.     Parameter 'HELP' eine neue Hilfstextdatei in  die residente Version
  1468.     eingelesen  werden.  In die  residente Version  werden  nur soviele
  1469.     Zeilen  übernommen,  wie in  deren Puffer  passen.  Der  Inhalt des
  1470.     Puffers der residenten Version wird dabei überschrieben.
  1471.  
  1472.  
  1473.     NOHELP
  1474.  
  1475.     Online-Hilfe nicht laden. (Voreinstellung)
  1476.     'NOHELP' setzt den Parameter 'BUF' nicht außer Kraft.
  1477.  
  1478.  
  1479.  
  1480.  
  1481.  
  1482.  
  1483.  
  1484.  
  1485.  
  1486.  
  1487.  
  1488.  
  1489.  
  1490.  
  1491.  
  1492.  
  1493.  
  1494.  
  1495.  
  1496.  
  1497.  
  1498.  
  1499.     ────────────────────────────────────────────────────────────────────────────────
  1500.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   19
  1501.  
  1502.  
  1503.  
  1504.     BUF=nnnn
  1505.  
  1506.     Routinen  für die  Online-Hilfe und  einen Puffer für den Hilfstext
  1507.     resident halten.
  1508.  
  1509.     'nnnn' ist die Größe des Puffers für den Hilfstext.
  1510.     (dez, Intervall: 256..20480 oder 0)
  1511.  
  1512.     Eine Hilfstextdatei wird durch diesen Parameter nicht geladen, d.h.
  1513.     die Online-Hilfe ist in  MDEBUG nicht verfügbar, solange  nicht ein
  1514.     Aufruf  mit  dem  Parameter 'HELP' erfolgt. Wird als Puffergröße  0
  1515.     angegeben, so wird, falls der Parameter 'HELP' nicht angegeben ist,
  1516.     die Online-Hilfe nicht geladen.
  1517.  
  1518.     Falls  der Parameter  'HELP'  angegeben ist,  und die  durch diesen
  1519.     geladene  Hilfstextdatei größer als die Angabe für  den Puffer ist,
  1520.     wird  der  Parameter 'BUF' ignoriert.  Falls  der  angegebene  Wert
  1521.     größer  als die geladene Hilfstextdatei ist, wird ein dem bei 'BUF'
  1522.     angegebenen Wert entsprechender Puffer eingerichtet, so daß  später
  1523.     auch noch  größere  Hilfstextdateien  eingelesen werden können.
  1524.  
  1525.     Der Parameter 'BUF' überschreibt den Parameter 'NOHELP'.
  1526.  
  1527.  
  1528.     TEXT{=nnnn}{,m}
  1529.  
  1530.     Keine Überprüfung ob der Bildschirm im Graphikmodus ist beim Aufruf
  1531.     über den Hotkey bzw. User-Int.
  1532.  
  1533.     'nnnn'  ist  das Segment des Bildschirmspeicher (hex, vierstellig).
  1534.     Falls 'nnnn' angegeben ist,  geht MDEBUG immer davon aus,  daß  der
  1535.     Bildschirmspeicher  bei 'nnnn:0000' beginnt. Die Voreinstellung für
  1536.     'nnnn' ist im Videomodus 7 (= HGC-Karte) B000h und sonst B800h.
  1537.  
  1538.     'm' ist die zu benutzende Bildschirmseite. (dez., Intervall: 0..9,)
  1539.     Falls 'm' nicht  angegeben ist,  wird die Bildschirmseite bei jedem
  1540.     Aufruf neu ermittelt.
  1541.  
  1542.     Falls  die zu  benutzende  Bildschirmseite  explizit angegeben ist,
  1543.     geht  MDEBUG immer davon aus, daß  eine  Bildschirmseite 4096 Bytes
  1544.     lang  ist,  d.h. der  Bildschirm in einem Modus mit 80 x 25 Zeichen
  1545.     ist. Falls die Bildschirmseite 2  angegeben ist und das Segment für
  1546.     den Bildschirmspeicher  mit  B800h  angegeben ist, beginnt die  von
  1547.     MDEBUG zu benutzende Bildschirmseite bei B800h + 200h = BA00h.
  1548.  
  1549.     Über den Parameter  'TEXT' können die  Ausgaben von MDEBUG auch auf
  1550.     einen zweiten Bildschirm umgeleitet werden.
  1551.  
  1552.  
  1553.  
  1554.  
  1555.  
  1556.  
  1557.  
  1558.  
  1559.     ────────────────────────────────────────────────────────────────────────────────
  1560.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   20
  1561.  
  1562.  
  1563.  
  1564.     GRAPH
  1565.  
  1566.     Überprüfung  des Bildschirm-  und Graphikmodus  und  Ermittlung der
  1567.     aktuellen  Bildschirmseite bei  jedem Aufruf  über den  Hotkey oder
  1568.     den User-Int. Falls der Parameter 'GRAPH' nach dem Parameter 'TEXT'
  1569.     angegeben  wird,  werden alle  durch den Parameter 'TEXT' gesetzten
  1570.     Werte zurückgesetzt. ('GRAPH' ist Voreinstellung)
  1571.  
  1572.  
  1573.     PRO=nn
  1574.  
  1575.     Festlegen der Prozessnummern, über die MDEBUG mit externen Treibern
  1576.     kommuniziert. 'nn' ist die  Prozessnummer für die Kommunikation mit
  1577.     dem  Bildschirmtreiber. (hex., Intervall: C0h..FFh, Voreinst.: D0h)
  1578.     nn+1 ist die Prozessnummer für die  Kommunikation mit den Kommando-
  1579.     treibern.
  1580.  
  1581.     Hinweis:
  1582.  
  1583.     Die von MDEBUG zu benutzenden Prozessnummern dürfen nicht von ande-
  1584.     ren Programmen oder Prozessen belegt sein!
  1585.     (siehe 'Aufruf von MDEBUG im Graphikmodus'
  1586.      und   'Erweiterungen von MDEBUG')
  1587.  
  1588.  
  1589.     ?
  1590.  
  1591.     Nur Ausgabe der Syntaxhilfe,  alle weiteren  Parameter werden nicht
  1592.     weiter  berücksichtigt. Da die  Syntaxhilfe  nicht  auf  eine Bild-
  1593.     schirmseite passt, sollte er über die Ausgabe-Umleitung mittels '>'
  1594.     in eine Datei gelenkt werden.
  1595.  
  1596.     Die eventuell zusätzlich angegebenen  Parameter  werden nur auf die
  1597.     Syntax geprüft und die  Voreinstellungen in der Syntaxhilfe  werden
  1598.     durch  sie überschrieben.
  1599.     Die Parameter werden aber NICHT weiter bearbeitet.
  1600.     In einer geclonten Version von MDEBUG (siehe  Parameter 'MAKE')
  1601.     werden natürlich die veränderten Voreinstellungen angezeigt.
  1602.  
  1603.  
  1604.     DEF
  1605.  
  1606.     Der Parameter 'DEF' bewirkt die  Ausgabe der  aktuellen Voreinstel-
  1607.     lungen für die Parameter auf die Standard-Ausgabe. Die Aufrufsyntax
  1608.     von MDEBUG wird aber nicht ausgegeben.
  1609.     Die eventuell zusätzlich angegebenen  Parameter  werden nur auf die
  1610.     Syntax geprüft und die  Voreinstellungen in der Syntaxhilfe  werden
  1611.     durch  sie überschrieben.
  1612.  
  1613.  
  1614.  
  1615.  
  1616.  
  1617.  
  1618.  
  1619.     ────────────────────────────────────────────────────────────────────────────────
  1620.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   21
  1621.  
  1622.  
  1623.  
  1624.     #
  1625.  
  1626.     Der Parameter '#' veranlasst MDEBUG  zur  Ausgabe mehrerer interner
  1627.     Tabellen. Nach der Ausgabe dieser wird das Programm sofort beendet.
  1628.     Alle anderen Parameter werden nicht ausgeführt.
  1629.     (siehe 'Ändern der Tastenbelegung von MDEBUG')
  1630.  
  1631.  
  1632.     MAKE
  1633.  
  1634.     Erstellen einer neuen Version von MDEBUG.COM
  1635.  
  1636.     Mit  dem  Parameter  'MAKE' kann  eine neue  Version von MDEBUG.COM
  1637.     erstellt werden. In dieser sind dann die Voreinstellungen durch die
  1638.     zusätzlich zum Parameter 'MAKE' angegebenen  Parameter ersetzt.
  1639.  
  1640.     Die Voreinstellungen  für folgende  Parameter können  überschrieben
  1641.     werden:
  1642.  
  1643.          'INT', 'KEY', 'STD', 'STM',
  1644.          'CoM', 'CoD', 'CoHm',
  1645.          'RoM', 'RoD', 'RoH',
  1646.          'SEG=nnnn', 'SEG=reg', 'OFF=nnnn', 'OFF=reg',
  1647.          'TEXT', 'GRAPH', 'PRO',
  1648.          'HELP', 'NOHELP', 'BUF'
  1649.  
  1650.     Die Parameter
  1651.  
  1652.          'STH', 'SET', 'EXIT','&name','*name', '#',
  1653.          'DEF' und '?'
  1654.  
  1655.     können nicht zusammen mit dem Parameter 'MAKE' angegeben werden.
  1656.     (siehe 'Installieren von MDEBUG')
  1657.  
  1658.     Die  neue  Version von 'MDEBUG.COM'  wird in das aktuelle Directory
  1659.     geschrieben. Eine dort  schon existierende  Kopie  von 'MDEBUG.COM'
  1660.     wird in 'MDEBUG.BAK' umbenannt; eine schon bestehende Datei mit dem
  1661.     Namen 'MDEBUG.BAK' wird in jedem Fall gelöscht. Nach der Erstellung
  1662.     der  neuen  Version  von MDEBUG.COM  wird das Programm beendet.
  1663.  
  1664.     Der Parameter 'MAKE' ist nur in der Vollversion von MDEBUG möglich!
  1665.  
  1666.  
  1667.  
  1668.  
  1669.  
  1670.  
  1671.  
  1672.  
  1673.  
  1674.  
  1675.  
  1676.  
  1677.  
  1678.  
  1679.     ────────────────────────────────────────────────────────────────────────────────
  1680.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   22
  1681.  
  1682.  
  1683.  
  1684.     MF2
  1685.  
  1686.     veraltet, wird ignoriert (wg. Aufwärtskompabilität)
  1687.  
  1688.     NoMF2
  1689.  
  1690.     veraltet, wird ignoriert (wg. Aufwärtskompabilität)
  1691.  
  1692.  
  1693.     @
  1694.  
  1695.     Rest der Parameter ignorieren.
  1696.  
  1697.  
  1698.     Die  Schreibweise  (groß/klein) und  die Reihenfolge der  Parameter
  1699.     sind  beliebig.  Die  Reihenfolge  der  Operanden  und Schalter der
  1700.     Parameter  muß  eingehalten  werden. Leerzeichen in einem Parameter
  1701.     sind nicht  erlaubt; Leerzeichen und Tabulatoren zwischen den Para-
  1702.     metern sind  erlaubt  aber nur hinter  Zahlenwerten notwendig.
  1703.     Falsche  Parameter  führen  zum  Programmabbruch;  bei  mehrmaliger
  1704.     Angabe eines Parameters, bzw. sich ausschließender  Parameter, gilt
  1705.     die  letzte  korrekte  Angabe.
  1706.     Eckige  Klammern  '[..]'  kennzeichnen eine Auswahl,  also entweder
  1707.     den  Teil vor  dem Zeichen  '|'  oder den  Teil danach. Geschweifte
  1708.     Klammern '{..}' zeigen an,  daß  der Parameter(-Teil) optional ist.
  1709.     Hexadezimale  Werte können  mit oder ohne abschliessendem 'H' (bzw.
  1710.     'h') eingegegeben werden.  Bei dezimalen  Werten  können Punkte zur
  1711.     Formatierung des Wertes benutzt werden.
  1712.  
  1713.     Fehlerfrei  angegebene  Parameter,  die  bei  der  Erstinstallation
  1714.     keine Bedeutung  haben,  führen nur zur Ausgabe einer Warnung (ohne 
  1715.     Abbruch des  Programms.  Das Gleiche  gilt  für Parameter,  die bei 
  1716.     Aufrufen  zur Änderung einer  installierten Version keine Bedeutung
  1717.     haben.
  1718.  
  1719.     Eine  mehrfache Installation  von MDEBUG  ist nicht  möglich, falls
  1720.     die  Kette der  MCBs  fehlerfrei  ist und  die  schon  installierte
  1721.     Version darüber auffindbar ist.
  1722.  
  1723.     Bei jedem Aufruf  gibt MDEBUG den Hotkey, die Nummer des  User-Ints
  1724.     (falls installiert),  die  Größe  des  Puffers  für  den  Hilfstext
  1725.     (falls installiert)  und die  Prozessnummern für  den Interrupt 2Fh
  1726.     auf die Standard-Ausgabe aus.
  1727.  
  1728.  
  1729.  
  1730.  
  1731.  
  1732.  
  1733.  
  1734.  
  1735.  
  1736.  
  1737.  
  1738.  
  1739.     ────────────────────────────────────────────────────────────────────────────────
  1740.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   23
  1741.  
  1742.  
  1743.  
  1744.     Errorlevel
  1745.     ──────────
  1746.  
  1747.     MDEBUG gibt beim  Programm-Ende  einen Errorlevel größer als 80 zu-
  1748.     rück, falls ein Fehler auftrat.
  1749.  
  1750.  
  1751.  
  1752.     Voreinstellungen
  1753.     ────────────────
  1754.  
  1755.     Folgende  Register und  Speicherstellen von  MDEBUG  werden bei der
  1756.     Installation mit einer Voreinstellung belegt:
  1757.  
  1758.     Im  Register R1  wird  von MDEBUG der Wert  80h und  im Register R2
  1759.     die  PSP-Adresse von MDEBUG gespeichert.
  1760.     Die internen  Speicherstellen, die über die Tasten <F6>, <SHFIT-F6>
  1761.     und <CTRL-F6> angesprochen werden (s.u.),  werden ebenfalls mit der
  1762.     Adresse PSP-Segment:0080h geladen.
  1763.  
  1764.     Im LowByte des Registers R3 (Register 3L) wird die Nummer des User-
  1765.     Ints  von  MDEBUG  gespeichert  und  im  Highbyte  des Registers R3
  1766.     (Register 3H) wird die Basis-Prozessnummer -  das ist die  Prozess-
  1767.     nummer für den Bildschirmtreiber - gespeichert.
  1768.  
  1769.     Die restlichen Hilfsregister werden auf 0 gesetzt.
  1770.  
  1771.     Die Register SE und OF werden mit der Adresse  FE00:0000 belegt.
  1772.     (falls die Werte für diese Register nicht durch einen Parameter an-
  1773.     gegeben sind)
  1774.  
  1775.     Die Register FS und FO werden mit der Adresse  FE00:0000 belegt.
  1776.  
  1777.  
  1778.  
  1779.  
  1780.  
  1781.  
  1782.  
  1783.  
  1784.  
  1785.  
  1786.  
  1787.  
  1788.  
  1789.  
  1790.  
  1791.  
  1792.  
  1793.  
  1794.  
  1795.  
  1796.  
  1797.  
  1798.  
  1799.     ────────────────────────────────────────────────────────────────────────────────
  1800.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   24
  1801.  
  1802.  
  1803.  
  1804.     Aufruf über den Hotkey
  1805.     ──────────────────────
  1806.  
  1807.     Nach  der  Installation  kann  MDEBUG  jederzeit  über  den  einge-
  1808.     richteten Hotkey  aufgerufen  werden. (siehe  auch  'Vorbereitungen
  1809.     vor dem Start' und 'Hinweise zur Benutzung')
  1810.  
  1811.     MDEBUG schaltet beim  Aufruf über den Hotkey sofort  (noch vor  der
  1812.     Passwort-Abfrage)  auf  einen  eigenen  Stack  um;  somit  ist  die
  1813.     Belastung des Stacks des unterbrochenen Prozesses minimal.
  1814.  
  1815.     Ein  Aufruf im Graphikmodus ist  nicht möglich.  Getestet  wird der
  1816.     Bildschirmmodus nur für  CGA- und  HGC-Karten,  d.h. ein Aufruf ist
  1817.     nur möglich falls einer der Bildschirmmodi 2, 3 (CGA)  oder 7 (HGC,
  1818.     Textmodus) eingestellt ist.
  1819.  
  1820.     Falls  der Aufruf  nicht  erlaubt  ist, weil sich der Bildschirm im
  1821.     Graphik-Modus befindet oder  aber  MDEBUG  noch  aktiv ist, wird er
  1822.     unterdrückt.  Beim  Aufruf im  Graphikmodus  ertönt  zusätzlich ein
  1823.     Fehlerton.
  1824.  
  1825.     Wenn   der  aktuelle  Bildschirm-Modus  von  MDEBUG  nicht  korrekt
  1826.     erkannt  wird,  muß  der  Parameter  'TEXT'  beim  Aufruf angegeben
  1827.     werden. (s.o., oder ein Bildschirmtreiber geladen werden, s.u.)
  1828.  
  1829.  
  1830.  
  1831.  
  1832.  
  1833.  
  1834.  
  1835.  
  1836.  
  1837.  
  1838.  
  1839.  
  1840.  
  1841.  
  1842.  
  1843.  
  1844.  
  1845.  
  1846.  
  1847.  
  1848.  
  1849.  
  1850.  
  1851.  
  1852.  
  1853.  
  1854.  
  1855.  
  1856.  
  1857.  
  1858.  
  1859.     ────────────────────────────────────────────────────────────────────────────────
  1860.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   25
  1861.  
  1862.  
  1863.  
  1864.  
  1865.     Beschreibung des Monitors
  1866.     ─────────────────────────
  1867.  
  1868.  
  1869.     Aufbau des Monitor-Fensters
  1870.     ───────────────────────────
  1871.  
  1872.     ┌──> oberes Window des Monitors
  1873.     │
  1874.     │┌──> 'Offset: 1CB3' ->> Offset der akt. Cursorposition (= Konstante CU, s.u.)
  1875.     ││                       [...] = Wert des akt. Bytes in verschiedenen Formaten
  1876.     ││                                                      ┌─> Monitor-Schalter
  1877.     ││                                                      │
  1878.     ││╔═══════════════════════════════ MDEBUG V2.00 ═══════[b*]════════════════════╗
  1879.     ││║ SE:OF  Adr.: B000:1CA0  SE: B000 OF: 1CA0    Suchen:                       ║
  1880.     │└╟──────┬─ Offset: 1CB3 [= 20h = #032 = ' ']───────────────┬──────────────────╢
  1881.     ├─║ 1CA0 │ 70 BA 70 BA 70 36 70 B3  70 20 70 30 70 30 70 30 │ p║p║p6p│p p0p0p0 ║
  1882.     │ ║ 1CB0 │ 70 30 70 20 70 B3 70 20  70 BA 70 20 70 42 70 75 │ p0p p│p p║p pBpu ║
  1883.     │ ║ 1CC0 │ 70 73 70 79 70 2D 70 46  70 6C 70 61 70 67 70 20 │ pspyp-pFplpapgp  ║
  1884.     └─║ 1CD0 │ 70 3D 70 20 70 30 70 30  70 20 70 20 70 44 70 49 │ p=p p0p0p p pDpI ║
  1885.     ┌─║      │ ── FS:FO => 3000:1A10 ────────────────────────── │                  ║
  1886.     │┌╢ 1A10 │ 70 4D 70 20 70 20 70 BA  70 20 70 38 70 20 70 30 │ pMp p p║p p8p p0 ║
  1887.     ││║ 1A20 │ 70 42 70 20 70 3D 70 20  70 30 70 32 70 36 70 31 │ pBp p=p p0p2p6p1 ║
  1888.     │├║ 1A30 │ 70 3A 70 30 70 30 70 31  70 45 70 20 70 20 70 4D │ p:p0p0p1pEp p pM ║
  1889.     ││╚══════╧══════════════[ (c) Bernd Schemmer 1988 - 1992 ]══╧══════════════════╝
  1890.     ││  ├──┘   ├──────────────────────────────────────────────┘   ├──────────────┘
  1891.     ││  │      │                                                  │
  1892.     ││  │      └──> Speicherinhalt in hexadezimalem Format        └──> Speicherinhalt
  1893.     ││  │                                                              als ASCII-Codes
  1894.     ││  └──> Offset des Speicherbereichs in der Zeile
  1895.     ││
  1896.     │└──> unteres Window des Monitors
  1897.     │
  1898.     └───> Statuszeile des unteren Windows des Monitors inclusive
  1899.           der Anzeige der Inhalte der Register FS und FO
  1900.  
  1901.     Hinweis:
  1902.  
  1903.     Mit 'Fenster' ist immer der gesamte  Monitor gemeint,  mit 'Window'
  1904.     immer  die 'Teilfenster'  zur  Anzeige  von jeweils einem Speicher-
  1905.     bereich im Monitor.
  1906.  
  1907.  
  1908.  
  1909.  
  1910.  
  1911.  
  1912.  
  1913.  
  1914.  
  1915.  
  1916.  
  1917.  
  1918.  
  1919.     ────────────────────────────────────────────────────────────────────────────────
  1920.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   26
  1921.  
  1922.  
  1923.  
  1924.     Der  Inhalt des  Monitor-Fensters, wird fortlaufend  aktualisiert -
  1925.     auch wenn der Interpreter aktiv ist.
  1926.  
  1927.     Ausnahme:
  1928.  
  1929.     Nach Eingabe des Prefixzeichens <CTRL-P> im Interpreter bzw. in der
  1930.     3. Spalte des Monitors ist  die Aktualisierung des Monitor-Inhaltes
  1931.     bis  zur   Eingabe  der  nächsten  Taste blockiert.
  1932.     Bei  der Eingabe eines Suchstrings, während der Suche eines Strings
  1933.     im  Monitor,  während  der Bearbeitung  eines oder  mehrerer Inter-
  1934.     preter-Befehl(e)  und während  des  Aufrufs  der Online-Hilfe  wird
  1935.     die Anzeige des Monitors ebenfalls nicht aktualisiert.
  1936.  
  1937.  
  1938.     Auf den oberen  Rahmen werden die akutellen Werte der  Schalter des
  1939.     Monitors angezeigt ([...]):
  1940.  
  1941.     ┌──────────┬───────┬──────────────────────────────────┬───────────┐
  1942.     │ Schalter │ Wert  │Bedeutung                         │  Taste    │
  1943.     ╞══════════╪═══════╪══════════════════════════════════╪═══════════╡
  1944.     │ Monitor- │  b    │ direkte Änderungen im Monitor    │  <CTRL-B> │
  1945.     │ Mode     │       │ möglich                          │           │
  1946.     │          │  B    │ direkte Änderungen im Monitor    │           │
  1947.     │          │       │ NICHT möglich                    │           │
  1948.     ├──────────┼───────┼──────────────────────────────────┼───────────┤
  1949.     │ Update-  │  *    │ Monitor-Inhalt wird laufend      │   <F9>    │
  1950.     │ Mode     │       │ aktualisiert                     │           │
  1951.     │          │  -    │ Monitor-Inhalt wird nur nach     │           │
  1952.     │          │       │ einem Tastendruck aktualisiert   │           │
  1953.     └──────────┴───────┴──────────────────────────────────┴───────────┘
  1954.  
  1955.  
  1956.  
  1957.  
  1958.  
  1959.  
  1960.  
  1961.  
  1962.  
  1963.  
  1964.  
  1965.  
  1966.  
  1967.  
  1968.  
  1969.  
  1970.  
  1971.  
  1972.  
  1973.  
  1974.  
  1975.  
  1976.  
  1977.  
  1978.  
  1979.     ────────────────────────────────────────────────────────────────────────────────
  1980.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   27
  1981.  
  1982.  
  1983.  
  1984.     ■ Aufbau der ersten Statuszeile
  1985.  
  1986.                                  ┌─> Inhalt des Registers SE (hex.)
  1987.                                  │        ┌─> Inhalt des Registers OF
  1988.                                  │        │   (hex.)
  1989.     ╔════════════════════════════│════════│═════════════════...════════╗
  1990.     ║ SE:OF  Adr.: B000:1CA0  SE:│B000 OF:│1CA0    Suchen:             ║
  1991.     ╟ ┌───         ┌────────     └────    └────    ┌────────...        ╢
  1992.       │            │                               └─> Puffer für die
  1993.       │            │                                   Eingabe eines
  1994.       │            │                                   Suchstrings
  1995.       │            └─> Adresse des Speicherbereichs der im oberen Window
  1996.       │                angezeigt wird (Segment-Feld : Offset-Feld)
  1997.       │
  1998.       └─> Namen der Register, aus denen  die Start-Adresse des  Monitors
  1999.           ermittelt wird. Die hier stehende Register-Kombination wird im
  2000.           weiteren als Monitor-Start-Adresse bezeichnet.
  2001.  
  2002.  
  2003.     ■ Aufbau der zweiten Statuszeile
  2004.  
  2005.     ║       ── FS:FO => 3000:1A10 ──────────────────────────      ...  ║
  2006.                         ┌─── ┌───
  2007.                         │    └─> Inhalt des Registers FO (hex.)
  2008.                         └─> Inhalt des Registers FS (hex.)
  2009.  
  2010.     Die Register  FS und FO  bilden  die  Startadresse  für  das untere
  2011.     Monitor-Window.
  2012.  
  2013.  
  2014.  
  2015.  
  2016.  
  2017.  
  2018.  
  2019.  
  2020.  
  2021.  
  2022.  
  2023.  
  2024.  
  2025.  
  2026.  
  2027.  
  2028.  
  2029.  
  2030.  
  2031.  
  2032.  
  2033.  
  2034.  
  2035.  
  2036.  
  2037.  
  2038.  
  2039.     ────────────────────────────────────────────────────────────────────────────────
  2040.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   28
  2041.  
  2042.  
  2043.  
  2044.     Tastenbelegung im Monitor
  2045.     ─────────────────────────
  2046.  
  2047.  
  2048.     Die folgenden Tasten  sind in  allen Spalten  und  bei der direkten
  2049.     Eingabe des Segments und des Offsets verfügbar:
  2050.  
  2051.  
  2052.     ■ <F1>
  2053.  
  2054.     Aufruf der Online-Hilfe, falls sie geladen ist.
  2055.     Ansonsten hat die Taste keine Wirkung.
  2056.  
  2057.  
  2058.     ■ <CTRL-F1>
  2059.  
  2060.     Anzeige des DOS-Bildschirms und Warten auf  einen Tastendruck. Nach
  2061.     der Eingabe einer Taste fährt MDEBUG fort. Die gedrückte Taste wird
  2062.     ignoriert.
  2063.  
  2064.  
  2065.     ■ <CTRL-PgUp>, <CTRL-PgDn>
  2066.  
  2067.     Verschieben des Monitor-Fensters  um 1 Zeile nach  oben bzw. unten.
  2068.     Die neuen  Fensterkoordinaten  des  Monitors sind  bis zur nächsten
  2069.     Änderung gültig.
  2070.  
  2071.  
  2072.     ■ <F9>
  2073.  
  2074.     Laufende Aktualisierung der Monitor-Anzeige ein- oder  ausschalten.
  2075.     Falls die  laufende Monitor-Aktualisierung ausgeschaltet  ist, wird
  2076.     die  Anzeige  des Monitors nur nach jedem Tastendruck aktualisiert.
  2077.     Der  aktuelle Modus  wird immer auf  dem oberen Rahmen des Monitors
  2078.     angezeigt ('*' -> ein, '-' -> aus)
  2079.  
  2080.  
  2081.     ■ <ALT-F9>
  2082.  
  2083.     Bildschirmdaten neu ermitteln  und das Fenster neu aufbauen. Stellt
  2084.     MDEBUG bei der Ermittlung der Bildschirmdaten einen  falschen Bild-
  2085.     schirmmodus fest,  so wird der  Aufruf beendet.  In diesem Fall ist
  2086.     die Fensterstruktur von MDEBUG sehr wahrscheinlich zerstört und
  2087.     muß beim nächsten Aufruf von MDEBUG in einem korrektem  Bildschirm-
  2088.     modus über die Taste <ALT-F9> wieder restauriert werden.
  2089.  
  2090.  
  2091.  
  2092.  
  2093.  
  2094.  
  2095.  
  2096.  
  2097.  
  2098.  
  2099.     ────────────────────────────────────────────────────────────────────────────────
  2100.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   29
  2101.  
  2102.  
  2103.  
  2104.     ■ <F2>
  2105.  
  2106.     Editieren  eines  Suchstrings  der im Speicher gesucht werden soll.
  2107.     Der Suchstring kann maximal 21 Zeichen lang sein.
  2108.  
  2109.     Gesucht wird ab dem zweiten im ersten Window des Monitors angezeig-
  2110.     ten Byte  bis zum  Ende des ersten  Megabytes des Speichers.  Falls
  2111.     der Suchstring gefunden  wird,  wird  die Monitor-Start-Adresse mit
  2112.     der Adresse des Suchstrings geladen und ein Ton ausgegeben.
  2113.     Die gefundene Adresse wird  dabei folgendermaßen konvertiert:
  2114.  
  2115.     Falls die Adresse  VOR  dem ersten  MCB oder HINTER dem letzten MCB
  2116.     liegt, wird sie in die  Form 'nn00:nnnn' (n <= 0 <= F) konvertiert.
  2117.  
  2118.     Liegt die  Adresse in den ersten  65.535 Byte eines  Speicherblocks
  2119.     der über  die MCB-Kette  verwaltet  wird,  so  wird sie in die Form
  2120.     'seg:nnnn' konvertiert, wobei seg  das Segment des  Speicherblocks,
  2121.     in dem  die Adresse  liegt, ist. Sollte diese Form  für die Adresse
  2122.     nicht möglich sein, so wird sie in der Form 'nn00:nnnn' ausgegeben.
  2123.  
  2124.     Hinweis:
  2125.  
  2126.     Die für die Suche benötigte Zeit wird bestimmt durch die Häufigkeit
  2127.     des ersten direkt angegebenen Zeichens im Suchstring.
  2128.  
  2129.     Die  Suche kann  über die  BREAK-Taste  abgebrochen werden.  (siehe
  2130.     Beschreibung des Interpreters)
  2131.  
  2132.  
  2133.     ■ <SHIFT-F2>
  2134.  
  2135.     Suche des Suchstrings ab  dem zweiten Byte in dem im ersten  Window
  2136.     angezeigten  Speicherbereich  fortsetzen.  Falls   der   Suchstring
  2137.     gefunden  wird,  wird die  Monitor-Start-Adresse  auf die gefundene
  2138.     Speicherstelle gesetzt. Ansonsten wird die Anzeige nicht verändert.
  2139.  
  2140.     Die  Suche kann  über die  BREAK-Taste  abgebrochen werden.  (siehe
  2141.     Beschreibung des Interpreters)
  2142.  
  2143.  
  2144.     ■ <F4>
  2145.  
  2146.     Aufruf des Interpreters
  2147.  
  2148.  
  2149.  
  2150.  
  2151.  
  2152.  
  2153.  
  2154.  
  2155.  
  2156.  
  2157.  
  2158.  
  2159.     ────────────────────────────────────────────────────────────────────────────────
  2160.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   30
  2161.  
  2162.  
  2163.  
  2164.     ■ <SHIFT-F6>
  2165.  
  2166.     Speichern der aktuellen Monitor-Start-Adresse.
  2167.     Eine Schachtelung ist nicht möglich.
  2168.  
  2169.  
  2170.     ■ <F6>
  2171.  
  2172.     Restaurieren  der  Monitor-Start-Adresse  mit der  durch <SHIFT-F6>
  2173.     gespeicherten  Adresse.
  2174.  
  2175.  
  2176.     ■ <CTRL-F6>
  2177.  
  2178.     Vertauschen der  aktuellen  Monitor-Start-Adresse mit der durch die
  2179.     Taste <SHIFT-F6> gespeicherten  Adresse.
  2180.  
  2181.  
  2182.     ■ <ALT-CursorUp>, <ALT-CursorDown>
  2183.  
  2184.     Zeilenweises Scrollen des unteren Windows des Monitors.
  2185.  
  2186.  
  2187.     ■ <ALT-PgUp>, <ALT-PgDn>
  2188.  
  2189.     Seitenweises Scrollen des unteren Windows des Monitors.
  2190.  
  2191.  
  2192.     ■ <CTRL-CursorDown>, <CTRL-CursorUp>
  2193.  
  2194.     Verkleinern bzw. Vergrößern des unteren Windows
  2195.  
  2196.  
  2197.     ■ <ESC>
  2198.  
  2199.     Verlassen von MDEBUG
  2200.     Der  durch den Aufruf von  MDEBUG unterbrochene  Prozess wird fort-
  2201.     gesetzt. Ein Neuaufruf von MDEBUG startet im Monitor.
  2202.  
  2203.  
  2204.     ■ <F10>
  2205.  
  2206.     Verlassen  von MDEBUG,  ein Neuaufruf von MDEBUG  startet im Inter-
  2207.     preter.
  2208.  
  2209.  
  2210.  
  2211.  
  2212.  
  2213.  
  2214.  
  2215.  
  2216.  
  2217.  
  2218.  
  2219.     ────────────────────────────────────────────────────────────────────────────────
  2220.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   31
  2221.  
  2222.  
  2223.  
  2224.     Zusätzliche Tastenbelegung in der 2. und 3. Spalte:
  2225.  
  2226.  
  2227.     ■ Cursor-Tasten
  2228.  
  2229.     Verändern  des  Offsets des im oberen Windows angezeigten Speicher-
  2230.     ausschnittes. (nach 0FFFFh folgt 0h - ohne Veränderung des Segments
  2231.     im  Segment-Register, das  obere Window  wird also  gescrollt) Beim
  2232.     Scrollen  des  Windows  wird  der  Wert  des Registers, aus dem der
  2233.     Offset für das Window ermittelt wird, verändert.
  2234.  
  2235.     Zur  Positionierung des Cursors und zum Scrollen des Windows können
  2236.     folgende Tasten verwendet werden:
  2237.  
  2238.     ■ <CursorRight>, <CursorLeft>, <CursorDown>, <CursorUp>
  2239.       <Blank>, <BackSpace>, <PgDn>, <PgUp>, <Home>, <End>
  2240.  
  2241.     In der 2. Spalte können  zusätzlich  die  Tasten  <Tab> (Sprung zum
  2242.     Zeilenende)  und  <SHIFT-Tab>  (Sprung zum  Zeilenanfang) verwendet
  2243.     werden.
  2244.     Zur Änderung des Segments muß dieses explizit geändert werden.
  2245.  
  2246.  
  2247.     ■ <F8>
  2248.  
  2249.     Teilen des Monitors ab der Zeile über dem Cursor. Im unteren Window
  2250.     wird  der  Speicherbereich ab der Adresse auf der  der Cursor steht
  2251.     angezeigt. D.h.  die  Register  FS und FO werden mit dieser Adresse
  2252.     geladen.
  2253.     Falls schon eine Teilung in Kraft ist, wird sie gelöscht. Die Taste
  2254.     <F8> ist in der ersten Zeile des Fensters gesperrt.
  2255.  
  2256.  
  2257.     ■ <SHIFT-F8>
  2258.  
  2259.     Schließen des unteren Windows
  2260.  
  2261.  
  2262.     ■ <CTRL-F8>
  2263.  
  2264.     Vertauschen der Adressen der Windows.
  2265.  
  2266.  
  2267.     ■ <F3>
  2268.  
  2269.     Wechseln zwischen der Spalte 2 (editieren der  Hex-Darstellung) und
  2270.     der Spalte 3 (editieren der ASCII-Anzeige) des Monitors.
  2271.  
  2272.  
  2273.  
  2274.  
  2275.  
  2276.  
  2277.  
  2278.  
  2279.     ────────────────────────────────────────────────────────────────────────────────
  2280.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   32
  2281.  
  2282.  
  2283.  
  2284.     In der Spalte 2 können folgende Tasten benutzt werden:
  2285.  
  2286.     ■ <+>, <->
  2287.  
  2288.     Erhöhen bzw. Vermindern des Offsets der Monitor-Start-Adresse um 1.
  2289.  
  2290.     ■ <0>..<9>, <A>..<F>, <a>..<f>
  2291.  
  2292.     Direkte und  SOFORTIGE  Änderung der aktuellen Speicherstelle falls
  2293.     der  angezeigte Speicherbereich im RAM liegt. (jeweils ein  Nibble,
  2294.     d.h. ein Halbbyte)
  2295.     Im ROM oder in unbelegten Speicherbereichen kann  keine Veränderung
  2296.     vorgenommen werden. Ein Byte wird jeweils mit 2 Zeichen angezeigt -
  2297.     für jedes Nibble eins.
  2298.  
  2299.  
  2300.     ■ <O>
  2301.  
  2302.     Direkte Veränderung des Offset  des anzuzeigenden  Speicherbereichs
  2303.     im  Offset-Feld.
  2304.  
  2305.  
  2306.     ■ <S>
  2307.  
  2308.     Direkte Veränderung des Segments des anzuzeigenden Speicherbereichs
  2309.     im Segment-Feld.
  2310.  
  2311.  
  2312.     ■ <Z>
  2313.  
  2314.     Wort  an der  aktuellen  Cursorposition  als  neuen  Offset für die
  2315.     Anzeige  des oberen  Windows nehmen.  Geeignet zum  Durchlaufen von
  2316.     mit NEAR-Zeigern verketteten Speicherstrukturen.
  2317.  
  2318.  
  2319.     ■ <W>
  2320.  
  2321.     Wort  an der aktuellen  Cursorposition  als neues Segment  für  die
  2322.     Anzeige  des  oberen  Windows nehmen.
  2323.  
  2324.  
  2325.  
  2326.  
  2327.  
  2328.  
  2329.  
  2330.  
  2331.  
  2332.  
  2333.  
  2334.  
  2335.  
  2336.  
  2337.  
  2338.  
  2339.     ────────────────────────────────────────────────────────────────────────────────
  2340.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   33
  2341.  
  2342.  
  2343.  
  2344.     ■ <P>
  2345.  
  2346.     Doppelwort an der aktuellen Cursorposition als neue Adresse für die
  2347.     Anzeige  des  oberen  Windows nehmen. Geeignet zum  Durchlaufen von
  2348.     mit  FAR-Zeigern verketteten Speicherstrukturen.
  2349.  
  2350.  
  2351.     ■ <M>
  2352.  
  2353.     Falls das Byte an  der aktuellen Cursorposition  den ASCII-Code 'M'
  2354.     enthält, wird das Wort an der Stelle  'Cursor-Position + 3' auf das
  2355.     Segment der  Monitor-Start-Adresse addiert und diese inkrementiert.
  2356.     Der Offset der Monitor-Start-Adresse wird auf 0 gesetzt.
  2357.     Falls  sich also  der  Cursor auf dem Kennbyte eines MCBs befindet,
  2358.     kann mit der Taste <M> die Adresse des nächsten MCB geladen werden.
  2359.     Enthält das Byte an  der Monitor-Start-Adresse nicht den ASCII-Code
  2360.     'M', so wird  die Monitor-Start-Adresse  mit der Adresse des ersten
  2361.     MCBs geladen.
  2362.  
  2363.  
  2364.     ■ <Y>
  2365.  
  2366.     Ermittelt  den nächsten MCB  analog zur  Taste <M>  aber ohne Über-
  2367.     prüfung, ob der Cursor auf dem Kennzeichen eines MCBs steht.
  2368.  
  2369.  
  2370.     ■ <L>
  2371.  
  2372.     Setzt die Monitor-Start-Adresse auf den letzten MCB.
  2373.     (max. werden 255 MCBs durchlaufen)
  2374.  
  2375.  
  2376.     ■ <T>
  2377.  
  2378.     Übernimmt die Adresse  des Bytes, auf dem der Cursor steht als neue
  2379.     Monitor-Start-Adresse.
  2380.  
  2381.  
  2382.     ■ <X>
  2383.  
  2384.     Restaurieren der letzten Start-Adresse des Monitors. MDEBUG sichert
  2385.     die Start-Adresse  des Monitors  vor der Ausführung der Tasten <M>,
  2386.     <P>, <Z>, <L>, <T> und <W>.
  2387.  
  2388.  
  2389.  
  2390.  
  2391.  
  2392.  
  2393.  
  2394.  
  2395.  
  2396.  
  2397.  
  2398.  
  2399.     ────────────────────────────────────────────────────────────────────────────────
  2400.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   34
  2401.  
  2402.  
  2403.  
  2404.     ■ <CTRL-B>
  2405.  
  2406.     Erlaubt oder unterbindet direkte  Änderungen im Monitor.  Der aktu-
  2407.     elle Modus wird  auf dem  oberen  Rahmen des  Fensters des Monitors
  2408.     ausgegeben  und  ist an  der Cursorform  erkennbar (Unterstrich ->>
  2409.     Änderungen erlaubt, Block ->> Änderungen nicht erlaubt).
  2410.  
  2411.  
  2412.     In der Spalte 3 gilt folgende Tastenbelegung:
  2413.  
  2414.  
  2415.     ■ <CTRL-P>
  2416.  
  2417.     Prefixzeichen, d.h. die nach <CTRL-P>  eingegebene Taste wird nicht
  2418.     interpretiert sondern so übernommen.
  2419.  
  2420.  
  2421.     ■ <ESC>
  2422.  
  2423.     Verlassen von MDEBUG
  2424.  
  2425.  
  2426.     ■ Alle anderen  Tasten verändern SOFORT die aktuelle Speicherstelle
  2427.       (auch Steuerzeichen wie <Tab>, <RETURN>, usw.)
  2428.  
  2429.  
  2430.     Die Tastenbelegung bei der Eingabe von Segment oder Offset ist fol-
  2431.     gendermaßen:
  2432.  
  2433.  
  2434.     ■ <0>..<9>, <A>..<F>, <a>..<f>
  2435.  
  2436.     Hexadezimale  Eingabe des  neuen Wertes des aktuellen des Register-
  2437.     Wertes. Die Anzeige wird  nach  jeder Änderung eines Nibbles sofort
  2438.     angepasst.
  2439.  
  2440.  
  2441.     ■ <CursorLeft>, <CursorRight>, <End>, <Home>
  2442.  
  2443.     Cursor-Positionierung,  durch  die   Eingabe  von  <CursorLeft>  am
  2444.     Anfang des Offset-Feldes kann in  das Segment-Feld  und  durch  die
  2445.     Eingabe   von <CursorRight>  am Ende des Segment-Feldes kann in das
  2446.     Offset-Feld gewechselt werden.
  2447.  
  2448.  
  2449.  
  2450.  
  2451.  
  2452.  
  2453.  
  2454.  
  2455.  
  2456.  
  2457.  
  2458.  
  2459.     ────────────────────────────────────────────────────────────────────────────────
  2460.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   35
  2461.  
  2462.  
  2463.  
  2464.     ■ <O>
  2465.  
  2466.     Eingabe eines neuen Offsets für das obere Window im Offset-Feld.
  2467.  
  2468.  
  2469.     ■ <S>
  2470.  
  2471.     Eingabe eines neuen Segments für das obere Window im Segment-Feld.
  2472.  
  2473.  
  2474.     ■ <RETURN>
  2475.  
  2476.     Rückkehr in die Spalte 2 bzw. 3.
  2477.  
  2478.  
  2479.     Die Tastenbelegnung bei der Eingabe des Suchstrings ist:
  2480.  
  2481.     ■ Erlaubt sind  alle  Zeichen. Zeichen mit einem ASCII-Code kleiner
  2482.       als 32 (dez.) müssen über <ALT-ASCIINummer> eingegeben  werden.
  2483.       Die Zeichen  mit den ASCII-Codes  13  (<RETURN>),  27 (<ESC>) und
  2484.       8 (<BackSpace>)  müssen  nach  dem Prefix-Zeichen <CTRL-P> einge-
  2485.       geben werden.  Funktionstasten  ohne Bedeutung werden  ignoriert.
  2486.       Leerzeichen  im Suchstring sind erlaubt, der Suchstring kann aber
  2487.       nicht mit einem Leerzeichen enden. Das Zeichen ■ (ASCII-Code 254)
  2488.       gilt als Joker im Suchstring.
  2489.  
  2490.  
  2491.     ■ <F1>
  2492.  
  2493.     Aufruf der Online-Hilfe, falls sie geladen ist.
  2494.     Ansonsten hat die Taste keine Wirkung. (s.o.)
  2495.  
  2496.  
  2497.     ■ Die Tasten
  2498.  
  2499.          <CursorRight>, <CursorLeft>, <Home>, <End>, <Delete>,
  2500.          <BackSpace>
  2501.  
  2502.       können bei der Eingabe zum Positionieren des Cursor im Suchstring
  2503.       benutzt werden. Die Eingabe erfolgt immer im INSERT-Modus.
  2504.  
  2505.  
  2506.  
  2507.  
  2508.  
  2509.  
  2510.  
  2511.  
  2512.  
  2513.  
  2514.  
  2515.  
  2516.  
  2517.  
  2518.  
  2519.     ────────────────────────────────────────────────────────────────────────────────
  2520.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   36
  2521.  
  2522.  
  2523.  
  2524.     ■ <CTRL-End>
  2525.  
  2526.     Löschen des Eingabepuffers für den Suchstring ab der Cursorposition
  2527.     bis zum Schluß.
  2528.  
  2529.  
  2530.     ■ <ESC>
  2531.  
  2532.     Editieren des Suchstrings abbrechen, der Suchstring wird aber nicht
  2533.     gelöscht.
  2534.  
  2535.  
  2536.     ■ <RETURN>
  2537.  
  2538.     Editieren des Suchstrings beenden und Suchvorgang starten.
  2539.  
  2540.  
  2541.     Hinweis:
  2542.  
  2543.     Falls im Monitor  der  Inhalt  des  Registers  FS bzw. FO verändert
  2544.     werden soll, muß mensch folgendermaßen vorgehen:
  2545.  
  2546.     Zuerst die Windows des  Monitors  durch <CTRL-F8> vertauschen.  Nun
  2547.     über die  Taste <O> bzw. <S> ins Segment- bzw. Offset-Feld springen
  2548.     und den Wert  ändern.  Und zum Schluß über die Taste <CTRL-F8>  die
  2549.     Windows wieder tauschen.
  2550.  
  2551.     Analog  muß vorgegangen werden, falls direkte Änderungen in  dem im
  2552.     unteren  Fenster  angezeigten  Speicherbereich  vorgenommen  werden
  2553.     sollen.
  2554.  
  2555.  
  2556.  
  2557.  
  2558.  
  2559.  
  2560.  
  2561.  
  2562.  
  2563.  
  2564.  
  2565.  
  2566.  
  2567.  
  2568.  
  2569.  
  2570.  
  2571.  
  2572.  
  2573.  
  2574.  
  2575.  
  2576.  
  2577.  
  2578.  
  2579.     ────────────────────────────────────────────────────────────────────────────────
  2580.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   37
  2581.  
  2582.  
  2583.  
  2584.     Beschreibung der Online-Hilfe
  2585.     ─────────────────────────────
  2586.  
  2587.  
  2588.     Aufbau des Fensters der Online-Hilfe
  2589.     ────────────────────────────────────
  2590.  
  2591.     ┌────────────── Text der Online-Hilfe (akt. Ausschnitt)
  2592.     │ ┌────────── Überschrift der Online-Hilfe (wird immer angezeigt)
  2593.     │ │
  2594.     │ │  ┌─ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  ─┐
  2595.     │ └─>.                    *** Hilfstext für MDEBUG ***                                .
  2596.     ├───>.                      Tastenbelegung im Monitor                                 .
  2597.     │    .                                                                                .
  2598.     │    .  CTRL-PgUp   - Fenster nach oben         CTRL-PgDn    - Fenster nach unten     .
  2599.     │    .  CTRL-F1     - Programm-Pause            ALT-F9       - Fenster neu aufbauen   .
  2600.     │    .  F2          - Suchen eines Strings      SHIFT-F2     - Suche wiederholen      .
  2601.     │    .  F3          - Wechsel der akt. Spalte   F4           - Interpreter aufrufen   .
  2602.     │    .  F9          - lfd. Akt. ein/aus         F6           - akt. Adr. rest.        .
  2603.     │    .  SHIFT-F6    - akt. Adresse speichern    CTRL-F6      - akt. Adr. tauschen     .
  2604.     │    .  F8          - Monitor-Fenster an der akt. Stelle teilen                       .
  2605.     └───>.  SHIFT-F8    - unteres Monitor-Fenster schliessen                              .
  2606.     ┌───>.░░░9░^░░░░░2░░░░░3░░░░░░4░░░░░░░5░░░░░░░░░░░░░░░░░░░░░6░░░░░░7░░░░8░░░░░░░░░░░░░.
  2607.     │ ┌─>   ,  , PgDn, PgUp, Home, End -> Scrollen  <n>/<ALT-n> [Marker] F10, ESC -> exit
  2608.     │ │  └─ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  ─┘
  2609.     │ │
  2610.     │ └────────── Tastenbelegung in der Online-Hilfe
  2611.     └────────────── Scrollbar der Online-Hilfe
  2612.  
  2613.  
  2614.     Die aktuelle Position im Hilfstext  wird im  Scrollbar durch  einen
  2615.     einfachen oder  doppelten Pfeil  (je nach aktueller Position) ange-
  2616.     zeigt (in der obigen  Abbildung  wird der Pfeil durch das Zeichen ^
  2617.     repräsentiert),  die  Positionen  der Marker  werden durch die ent-
  2618.     sprechende Nummer im Scrollbar angezeigt. Falls mehrere Marker  auf
  2619.     einer  Position stehen, wird immer nur der Marker mit der kleinsten
  2620.     Nummer im Scrollbar angezeigt.
  2621.  
  2622.     Ein Rahmen um das Fenster der Online-Hilfe wird nicht ausgegeben.
  2623.  
  2624.  
  2625.  
  2626.  
  2627.  
  2628.  
  2629.  
  2630.  
  2631.  
  2632.  
  2633.  
  2634.  
  2635.  
  2636.  
  2637.  
  2638.  
  2639.     ────────────────────────────────────────────────────────────────────────────────
  2640.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   38
  2641.  
  2642.  
  2643.  
  2644.     Tastenbelegung in der Online-Hilfe
  2645.     ──────────────────────────────────
  2646.  
  2647.  
  2648.     Während eines  Aufrufes der  Online-Hilfe  gelten  folgende Tasten-
  2649.     belegungen:
  2650.  
  2651.  
  2652.     ■ <CursorUp>, <CursorDown>,  <PgDn>, <PgUp>
  2653.  
  2654.               - Zeilen- bzw. Seitenweises Scrollen des Hilfstextes
  2655.  
  2656.  
  2657.     ■ <Home>, <End>
  2658.  
  2659.               - Sprung zur ersten bzw. letzten Zeile des Hilfstextes
  2660.  
  2661.  
  2662.     ■ 0       - Anzeige der zuletzt angezeigten Seite
  2663.  
  2664.  
  2665.     ■ <ALT-1> .. <ALT-9>
  2666.  
  2667.               - Setzen des Markers # (1...9) auf die erste Zeile im
  2668.                 Window
  2669.  
  2670.  
  2671.     ■ <1> .. <9>
  2672.  
  2673.               - Sprung zum Marker # (1 .. 9).
  2674.  
  2675.  
  2676.     ■ <CTRL-PgUp>, <CTRL-PgDn>
  2677.  
  2678.               - Verschieben des Fensters für die Online-Hilfe um
  2679.                 jeweils eine Zeile nach oben bzw. unten.
  2680.  
  2681.  
  2682.     ■ <ESC>   -  Verlassen der Online-Hilfe
  2683.  
  2684.  
  2685.     ■ <F10>   -  Verlassen von MDEBUG, Neustart in der Online-Hilfe
  2686.  
  2687.  
  2688.  
  2689.  
  2690.  
  2691.  
  2692.  
  2693.  
  2694.  
  2695.  
  2696.  
  2697.  
  2698.  
  2699.     ────────────────────────────────────────────────────────────────────────────────
  2700.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   39
  2701.  
  2702.  
  2703.  
  2704.  
  2705.     Beschreibung des Interpreters
  2706.     ─────────────────────────────
  2707.  
  2708.     Aufbau des Interpreter-Fensters
  2709.     ───────────────────────────────
  2710.  
  2711.     ┌─────────> Inhalt der Hilfsregister R1 bis R7
  2712.     │┌──────> PSP- und Code-Segment von MDEBUG (= Wert der Konstanten CS)
  2713.     ││┌───> Puffer für die Eingabe von Befehlen (max. 66 Zeichen)
  2714.     ││└────────────────┐                                     ┌─> Interpreter-Schalter
  2715.     ││           ┌─────┴─────────────────────────────────────│────────────────────────┐
  2716.     ││  ╔══════════════════════════════════ MDEBUG V2.00 ════[UQI]═════════════════════╗
  2717.     ││  ║ Befehl:                                                                      ║
  2718.     ││  ╟────────┬──────────────────────────────────────────────────M──────────────────╢
  2719.     │└──║CS: 2390│ ╓─────────── Register ─────────────────────────╖ 1 0DC9:0000 LASTBUF║
  2720.     │   ║R┬──────┤ ║ AX = 0100  BX = 0324  CX = 0001  DX = 022C   ║ 2 0974:0000 1. MCB ║
  2721.     ├───║1│ 0080 │ ║ SI = 001C  DI = 035E  DS = 09E6  ES = 022C   ║ 3 022C:7420 1. DPB ║
  2722.     ├───║2│ 2390 │ ║ BP = 2DB2  SS = 022C  SP = 09CC              ║ 4 022C:0098 SDL    ║
  2723.     ├───║3│ D061 │ ║ Flags =  ....__I__Z___E._                    ║ 5 0070:01A4 CLOCK  ║
  2724.     ├───║4│ 0000 │ ║    R0 = $1000000001000101 = 8045             ║ 6 09E6:0000 CON    ║
  2725.     ├───║5│ 0000 │ ║    R8 = #34150  (-#31386) = 8566 = 'áf'      ║ 7 0D24:0000 BUF    ║
  2726.     ├───║6│ 0000 │ ║ Ruecksprung-Adresse = F000:E830              ║ 8 0F76:0000 PRet   ║
  2727.     └───║7│ 0000 │ ║ Busy-Flag = 01  DIB = 022C:001E              ║ 9 0A6B:0000 PFileT ║
  2728.         ╚═╧══════╧═╩═══════════[ (c) Bernd Schemmer 1988 - 1992 ]═╩═╩══════════════════╝
  2729.                      └─────────────────────┬─────────────────────┘  └──────┬──────────┘
  2730.     ┌──────────────────────────────────────┘                        ┌──────┘
  2731.     └─> AX .. SP : Inhalt der Prozessorregister                     └─> wichtige Adressen
  2732.         Flags    : Inhalt des Flagregisters                             aus dem DIB
  2733.         R0       : Inhalt des Hilfsregisters R0 (binär und hex.)    (= Memory-Speicher
  2734.         R8       : Inhalt des Hilfsregisters R8 (dezimal mit und       1 bis 9)
  2735.                    ohne Voreichen, hexadezimal und als ASCII-Codes)
  2736.         Ruecksprung-
  2737.         Adresse  : Adresse, an der der aktuelle Prozess nach dem Ende
  2738.                    des Aufrufs von MDEBUG fortgesetzt wird.  Der Wert
  2739.                    vor dem  Doppelpunkt  kann über die  Konstante RS,
  2740.                    der Wert hinter dem Doppelpunkt über die Konstante
  2741.                    RO benutzt werden.
  2742.         Busy-Flag:  = 0 -> DOS-Aufrufe sind erlaubt
  2743.                    <> 0 -> DOS-Aufrufe sind nicht erlaubt
  2744.                    Das  Busy-Flag (= Konstante DO)  ist der  Wert des
  2745.                    DOS-Busy-Flags verODERt mit dem Wert des Critical-
  2746.                    Error-Flags.
  2747.         DIB      : Adresse des DOS-Info-Blocks (DIB, = Memory-Speicher 0)
  2748.  
  2749.  
  2750.  
  2751.  
  2752.  
  2753.  
  2754.  
  2755.  
  2756.  
  2757.  
  2758.  
  2759.     ────────────────────────────────────────────────────────────────────────────────
  2760.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   40
  2761.  
  2762.  
  2763.  
  2764.     Die Bedeutungen der angezeigten Adressen aus dem DIB sind wie folgt:
  2765.     (ab DOS 3.3, DIB = DOS-Info-Block oder auch 'List of Lists')
  2766.  
  2767.     ┌─┬────────┬─────────────────────────────────────────────┐
  2768.     │M│ Name   │ Bedeutung                                   │
  2769.     ╞═╪════════╪═════════════════════════════════════════════╡
  2770.     │1│LASTBUF │ Adresse des letzten (= aktuellen) Puffers   │
  2771.     │2│1. MCB  │ Adresse des ersten Memory-Control-Blocks    │
  2772.     │3│1. DPB  │ Adresse des ersten Disk-Parameter-Blocks    │
  2773.     │4│SDL     │ Adresse der System-Dateienliste             │
  2774.     │5│CLOCK   │ Adresse des CLOCK-Device-Headers            │
  2775.     │6│CON     │ Adresse des CON-Device-Headers              │
  2776.     │7│BUF     │ Adresse des ersten Puffers                  │
  2777.     │ │        │ (DOS 4+: Adresse des Puffer-Info-Blocks)    │
  2778.     │8│PRet    │ Adresse der Laufwerks-Tabelle               │
  2779.     │9│PFileT  │ Adresse der FCB-Liste                       │
  2780.     └─┴────────┴─────────────────────────────────────────────┘
  2781.  
  2782.  
  2783.     Für die Anzeige der Flags werden folgende Zeichen verwendet:
  2784.  
  2785.     ┌──────────┬────────────────────────┐  Falls ein Flag gesetzt  ist,
  2786.     │Buchstabe │ gesetztes Flag         │  wird der entsprechende Buch-
  2787.     ╞══════════╪════════════════════════╡  stabe,  bzw. ein Punkt falls
  2788.     │     O    │ Overflow-Flag          │  das Flag ohne Bedeutung ist,
  2789.     │     D    │ Direction-Flag         │  angezeigt.   Nicht  gesetzte
  2790.     │     I    │ Interrupt-Enable-Flag  │  Flags  werden  durch   einen
  2791.     │     T    │ Trap-Flag              │  Unterstrich angezeigt.
  2792.     │     S    │ Sign-Flag              │
  2793.     │     Z    │ Zero-Flag              │  Hinweis für 80286er/80386er:
  2794.     │     A    │ Auxiliary-Flag         │
  2795.     │     E    │ Parity-Even-Flag       │  Es werden nur die Flags, die
  2796.     │     C    │ Carry-Flag             │  auch dem 8086  bekannt  sind
  2797.     └──────────┴────────────────────────┘  angezeigt.
  2798.  
  2799.  
  2800.  
  2801.  
  2802.  
  2803.  
  2804.  
  2805.  
  2806.  
  2807.  
  2808.  
  2809.  
  2810.  
  2811.  
  2812.  
  2813.  
  2814.  
  2815.  
  2816.  
  2817.  
  2818.  
  2819.     ────────────────────────────────────────────────────────────────────────────────
  2820.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   41
  2821.  
  2822.  
  2823.  
  2824.     Alle expliziten  Werte ohne  Formatkennzeichen ('#','$') sind hexa-
  2825.     dezimal. Falls  ein  Passwort  installiert  ist wird der Status des
  2826.     Passwortes ('ON' oder 'OFF') auf dem  oberen Rand (über 'Befehl: ')
  2827.     ausgegeben.  Alle  Meldungen  von MDEBUG werden  ebenfalls auf  den
  2828.     oberen  Rand des Fensters  des  Interpreters angezeigt.  Sie müssen
  2829.     durch eine Taste  quittiert  werden.  Vor der Ausgabe einer Fehler-
  2830.     meldung wird der Tastaturpuffer gelöscht.
  2831.  
  2832.     Die aktuellen Werte  verschiedener Schalter von MDEBUG werden eben-
  2833.     falls auf den oberen Rand des Fensters ausgegeben ([...]):
  2834.  
  2835.     ┌──────────┬───────┬──────────────────────────────────┬───────────┐
  2836.     │ Schalter │ Wert  │Bedeutung                         │  Taste    │
  2837.     ╞══════════╪═══════╪══════════════════════════════════╪═══════════╡
  2838.     │ Upcase-  │  U    │ Buchstaben werden in Großbuch-   │  <CTRL-U> │
  2839.     │ Mode     │       │ staben konvertiert               │           │
  2840.     │          │  u    │ Buchstaben werden NICHT in Groß- │           │
  2841.     │          │       │ buchstaben konvertiert           │           │
  2842.     ├──────────┼───────┼──────────────────────────────────┼───────────┤
  2843.     │ Quiet-   │  Q    │ akustische Ausgaben sind aus-    │  <CTRL-Q> │
  2844.     │ Mode     │       │ geschaltet                       │           │
  2845.     │          │  q    │ akustische Ausgben sind ein-     │           │
  2846.     │          │       │ geschaltet                       │           │
  2847.     ├──────────┼───────┼──────────────────────────────────┼───────────┤
  2848.     │ Input-   │  I    │ Eingaben erfolgen im INSERT-     │  <INSERT> │
  2849.     │ Mode     │       │ Modus                            │           │
  2850.     │          │  i    │ Eingaben erfolgen im OVERWRITE-  │           │
  2851.     │          │       │ Modus                            │           │
  2852.     └──────────┴───────┴──────────────────────────────────┴───────────┘
  2853.  
  2854.  
  2855.  
  2856.  
  2857.  
  2858.  
  2859.  
  2860.  
  2861.  
  2862.  
  2863.  
  2864.  
  2865.  
  2866.  
  2867.  
  2868.  
  2869.  
  2870.  
  2871.  
  2872.  
  2873.  
  2874.  
  2875.  
  2876.  
  2877.  
  2878.  
  2879.     ────────────────────────────────────────────────────────────────────────────────
  2880.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   42
  2881.  
  2882.  
  2883.  
  2884.     Tasten-Belegung im Interpreter
  2885.     ──────────────────────────────
  2886.  
  2887.     ■ BREAK-Taste
  2888.  
  2889.     Die  BREAK-Taste dient zum  Abbrechen  von  verschiedenen  Befehlen
  2890.     des Interpreters und  des Monitors von MDEBUG.  Die BREAK-Taste ist
  2891.     in  MDEBUG die Tastenkombination <CTRL-ScrollLock>.
  2892.  
  2893.  
  2894.     ■ <F1>
  2895.  
  2896.     Aufruf der Online-Hilfe, falls sie geladen ist.
  2897.     Ansonsten hat die Taste keine Wirkung.
  2898.  
  2899.  
  2900.     ■ <CTRL-F1>
  2901.  
  2902.     Anzeige  des DOS-Bildschirms  und Warten auf einen Tastendruck. Die
  2903.     gedrückte Taste wird nicht weiter bearbeitet.
  2904.  
  2905.  
  2906.     ■ <CTRL-PgUp>, <CTRL-PgDn>
  2907.  
  2908.     Fenster eine Zeile nach oben/unten verschieben
  2909.  
  2910.     Die neuen Fensterkoordinaten sind bis zur nächsten Änderung gültig.
  2911.  
  2912.  
  2913.     ■ <CursorDown>, <CursorUp>, <PgDn>, <PgUp>
  2914.  
  2915.     Scrollen des oberen Windows des Monitors.
  2916.  
  2917.  
  2918.     ■ <GREY->, <GREY+> (aus den Nummernblock)
  2919.  
  2920.     Erhöhen bzw. Vermindern des Offsets der Monitor-Start-Adresse um 1.
  2921.  
  2922.  
  2923.     ■ <F9>
  2924.  
  2925.     Laufende  Aktualisierung  des  Monitors ein- oder ausschalten.
  2926.     Der  aktuelle Modus  wird immer auf  dem oberen Rahmen des Monitors
  2927.     angezeigt ('*' -> ein, '-' -> aus)
  2928.  
  2929.  
  2930.  
  2931.  
  2932.  
  2933.  
  2934.  
  2935.  
  2936.  
  2937.  
  2938.  
  2939.     ────────────────────────────────────────────────────────────────────────────────
  2940.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   43
  2941.  
  2942.  
  2943.  
  2944.     ■ <ALT-F9>
  2945.  
  2946.     Bildschirmdaten neu  ermitteln  und  beide  Fenster  neu  aufbauen.
  2947.     Stellt MDEBUG  hierbei einen falschen Bildschirmmodus fest, so wird
  2948.     der Aufruf beendet. In diesem Fall ist  die Fensterstruktur  beider
  2949.     Fenster sehr wahrscheinlich zerstört und  muß  beim nächsten Aufruf
  2950.     von  MDEBUG im  richtigen  Bildschirmmodus  über die Taste <ALT-F9>
  2951.     jeweils  restauriert  werden.  Durch  die  Taste <ALT-F9> wird  der
  2952.     Eingabe-Puffer des  Interpreters und  der Puffer für den Suchstring
  2953.     im Monitor gelöscht.
  2954.  
  2955.  
  2956.     ■ <F3>  -  Passwort-Abfrage einschalten
  2957.  
  2958.     ■ <F4>  -  Passwort-Abfrage ausschalten
  2959.  
  2960.     Falls ein  Passwort  installiert ist,  kann  es mit  diesen  beiden
  2961.     Tasten ein- oder ausgeschaltet werden. Ist  kein  Passwort  instal-
  2962.     liert, haben die Tasten keine Bedeutung.
  2963.  
  2964.  
  2965.     ■ <F2>
  2966.  
  2967.     Die  Werte der  aktuellen  Register-Kombination  für  die  Monitor-
  2968.     Start-Adresse werden in die Register SE und OF übernommen. Als neue
  2969.     Register-Kombination für die  Monitor-Start-Adresse wird das Regis-
  2970.     terpaar SE:OF genommen.
  2971.  
  2972.  
  2973.     ■ <SHIFT-F2>
  2974.  
  2975.     Die Register SE und OF werden  als  Monitor-Start-Adresse genommen.
  2976.     (Short-Cut für den Befehl 'V SE,OF', siehe unten)
  2977.  
  2978.  
  2979.     ■ <SHIFT-F6>
  2980.  
  2981.     Speichern der aktuellen Monitor-Start-Adresse.
  2982.     Eine Schachtelung ist nicht möglich.
  2983.  
  2984.  
  2985.     ■ <F6>
  2986.  
  2987.     Restaurieren  der  Monitor-Start-Adresse  mit der  durch <SHIFT-F6>
  2988.     gespeicherten  Adresse.
  2989.  
  2990.  
  2991.  
  2992.  
  2993.  
  2994.  
  2995.  
  2996.  
  2997.  
  2998.  
  2999.     ────────────────────────────────────────────────────────────────────────────────
  3000.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   44
  3001.  
  3002.  
  3003.  
  3004.     ■ <CTRL-F6>
  3005.  
  3006.     Vertauschen der  aktuellen  Monitor-Start-Adresse mit der durch die
  3007.     Taste <SHIFT-F6> gespeicherten  Adresse.
  3008.  
  3009.  
  3010.     ■ <F7>
  3011.  
  3012.     Hilfsregister R1 bis R8 löschen, d.h. auf 0 setzen.
  3013.  
  3014.  
  3015.     ■ <F8>
  3016.  
  3017.     Prozessor-Register auf die Werte beim Aufruf von MDEBUG setzen.
  3018.  
  3019.  
  3020.     ■ <SHIFT-F8>
  3021.  
  3022.     Prozessor-Register auf die  Werte vor dem  Beenden des letzten Auf-
  3023.     rufs von MDEBUG setzen.
  3024.  
  3025.     MDEBUG sichert  vor jedem  Beenden  eines  Aufrufes die  Werte  der
  3026.     Prozessor-Register.  Diese können über  die Taste  <SHIFT-F8>  beim
  3027.     nächsten Aufruf wieder geladen werden.
  3028.  
  3029.  
  3030.     ■ <CTRL-F8>
  3031.  
  3032.     Vertauschen der Adressen der beiden Monitor-Windows.
  3033.  
  3034.  
  3035.     ■ <ALT-CursorUp>, <ALT-CursorDown>
  3036.  
  3037.     Mit  diesen beiden  Tasten kann  das  untere  Window  des  Monitors
  3038.     zeilenweise gescrollt werden. Der Inhalt des Registers FO wird ver-
  3039.     ändert.
  3040.  
  3041.  
  3042.     ■ <ALT-PgUp>, <ALT-PgDn>
  3043.  
  3044.     Seitenweises Scrollen des unteren Windows. Der Inhalt des Registers
  3045.     FO wird verändert.
  3046.  
  3047.  
  3048.  
  3049.  
  3050.  
  3051.  
  3052.  
  3053.  
  3054.  
  3055.  
  3056.  
  3057.  
  3058.  
  3059.     ────────────────────────────────────────────────────────────────────────────────
  3060.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   45
  3061.  
  3062.  
  3063.  
  3064.     ■ <CTRL-CursorDown>, <CTRL-CursorUp>
  3065.  
  3066.     Mit  diesen beiden  Tasten kann  das  untere Window jeweils um eine
  3067.     Zeile verkleinert bzw. vergrößert werden.
  3068.  
  3069.  
  3070.     ■ Cursor-Tasten
  3071.  
  3072.     Zur  Steuerung des  Cursors bei der Eingabe der Befehle können fol-
  3073.     gende Tasten verwendet werden:
  3074.  
  3075.          <CursorRight>, <CursorLeft>,
  3076.          <Home>, <End>,
  3077.          <CTRL-CursorRight>, <CTRL-CursorLeft>,
  3078.          <Delete>, <BackSpace>
  3079.  
  3080.  
  3081.     ■ <Insert>
  3082.  
  3083.     Umschalten zwischen Insert- und Overwrite-Modus. Der aktuelle Modus
  3084.     ist  an der Cursorform  erkenntlich  (Unterstrich-Cursor -> Insert-
  3085.     Modus,  Block-Cursor -> Overwrite-Modus).  Zudem wird  der aktuelle
  3086.     Modus auf dem  oberen Rahmen  des Interpreter-Fensters angezeigt.
  3087.  
  3088.  
  3089.     ■ <CTRL-U>
  3090.  
  3091.     Konvertierung der Zeichen in Großbuchstaben ein- oder  ausschalten.
  3092.     Der aktuelle  Modus  wird auf  dem oberen  Rahmen des  Interpreter-
  3093.     Fensters angezeigt.
  3094.  
  3095.  
  3096.     ■ <CTRL-Q>
  3097.  
  3098.     Ein- oder ausschalten der akustischen Ausgabe von MDEBUG.
  3099.     Der aktuelle  Modus  wird auf  dem oberen  Rahmen des  Interpreter-
  3100.     Fensters angezeigt.
  3101.  
  3102.  
  3103.     ■ <CTRL-End>
  3104.  
  3105.     Löschen der Eingabe ab der Cursor-Position bis zum Ende des Puffers.
  3106.  
  3107.  
  3108.  
  3109.  
  3110.  
  3111.  
  3112.  
  3113.  
  3114.  
  3115.  
  3116.  
  3117.  
  3118.  
  3119.     ────────────────────────────────────────────────────────────────────────────────
  3120.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   46
  3121.  
  3122.  
  3123.  
  3124.     ■ <CTRL-Home>
  3125.  
  3126.     Löschen der gesamten Eingabe.
  3127.  
  3128.  
  3129.     ■ <CTRL-RETURN>
  3130.  
  3131.     Letzte Eingabe nochmal bearbeiten (ohne Editiermöglichkeit).
  3132.  
  3133.  
  3134.     ■ <SHIFT-RETURN>
  3135.  
  3136.     Letzte Eingabe wieder zum Editieren freigeben.
  3137.  
  3138.  
  3139.     ■ <RETURN>
  3140.  
  3141.     Eingabe bearbeiten
  3142.  
  3143.  
  3144.     ■ <ALT-RETURN>
  3145.  
  3146.     Eingabe  bearbeiten,  aber nicht in den internen Puffer übernehmen,
  3147.     d.h.  die  'letzte Eingabe' für  <SHIFT-RETURN>  und  <CTRL-RETURN>
  3148.     wird nicht verändert.
  3149.  
  3150.     Hinweis:  Diese Tastenkombination funktioniert  nicht auf allen PCs
  3151.               korrekt.
  3152.  
  3153.  
  3154.     ■ <ALT-F5>
  3155.  
  3156.     Verlassen  von MDEBUG mit automatischem Neuaufruf von MDEBUG sobald
  3157.     DOS nicht aktiv ist.  Falls ein aktives  Passwort  installiert ist,
  3158.     wird vor  dem neuem Aufruf von MDEBUG das Passwort abgefragt.
  3159.  
  3160.     Ein erneuter  Versuch MDEBUG  über  den Hotkey aufzurufen setzt den
  3161.     Wartezustand wieder zurück.
  3162.     Der  Wartezustand  wird  auch  zurückgesetzt,  falls ein Aufruf der
  3163.     Funktionen 3, 4 oder 5 des User-Ints erfolgreich war.
  3164.  
  3165.  
  3166.  
  3167.  
  3168.  
  3169.  
  3170.  
  3171.  
  3172.  
  3173.  
  3174.  
  3175.  
  3176.  
  3177.  
  3178.  
  3179.     ────────────────────────────────────────────────────────────────────────────────
  3180.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   47
  3181.  
  3182.  
  3183.  
  3184.     ■ <F10>
  3185.  
  3186.     Verlassen  von MDEBUG, ein  Neuaufruf  von MDEBUG startet im Inter-
  3187.     preter.
  3188.  
  3189.  
  3190.     ■ <ESC>
  3191.  
  3192.     Interpreter verlassen, Rückkehr in den Monitor
  3193.  
  3194.  
  3195.     ■ <ALT-F10>
  3196.  
  3197.     MDEBUG verlassen  mit geänderten Register-Werten, d.h. mit den der-
  3198.     zeit angezeigten Register-Werten. Ein Neuaufaufruf von MDEBUG star-
  3199.     tet im Interpreter.
  3200.  
  3201.     Normalerweise werden die Register vor dem Verlassen  von MDEBUG auf
  3202.     die Werte beim Start des Aufrufs gesetzt.
  3203.  
  3204.     Warnung: Diese  Taste  sollte  nur mit  großer Vorsicht  eingesetzt
  3205.              werden!
  3206.  
  3207.  
  3208.     ■ <CTRL-F10>
  3209.  
  3210.     Abbrechen  des  beim Aufruf  unterbrochenen Prozesses. MDEBUG führt
  3211.     hierzu die Funktion 4Ch des DOS-Interrupts 21h aus.
  3212.     Dabei  wird ausgenutzt,  daß DOS immer noch  davon ausgeht, daß  es
  3213.     sich  im unterbrochenen  Prozess befindet  und  somit der Interrupt
  3214.     sich auf diesen Prozess bezieht.
  3215.     Als Fehlercode (Errorlevel) wird der aktuelle Wert aus dem Register
  3216.     AL zurückgegeben.  Die Funktion dient u.a. dazu, Endlosschleifen zu
  3217.     beenden.
  3218.     Sie sollte nur angewendet werden,  wenn DOS nicht aktiv ist. (siehe
  3219.     auch 'Stack-Überlauf')  Falls der unterbrochene Prozess die oberste
  3220.     Shell-Ebene des COMMAND.COM ist, ist die Funktion nicht möglich.
  3221.     (siehe auch 'Programm-Interna')
  3222.  
  3223.  
  3224.     ■ <ALT-End>
  3225.  
  3226.     Löschen des Original-Tastaturpuffers.
  3227.  
  3228.  
  3229.  
  3230.  
  3231.  
  3232.  
  3233.  
  3234.  
  3235.  
  3236.  
  3237.  
  3238.  
  3239.     ────────────────────────────────────────────────────────────────────────────────
  3240.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   48
  3241.  
  3242.  
  3243.  
  3244.     Tastenumbelegungen im Interpreter
  3245.     ─────────────────────────────────
  3246.  
  3247.  
  3248.     Hinweis:
  3249.  
  3250.     Mit  der Angabe '#nn'  ist jeweils  das  Zeichen mit dem ASCII-Code
  3251.     nn (dezimal) gemeint. Die so dargestellten Zeichen gelten normaler-
  3252.     weise als Drucker-  bzw. Datei-Steuerzeichen  und  stören somit den
  3253.     Ausdruck der Dokumentation.
  3254.  
  3255.  
  3256.                                                    ┌──────────────────┐
  3257.     Folgende Tasten sind im Interpreter umbelegt:  │     Belegung     │
  3258.     ─────────────────────────────────────────────  │   alt       neu  │
  3259.                                                    ╞══════════╤═══════╡
  3260.     Falls die Original-Belegung erwünscht ist, muß │ <CTRL-O> │  <|>  │
  3261.     vor der Eingabe der  Taste  das  Prefixzeichen │   <ä>    │  <«>  │
  3262.     <CTRL-P> eingegeben werden.                    │   <Ä>    │  <»>  │
  3263.     Das Zeichen <CTRL-P> muß über <CTRL-P><CTRL-P> │   <ö>    │  <[>  │
  3264.     eingegeben werden.                             │   <Ö>    │  <]>  │
  3265.                                                    │   <ü>    │ <#27> │
  3266.     Die Umbelegungen sind nur verfügbar, falls ein │   <Ü>    │ <#26> │
  3267.     deutscher Tastaturtreiber geladen ist.         │   <ß>    │  <¿>  │
  3268.                                                    │   <_>    │  <¬>  │
  3269.                                                    └──────────┴───────┘
  3270.  
  3271.  
  3272.     Befehle des Interpreters
  3273.     ────────────────────────
  3274.  
  3275.     Hinweis:
  3276.  
  3277.     Das Flag-Register ist  ein impliziter  Operand aller  logischen und
  3278.     arithmetischen  Befehle.  D.h.  MDEBUG  benutzt  das  Flag-Register
  3279.     analog zur CPU.  Direkte Operationen auf das  Flag-Register sollten
  3280.     daher im Normalfall über den MOV-Befehl erfolgen.
  3281.  
  3282.  
  3283.  
  3284.  
  3285.  
  3286.  
  3287.  
  3288.  
  3289.  
  3290.  
  3291.  
  3292.  
  3293.  
  3294.  
  3295.  
  3296.  
  3297.  
  3298.  
  3299.     ────────────────────────────────────────────────────────────────────────────────
  3300.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   49
  3301.  
  3302.  
  3303.  
  3304.     ?{...}
  3305.     ───────────────────────────────────────────────────────────────────
  3306.  
  3307.        Ausgabe  der Nummer  des User-Ints  (oder 0  falls kein User-int
  3308.        installiert ist) im Register AL und des Aufruf-Modus im Register
  3309.        AH.  Für den Aufruf-Modus gilt:
  3310.  
  3311.             AH = 1 ->> Der Aufruf erfolgte über den Hotkey
  3312.             AH = 2 ->> Der Aufruf erfolgte über den User-Int
  3313.             AH = 3 ->> Der Aufruf erfolgte über den automatischen
  3314.                        Aufruf (Taste <ALT-F5>)
  3315.             AH = 4 ->> Der Aufruf erfolgte über einen zusätzlichen
  3316.                        Interrupt (über den Einsprung-Offset)
  3317.  
  3318.        im Register  BX wird  der  Einsprung-Offset  von MDEBUG  zurück-
  3319.        gegeben. Die aus diesem Wert als Offset und dem  Codesegment von
  3320.        MDEBUG als  Segment gebildetete Adresse  muß  aufgerufen  werden
  3321.        (per  Interrupt-Aufruf), falls der  Aufruf von MDEBUG über einen
  3322.        zusätzlichen Interrupt erfolgen soll.  Vor dem  Aufruf  muß  die
  3323.        aufrufende Routine schon,  falls nötig, den  Interrupt bestätigt
  3324.        haben. Eine  Überprüfung, ob  MDEBUG schon  aktiv ist, ist nicht
  3325.        erforderlich da diese durch MDEBUG selbst erfolgt.
  3326.  
  3327.        MDEBUG verhält sich nach einem Aufruf über den Einsprung-Offset,
  3328.        analog zu einen Aufruf über  den Hotkey.  (inclusive Bildschirm-
  3329.        modus- und Passwortüberprüfung)
  3330.  
  3331.        Beispiel:
  3332.  
  3333.        Aufruf von MDEBUG auch über den Hardware-Interrupt 0Ch (COM1):
  3334.  
  3335.        ; diese Routine muß über einen  Int-Befehl aufgerufen werden!
  3336.            Int0ChRoutine:
  3337.  
  3338.        ; Aufruf der alten Int-Routine per simulierten Int-Aufruf 
  3339.          pushf
  3340.          cli
  3341.          call OldIntSegment:OldIntOffset
  3342.  
  3343.        ; Die durch  den eigentlichen Int-Befehl auf den Stack gebrachte
  3344.        ; Rückkehr-Adresse  und  Flags stehen immer noch dort und werden
  3345.        ; von MDEBUG als Rückkehradresse und gesicherte Flags  verwendet
  3346.        ; Der Segment-Wert  für den JMP-Befehl  kann z.B. über den User-
  3347.        ; Int ermittelt werden.
  3348.        ; Auf dem Stack darf nur noch die Rückkehr-Adresse für den IRET-
  3349.        ; Befehl stehen!
  3350.          jmp CS:EinsprungOffset
  3351.  
  3352.        ; hier kommt die Routine niemals hin!
  3353.  
  3354.  
  3355.  
  3356.  
  3357.  
  3358.  
  3359.     ────────────────────────────────────────────────────────────────────────────────
  3360.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   50
  3361.  
  3362.  
  3363.  
  3364.        weiteres Beispiel:
  3365.  
  3366.        Aufruf von MDEBUG auch über den Software-Interrupt 7Eh:
  3367.  
  3368.        ; Hierzu  reicht  es aus, die  Adresse für den  Interrupt 7Eh in
  3369.        ; der Interrupt-Tabelle bei 0:0 zu ändern, z.B.
  3370.  
  3371.          mov dx,EinsprungOffset
  3372.          mov ds,CS_of_MDEBUG  ; DS:DX = neue Adresse für den Interrupt
  3373.          mov ax,0257Eh        ; Interrupt über DOS umsetzen
  3374.          int 021h
  3375.  
  3376.  
  3377.     V{...} {reg1}{,}{reg2}
  3378.     ───────────────────────────────────────────────────────────────────
  3379.  
  3380.        Setzt  das  Register  reg1 als  Segment-Register  für  das obere
  3381.        Fenster des Monitors und, falls angegeben, das Register reg2 als
  3382.        Offset-Register.
  3383.        reg1 und reg2 müssen Wort-Register sein.
  3384.  
  3385.        Falls der Operand  reg1 korrekt  erkannt wird,  der Operand reg2
  3386.        aber nicht, wird nur das Segment-Register des Monitors geändert.
  3387.  
  3388.  
  3389.     #26{...} {seg1:}[reg1|wert1] {...}{#26}
  3390.     ───────────────────────────────────────────────────────────────────
  3391.  
  3392.        Sichern der Befehlszeile ab dem ersten Zeichen hinter dem ersten
  3393.        Operanden das kein Leerzeichen ist.Gesichert werden alle Zeichen
  3394.        bis  zum nächsten  '#26'-Zeichen oder  bis zum Ende des Eingabe-
  3395.        Puffers (nicht der Eingabe). Hinter der gesicherten Zeichenkette
  3396.        wird von MDEBUG noch ein Null-Byte als Endekennung gesetzt.
  3397.        Die gesicherte  Zeichenkette belegt  max. 67 Zeichen; das '#26'-
  3398.        Zeichen wird nicht  mitgesichert.
  3399.  
  3400.        Der  Zielbereich für  die Sicherung befindet sich im Speicher ab
  3401.        der  durch  den ersten Operanden angegebenen Adresse.  Der erste
  3402.        Operand muß mit mindestens einem Leerzeichen enden.  Die gesich-
  3403.        erten Zeichen werden nicht weiter bearbeitet. Sie können mit dem
  3404.        Befehl  '#27' oder '#27'H (s.u.) neu  in den Eingabepuffer über-
  3405.        nommen werden.
  3406.  
  3407.  
  3408.  
  3409.  
  3410.  
  3411.  
  3412.  
  3413.  
  3414.  
  3415.  
  3416.  
  3417.  
  3418.  
  3419.     ────────────────────────────────────────────────────────────────────────────────
  3420.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   51
  3421.  
  3422.  
  3423.  
  3424.        Beispiel:
  3425.  
  3426.        Die Eingabe
  3427.  
  3428.             M OF,80 ^ #26 OF+2    M R7,BX ^ ? #26 ^ M CX,0
  3429.  
  3430.        wird folgendermaßen bearbeitet:
  3431.  
  3432.        1. Das Register OF wird auf den Wert 80h gesetzt.
  3433.  
  3434.        2. Als Offset  für den Befehl zum  Sichern der Eingabezeile wird
  3435.           82h  ermittelt,  als Segment  wird  das Segment  des Monitors
  3436.           genommen.  Die  Leerzeichen hinter dem ersten  Operanden  des
  3437.           '#26'-Befehls ('OF+2') werden überlesen.
  3438.  
  3439.        3. Die Teileingabe
  3440.  
  3441.                 'M R7,BX ^ ? '
  3442.  
  3443.           wird in den Speicher ab der Adresse MonitorSegment:0082h, mit
  3444.           einem  Null-Byte  als Endekennung  versehen, übertragen.  Die
  3445.           Teil-Eingabe wird nicht weiter bearbeitet.
  3446.  
  3447.        4. Das Register CX wird auf 0 gesetzt.
  3448.  
  3449.        Das Zeichen '#26' liegt im Interpreter auf der Taste <Ü>.
  3450.  
  3451.  
  3452.     #27{...} {seg1:}[reg1|wert1]
  3453.     ───────────────────────────────────────────────────────────────────
  3454.  
  3455.        Restaurieren  des  Eingabe-Puffers  aus  dem  Null-String ab der
  3456.        Speicherstelle die der Operand bezeichnet.
  3457.  
  3458.        Falls  der String  zu lang ist, werden nur die ersten 66 Zeichen
  3459.        des Strings übernommen. Der gelesene String kann nach dem Befehl
  3460.        im Eingabepuffer editiert werden.
  3461.        Der Eingabe-Puffer wird vor  der Übernahme gelöscht. Das Zeichen
  3462.        '#27'  liegt im Interpreter  auf der Taste <ü>.  Der Befehlsname
  3463.        darf nicht mit einem 'H' enden.
  3464.  
  3465.  
  3466.  
  3467.  
  3468.  
  3469.  
  3470.  
  3471.  
  3472.  
  3473.  
  3474.  
  3475.  
  3476.  
  3477.  
  3478.  
  3479.     ────────────────────────────────────────────────────────────────────────────────
  3480.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   52
  3481.  
  3482.  
  3483.  
  3484.     #27{...}H {seg1:}[reg1|wert1]
  3485.     ───────────────────────────────────────────────────────────────────
  3486.  
  3487.        Der Befehl arbeitet äquivalent zum '#27'-Befehl, allerdings wird
  3488.        die geladene  Befehlszeile sofort  bearbeitet.  Der  Befehlsname
  3489.        muß mit einem  'H' enden.
  3490.        Falls  eine  Endlos-Schleife  programmiert  wurde, kann sie über
  3491.        die BREAK-Taste abgebrochen werden.
  3492.  
  3493.  
  3494.     D{UMP} Mn
  3495.     ───────────────────────────────────────────────────────────────────
  3496.  
  3497.        Der Inhalt des  Memory-Speichers  mit der Nummer n (0 <= n <= 9)
  3498.        wird als  neue  Monitor-Start-Adresse (Segment:Offset) genommen.
  3499.        Falls n gleich '0' ist, wird der Monitor auf die Adresse des DIB
  3500.        (DOS-Info-Block) gesetzt.
  3501.        Hinter dem 'M' darf kein Leerzeichen folgen.
  3502.  
  3503.  
  3504.     P{OINTER} {seg1:}[reg1|wert1]
  3505.     ───────────────────────────────────────────────────────────────────
  3506.  
  3507.        Das Doppelwort, auf das der Operand zeigt wird als neue Monitor-
  3508.        Start-Adresse genommen. (INTEL-Format)
  3509.  
  3510.  
  3511.     A{DD} {seg1:}[reg1|wert1],{seg2:}[reg2|wert2]
  3512.     ───────────────────────────────────────────────────────────────────
  3513.  
  3514.        Addiert den Wert des 2. Operanden auf den Wert des 1. Operanden.
  3515.  
  3516.  
  3517.     S{UB} {seg1:}[reg1|wert1],{seg2}[reg2|wert2]
  3518.     ───────────────────────────────────────────────────────────────────
  3519.  
  3520.        Subtrahiert den Wert des 2. Operanden vom Wert des 1. Operanden.
  3521.  
  3522.  
  3523.     a{dc} {seg1:}[reg1|wert1],{seg2:}[reg2|wert2]
  3524.     ───────────────────────────────────────────────────────────────────
  3525.  
  3526.        Addiert den  Wert des  2. Operanden und  den Wert des Carryflags
  3527.        auf den Wert des 1. Operanden. (entspricht ADC-Befehl)
  3528.  
  3529.  
  3530.  
  3531.  
  3532.  
  3533.  
  3534.  
  3535.  
  3536.  
  3537.  
  3538.  
  3539.     ────────────────────────────────────────────────────────────────────────────────
  3540.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   53
  3541.  
  3542.  
  3543.  
  3544.     s{bb} {seg1:}[reg1|wert1],{seg2}[reg2|wert2]
  3545.     ───────────────────────────────────────────────────────────────────
  3546.  
  3547.        Subtrahiert  den Wert  des 2. Operanden  und den Wert des Carry-
  3548.        flags vom Wert des 1. Operanden. (entspricht SBB-Befehl)
  3549.  
  3550.  
  3551.     + {seg1:}[reg1|wert1]
  3552.     ───────────────────────────────────────────────────────────────────
  3553.  
  3554.        Erhöht den Wert des Operanden um 1 (entspricht INC-Befehl)
  3555.  
  3556.  
  3557.     - {seg1:}[reg1|wert1]
  3558.     ───────────────────────────────────────────────────────────────────
  3559.  
  3560.        Vermindert den Wert des Operanden um 1 (entspricht DEC-Befehl)
  3561.  
  3562.  
  3563.     > {seg1:}[reg1|wert1]
  3564.     ───────────────────────────────────────────────────────────────────
  3565.  
  3566.        Wert des Operanden um 1 Bit nach rechts shiften (entspricht SHR-
  3567.        Befehl; Wirkung: op:= op DIV 2)
  3568.  
  3569.  
  3570.     < {seg1:}[reg1|wert1]
  3571.     ───────────────────────────────────────────────────────────────────
  3572.  
  3573.        Wert des Operanden um 1 Bit nach  links shiften (entspricht SHL-
  3574.        Befehl; Wirkung: op:= op MUL 2)
  3575.  
  3576.  
  3577.     » {seg1:}[reg1|wert1],{seg2:}[reg2|wert2]
  3578.     ───────────────────────────────────────────────────────────────────
  3579.  
  3580.        Wert des 1. Operanden um n Bits  nach rechts shiften wobei n der
  3581.        Wert des 2. Operanden ist (immer  Byte). Falls n  größer  als 15
  3582.        ist, ist  das  Ergebnis immer 0. Das Zeichen '«' liegt im Inter-
  3583.        preter auf der Taste <Ä>.
  3584.  
  3585.  
  3586.  
  3587.  
  3588.  
  3589.  
  3590.  
  3591.  
  3592.  
  3593.  
  3594.  
  3595.  
  3596.  
  3597.  
  3598.  
  3599.     ────────────────────────────────────────────────────────────────────────────────
  3600.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   54
  3601.  
  3602.  
  3603.  
  3604.     « {seg1:}[reg1|wert1],{seg2:}[reg2|wert2]
  3605.     ───────────────────────────────────────────────────────────────────
  3606.  
  3607.        Wert des 1. Operanden um n Bits nach  links shiften wobei  n der
  3608.        Wert des 2. Operanden ist (immer Byte). Falls  n  größer  als 15
  3609.        ist, ist  das Ergebnis  immer 0. Das Zeichen '«' liegt im Inter-
  3610.        preter auf der Taste <ä>.
  3611.  
  3612.  
  3613.     & {seg1:}[reg1|wert1],{seg2:}[reg2|wert2]
  3614.     ───────────────────────────────────────────────────────────────────
  3615.  
  3616.        AND-Verknüpfung zwischen  dem  Wert des 1. und des 2. Operanden,
  3617.        der Wert des 1. Operanden wird geändert.
  3618.  
  3619.  
  3620.     | {seg1:}[reg1|wert1],{seg2:}[reg2|wert2]
  3621.     ───────────────────────────────────────────────────────────────────
  3622.  
  3623.        OR-Verknüpfung zwischen dem  Wert des 1. und  des  2. Operanden,
  3624.        der Wert des 1. Operanden  wird geändert. Das Zeichen  '|' liegt
  3625.        im Interpreter auf der Taste <CTRL-O>.
  3626.  
  3627.  
  3628.     ! {seg1:}[reg1|wert1],{seg2:}[reg2|wert2]
  3629.     ───────────────────────────────────────────────────────────────────
  3630.  
  3631.        XOR-Verknüpfung zwischen dem Wert  des 1. und des  2. Operanden,
  3632.        der Wert des 1. Operanden wird geändert.
  3633.  
  3634.  
  3635.     T {seg1:}[reg1|wert1],{seg2:}[reg2|wert2]
  3636.     ───────────────────────────────────────────────────────────────────
  3637.  
  3638.        AND-Verknüpfung  zwischen  dem  Wert des 1. und des 2. Operanden
  3639.        ohne  Änderung  des Wertes des 1. Operanden.  Es werden also nur
  3640.        die Flags gesetzt. (entspricht TEST-Befehl)
  3641.  
  3642.  
  3643.     N{EG} {seg1:}[reg1|wert1]
  3644.     ───────────────────────────────────────────────────────────────────
  3645.  
  3646.        Wert des Operanden negieren (Zweierkomplement)
  3647.  
  3648.  
  3649.  
  3650.  
  3651.  
  3652.  
  3653.  
  3654.  
  3655.  
  3656.  
  3657.  
  3658.  
  3659.     ────────────────────────────────────────────────────────────────────────────────
  3660.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   55
  3661.  
  3662.  
  3663.  
  3664.     M{OV} {seg1:}[reg1|wert1],{seg2:}[reg2|wert2]
  3665.     ───────────────────────────────────────────────────────────────────
  3666.  
  3667.        Kopiert den Wert des 2. Operanden in den 1. Operanden
  3668.  
  3669.  
  3670.     C{OP}Y
  3671.     ───────────────────────────────────────────────────────────────────
  3672.  
  3673.        Kopieren von CX Bytes von DS:SI nach ES:DI.
  3674.        Entspricht dem Befehl REP MOVSB.
  3675.  
  3676.        Vor dem  Befehl  werden  alle  Register  geladen (auch das Flag-
  3677.        Register!)  nach der Ausführung werden die Register-Werte korri-
  3678.        giert. Es finden keinerlei Überprüfungen statt,  so daß z.B. die
  3679.        korrekte  Richtung der  Kopieraktion vom  Benutzer ermittelt und
  3680.        über den Wert des Direction-Flags gesetzt werden muß.
  3681.  
  3682.  
  3683.     I{NT} [reg|wert]
  3684.     ───────────────────────────────────────────────────────────────────
  3685.  
  3686.        Führt  den  angegebenen Interrupt  mit den angezeigten Register-
  3687.        Werten aus. Der  Wert des  Operanden  muß  zwischen  01h und FFh
  3688.        liegen. Die Angabe einer Speicheradresse ist nicht möglich.
  3689.  
  3690.        Beachtet werden muß  hierbei, daß  DOS immer noch davon ausgeht,
  3691.        im unterbrochenen  Prozess zu sein, da die PSP-Adresse, die DTA-
  3692.        Adresse und ähnliches nicht umgesetzt werden.
  3693.  
  3694.        Der Interrupt 0h kann nur über den Befehl
  3695.  
  3696.             B CD,00
  3697.  
  3698.        aufgerufen werden.
  3699.  
  3700.        Die Funktionen  4Ch (Beende Prozess),  00h (Beende Programm) und
  3701.        31h (Beende Prozess, aber behalte ihn im Speicher) des Interrupt
  3702.        21h, der Interrupt  20h (Beende Programm),  die  Interrupts 22h,
  3703.        23h,  24h  und der  Interrupt 27h  (Beende  Programm mit  einge-
  3704.        schränkter  Speicherfreigabe) sollten auf keinen Fall ausgeführt
  3705.        werden.  In  diesem  Fall  würde das  AKTIV-Flag immer  noch auf
  3706.        'Aktiv' stehen und somit kein Neuaufruf  von MDEBUG mehr möglich
  3707.        sein.
  3708.        Dieser  Mißstand kann allerdings  durch  den erneuten Aufruf von
  3709.        MDEBUG mit dem Parameter 'SET' bzw. über den Aufruf der Funktion
  3710.        05h des User-Ints geändert werden.
  3711.  
  3712.  
  3713.  
  3714.  
  3715.  
  3716.  
  3717.  
  3718.  
  3719.     ────────────────────────────────────────────────────────────────────────────────
  3720.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   56
  3721.  
  3722.  
  3723.  
  3724.     B b1{{,}b2..{,}bn}
  3725.     ───────────────────────────────────────────────────────────────────
  3726.  
  3727.        Führt die angegebenen Maschinencodes mit den aktuellen Register-
  3728.        Werten aus. b1..bn müssen hexadezimale Werte zwischen 0 und 0FFh
  3729.        sein. (Register,  Konstante und alle  anderen  Schreibweisen von
  3730.        Werten sind nicht erlaubt)
  3731.  
  3732.        Leerzeichen  zwischen den  Bytes  sind  nicht erlaubt (ein Leer-
  3733.        zeichen  wird  als Ende  der Operanden gewertet!),  als  Trenner
  3734.        zwischen  den  Bytes darf ein  Komma gesetzt  werden; jedes Byte
  3735.        muß  mit ZWEI hexadezimalen   Zeichen  angegeben  werden - evtl.
  3736.        mit einer führenden Null.
  3737.  
  3738.        Die Maschinencodes werden  in  der angegebenen Reihenfolge byte-
  3739.        weise in das  Codesegment  von MDEBUG eingepatcht und, falls bei
  3740.        der Ermittlung der Maschinen-Codes kein Fehler auftrat, in EINEM
  3741.        Durchgang ausgeführt. Der Befehl kann nicht abgebrochen werden.
  3742.  
  3743.        Bei  Ausführen  eines  Interrupts (über 'B CD,nn') sind die Ein-
  3744.        schränkungen wie  beim I-Befehl  zu beachten.  Maximal können in
  3745.        einen Befehl 32 Byte  Maschinencode eingegeben werden.  Nach der
  3746.        Ausführung des  B-Befehls wird die Anzeige des Monitors  automa-
  3747.        tisch aktualisiert.
  3748.  
  3749.  
  3750.  
  3751.  
  3752.  
  3753.  
  3754.  
  3755.  
  3756.  
  3757.  
  3758.  
  3759.  
  3760.  
  3761.  
  3762.  
  3763.  
  3764.  
  3765.  
  3766.  
  3767.  
  3768.  
  3769.  
  3770.  
  3771.  
  3772.  
  3773.  
  3774.  
  3775.  
  3776.  
  3777.  
  3778.  
  3779.     ────────────────────────────────────────────────────────────────────────────────
  3780.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   57
  3781.  
  3782.  
  3783.  
  3784.     G{O} [reg|wert]
  3785.     ───────────────────────────────────────────────────────────────────
  3786.  
  3787.        Ausführen von Maschinen-Code.
  3788.        Der Wert  des Operanden ist die explizite  Länge des  Maschinen-
  3789.        Codes  in Byte.  Das  Maximum  für die Länge des Maschinen-Codes
  3790.        ergibt sich aus der Formel
  3791.  
  3792.            (Monitor-Offset + Maschinencode-Länge + 5) <= 0FFFFh
  3793.  
  3794.        da der  gesamte auszuführende Code in einem Segment  liegen muß.
  3795.        (5 = Länge eines FAR-JMPs) Der auszuführende Maschinen-Code  muß
  3796.        bei der Monitor-Start-Adresse beginnen.Der Maschinen-Code sollte
  3797.        im  RAM sein, überprüft  wird nur, ob der Rücksprung eingepatcht
  3798.        werden  kann.  MDEBUG arbeitet beim G-Befehl  nur mit  Sprungan-
  3799.        weisungen,  d.h.  die 'normalen'  Debugger-Interrupts  für diese
  3800.        Aufgabe werden  nicht  verwendet.  Vor dem  G-Befehl werden alle
  3801.        Register mit den angezeigten Werten geladen, nach der Ausführung
  3802.        werden die geänderten Registerwerte angezeigt und der angezeigte
  3803.        Speicherausschnitt im Monitor wird aktualisiert.
  3804.        Der Befehl ist  nur mit  äußerster  Vorsicht zu benutzen. Der G-
  3805.        Befehl kann  über  die  BREAK-Taste abgebrochen  werden.  Da der
  3806.        Abbruch aber einen  STACK-Frame  kostet,  gilt hier  das gleiche
  3807.        wie für den Prozess-Abbruch  durch <CTRL-F10>.  Vor der Ausführ-
  3808.        ung eines G-Befehls sollte das Interrupt-Flag gesetzt sein.
  3809.  
  3810.  
  3811.  
  3812.  
  3813.  
  3814.  
  3815.  
  3816.  
  3817.  
  3818.  
  3819.  
  3820.  
  3821.  
  3822.  
  3823.  
  3824.  
  3825.  
  3826.  
  3827.  
  3828.  
  3829.  
  3830.  
  3831.  
  3832.  
  3833.  
  3834.  
  3835.  
  3836.  
  3837.  
  3838.  
  3839.     ────────────────────────────────────────────────────────────────────────────────
  3840.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   58
  3841.  
  3842.  
  3843.  
  3844.     / hilfreg
  3845.     ───────────────────────────────────────────────────────────────────
  3846.  
  3847.        Speichern der Monitor-Start-Adresse in zwei Hilfsregistern wobei
  3848.        der Offset des  Monitors im Register hilfreg und das Segment des
  3849.        Monitors im folgenden Hilfsregister gespeichert wird.
  3850.  
  3851.  
  3852.     \ hilfreg
  3853.     ───────────────────────────────────────────────────────────────────
  3854.  
  3855.        Restaurieren  der Monitor-Start-Adresse aus  zwei Hilfsregistern
  3856.        wobei der Offset  aus  dem  Register hilfreg und das Segment aus
  3857.        dem folgenden Hilfsregister restauriert wird.
  3858.  
  3859.  
  3860.     # hilfreg
  3861.     ───────────────────────────────────────────────────────────────────
  3862.  
  3863.        Vertauschen  der  Monitor-Start-Adresse  mit zwei Hilfsregistern
  3864.        wobei der Offset mit  dem Wert des Register hilfreg und das Seg-
  3865.        ment mit dem Wert des folgenden Hilfsregisters getauscht werden.
  3866.  
  3867.  
  3868.     W{AIT}
  3869.     ───────────────────────────────────────────────────────────────────
  3870.  
  3871.        Aktualisieren  der Registerwerte und des Monitors und warten auf
  3872.        einen Tastendruck bevor die Ausführung der Befehlszeile  fortge-
  3873.        setzt wird.  Auf dem oberen Rand des Fenster wird eine blinkende
  3874.        Wartemeldung angezeigt.  Die  eingegebene  Taste wird folgender-
  3875.        maßen interpretiert:
  3876.  
  3877.        <ESC>         -  Abbruch der Ausführung
  3878.        <Backspace>   -  Bearbeitung der Befehlszeile ab dem Anfang
  3879.        andere Tasten -  Bearbeitung der Befehlszeile fortsetzen
  3880.  
  3881.  
  3882.  
  3883.  
  3884.  
  3885.  
  3886.  
  3887.  
  3888.  
  3889.  
  3890.  
  3891.  
  3892.  
  3893.  
  3894.  
  3895.  
  3896.  
  3897.  
  3898.  
  3899.     ────────────────────────────────────────────────────────────────────────────────
  3900.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   59
  3901.  
  3902.  
  3903.  
  3904.     H{OME} {[reg|wert]}
  3905.     ───────────────────────────────────────────────────────────────────
  3906.  
  3907.        Nochmalige  Ausführung der  Befehlszeile ab  dem ersten Zeichen.
  3908.        Vor der Fortsetzung der Bearbeitung der  Befehlszeile werden der
  3909.        Monitor-Inhalt  und  die angezeigten Registerwerte aktualisiert.
  3910.        Der  Wert des Operanden  ist die  Anzahl von  Warteschleifen die
  3911.        vor dem H-Befehl  ausgeführt werden sollen.  (Voreinstellung: 0)
  3912.  
  3913.        Der  H-Befehl sollte  nur in Verbindung  mit dem W-oder ¿-Befehl
  3914.        verwendet werden,  da sonst  eine  Endlos-Schleife  programmiert
  3915.        wird.  Geschieht  dies  doch  einmal, kann diese über die BREAK-
  3916.        Taste abgebrochen werden.
  3917.  
  3918.        Beispiel für den H-Befehl:
  3919.  
  3920.             MOV AH,0 ^ I 16 ^ ¿ (AL ¬ #27) ^ H
  3921.  
  3922.             Die Schleife wird durch Eingabe von <ESC> beendet.
  3923.  
  3924.             ADD SE,4 ^ H 2
  3925.  
  3926.             Die Schleife muß mit der BREAK-Taste abgebrochen werden.
  3927.  
  3928.        Der Befehlsname darf nicht mit einem 'N' enden.
  3929.  
  3930.  
  3931.     H{...}N {[reg|wert]}
  3932.     ───────────────────────────────────────────────────────────────────
  3933.  
  3934.        Der HN-Befehl arbeitet äquivalent zum H-Befehl.
  3935.        Der einzige Unterschied ist, daß  beim  HN-Befehl der Inhalt des
  3936.        Monitors vor der Ausführung des Befehls nicht upgedatet wird.
  3937.        Der Update des Monitors  geschieht hier nur nach dem Beenden des
  3938.        Befehls  bzw. nach dem Abbruch der Schleife.  Der  HN-Befehl ist
  3939.        deshalb entsprechend schneller als der H-Befehl. Da aber nur die
  3940.        im  Interpreter  angezeigten  Register-Werte  vor  dem HN-Befehl
  3941.        jeweils aktualisiert  werden,  sollte  möglichst  zur  optischen
  3942.        Kontrolle  immer eines dieser Register z.B. als Zähler verändert
  3943.        werden. Der Befehlsname muß mit einem 'N' enden.
  3944.  
  3945.  
  3946.  
  3947.  
  3948.  
  3949.  
  3950.  
  3951.  
  3952.  
  3953.  
  3954.  
  3955.  
  3956.  
  3957.  
  3958.  
  3959.     ────────────────────────────────────────────────────────────────────────────────
  3960.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   60
  3961.  
  3962.  
  3963.  
  3964.     ¿ [reg|wert]
  3965.     ───────────────────────────────────────────────────────────────────
  3966.  
  3967.        Bearbeitung  der  Befehlszeile  fortsetzen,  falls der  Wert des
  3968.        Operanden ungleich 0 ist, ansonsten die Bearbeitung abbrechen.
  3969.        Das  Zeichen '¿' liegt  auf der Taste <ß>.
  3970.  
  3971.        Der Befehlsname darf nicht mit einem 'H' enden.
  3972.  
  3973.        Mit Hilfe des ¿-Befehls können auch kleine Schleifen mit beding-
  3974.        ter Ausführung programmiert werden.
  3975.  
  3976.        Beispiel:
  3977.  
  3978.        Füllen des  Speicherbereichs bei DS:BX mit den ASCII-Codes von 0
  3979.        bis 255 (256 Byte):
  3980.  
  3981.        Vorbereitung: M AL,0
  3982.  
  3983.        Ausführung:   M DS:[BX+AL],AL ^+ AL ^¿ AL ^H
  3984.  
  3985.        Bemerkung:
  3986.  
  3987.        Der  H-Befehl wird  nur ausgeführt,  falls AL ungleich 0 ist. Da
  3988.        aber  der  Befehl '+ AL' das  Register AL  auf 0 setzt sobald AL
  3989.        gleich 255 ist, wird dadurch also die Ausführung beendet.
  3990.  
  3991.        Falls  der Inhalt einer  Speicherstelle geprüft werden soll, muß
  3992.        dieser zuerst in ein Register gebracht werden.
  3993.  
  3994.        Beispiel:
  3995.  
  3996.        Incrementieren von AX bis die Taste <CTRL> gedrückt wird:
  3997.  
  3998.        Ausführung:   + AX ^ M BL,040:017 ^¿ ((BL & 04) ! 04) ^H
  3999.                      oder
  4000.                      + AX ^M BL,040:017 ^¿ (BL % 2)¬1 ^H
  4001.  
  4002.        Bemerkung:
  4003.  
  4004.        Hier  wird vor  dem ¿-Befehl erst der Inhalt  der Speicherstelle
  4005.        040h:017h in das Register BL geladen, damit dann im ¿-Befehl das
  4006.        Bit 2 dieser geprüft werden kann.
  4007.  
  4008.  
  4009.  
  4010.  
  4011.  
  4012.  
  4013.  
  4014.  
  4015.  
  4016.  
  4017.  
  4018.  
  4019.     ────────────────────────────────────────────────────────────────────────────────
  4020.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   61
  4021.  
  4022.  
  4023.  
  4024.     ¿H [reg|wert]
  4025.     ───────────────────────────────────────────────────────────────────
  4026.  
  4027.        Bearbeitung der Befehlszeile fortsetzen, falls der Wert des Ope-
  4028.        randen ungleich Null ist, ansonsten die Befehlszeile noch einmal
  4029.        von  vorne bearbeiten. Das  Zeichen '¿' liegt auf der Taste <ß>.
  4030.  
  4031.        Der Befehlsname muß mit einem 'H' enden.
  4032.  
  4033.  
  4034.     F {n}
  4035.     ───────────────────────────────────────────────────────────────────
  4036.  
  4037.        Verändern des unteren Windows des Monitors.
  4038.  
  4039.        Der  Befehl arbeitet  äquivalent zur  Taste <F8> im Monitor, die
  4040.        Werte der Register FS und FO werden aber nicht verändert. n  ist
  4041.        die Anzahl der Zeilen für das untere Window des Monitors.
  4042.        (1 <= n <= 6), fehlt n wird das untere Window geschlossen)
  4043.  
  4044.  
  4045.     FX
  4046.     ───────────────────────────────────────────────────────────────────
  4047.  
  4048.        Vertauschen der Adressen der Monitor-Windows.
  4049.  
  4050.  
  4051.     @ {...}
  4052.     ───────────────────────────────────────────────────────────────────
  4053.  
  4054.        Kommentarbefehl, d.h. die Parameter werden ignoriert.
  4055.  
  4056.  
  4057.  
  4058.  
  4059.  
  4060.  
  4061.  
  4062.  
  4063.  
  4064.  
  4065.  
  4066.  
  4067.  
  4068.  
  4069.  
  4070.  
  4071.  
  4072.  
  4073.  
  4074.  
  4075.  
  4076.  
  4077.  
  4078.  
  4079.     ────────────────────────────────────────────────────────────────────────────────
  4080.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   62
  4081.  
  4082.  
  4083.  
  4084.     Q{UIT}
  4085.     ───────────────────────────────────────────────────────────────────
  4086.  
  4087.        MDEBUG verlassen, Wirkung wie die Taste <F10>
  4088.  
  4089.        Der Befehlsname darf nicht mit einem 'R' oder 'L' enden.
  4090.  
  4091.  
  4092.     Q{UIT}R
  4093.     ───────────────────────────────────────────────────────────────────
  4094.  
  4095.        MDEBUG verlassen mit  automatischen Neuaufruf  von  MDEBUG falls
  4096.        DOS nicht aktiv ist. Wirkung wie die Taste <ALT-F5>.
  4097.  
  4098.        Der Befehlsname muß mit einem 'R' enden.
  4099.  
  4100.  
  4101.     Q{UIT}L
  4102.     ───────────────────────────────────────────────────────────────────
  4103.  
  4104.        Wird MDEBUG über  diesen  Befehl  verlassen, so  beendet  es den
  4105.        Aufruf  und sperrt  die Tastatur. Der unterbrochene Prozeß läuft
  4106.        danach ganz normal weiter - allerdings führt jeder Versuch, eine
  4107.        Taste über  die Tastatur einzugeben dazu,  daß MDEBUG zuerst das
  4108.        Passwort abfrägt. Erst nach der korrekten Eingabe des Passwortes
  4109.        gibt MDEBUG die  Tastatur  wieder frei.  Die Sperrung  wird auch
  4110.        wieder aufgehoben  durch den Aufruf von MDEBUG über die Funktion
  4111.        3 bzw. 4 des User-Ints  oder  einen Aufruf von MDEBUG über einen
  4112.        zusätzlichen Interrupt.
  4113.        Der Befehl dient vor allem dazu, den PC  für kurze Zeit für Ein-
  4114.        gaben zu  sperren ohne  eine evtl.  Programmausführung zu unter-
  4115.        brechen.
  4116.  
  4117.        Der Befehl 'QL' funktioniert nur, falls ein aktives Passwort für
  4118.        MDEBUG installiert ist. Da MDEBUG bei der Abfrage des Passwortes
  4119.        den Bildschirmmodus in diesem Fall nicht berücksichtigt, kann es
  4120.        vorkommen, daß das Passwort blind eingegeben werden muß. Während
  4121.        der  Sperrung  ist  auch  die  Tastenkombination  <CTRL-ALT-DEL>
  4122.        gesperrt.  Auch hier stehen für die Eingabe des Passwortes  max.
  4123.        10 Sekunden zur Verfügung.
  4124.        Der Befehlsname muß mit einem 'L' enden.
  4125.  
  4126.        Hinweis: Maus-Eingaben  werden nicht  unterbunden und TSR können
  4127.                 teilweise noch über ihren Hotkey aufgerufen werden.
  4128.  
  4129.  
  4130.  
  4131.  
  4132.  
  4133.  
  4134.  
  4135.  
  4136.  
  4137.  
  4138.  
  4139.     ────────────────────────────────────────────────────────────────────────────────
  4140.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   63
  4141.  
  4142.  
  4143.  
  4144.     SH [suchmaske] {,}{...}
  4145.     ───────────────────────────────────────────────────────────────────
  4146.  
  4147.        Der Befehl  SH  dient  zum Suchen  einer Bytefolge  im Speicher.
  4148.        Gesucht wird  ab dem zweiten im ersten Window des Monitors ange-
  4149.        zeigten Byte  bis zum  Ende des ersten  Megabytes des Speichers.
  4150.        Falls  die  Bytefolge  gefunden  wird,  wird  die Monitor-Start-
  4151.        Adresse mit der Adresse der Bytefolge geladen.
  4152.        Die gefundene Adresse wird folgendermaßen konvertiert:
  4153.  
  4154.        Falls die Adresse VOR dem ersten MCB oder HINTER dem letzten MCB
  4155.        liegt,  wird  sie  in  die  Form  'nn00:nnnn'  konvertiert. (mit
  4156.        n <= 0 <= F) und das Register AX wird auf 0 gesetzt.
  4157.  
  4158.        Liegt die Adresse in den ersten 65.535 Byte eines Speicherblocks
  4159.        der über die MCB-Kette  verwaltet wird,  so wird sie in die Form
  4160.        'seg:nnnn' konvertiert, wobei seg das Segment des Speicherblocks
  4161.        in dem die Adresse liegt ist. Sollte diese Form  für die Adresse
  4162.        nicht möglich sein,  so wird sie in die Form 'nn00:nnnn' konver-
  4163.        tiert.  Im Register AX  steht in  beiden Fällen  das Segment des
  4164.        MCBs des Speicherblocks in dem die Adresse liegt.
  4165.  
  4166.        Hinweis:
  4167.  
  4168.        Falls die zu suchende Bytefolge nicht  mindestens ein direkt an-
  4169.        gegebenes  Byte (also  OHNE Joker,  Prefixe und Intervalle) ent-
  4170.        hält, kann  die Suche auf langsameren Rechnern  mehrere  Minuten
  4171.        dauern. (Normalerweise  dauert die Suche ca. 1 - 40 Sekunden, je
  4172.        nach  der  Häufigkeit  des  ersten direkt  angegebenen Bytes  im
  4173.        Speicher und nach der Anzahl der Joker, Prefixe und Intervalle.)
  4174.        Zur Beschleunigung der Suche  sollte  daher immer mindestens ein
  4175.        Byte des  Suchstrings  OHNE Prefixe,  Joker und Intervalle ange-
  4176.        geben werden.
  4177.        Die Suche kann über die BREAK-Taste abgebrochen werden.
  4178.  
  4179.        Aufbau von suchmaske:
  4180.  
  4181.             {string}{,}{¬}{bytemaske}{,}{|{¬}bytemaske}{...}
  4182.  
  4183.        Aufbau von string
  4184.  
  4185.        string ist eine in Hochkommata oder Gänsefüßchen angegebene Zei-
  4186.        chenkette.
  4187.  
  4188.  
  4189.  
  4190.  
  4191.  
  4192.  
  4193.  
  4194.  
  4195.  
  4196.  
  4197.  
  4198.  
  4199.     ────────────────────────────────────────────────────────────────────────────────
  4200.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   64
  4201.  
  4202.  
  4203.  
  4204.        Aufbau von bytemaske
  4205.  
  4206.            bytewert-bytewert    ->> Byte muß im Intervall liegen
  4207.            bytewert             ->> Byte muß übereinstimmen
  4208.            n?                   ->> nur oberes Nibble wird geprüft
  4209.            ?n                   ->> nur unteres Nibble wird geprüft
  4210.            ??                   ->> Byte wird ignoriert
  4211.  
  4212.  
  4213.        Aufbau von bytewert:
  4214.  
  4215.             nn                  ->> Hexadezimaler Wert, es sind
  4216.                                         mindestens und höchstens zwei
  4217.                                         Ziffern pro Byte nötig.
  4218.             'x'                 ->> ASCII-Zeichen
  4219.  
  4220.        mit:
  4221.  
  4222.             n = Hexziffer (0..9, A..F, a..f)
  4223.  
  4224.             ? = Joker, d.h. der Wert des Nibbles ist egal
  4225.  
  4226.             ¬ = NOT-Prefix, d.h. das Byte darf der Bytemaske nicht
  4227.                 entsprechen
  4228.  
  4229.             | = ODER-Prefix,  d.h. die mit | verketteten Bytemasken
  4230.                 gelten alle für ein Byte. Falls eine der Bytemasken
  4231.                 stimmt, ist das Byte okay.
  4232.  
  4233.             x = ASCII-Zeichen, das Zeichen '■' ist hier kein Joker!
  4234.  
  4235.  
  4236.  
  4237.        Beispiele für Suchmasken:
  4238.  
  4239.        40
  4240.        ->> ist wahr, falls das Byte den Wert 40h hat
  4241.  
  4242.        4?
  4243.        ->> ist wahr, falls das obere Nibble des Bytes 4 ist
  4244.            (z.B. 41h, 42h oder 4Fh)
  4245.  
  4246.        ?5
  4247.        ->> ist wahr, falls das untere Nibble des Bytes 5 ist
  4248.            (z.B. 45h oder F5h)
  4249.  
  4250.        ??
  4251.        ->> ist immer wahr (d.h. das Byte wird ignoriert)
  4252.  
  4253.  
  4254.  
  4255.  
  4256.  
  4257.  
  4258.  
  4259.     ────────────────────────────────────────────────────────────────────────────────
  4260.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   65
  4261.  
  4262.  
  4263.  
  4264.        ¬45
  4265.        ->> ist wahr, falls das Byte NICHT den Wert 45h hat
  4266.  
  4267.        ¬4?
  4268.        ->> ist wahr, falls das obere Nibble des Bytes NICHT 4 ist
  4269.  
  4270.        ¬??
  4271.        ->> sinnlos, Fehler!
  4272.  
  4273.        'A'
  4274.        ->> ist wahr, falls das Byte den Wert 'A' (= 40h) hat
  4275.  
  4276.        'A'-'Z'
  4277.        ->> ist wahr, falls das Byte im Intervall 40h (= 'A') und
  4278.            5Ah (= 'Z') inclusive liegt.
  4279.  
  4280.        ¬'0'-'9'
  4281.        ->> ist wahr, falls das Byte NICHT im Intervall 30h (= '0')
  4282.            und 39h (= '9') liegt.
  4283.  
  4284.        'A'-'F'|'a'-'f'|'0'-'9'
  4285.        ->> ist wahr falls das Byte im Intervall 'A' bis 'F' ODER im
  4286.            Intervall 'a' bis 'f' ODER im Intervall '0' bis '9' liegt.
  4287.  
  4288.  
  4289.        Beispiele für Suchstrings:
  4290.  
  4291.        SH 40,41,42
  4292.        ->> Sucht die Bytefolge  für  die gilt:  Das erste Byte ist 40h,
  4293.            das zweite Byte ist 41h und das dritte Byte ist 42h.
  4294.  
  4295.        SH 40-5?
  4296.        ->> Sinnlos, Fehler!
  4297.            (möglich ist: SH 40-5F)
  4298.  
  4299.        SH 40-??
  4300.        ->> Sinnlos, Fehler!
  4301.            (möglich ist: SH 40-FF)
  4302.  
  4303.        SH 34-20
  4304.        ->> Fehler, die untere Grenze muß kleiner als die obere
  4305.            Grenze sein! Die Maske kann ersetzt werden durch SH ¬21-33
  4306.  
  4307.        SH 'TMP=',¬00
  4308.        ->> Sucht die Bytefolge mit dem Inhalt 'TMP=' hinter der ein
  4309.            Byte ungleich 0 folgen muß
  4310.  
  4311.  
  4312.  
  4313.  
  4314.  
  4315.  
  4316.  
  4317.  
  4318.  
  4319.     ────────────────────────────────────────────────────────────────────────────────
  4320.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   66
  4321.  
  4322.  
  4323.  
  4324.        SH 'A'-'Z','0'-'9','0'-'9'
  4325.        ->> Sucht die Bytefolge für die gilt:
  4326.            Das erste Byte ist ein Zeichen zwischen 'A' und 'Z' (incl.)
  4327.            und die folgenden beiden Bytes sind jeweils Ziffern im
  4328.            Intervall zwischen '0' und '9'
  4329.  
  4330.        SH 00,00,30|40|50
  4331.        ->> Sucht eine Folge von zwei Nullbytes hinter denen ein Byte
  4332.            mit dem Wert 30h ODER 40h ODER 50h folgen muss.
  4333.  
  4334.        SH ¬00-7F|40,45
  4335.        ->> Sucht die Bytefolge für die gilt:
  4336.            Das erste Byte ist nicht im Intervall 00h bis 7Fh ODER 40h
  4337.            und das folgende Byte ist 45h
  4338.  
  4339.       SH 00,F0,'11/09/87','a'-'z'
  4340.       ->> Sucht die Bytefolge für die gilt:
  4341.           Das erste Byte ist 00h, das zweite Byte ist F0h, darauf folgt
  4342.           der String  '11/09/87' gefolgt von einem Zeichen im Intervall
  4343.           'a' bis 'z'.
  4344.  
  4345.           Aber: Der Suchstring ist nicht optimal gewählt!
  4346.                 Da  nämlich das erste direkt  angegebene Byte den  Wert
  4347.                 00h hat und dieser Wert relativ häufig im Speicher vor-
  4348.                 kommt dauert die Suche unnötig lange!
  4349.                 Sinnvoller wäre:
  4350.  
  4351.                 SH 00|00,F0,'11/09/87','a'-'z'
  4352.                      ┌──
  4353.                      │ (!)
  4354.                      └─────────────────────────────┐
  4355.                 Hier dient  die Angabe  der zweiten Maske für das erste
  4356.                 Byte nur dazu, daß das Byte F0h als erstes direkt ange-
  4357.                 gebenes Byte genommen wird.  Da das Byte  F0h normaler-
  4358.                 weise seltener als das  Byte 00h im Speicher  vorkommt,
  4359.                 geht die Suche so bedeutend schneller.
  4360.                 Probieren Sie's aus  -  möglichst mit einer eindeutigen
  4361.                 Bytefolge im BIOS und der Suche bei 0:0 beginnend.
  4362.  
  4363.                 Getestete Werte auf einen XT mit 8 MHZ:
  4364.  
  4365.                 Start-Adresse der Suche: 0000:0000
  4366.                 Bytefolge gefunden bei:  FF00:0FF3
  4367.                 benötigte Zeit für 'SH 00,F0, ...'    :  13 sec.
  4368.                 benötigte Zeit für 'SH 00|00,F0, ...' :   2 sec. (!)
  4369.  
  4370.  
  4371.  
  4372.  
  4373.  
  4374.  
  4375.  
  4376.  
  4377.  
  4378.  
  4379.     ────────────────────────────────────────────────────────────────────────────────
  4380.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   67
  4381.  
  4382.  
  4383.  
  4384.       SH 'COMSPEC='
  4385.       ->> Sucht die Zeichenfolge 'COMSPEC='
  4386.  
  4387.           Aber: Da MDEBUG jede mit <RETURN> abgeschlossene Befehlszeile
  4388.                 in einen internen Puffer speichert,  wird die  Zeichen-
  4389.                 folge in diesem  Puffer auf  jeden Fall gefunden, falls
  4390.                 die Start-Adresse für die Suche  kleiner  als CS:0 ist.
  4391.                 (CS = Codesegment von MDEBUG)
  4392.                 Soll dies unterdrückt werden, muß einfach nur ein  Byte
  4393.                 des Suchstrings in hexadezimaler Form angegeben werden:
  4394.                 (hier: 43h = ASCII-Code von 'C')
  4395.  
  4396.                 SH 43,'OMPSEC='
  4397.  
  4398.                 oder der Suchstring getrennt werden:
  4399.  
  4400.                 SH 'C','OMSPEC='
  4401.  
  4402.  
  4403.  
  4404.  
  4405.  
  4406.  
  4407.  
  4408.  
  4409.  
  4410.  
  4411.  
  4412.  
  4413.  
  4414.  
  4415.  
  4416.  
  4417.  
  4418.  
  4419.  
  4420.  
  4421.  
  4422.  
  4423.  
  4424.  
  4425.  
  4426.  
  4427.  
  4428.  
  4429.  
  4430.  
  4431.  
  4432.  
  4433.  
  4434.  
  4435.  
  4436.  
  4437.  
  4438.  
  4439.     ────────────────────────────────────────────────────────────────────────────────
  4440.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   68
  4441.  
  4442.  
  4443.  
  4444.     Bedeutung der Parameter
  4445.     ───────────────────────
  4446.  
  4447.     seg1:
  4448.  
  4449.     Segment-Prefix (erlaubt: bei reg1, reg2, wert1 und wert2)
  4450.  
  4451.     In  MDEBUG ist für  alle  Speicheradressen  das  aktuelle  Segment-
  4452.     Register  des oberen Monitor-Windows  als  Segment der  angegebenen
  4453.     Adresse  voreingestellt.  Diese Voreinstellung  kann aber durch ein
  4454.     Segment-Prefix überschrieben werden. Das Prefix  muß  ein Register,
  4455.     ein expliziter Wert oder ein Ausdruck sein.
  4456.  
  4457.     Beispiele:  MOV BL,AX:[BX]  oder MOV BL,AX:BX
  4458.                 MOV AL,40:*[17] oder MOV AL,40:*17
  4459.                 MOV BL,CS-1:[0] oder MOV BL,CS-1:0
  4460.  
  4461.  
  4462.     reg, reg1, reg2
  4463.  
  4464.     Name eines Registers, möglich sind folgende Namen:
  4465.  
  4466.     Prozessor-Register: AX,BX,CX,DX,DI,SI,ES,DS,BP,SP,SS,FL
  4467.  
  4468.     Die  Register AX .. DX  können  auch byteweise  angesprochen werden
  4469.     (AH, AL .. DH, DL). Mit FL ist das Flag-Register gemeint.
  4470.  
  4471.  
  4472.     Hilfsregister: R1, R2, R3, R4, R5, R6, R7, R8
  4473.  
  4474.     Die  Hilfsregister können  auch unter  folgenden Namen angesprochen
  4475.     werden:
  4476.  
  4477.          1X,2X,3X,4X,5X,6X,7X,8X
  4478.  
  4479.     In dieser  Schreibweise  ist  auch  ein  byteweiser  Bezug, wie bei
  4480.     AX .. DX, möglich.
  4481.  
  4482.          (z.B.) 1L = Lowbyte von R1          5H = Highbyte von R5
  4483.  
  4484.  
  4485.     Binär-Register: R0
  4486.  
  4487.     Das  Binär-Register kann  wie jedes  andere Hilfsregister verwendet
  4488.     werden. (auch  byteweiser  Bezug  über '0L' bzw. '0H')  Der einzige
  4489.     Unterschied ist die binäre Anzeige des Registerwertes.
  4490.  
  4491.  
  4492.  
  4493.  
  4494.  
  4495.  
  4496.  
  4497.  
  4498.  
  4499.     ────────────────────────────────────────────────────────────────────────────────
  4500.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   69
  4501.  
  4502.  
  4503.  
  4504.     Sonder-Register: SE, OF
  4505.  
  4506.     Unter diesen beiden Bezeichnern können die  voreingestellten Regis-
  4507.     ter des Monitors  für das  obere Window  als normale Register ange-
  4508.     sprochen werden (nur als Wort-Register).
  4509.  
  4510.  
  4511.     Versteckte Register: FS, FO
  4512.  
  4513.     Unter diesen beiden Bezeichnern  können  die Register, in denen die
  4514.     Adresse für das untere Window  des Monitors  gespeichert ist, ange-
  4515.     sprochen werden. (nur als Wort-Register)
  4516.  
  4517.     Der Inhalt  dieser  Register  wird nur  angezeigt, falls das untere
  4518.     Window des Monitors eingeschaltet ist.
  4519.  
  4520.  
  4521.     Pseudo-Register
  4522.  
  4523.     Falls als zu verändernder Operand eines  Befehls  weder  ein Regis-
  4524.     ter noch eine  Speicherstelle  angegeben wird, wird das Ergebnis im
  4525.     ersten Pseudo-Register gespeichert.
  4526.     Falls  der zweite Operand ein expliziter Wert, eine  Konstante oder
  4527.     ein Ausdruck ist, wird dieser für die Berechnung im zweiten Pseudo-
  4528.     Register zwischengespeichert.
  4529.  
  4530.     Das erste Pseudo-Register kann z.B. dazu benutzt werden, den Inhalt
  4531.     des  Flag-Registers  nach einem Befehl zu ermitteln ohne einen Ope-
  4532.     randen zu verändern.  Falls  der  Inhalt der Pseudo-Register weiter
  4533.     verwendet  werden  soll,  kann  er über die  Konstanten P1 (Pseudo-
  4534.     Register für den ersten Operanden) und  P2 (Pseudo-Register für den
  4535.     zweiten Operanden) angesprochen werden.
  4536.  
  4537.     Beispiel:
  4538.  
  4539.          Simulation des Befehls 'CMP AX,BX':
  4540.  
  4541.          SUB AX-0,BX
  4542.              ────
  4543.              Ausdruck  als  zu verändernder  Operand,  es wird also das
  4544.              Pseudo-Register für das Ergebnis benutzt und nur das Flag-
  4545.              Register verändert.
  4546.  
  4547.  
  4548.  
  4549.  
  4550.  
  4551.  
  4552.  
  4553.  
  4554.  
  4555.  
  4556.  
  4557.  
  4558.  
  4559.     ────────────────────────────────────────────────────────────────────────────────
  4560.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   70
  4561.  
  4562.  
  4563.  
  4564.     hilfreg
  4565.  
  4566.     Name  eines  Hilfsregisters,  wobei  das  Register R8 und Adressen-
  4567.     angaben nicht erlaubt sind. Es kann nur  ein Wortregister angegeben
  4568.     werden.
  4569.  
  4570.  
  4571.     wert
  4572.  
  4573.     Explizit angegebener Wert. Explizite Werte können in fünf verschie-
  4574.     denen Formaten angegeben werden.
  4575.  
  4576.     Sind  führende Hochkommata  oder  Gänsefüßchen  vorhanden, wird der
  4577.     Wert als String behandelt. Strings können max. 2 Zeichen lang sein;
  4578.     die  Eingabe  von Steuerzeichen  ist  nur  nach dem  Prefix-Zeichen
  4579.     <CTRL-P>  möglich. Das Verkettungs-Zeichen '^' kann auf keinem Fall
  4580.     in einem String vorkommen.
  4581.     Der  String muß  mit  dem  einleitenden Zeichen  (Hochkommata  oder
  4582.     Gänsefüßchen) abgeschlossen sein. Zur Eingabe von Hochkommata (bzw.
  4583.     Gänsefüßchen) muß als  String-Begrenzer das  Gänsefüßchen (bzw. das
  4584.     Hochkommata) genommen werden. Gänsefüßchen und Hochkommata in einem
  4585.     String sind nicht möglich.
  4586.  
  4587.     Ist kein führendes Gänsefüßchen oder Hochkommata vorhanden wird der
  4588.     Wert  als Zahl  interpretiert.  Fehlt ein Formatkennzeichen für die
  4589.     Zahl,  wird  diese als  Hexadezimalwert interpretiert.  Maximum für
  4590.     eine hexadezimalen Wert  ist 0FFFFh.  Negative  Werte können  durch
  4591.     ein führendes  Minuszeichen  '-'  gekennzeichnet  werden.  Zwischen
  4592.     dem Minuszeichen und dem Wert darf kein Leerzeichen stehen.
  4593.  
  4594.     Zahlen im dezimalen Format können  direkt  eingegben  werden, indem
  4595.     vor dem Wert das Formatkennzeichen '#'  eingegeben wird; für Zahlen
  4596.     im binärem Format muß vor dem Wert ein '$' angegeben werden.
  4597.  
  4598.     Zahlen mit einer Basis zwischen 2 und 15 können auch in der Form
  4599.  
  4600.          b#n{...}
  4601.  
  4602.     angegeben werden, wobei b die Basis für die Zahl ist und n{...} die
  4603.     Zahl selbst (mit 2 <= b <= F und 0 <= n < b).
  4604.     Vorzeichen müssen jeweils direkt vor dem  Formatkennzeichen stehen.
  4605.  
  4606.     Bei  negativen Werten wird  das Zweierkomplement  gebildet  und bei
  4607.     Byte-Werten  wird nur der angegebene Wert modulo 256 übernommen.
  4608.     Zur Formatierung von Zahlen kann in allen Formaten  das Zeichen '.'
  4609.     verwendet werden.
  4610.  
  4611.  
  4612.  
  4613.  
  4614.  
  4615.  
  4616.  
  4617.  
  4618.  
  4619.     ────────────────────────────────────────────────────────────────────────────────
  4620.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   71
  4621.  
  4622.  
  4623.  
  4624.     Beispiele:
  4625.  
  4626.          MOV AX,#12       -> AX = 000C  =  12 (dez)
  4627.  
  4628.          MOV BX,-#12      -> AX = FFF4  = -12 (dez)
  4629.  
  4630.          MOV AL,+#34      -> AL = 22    =  34 (dez)
  4631.  
  4632.          MOV CL,#1.234    -> CL = D2    = 210 (dez)
  4633.                                             = (1234 MOD 256)
  4634.  
  4635.          MOV CL,-#1.234   -> CL = 2E    =  46 (dez)
  4636.                                  -1234 = FB2Eh, FB2Eh MOD 100h = 2Eh
  4637.  
  4638.          MOV AX,$11.1100  -> AX = 003C
  4639.  
  4640.          MOV BL,-$01      -> BL = FF
  4641.  
  4642.          MOV AX,5#100     -> AX = 19    =  25 (dez)
  4643.                                             = 100 zur Basis 5
  4644.  
  4645.          MOV BX,F#101     -> BX = E2    = 226 (dez)
  4646.                                             = 101 zur Basis 15
  4647.  
  4648.          MOV CX, -3#121   -> CX = FFF0  = - 16 (dez)
  4649.                                             = -121 zur Basis 3
  4650.  
  4651.  
  4652.  
  4653.  
  4654.  
  4655.  
  4656.  
  4657.  
  4658.  
  4659.  
  4660.  
  4661.  
  4662.  
  4663.  
  4664.  
  4665.  
  4666.  
  4667.  
  4668.  
  4669.  
  4670.  
  4671.  
  4672.  
  4673.  
  4674.  
  4675.  
  4676.  
  4677.  
  4678.  
  4679.     ────────────────────────────────────────────────────────────────────────────────
  4680.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   72
  4681.  
  4682.  
  4683.  
  4684.     Konstanten
  4685.     ──────────
  4686.  
  4687.     Überall wo die  Angabe  eines  expliziten  Wertes erlaubt ist, kann
  4688.     auch eine Konstante angegeben werden.
  4689.  
  4690.     Ausnahme:
  4691.  
  4692.     Bei den B- und SH-Befehlen ist eine Konstante nicht erlaubt.
  4693.  
  4694.     Folgende Konstanten sind definiert:
  4695.  
  4696.     ■ CS
  4697.  
  4698.     Segment-Adresse des geladenen MDEBUGs
  4699.     Die Konstante CS wird beim Installieren von MDEBUG gesetzt und ver-
  4700.     ändert sich danach nicht mehr.
  4701.  
  4702.  
  4703.     ■ RS
  4704.  
  4705.     Segment der Rücksprung-Adresse
  4706.  
  4707.     ■ RO
  4708.  
  4709.     Offset der Rücksprung-Adresse
  4710.  
  4711.     Die  Konstanten  RS und RO  werden bei jedem Aufruf von MDEBUG über
  4712.     den Hotkey, dem User-Int, dem  automatischen Aufruf oder über einen
  4713.     zusätzlichen Interrupt neu ermittelt.
  4714.  
  4715.  
  4716.     ■ P1
  4717.  
  4718.     Inhalt des Pseudoregisters für den ersten Operanden
  4719.  
  4720.     ■ P2
  4721.  
  4722.     Inhalt des Pseudoregisters für den zweiten Operanden
  4723.  
  4724.  
  4725.  
  4726.  
  4727.  
  4728.  
  4729.  
  4730.  
  4731.  
  4732.  
  4733.  
  4734.  
  4735.  
  4736.  
  4737.  
  4738.  
  4739.     ────────────────────────────────────────────────────────────────────────────────
  4740.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   73
  4741.  
  4742.  
  4743.  
  4744.     ■ P3
  4745.  
  4746.     Die Konstante  P3 enthält  den Offset  der Variablen 'MDebugColors'
  4747.     von  MDEBUG  (Format:  Wort,  Aufbau:  Highbyte:  Farbattribut  des
  4748.     Monitors, Lowbyte:  Farbattribut des  Interpreters).  Durch  Ändern  
  4749.     dieser Variable können während eines Aufrufs  von MDEBUG die Farben 
  4750.     des Monitors und des Interpreters verändert werden.
  4751.     ('MOV CS:*[P3],nn'   ->> Farbe des Interpreters ändern,
  4752.      'MOV CS:*[P3+1],nn' ->> Farbe des Monitors ändern)
  4753.  
  4754.     Nach einer Änderung der  Farben müssen die  Fenster von MDEBUG über
  4755.     die Taste <ALT-F9> neu aufgebaut werden, damit die Änderungen wirk-
  4756.     sam werden.
  4757.  
  4758.  
  4759.     ■ P4
  4760.  
  4761.     Die Konstante  P4 enthält  den Offset der  Variablen 'MDebugCursor'
  4762.     von MDEBUG. Falls der Inhalt dieser Variablen ungleich 0 ist, nimmt
  4763.     MDEBUG diesen für die Form des Cursors (Format: Wort, Aufbau: High-
  4764.     byte:  Top Line,  Lowbyte:  Bottom Line, jeweils  nur die unteren 5
  4765.     Bits). Die Variable ist normalerweise  auf 0 gesetzt und sollte nur
  4766.     verändert  werden,  falls  während  eines  Aufrufs  von MDEBUG kein
  4767.     Cursor erscheint.
  4768.     Die  Variable  kann  über den  Befehl  'MOV CS:[P4],nnnn' jederzeit
  4769.     verändert werden. Die Änderung ist sofort wirksam.
  4770.     Falls  die Variable  MDebugCursor  ungleich 0 ist,  wird nur  deren
  4771.     Inhalt für  die Form  des Cursors benutzt,  d.h. der  Cursor ist in
  4772.     allen Modi (Interpreter: Insert/Overwrite, Monitor: frei/blockiert)
  4773.     gleich.
  4774.  
  4775.  
  4776.     ■ DO
  4777.  
  4778.     Wert  des DOS-Busyflags  verODERt mit den Wert  des Critical-Error-
  4779.     Flags. DOS-Interrupts sollten nur ausgeführt werden, falls der Wert
  4780.     der Konstanten DO Null ist.
  4781.  
  4782.  
  4783.     ■ CU
  4784.  
  4785.     Offset  des Bytes,  auf dem  im  Monitor der Cursor  steht (oder 0,
  4786.     falls der Interpreter  aus dem Segment- oder  Offset-Feld des Moni-
  4787.     tors aufgerufen wurde).
  4788.  
  4789.  
  4790.  
  4791.  
  4792.  
  4793.  
  4794.  
  4795.  
  4796.  
  4797.  
  4798.  
  4799.     ────────────────────────────────────────────────────────────────────────────────
  4800.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   74
  4801.  
  4802.  
  4803.  
  4804.     Ausdruck
  4805.     ────────
  4806.  
  4807.     Überall wo die Angabe eines  expliziten  Wertes  erlaubt ist,  kann
  4808.     auch ein Ausdruck angegeben werden.  (ausgenommen beim B- und  beim
  4809.     SH-Befehl)
  4810.     Ein Ausdruck besteht aus mindestens einem Teil-Ausdruck.  Ein Teil-
  4811.     Ausdruck  ist eine arithmetische oder  logische Operation  mit zwei
  4812.     Operanden die  Werte, Register,  Konstante oder Teil-Ausdrücke sein
  4813.     können bzw. ein  Operand mit mindestens einer Klammer-Ebene.
  4814.     Explizite  Werte können in  allen vier Schreibweisen  (hexadezimal,
  4815.     dezimal, binär oder  als String)  angegeben werden, negative  Werte
  4816.     können ebenfalls  verwendet  werden.  Es können  alle  Register und
  4817.     Konstanten verwendet werden.  In einem  Teil-Ausdruck  können keine
  4818.     Speicherstellen verwendet werden.
  4819.  
  4820.     Verändert wird nur der erste Operand eines Teil-Ausdrucks.
  4821.  
  4822.     Implementiert sind folgende Operatoren:
  4823.  
  4824.     ┌─────────────────────────────────────────────────────────────────┐
  4825.     │ Arithmetische Operatoren                                        │
  4826.     ├──────┬────────────────┬─────────────────────────────────────────┤
  4827.     │ Op.  │ Funktion       │ Kommentar                               │
  4828.     ╞══════╪════════════════╪═════════════════════════════════════════╡
  4829.     │ +    │ Addition       │ keine Berücksichtigung eines Übertrages │
  4830.     │ -    │ Subtraktion    │ -"-                                     │
  4831.     │ /    │ Division       │ nur ganzzahlig                          │
  4832.     │      │                │ Eine Division durch 0 ist nicht möglich.│
  4833.     │ \    │ Modulo         │ ganzzahiger Rest einer Division         │
  4834.     │      │                │ Eine Division durch 0 ist nicht möglich.│
  4835.     │ *    │ Multiplikation │ keine Berücksichtigung eines Übertrages │
  4836.     └──────┴────────────────┴─────────────────────────────────────────┘
  4837.  
  4838.  
  4839.  
  4840.  
  4841.  
  4842.  
  4843.  
  4844.  
  4845.  
  4846.  
  4847.  
  4848.  
  4849.  
  4850.  
  4851.  
  4852.  
  4853.  
  4854.  
  4855.  
  4856.  
  4857.  
  4858.  
  4859.     ────────────────────────────────────────────────────────────────────────────────
  4860.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   75
  4861.  
  4862.  
  4863.  
  4864.     ┌─────────────────────────────────────────────────────────────────┐
  4865.     │ Logische Operatoren                                             │
  4866.     ├──────┬────────────────┬─────────────────────────────────────────┤
  4867.     │ Op.  │ Funktion       │ Kommentar                               │
  4868.     ╞══════╪════════════════╪═════════════════════════════════════════╡
  4869.     │ &    │ AND            │ Verknüpfen der Operanden mit AND        │
  4870.     │ |    │ OR             │ Verknüpfen der Operanden mit OR         │
  4871.     │ !    │ XOR            │ -"- mit einem exklusiven OR             │
  4872.     │ »    │ Shift rechts   │ Verschieben des ersten Operanden um n   │
  4873.     │      │                │ Bits nach rechts (n ist der 2. Operand) │
  4874.     │      │                │ Werte größer als 15 für den zweiten     │
  4875.     │      │                │ Operanden führen immer zum Ergebnis 0   │
  4876.     │ «    │ Shift links    │ Verschieben des ersten Operanden um n   │
  4877.     │      │                │ Bits nach links (n ist der 2. Operand)  │
  4878.     │      │                │ Werte größer als 15 für den zweiten     │
  4879.     │      │                │ Operanden führen immer zum Ergebnis 0   │
  4880.     │ %    │ Ermittelt den  │                                         │
  4881.     │      │ Wert eines     │ Die  Bits des Operanden sind dabei von  │
  4882.     │      │ bestimmten     │ rechts nach links von 0 bis  15 durch-  │
  4883.     │      │ Bits des ersten│ nummeriert. Werte  größer  als 15  für  │
  4884.     │      │ Operanden      │ den zweiten Operanden führen immer zum  │
  4885.     │      │                │ Ergebnis 0                              │
  4886.     └──────┴────────────────┴─────────────────────────────────────────┘
  4887.  
  4888.  
  4889.     ┌─────────────────────────────────────────────────────────────────┐
  4890.     │ Vergleichsoperatoren (keine Berücksichtigung eines Vorzeichens) │
  4891.     ├──────┬──────────────────────────────────────────────────────────┤
  4892.     │ Op.  │ Funktion                                                 │
  4893.     ╞══════╪══════════════════════════════════════════════════════════╡
  4894.     │ <    │ Falls der erste Operand kleiner als der zweite Operand   │
  4895.     │      │ ist, ist das Ergebnis 1, ansonsten ist das Ergebnis 0    │
  4896.     ├──────┼──────────────────────────────────────────────────────────┤
  4897.     │ >    │ Falls der erste Operand größer als der zweite Operand    │
  4898.     │      │ ist, ist das Ergebnis 1, ansonsten ist das Ergebnis 0    │
  4899.     ├──────┼──────────────────────────────────────────────────────────┤
  4900.     │ =    │ Falls der erste Operand gleich dem zweiten Operanden     │
  4901.     │      │ ist, ist das Ergebnis 1, ansonsten ist das Ergebnis 0    │
  4902.     ├──────┼──────────────────────────────────────────────────────────┤
  4903.     │ ¬    │ Falls der erste Operand ungleich dem zweiten Operanden   │
  4904.     │      │ ist, ist das Ergebnis 1, ansonsten ist das Ergebnis 0    │
  4905.     │      │ Das Zeichen '¬' liegt im Interpreter auf der Taste <_>   │
  4906.     └──────┴──────────────────────────────────────────────────────────┘
  4907.  
  4908.  
  4909.  
  4910.  
  4911.  
  4912.  
  4913.  
  4914.  
  4915.  
  4916.  
  4917.  
  4918.  
  4919.     ────────────────────────────────────────────────────────────────────────────────
  4920.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   76
  4921.  
  4922.  
  4923.  
  4924.     Ein  Operationszeichen  muß  immer  zwischen  den Operanden stehen.
  4925.     Falls der erste Operand fehlt, wird als  erster Operand 0 genommen,
  4926.     der zweite Operand muß auf jeden Fall angegeben sein.
  4927.     Wird  zwischen  zwei Teil-Ausdrücken  kein Operations-Zeichen ange-
  4928.     geben, werden  die Werte  der  Teil-Ausdrücke  addiert. Jeder Teil-
  4929.     Ausdruck   wird  von  links  nach  rechts ohne Berücksichtigung von
  4930.     Operator-Präferenzen   (z.B.  'Punkt vor Strich')  berechnet.  Eine
  4931.     Klammerung  zur  Änderung  der Berechnungs-Reihenfolge ist möglich.
  4932.     Maximal sind 5 Klammer-Ebenen erlaubt.
  4933.  
  4934.     Beispiele für Teil-Ausdrücke:
  4935.     sei AX = 0102h, BX = 0304h und CX = FFF8h
  4936.  
  4937.     ┌────────────────────────┬────────┬──────────────────────────────┐
  4938.     │ Teil-Ausdruck          │ Wert   │ Kommentar                    │
  4939.     ╞════════════════════════╪════════╪══════════════════════════════╡
  4940.     │  3+4                   │     7h │                              │
  4941.     │  3+2*2                 │    0Ah │ kein 'Punkt vor Strich'      │
  4942.     │  3+(2*2)               │     7h │ Klammer-Ebene berücksichtigt │
  4943.     │  #35\(4*(2+2))         │     3h │ Klammer-Ebenen -"-           │
  4944.     │  ()                    │     0h │ leere Klammer-Ebene          │
  4945.     │  (())                  │     0h │ leere Klammer-Ebenen         │
  4946.     │  (4)                   │     4h │ voreingestellt ist 0 als  1. │
  4947.     │                        │        │ Operand und die Addition als │
  4948.     │                        │        │ Operation                    │
  4949.     │  4--5                  │     9h │ das  zweite  Minus  ist  ein │
  4950.     │                        │        │ Vorzeichen                   │
  4951.     │  AL*(-BL)              │  FFF8h │ -8   dez.                    │
  4952.     │  AL*-04                │  FFF8h │ Minus ist Vorzeichen         │
  4953.     │  AL*AX                 │   204h │ +516 dez.                    │
  4954.     │  (4)(5)                │     9h │ Addition ist  Voreinstellung │
  4955.     │  (ALBL)                │     6h │ Addition ist  Voreinstellung │
  4956.     │  (AL BL)               │     6h │ Addition ist  Voreinstellung │
  4957.     │  (AX203)               │  0305h │ Addition ist  Voreinstellung │
  4958.     │  (AL234)               │   236h │ Addition ist  Voreinstellung │
  4959.     │  (234AL)               │  Fehler│ Das  'A'  wird  als  weitere │
  4960.     │                        │        │ Hex-Ziffer interpretiert.    │
  4961.     │  (1234SI)              │  Fehler│ Das  'S'  wird  als  weitere │
  4962.     │                        │        │ Hex-Ziffer interpretiert.    │
  4963.     │  $1+#1234+0A+'A'-41    │  04DDh │ 1245 dez, die  Zahlenformate │
  4964.     │                        │        │ können gemischt werden       │
  4965.     │  CS-1                  │        │ Segment des  MCBs von MDEBUG │
  4966.     │  -AX-1                 │  FEFDh │ Einerkomplement von AX       │
  4967.     │  (AX ! 0FFFF)          │  FEFDh │ Einerkomplement von AX       │
  4968.     │  (AX+F)/10             │    11h │ Umrechnung  eines Wertes auf │
  4969.     │                        │        │ nächste Paragraphen-Grenze   │
  4970.     └────────────────────────┴────────┴──────────────────────────────┘
  4971.  
  4972.  
  4973.  
  4974.  
  4975.  
  4976.  
  4977.  
  4978.  
  4979.     ────────────────────────────────────────────────────────────────────────────────
  4980.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   77
  4981.  
  4982.  
  4983.  
  4984.     ┌────────────────────────┬────────┬──────────────────────────────┐
  4985.     │ Teil-Ausdruck          │ Wert   │ Kommentar                    │
  4986.     ╞════════════════════════╪════════╪══════════════════════════════╡
  4987.     │  BX*AX                 │  0A08h │ Übertrag  wird nicht berück- │
  4988.     │                        │        │ sichtigt.                    │
  4989.     │  AX/(AX-0102)          │  Fehler│ durch  0 kann  nicht geteilt │
  4990.     │                        │        │ werden                       │
  4991.     │  ((BL % 7)*-1 « 8)|BL  │     4h │ liefert  den  vorzeichen-    │
  4992.     │  oder                  │        │ gerecht auf Wortgröße        │
  4993.     │  -(BL % 7)«8|BL        │        │ erweiterten Wert von BL      │
  4994.     │  ( (BL » 3) & 1)       │     0h │ Ergebnis: 3. Bit von BL      │
  4995.     │  (BL % 2)              │     1h │ 2. Bit von BL                │
  4996.     │  AX-(AX / 4 * 4)       │     2h │ Simulation des MOD-Operators │
  4997.     │  -2*(CX » 0F)*CX+CX    │     8h │ liefert immer d. Absolutwert │
  4998.     │                        │        │ d. benutzten Registers (hier │
  4999.     │                        │        │ CX),  da  der  Teil-Ausdruck │
  5000.     │                        │        │ -2*(CX » 0F)*CX für negative │
  5001.     │                        │        │ Werte 0 wird                 │
  5002.     │  ¬AX                   │     1h │ als erster Operand wird hier │
  5003.     │                        │        │ implizit 0 angenommen        │
  5004.     │  ¬(CX+8)               │     0h │ als erster Operand wird hier │
  5005.     │                        │        │ implizit 0 angenommen        │
  5006.     │  /AX                   │     0h │ als erster Operand wird hier │
  5007.     │                        │        │ implizit 0 angenommen        │
  5008.     └────────────────────────┴────────┴──────────────────────────────┘
  5009.  
  5010.     Die Berechnung eines Ausdruckes erfolgt immer  im Wort-Format; d.h.
  5011.     alle  Operanden  werden  vor  jeder  Berechnung  in das Wort-Format
  5012.     konvertiert.  Eine  eventuelle  Konvertierung  des  Ergebnisses ins
  5013.     Byte-Format erfolgt  erst nach  der vollständigen  Berechnung eines
  5014.     Ausdrucks.  Die Berechnung  eines Ausdrucks  geschieht  vollständig
  5015.     intern, d.h. es werden hierbei keine Register  oder Speicherstellen
  5016.     verändert.
  5017.  
  5018.  
  5019.  
  5020.  
  5021.  
  5022.  
  5023.  
  5024.  
  5025.  
  5026.  
  5027.  
  5028.  
  5029.  
  5030.  
  5031.  
  5032.  
  5033.  
  5034.  
  5035.  
  5036.  
  5037.  
  5038.  
  5039.     ────────────────────────────────────────────────────────────────────────────────
  5040.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   78
  5041.  
  5042.  
  5043.  
  5044.     Byte-Operanden werden vor der Berechnung in Wortwerte umgewandelt.
  5045.  
  5046.     Beispiel:
  5047.  
  5048.          sei BX = 00FFh und AX = 0001h und CX = 0103h
  5049.  
  5050.     dann wird (intern) aus
  5051.  
  5052.          -BL -> FF01     ; der Wert 00FFh wird negiert
  5053.           BL -> 00FF     ; keine Übernahme des 7. Bits ins High-Byte
  5054.          -AL -> FFFF     ; Negiert wird intern der Wert als Wort
  5055.          -CL -> FFFD     ; der Wert 03h (als Wort) wird negiert
  5056.           CL -> 0003
  5057.  
  5058.     Die Anzahl der Teil-Ausdrücke eines  Ausdrucks ist nicht  begrenzt.
  5059.     Die einzelnen Komponenten eines  Teil-Ausdrucks  können durch Leer-
  5060.     zeichen  getrennt  sein  falls  aus dem  Teil vor  dem  Leerzeichen
  5061.     erkennbar ist, daß der Teil-Ausdruck noch nicht beendet ist.
  5062.  
  5063.     Beispiele:
  5064.  
  5065.          MOV AX,BX + 4
  5066.  
  5067.          Leerzeichen erlaubt, ABER: Da der Teil vor dem Leerzeichen ein
  5068.          korrekter Operand  ist und mit einem  Leerzeichen  abschließt,
  5069.          wird der Teil  ' + 4' als  Kommentar erkannt und nicht berück-
  5070.          sichtigt!
  5071.  
  5072.          MOV AX,(BX + 4)
  5073.  
  5074.          Korrekt, da eine Klammer noch nicht geschlossen
  5075.  
  5076.          MOV AX,BX+  5
  5077.  
  5078.          Korrekt, da ein Operand noch nicht bearbeitet ist
  5079.  
  5080.          MOV AX,[BX + 5]
  5081.  
  5082.          Leerzeichen erlaubt, ABER: Da der Teil vor dem Leerzeichen ein
  5083.          korrekter Operand ist,  mit  einem Leerzeichen abschließt  und
  5084.          das Zeichen '[' nicht klammert, wird der Teil ' + 5]' als Kom-
  5085.          mentar erkannt und nicht berücksichtigt!
  5086.  
  5087.  
  5088.  
  5089.  
  5090.  
  5091.  
  5092.  
  5093.  
  5094.  
  5095.  
  5096.  
  5097.  
  5098.  
  5099.     ────────────────────────────────────────────────────────────────────────────────
  5100.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   79
  5101.  
  5102.  
  5103.  
  5104.          MOV AX,[BX+4 +3]
  5105.  
  5106.          Korrekt,  aber der Teil '+3]' wird als Kommentar  gewertet und
  5107.          nicht berücksichtigt!
  5108.  
  5109.          MOV AX,[(BX +4 +3)]
  5110.  
  5111.          Korrekt, da eine Klammer noch nicht geschlossen ist.
  5112.  
  5113.     Hinweis:
  5114.  
  5115.     Falls  Leerzeichen  zur Erhöhung der Lesbarkeit eines Ausdrucks be-
  5116.     nutzt werden sollen, sollte der gesamte Ausdruck geklammert werden.
  5117.  
  5118.     Falls als erster zu verändernder Operand eines Befehls ein Ausdruck
  5119.     angegeben wird, wird das Pseudo-Register benutzt.
  5120.  
  5121.     Besonderheiten:
  5122.  
  5123.          MOV AX,*4
  5124.  
  5125.          Das  Zeichen '*' wird  als Kennzeichen  für ein  Speicher-Byte
  5126.          betrachtet, ausgeführt wird also:
  5127.  
  5128.               MOV AX,MonitorSeg:*[0004]
  5129.  
  5130.  
  5131.          MOV AX,**4
  5132.  
  5133.          Der Befehl wird ausgeführt als:
  5134.  
  5135.               MOV AX,MonitorSeg:*[(0*4)]
  5136.  
  5137.  
  5138.          MOV +AX,5
  5139.  
  5140.          Der Befehl wird ausgeführt als:
  5141.  
  5142.               MOV 0+AX,5
  5143.  
  5144.          d.h. es wird das Pseudo-Register und nicht AX verändert!
  5145.  
  5146.  
  5147.  
  5148.  
  5149.  
  5150.  
  5151.  
  5152.  
  5153.  
  5154.  
  5155.  
  5156.  
  5157.  
  5158.  
  5159.     ────────────────────────────────────────────────────────────────────────────────
  5160.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   80
  5161.  
  5162.  
  5163.  
  5164.     Adressierung von Speicherstellen
  5165.     ────────────────────────────────
  5166.  
  5167.     Wird  ein  Register-Bezeichner,  ein expliziter  Wert oder ein Aus-
  5168.     druck in eckigen Klammern ('[]') gesetzt, so  wird das Wort mit der
  5169.     aktuellen  Segment-Adresse des oberen  Monitor-Windows  als Segment
  5170.     und dem  Inhalt  des  Registers bzw.  den  expliziten Wert oder dem
  5171.     Wert des Ausdrucks als Offset gelesen  bzw. geändert. (INTEL-Format
  5172.     die schließende eckige Klammer ist optional)
  5173.  
  5174.     Wird dem Register-Bezeichner  bzw.  Wert oder Ausdruck ein '*' vor-
  5175.     angestellt, so ist das Byte, auf  das die aktuelle  Segment-Adresse
  5176.     des oberen Monitor-Windows  und der  Inhalt des  Registers bzw. der
  5177.     explizite  Wert  oder  der Wert  des  Ausdrucks  als Offset  zeigt,
  5178.     gemeint.  ( '*[' hat die gleiche Wirkung)
  5179.  
  5180.     Die  Einstellung  des Segment-Registers des  oberen Monitor-Windows
  5181.     als Segment-Register kann  durch ein  Segment-Prefix  überschrieben
  5182.     werden. Als Segment-Prefix  ist ein  Register,  ein expliziter Wert
  5183.     oder  ein Ausdruck erlaubt.  Das Segment-Prefix  muß  mit einem ':'
  5184.     abgeschlossen werden. Falls  ein Segment-Prefix angegeben ist, kann
  5185.     bei Wortgrößen  die Angabe der eckigen Klammern '[]' entfallen.
  5186.  
  5187.  
  5188.  
  5189.     Syntax der Befehle
  5190.     ──────────────────
  5191.  
  5192.     Für die  Bedeutung  der Befehle ist nur das erste  Zeichen signifi-
  5193.     kant. Die Befehle können also in der  kurzen  oder  in einer langen
  5194.     Schreibweise angegeben werden.
  5195.  
  5196.     Ausnahme:
  5197.  
  5198.     Bei allen Befehlen, die mit dem gleichen Zeichen beginnen, ist auch
  5199.     das letzte Zeichen signifikant.
  5200.  
  5201.     Die  Register-Namen und Konstanten müssen in Großbuchstaben  einge-
  5202.     geben werden;  die  signifikanten Buchstaben  der Befehle müssen in
  5203.     der angegebenen Schreibweise eingegeben werden
  5204.  
  5205.     Die Original-Belegungen der  umbelegten Tasten  können nur nach dem
  5206.     Prefix-Zeichen <CTRL-P> eingegeben werden. Kleinbuchstaben  können,
  5207.     falls der Schalter UpcaseMode auf U steht,  ebenfalls  nur nach dem
  5208.     Prefixzeichen <CTRL-P> eingegeben werden.
  5209.  
  5210.  
  5211.  
  5212.  
  5213.  
  5214.  
  5215.  
  5216.  
  5217.  
  5218.  
  5219.     ────────────────────────────────────────────────────────────────────────────────
  5220.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   81
  5221.  
  5222.  
  5223.  
  5224.     Zwischen  dem  Befehl  und dem (ersten) Operand muß  mindestens ein
  5225.     Leerzeichen  stehen; zwischen den  Operanden  sollten Kommata  oder
  5226.     Leerzeichen  stehen. Der erste und der zweite Operand eines Befehls
  5227.     können identisch sein.
  5228.  
  5229.     Pro Eingabe sind mehrere (Interpreter)Befehle möglich. Diese müssen
  5230.     durch das Verkettungs-Zeichen '^' getrennt sein.
  5231.  
  5232.     Führende  Blanks eines Befehls werden überlesen. Ein Befehl  ist zu
  5233.     Ende, falls alle nötigen Operanden ermittelt sind, ein Verkettungs-
  5234.     Zeichen  auftritt (= Anfang eines  neuen Befehls) oder das Ende der
  5235.     Eingabezeile erreicht wird.
  5236.  
  5237.     Die Anzahl der Befehle pro Eingabe ist nur durch die max. Länge der
  5238.     Eingabezeile (66 Zeichen) begrenzt. Die  Ausführung  einer Befehls-
  5239.     zeile endet bei Auftritt  eines Fehlers, falls  ein Kommentaranfang
  5240.     gefunden  wird  oder falls alle Befehle der Zeile bearbeitet sind.
  5241.  
  5242.     Falls kein  Fehler auftritt, wird der Eingabepuffer  gelöscht.  An-
  5243.     sonsten ertönt  ein  Fehlersignal  und die Befehlszeile bleibt  zum
  5244.     Editieren im  Eingabepuffer. Der  Cursor steht  dann auf der Stelle
  5245.     im Eingabepuffer  an der der  Fehler  bemerkt wurde. Auf dem oberen
  5246.     Rand  des Interpreter-Fensters  wird eine  Fehlermeldung angezeigt.
  5247.     Diese muß mit einer Taste quittiert werden.
  5248.  
  5249.     Die Anzeige der Registerwerte  und der  Inhalt  des Monitors werden
  5250.     erst  nach dem  Ende  der  Bearbeitung  einer Befehlszeile  auf den
  5251.     neuesten Stand gebracht (Ausnahme: W- u. H-Befehl).
  5252.  
  5253.     Bei verketteten  Befehlen muß  beachtet  werden,  daß  alle Befehle
  5254.     von MDEBUG EINZELN sequentiell ausgeführt,  d.h. interpretiert wer-
  5255.     den,  wobei  nach JEDEM  Befehl intern die Registerwerte  angepasst
  5256.     werden!
  5257.  
  5258.     Eine Befehlszeile ist zu Ende, falls  der Eingabepuffer vollständig
  5259.     bearbeitet  wurde oder hinter einem  Befehl kein Verkettungszeichen
  5260.     steht;  d.h.  hinter dem  letzten  Befehl  stehende  Zeichen werden
  5261.     ignoriert.  (= Kommentar-Simulation)  Verkettungszeichen in Kommen-
  5262.     taren werden ignoriert.
  5263.  
  5264.  
  5265.  
  5266.  
  5267.  
  5268.  
  5269.  
  5270.  
  5271.  
  5272.  
  5273.  
  5274.  
  5275.  
  5276.  
  5277.  
  5278.  
  5279.     ────────────────────────────────────────────────────────────────────────────────
  5280.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   82
  5281.  
  5282.  
  5283.  
  5284.     Die Kommentar-Simulation kann z.B. zum Vertauschen der Werte zweier
  5285.     Register genutzt werden:
  5286.  
  5287.          sei AX = 1024 und BX = 3408
  5288.  
  5289.     Sollen die Werte der Register vertauscht werden,  wird der Wert des
  5290.     überschriebenen Registers hinter dem ersten MOV-Befehl vermerkt.
  5291.     Also
  5292.  
  5293.          MOV AX,BX   1024                    MOV AX,BX   MOV BX,1024
  5294.          ─────────   ────         oder:      ─────────   ───────────
  5295.          Befehl      Kommentar!              Befehl      Kommentar!
  5296.  
  5297.     Zur richtigen  Belegung  von BX muß nun nur mittels  <SHIFT-RETURN>
  5298.     die Eingabe wieder zum Editieren freigegeben und korrigiert werden.
  5299.  
  5300.     Der Tausch ist natürlich auch über die Befehls-Verkettung möglich:
  5301.  
  5302.     Beispiel:
  5303.  
  5304.          Vertauschen der Inhalte  der Register AX und BX unter Zuhilfe-
  5305.          name des Registers R7.
  5306.  
  5307.          Eingabe:
  5308.  
  5309.          MOV R7,AX ^ MOV AX,BX ^ MOV BX,R7  AX <-> BX
  5310.          ─────────   ─────────   ─────────  ─────────
  5311.          Befehl1     Befehl2     Befehl3    Kommentar!
  5312.  
  5313.          oder
  5314.          Vertauschen der Register CX und DX ohne Hilfsregister:
  5315.  
  5316.          ! CX,DX ^ ! DX,CX ^ ! CX,DX        CX <-> DX
  5317.          ───────   ───────   ───────        ─────────
  5318.          Befehl1   Befehl2   Befehl3        Kommentar!
  5319.  
  5320.  
  5321.  
  5322.  
  5323.  
  5324.  
  5325.  
  5326.  
  5327.  
  5328.  
  5329.  
  5330.  
  5331.  
  5332.  
  5333.  
  5334.  
  5335.  
  5336.  
  5337.  
  5338.  
  5339.     ────────────────────────────────────────────────────────────────────────────────
  5340.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   83
  5341.  
  5342.  
  5343.  
  5344.     Syntax der Operanden
  5345.     ────────────────────
  5346.  
  5347.     Führende Nullen  bei Operanden sind nur beim  B- und beim SH-Befehl
  5348.     erforderlich,  bei allen anderen Werten sind sie möglich aber nicht
  5349.     nötig.
  5350.  
  5351.     Es wird von  einer  Byte-Operation  ausgegangen,  falls  mindestens
  5352.     einer der Operanden ein Bytewert ist.
  5353.  
  5354.     Beispiel:
  5355.  
  5356.          MOV AL,[BX] -> AL wird geändert
  5357.  
  5358.          MOV AX,CL   -> AL = CL und AH bleibt unverändert
  5359.  
  5360.          aber
  5361.  
  5362.          MOV BX,[CL] -> BX wird verändert, '[CL]' bezeichnet
  5363.                         ein Speicherwort
  5364.  
  5365.     Ein  explizit  angegebener  Wert wird  in das  Format  des  anderen
  5366.     Operanden (Byte oder Wort) konvertiert. Ist kein  eindeutiges Kenn-
  5367.     zeichen für das Format vorhanden,  wird eine  Wort-Operation ausge-
  5368.     führt.
  5369.  
  5370.  
  5371.     Sonstiges
  5372.     ─────────
  5373.  
  5374.     ■ FÜr  B-, C- und I-Befehle  werden keinerlei  Überprüfungen vorge-
  5375.       nommen. Vor dem G-Befehl wird nur überprüft, ob der auszuführende
  5376.       Code vollständig im im oberen Monitor-Window  angezeigten Segment
  5377.       liegt und ob das Ende des auszuführenden Codes im RAM liegt.
  5378.  
  5379.       Vor den B-, G-, C- und  I-Befehl wird  der Stack  zurück  auf den
  5380.       Stack  des  unterbrochenen  Prozesses  gesetzt  und  die Register
  5381.       werden mit den angezeigten Werten  geladen.  Nach der  Ausführung
  5382.       des  Befehls  werden  alle  Registerwerte gespeichert,  der Stack
  5383.       wieder umgesetzt und die neuen Register-Werte angezeigt. D.h. B-,
  5384.       G-, C-  und I-Befehle  werden so  ausgeführt, als wenn sie an der
  5385.       Stelle im  unterbrochenen Prozess die nach der Unterbrechung aus-
  5386.       geführt würden.
  5387.       Nur der Wert des Registers CS ist anders (und  natürlich der Wert
  5388.       des Instruction-Pointers), dies kann aber  beim G-Befehl umgangen
  5389.       werden indem der  Code in  einen unbenutzten  Speicherbereich des
  5390.       Code-Segmentes des unterbrochenen Prozesses gelegt wird.
  5391.  
  5392.  
  5393.  
  5394.  
  5395.  
  5396.  
  5397.  
  5398.  
  5399.     ────────────────────────────────────────────────────────────────────────────────
  5400.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   84
  5401.  
  5402.  
  5403.  
  5404.     ■ Die Werte der Hilfs- und der Sonder-Register werden zwischen ver-
  5405.       schiedenen  Aufrufen  nicht  verändert;  die   Prozessor-Register
  5406.       werden bei jedem Aufruf neu geladen.
  5407.  
  5408.     ■ Die Register SP und SS zeigen  auf den  Stack des  unterbrochenen
  5409.       Prozesses. Die Return-Adresse  und der  Wert des  Flag-Registers,
  5410.       die  durch den INT-Aufruf auf den Stack  gebracht  wurden, werden
  5411.       vom Stack  des unterbrochenen  Prozesses  entfernt.  Diese werden
  5412.       von MDEBUG gespeichert und vor dem  Beenden  wieder auf den Stack
  5413.       gebracht.
  5414.  
  5415.     ■ Die  Adresse  des  DIB und die Adresse des  Busy-Flags werden nur
  5416.       einmal beim  Start  von MDEBUG im Initialisierungsteil ermittelt.
  5417.       Die aktuellen  Adressen im DIB  werden  bei jeder Neu-Anzeige des
  5418.       Interpreter-Fensters neu ermittelt.
  5419.  
  5420.  
  5421.  
  5422.  
  5423.  
  5424.  
  5425.  
  5426.  
  5427.  
  5428.  
  5429.  
  5430.  
  5431.  
  5432.  
  5433.  
  5434.  
  5435.  
  5436.  
  5437.  
  5438.  
  5439.  
  5440.  
  5441.  
  5442.  
  5443.  
  5444.  
  5445.  
  5446.  
  5447.  
  5448.  
  5449.  
  5450.  
  5451.  
  5452.  
  5453.  
  5454.  
  5455.  
  5456.  
  5457.  
  5458.  
  5459.     ────────────────────────────────────────────────────────────────────────────────
  5460.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   85
  5461.  
  5462.  
  5463.  
  5464.     Aufruf von MDEBUG im Graphikmodus
  5465.     ──────────────────────────────────
  5466.  
  5467.     MDEBUG  kann auch im Graphik-Modus aufgerufen werden, falls für die
  5468.     installierte  Graphikkarte  ein Bildschirmtreiber geladen wurde.
  5469.     (z.B. der Treiber 'MDHGCDRV.COM' für die Herkules-Karte)
  5470.  
  5471.     Dieser  Treiber  kann als  'normales' Programm (Extension .COM bzw.
  5472.     .EXE)  oder  als  in der CONFIG-Datei installierbarer  .SYS-Treiber
  5473.     realisiert  sein.
  5474.     Für die Beispieltreiber auf dieser  Diskette  wurde das .COM-Format
  5475.     genommen,  da solch ein  Treiber nur  geladen werden  muß, falls er
  5476.     gebraucht wird  und  nach  dem  Gebrauch  wieder aus  dem  Speicher
  5477.     entfernt werden kann.
  5478.  
  5479.     MDEBUG kommuniziert mit dem Treiber  über  den  Multiplex-Interrupt
  5480.     2Fh. Dies hat den  Vorteil,  daß  MDEBUG  nicht überprüfen  muß, ob
  5481.     ein Treiber installiert ist oder nicht, da  der Interrupt 2Fh immer
  5482.     auf eine Routine  zeigt (und niemals ins 'Nirwana').
  5483.     Zudem erlaubt  es,  daß  ein  Treiber vor  oder nach MDEBUG geladen
  5484.     werden kann.
  5485.  
  5486.     Beachtet  werden muß aber,  daß  eine falsche Prozessnummer für die
  5487.     Kommunikation über den Interrupt 2Fh das System zum Absturz bringen
  5488.     kann! (siehe 'Vorbereitungen vor dem Start')
  5489.  
  5490.     MDEBUG verwendet zur  Kommunikation  über den  Interrupt 2Fh in der
  5491.     Voreinstellung die Prozessnummer D0h.  Diese  kann  allerdings über
  5492.     den Parameter 'PRO' angepasst werden.
  5493.  
  5494.     Hierbei ist aber zu  beachten,  daß  die  angegebene  Prozessnummer
  5495.     (und  die  folgende  Prozessnummer, s.u.)  entweder  einem  Treiber
  5496.     für MDEBUG zugeordnet oder unbelegt ist!
  5497.  
  5498.     Zur  Überprüfung, ob eine  Prozessnummer schon belegt ist, kann das
  5499.     Util SHOW2FP.COM benutzt werden.
  5500.     (siehe Vorbereitungen vor dem Start)
  5501.  
  5502.     Der Treiber  ist also für die Sicherung und Restaurierung der Bild-
  5503.     schirmdaten  in  den Bildschirm-Modi, die MDEBUG nicht unterstützt,
  5504.     verantwortlich.  Dazu  muß  er  mehrere  Funktionen  zur  Verfügung
  5505.     stellen.
  5506.  
  5507.  
  5508.  
  5509.  
  5510.  
  5511.  
  5512.  
  5513.  
  5514.  
  5515.  
  5516.  
  5517.  
  5518.  
  5519.     ────────────────────────────────────────────────────────────────────────────────
  5520.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   86
  5521.  
  5522.  
  5523.  
  5524.     Für alle Funktionen des Treibers gilt:
  5525.  
  5526.     MDEBUG ruft alle  Funktionen  mit der  Prozessnummer im Register AH
  5527.     und der  Funktionsnummer  im  Register  AL  auf. Der  Treiber  darf
  5528.     nur aktiv werden, falls seine  Prozessnummer  angegeben  ist.  Alle
  5529.     anderen Aufrufe des Interrupt 2Fh  muß  er ohne Änderung der Regis-
  5530.     ter an den  nächsten  Prozess in  der Kette  für  den Interrupt 2Fh
  5531.     weiterleiten!
  5532.  
  5533.     Der  Treiber darf Register, die  nicht zur Rückgabe von Ergebnissen
  5534.     benötigt werden, in keinem Fall verändern!
  5535.  
  5536.     Für alle Funktionen, außer der Funktion 0, des Treibers gilt:
  5537.  
  5538.     Im Fehlerfall  muß der  Treiber  mit  gesetzten Carry-Flag  und dem
  5539.     Fehlercode im Register AX enden.
  5540.  
  5541.     Bekannte Fehlercodes sind im Moment:
  5542.  
  5543.          0FFFFh - Unerlaubter Aufruf einer Funktion
  5544.  
  5545.     MDEBUG wertet im Moment Fehler  des Treibers nur teilweise aus.
  5546.     (siehe Beschreibungen der einzelnen Funktionen)
  5547.  
  5548.     War der Treiber erfolgreich,  muß er das Carry-Flag löschen und das
  5549.     Register AX mit 0 belegen. Enthält das  Register AX bei  gelöschtem
  5550.     Carry-Flag  einen Wert  ungleich 0,  so wird  dies als  Warnung des
  5551.     Treibers interpretiert.
  5552.     Diese Möglichkeit ist  im Moment  allerdings noch  reserviert, d.h.
  5553.     MDEBUG  ignoriert  den  Inhalt  des  Registers  AX  bei  gelöschtem
  5554.     Carry-Flag.
  5555.  
  5556.     Alle  Funktionen  müssen entweder reentrant  geschrieben  sein oder
  5557.     den  Fehler-Code 0FFFFh  bei Mehrfachaufrufen zurückgeben.
  5558.     MDEBUG  geht  davon  aus,  daß  immer  nur  ein   Bildschirmtreiber
  5559.     geladen ist.
  5560.  
  5561.  
  5562.     Funktionen der Bildschirmtreiber
  5563.     ────────────────────────────────
  5564.  
  5565.  
  5566.     MDEBUG  erwartet,  daß  ein  Bildschirmtreiber  folgende Funktionen
  5567.     unterstützt (siehe auch Quelltexte zu den Treibern):
  5568.  
  5569.  
  5570.  
  5571.  
  5572.  
  5573.  
  5574.  
  5575.  
  5576.  
  5577.  
  5578.  
  5579.     ────────────────────────────────────────────────────────────────────────────────
  5580.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   87
  5581.  
  5582.  
  5583.  
  5584.     Funktion 0  - Get Driver Status
  5585.     ───────────────────────────────────────────────────────────────────
  5586.  
  5587.       Funktion: Ermitteln des Treiber-Status
  5588.  
  5589.       Eingabe:  AH = 0
  5590.  
  5591.       Ausgabe:  CF = 0
  5592.                 AL = 0FFh
  5593.                 AH = Treiber-Semaphor
  5594.                 AH =  0 ->> Treiber ist nicht aktiv
  5595.                 AH <> 0 ->> Treiber ist gerade aktiv oder wurde bei
  5596.                             einer Bearbeitung abgebrochen
  5597.                 BX = Segment des Treibers
  5598.                 CX = Version von MDEBUG für die der Treiber
  5599.                      geschrieben wurde.
  5600.                      (CH = Hauptversion, CL = Unterversion)
  5601.  
  5602.                 DL = Puffer-Semaphor
  5603.                      DL <> 0 ->> Puffer ist belegt, d.h. Funktion 2
  5604.                                  wurde aufgerufen aber Funktion 3 noch
  5605.                                  nicht
  5606.                      DL  = 0 ->> Puffer ist nicht belegt
  5607.  
  5608.                 DH = Show-Semaphor
  5609.                      DH <> 0 ->> Funktion 4 wurde aufgerufen aber
  5610.                                  Funktion 5 noch nicht
  5611.                      DH  = 0 ->> Aufrufe der Funktion 4 und 5 waren okay
  5612.  
  5613.  
  5614.       Besonderheiten: 
  5615.  
  5616.       Diese  Funktion  MUSS reentrant geschrieben sein, d.h. wiederein-
  5617.       trittsfähig!
  5618.  
  5619.       Wird eine ältere Versionsnummer als 1.60 zurückgegeben, so unter-
  5620.       drückt MDEBUG alle Aufrufe  des  Bildschirmtreibers und gibt beim
  5621.       nächsten Aufruf des Interpreters eine  Fehlermeldung aus.
  5622.  
  5623.       Diese  Funktion wird  bei jedem  Neuaufruf von MDEBUG aufgerufen.
  5624.       Der  Puffer-Semaphor und der  Show-Semaphor  sind  nur bei  nicht
  5625.       wiedereintrittsfähigen  Treibern  von Bedeutung.  Falls die Funk-
  5626.       tionen des  Treibers  reentrant  sind, sollte  hierfür immer Null
  5627.       zurückgegeben werden.
  5628.  
  5629.  
  5630.  
  5631.  
  5632.  
  5633.  
  5634.  
  5635.  
  5636.  
  5637.  
  5638.  
  5639.     ────────────────────────────────────────────────────────────────────────────────
  5640.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   88
  5641.  
  5642.  
  5643.  
  5644.     Funktion 1  - Init Driver
  5645.     ───────────────────────────────────────────────────────────────────
  5646.  
  5647.       Funktion: Treiber-Reset
  5648.  
  5649.       Eingabe:  AH = 1
  5650.  
  5651.       Ausgabe:  CF = 0 ->> Treiber wurde initialisiert
  5652.                            AL = Treiber-Semaphor
  5653.                            AH = Puffer-Semaphor
  5654.                 CF = 1 ->> Treiber konnte nicht initialisiert werden
  5655.  
  5656.       Besonderheiten: 
  5657.  
  5658.       Die Funktion 1 wird von MDEBUG  direkt nach der Funktion 0 aufge-
  5659.       rufen.  Da  es auch  vorkommen  kann,  daß  ein Aufruf von MDEBUG
  5660.       zwischen einem  Aufruf der  Funktionen  2 und 3 bzw. 4 und 5  des
  5661.       Treibers beendet wird, sollte  diese Funktion  alle Treiber-Daten
  5662.       für ungültig erklären und alle Semaphore zurücksetzen.
  5663.       Falls  die Funktion 1 einen Fehler meldet, unterdrückt MDEBUG bis
  5664.       zum Beenden des Aufrufes von  MDEBUG alle Aufrufe des Bildschirm-
  5665.       treibers.
  5666.  
  5667.  
  5668.     Funktion 2  - Save Graphik data
  5669.     ───────────────────────────────────────────────────────────────────
  5670.  
  5671.       Funktion: Sichern der Bildschirmdaten
  5672.  
  5673.       Eingabe:  AH = 2
  5674.  
  5675.       Ausgabe:  CF = 0 ->> Daten konnten gesichert werden oder Treiber
  5676.                            ist für den aktuellen Modus nicht zuständig.
  5677.                 CF = 1 ->> Daten konnten nicht gesichert werden
  5678.  
  5679.       Besonderheiten: 
  5680.  
  5681.       Diese Funktion wird von MDEBUG  vor der Passwort-Eingabe bzw. vor
  5682.       der  Anzeige der Fenster  von MDEBUG  aufrufen. Sie sollte, falls
  5683.       sie  für den aktuellen Modus zuständig ist,  die Daten  des  akt-
  5684.       uellen Bildschirm-Modus und den Bildschirminhalt sichern  und den
  5685.       Bildschirm in einen durch MDEBUG benutzbaren Text-Modus bringen.
  5686.       Ein Fehler wird von MDEBUG noch nicht ausgewertet.
  5687.  
  5688.  
  5689.  
  5690.  
  5691.  
  5692.  
  5693.  
  5694.  
  5695.  
  5696.  
  5697.  
  5698.  
  5699.     ────────────────────────────────────────────────────────────────────────────────
  5700.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   89
  5701.  
  5702.  
  5703.  
  5704.     Funktion 3  - Restore Graphik data
  5705.     ───────────────────────────────────────────────────────────────────
  5706.  
  5707.       Funktion: Restaurieren der Bildschirmdaten
  5708.  
  5709.       Eingabe:  AH = 3
  5710.  
  5711.       Ausgabe:  CF = 0 ->> Daten konnten restauriert werden oder Treiber
  5712.                            ist für den akt. Modus nicht zuständig.
  5713.  
  5714.                 CF = 1 ->> Daten konnten nicht restauriert werden
  5715.  
  5716.       Besonderheiten: 
  5717.  
  5718.       Diese  Funktion wird  von MDEBUG vor dem  endgültigen Beenden des
  5719.       Aufrufes aufgerufen.  Sie sollte, falls  die Funktion 2 den Bild-
  5720.       schirmstatus gesichert hat, diesen wiederherstellen. Die Funktion
  5721.       3 ist also das Gegenstück zur Funktion 2.
  5722.       Ein Fehler wird von MDEBUG noch nicht ausgewertet.
  5723.  
  5724.  
  5725.     Funktion 4  - Show saved data
  5726.     ───────────────────────────────────────────────────────────────────
  5727.  
  5728.       Funktion: Anzeige des gesicherten Bildschirms
  5729.  
  5730.       Eingabe:  AH = 4
  5731.  
  5732.       Ausgabe:  CF = 0 ->> Daten konnten angezeigt werden oder Treiber
  5733.                            ist für den akt. Modus nicht zuständig.
  5734.  
  5735.                 CF = 1 ->> Daten konnten nicht angezeigt werden
  5736.  
  5737.       Besonderheiten: 
  5738.  
  5739.       Diese Funktion wird von MDEBUG vor  der Anzeige  des Orignalbild-
  5740.       schirms nach  Eingabe der Taste <CTRL-F1> aufgerufen. Sie sollte,
  5741.       falls ein durch die Funktion 2 gesicherter Bildschirm-Status vor-
  5742.       liegt, diesen anzeigen.
  5743.       Die Funktion  muß  den  aktuellen  Bildschirm-Inhalt  vor der An-
  5744.       zeige nicht sichern.
  5745.       Ein Fehler wird von MDEBUG noch nicht ausgewertet.
  5746.  
  5747.  
  5748.  
  5749.  
  5750.  
  5751.  
  5752.  
  5753.  
  5754.  
  5755.  
  5756.  
  5757.  
  5758.  
  5759.     ────────────────────────────────────────────────────────────────────────────────
  5760.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   90
  5761.  
  5762.  
  5763.  
  5764.     Funktion 5  - Switch back to text screen
  5765.     ───────────────────────────────────────────────────────────────────
  5766.  
  5767.       Funktion: Umschalten des Bildschirmmodus in den durch die
  5768.                 Funktion 2 eingestellten Text-Modus
  5769.  
  5770.       Eingabe:  AH = 5
  5771.  
  5772.       Ausgabe:  CF = 0 ->> Bildschirmmodus wurde geändert oder Treiber
  5773.                            ist für den akt. Modus nicht zuständig.
  5774.  
  5775.                 CF = 1 ->> Bildschirmmodus konnte nicht geändert werden
  5776.  
  5777.       Besonderheiten: 
  5778.  
  5779.       Diese  Funktion  wird von  MDEBUG direkt  nach der Eingabe  einer
  5780.       Taste  bei der  Anzeige des  DOS-Screens über die Taste <CTRL-F1>
  5781.       aufgerufen.  Sie muß,  falls  die  Funktion 4  ausgeführt  werden
  5782.       konnte, den Bildschirm  wieder  in den Modus, der durch die Funk-
  5783.       tion 3 eingestellt wurde,  bringen.  Die  Funktion  ist  also das
  5784.       Pendant zur Funktion 4.
  5785.       Die  Funktion  muß  keinerlei  Daten  sichern und den Bildschirm-
  5786.       Inhalt auch nicht restaurieren.
  5787.       Ein Fehler wird von MDEBUG noch nicht ausgewertet.
  5788.       Zwischen den  beiden Aufrufen  der  Funktionen 4 und  5 wird  von
  5789.       MDEBUG nur  ein  Aufruf  des Interrupt 16h zum Lesen  einer Taste
  5790.       ausgeführt.
  5791.  
  5792.  
  5793.     Funktion 06 bis 7Fh - reserviert
  5794.     ───────────────────────────────────────────────────────────────────
  5795.  
  5796.        Die Funktionen  06h bis 7Fh sind  reserviert aber im Moment noch
  5797.        nicht belegt.
  5798.  
  5799.  
  5800.     Funktion 80h bis 0FFh - reserviert
  5801.     ───────────────────────────────────────────────────────────────────
  5802.  
  5803.        Die Funktionen  80h bis 0FFh sind für  weitere Treiberfunktionen
  5804.        reserviert.  Falls in eigenen Treibern  weitere Funktionen, z.B.
  5805.        zur Kommunikation zwischen dem residenten Teil und dem transien-
  5806.        ten  Teil eines  Treibers,  benötigt  werden, sollten  dafür nur
  5807.        Funktionsnummern zwischen  80h und 0FFh gewählt werden.
  5808.  
  5809.  
  5810.  
  5811.  
  5812.  
  5813.  
  5814.  
  5815.  
  5816.  
  5817.  
  5818.  
  5819.     ────────────────────────────────────────────────────────────────────────────────
  5820.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   91
  5821.  
  5822.  
  5823.  
  5824.     Erweiterungen von MDEBUG mittels Kommandotreiber
  5825.     ────────────────────────────────────────────────
  5826.  
  5827.     MDEBUG  erlaubt  es,  die  Befehle  des Interpreters  über  externe
  5828.     Treiber  (sogenannte Kommandotreiber)  zu erweitern.
  5829.     Die neuen Befehle können dann  wie  die  internen  Befehle  benutzt
  5830.     werden.  Selbstverständlich  können sie  auch  mit  Parametern oder
  5831.     Operanden  angegeben  werden.  Die Verwendung in  Befehlszeilen mit
  5832.     mehreren Befehlen ist  natürlich  auch möglich.  Die  neuen Befehle  
  5833.     unterliegen dabei allerdings  den gleichen  Beschränkungen wie  die 
  5834.     internen,  d.h. nur  das  erste und  das letzte  Zeichen dieser ist
  5835.     signifikant. (siehe auch 'Syntax der Befehle')
  5836.  
  5837.     Es können  auch mehrere  verschiedene Kommandotreiber  gleichzeitig
  5838.     geladen sein (z.B. der Treiber MDHISDRV und der Treiber MDDISDRV).
  5839.  
  5840.     MDEBUG ruft die  Kommandotreiber  vor  der  eigentlichen Auswertung
  5841.     eines  Befehls auf,  so daß   die  internen Befehle auch durch neue
  5842.     Befehle ersetzt  oder erweitert werden  können.   Es ist damit z.B.
  5843.     möglich eine erweiterte  Syntax-Prüfung einzuführen  oder bestimmte
  5844.     Befehle zu unterdrücken.
  5845.  
  5846.     Über  Kommandotreiber  können  auch  Tastenumbelegungen und Tasten-
  5847.     neubelegungen  implementiert  werden.  Auch  diese  Funktionen  der
  5848.     Treiber werden  vor der  eigentlichen  Auswertung der  Tasten  auf-
  5849.     rufen,  so  daß  auch  hier  die Tastenbelegungen von  MDEBUG über-
  5850.     schrieben werden können.
  5851.  
  5852.     Mit  den  Kommandotreibern  kommuniziert MDEBUG  ebenfalls über den
  5853.     Interrupt 2Fh.
  5854.     Die  Prozessnummer für diesen Treiber ist die auf die Prozessnummer
  5855.     für den  Bildschirmtreiber  folgende  (in  der  Voreinstellung also
  5856.     D0h + 1 = D1h). (siehe auch MDBSPDRV.ASM)
  5857.  
  5858.     Für alle Funktionen des Treibers gilt:
  5859.  
  5860.     MDEBUG ruft alle  Funktionen mit der  Prozessnummer  im Register AH
  5861.     und  der  Funktionsnummer  im  Register AL  auf. Der  Treiber  darf
  5862.     nur  aktiv werden, falls seine  Prozessnummer angegeben ist und die
  5863.     angegebene Funktionsnummer von ihm unterstützt  wird.
  5864.  
  5865.     Alle  anderen  Aufrufe  des Interrupt 2Fh MUSS er mit unveränderten
  5866.     Registerwerten weiterleiten!
  5867.     Die Funktionen  0 und 1 müssen  IMMER mit geänderten Registerwerten
  5868.     an den nächsten  Prozess in der Kette für den Interrupt 2Fh weiter-
  5869.     gegeben werden.
  5870.  
  5871.  
  5872.  
  5873.  
  5874.  
  5875.  
  5876.  
  5877.  
  5878.  
  5879.     ────────────────────────────────────────────────────────────────────────────────
  5880.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   92
  5881.  
  5882.  
  5883.  
  5884.     Falls eine der Funktionen 2, 3 oder 4 nicht ausgeführt werden kann,
  5885.     muß  der Treiber diesen Aufruf ebenfalls ohne Änderung der Register
  5886.     weiterleiten.
  5887.     Die Funktionen 10h, 11h und 12h DÜRFEN nie weitergegeben werden.
  5888.     Der Treiber darf Register, die nicht zur  Rückgabe von  Ergebnissen
  5889.     benötigt werden, in KEINEM Fall verändern!
  5890.     Die Funktionen 0, 1 und 10h des Treibers  müssen reentrant sein.
  5891.  
  5892.  
  5893.  
  5894.     Funktionen der Kommandotreiber
  5895.     ──────────────────────────────
  5896.  
  5897.  
  5898.     Jeder  Kommandotreiber muß  die folgenden Funktionen  zur Verfügung
  5899.     stellen:
  5900.  
  5901.  
  5902.  
  5903.  
  5904.  
  5905.  
  5906.  
  5907.  
  5908.  
  5909.  
  5910.  
  5911.  
  5912.  
  5913.  
  5914.  
  5915.  
  5916.  
  5917.  
  5918.  
  5919.  
  5920.  
  5921.  
  5922.  
  5923.  
  5924.  
  5925.  
  5926.  
  5927.  
  5928.  
  5929.  
  5930.  
  5931.  
  5932.  
  5933.  
  5934.  
  5935.  
  5936.  
  5937.  
  5938.  
  5939.     ────────────────────────────────────────────────────────────────────────────────
  5940.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   93
  5941.  
  5942.  
  5943.  
  5944.     Funktion 0  - Get Status
  5945.     ───────────────────────────────────────────────────────────────────
  5946.  
  5947.       Funktion: Ermitteln des Status des Treibers
  5948.  
  5949.       Eingabe:  AH = 0
  5950.                 BX = Version von MDEBUG
  5951.                      (BH = Hauptversion, BL = Unterversion)
  5952.                 CX = Zähler
  5953.          (*)    DS:SI = Zeiger auf die Identifikations-Tabelle von MDEBUG
  5954.                      (Aufbau siehe User-Int)
  5955.          (*)    ES = Segment der von MDEBUG benutzten Bildschirmseite
  5956.                      (Offset = 0)
  5957.          (*)    DI = Daten der von MDEBUG benutzen Bildschirmseite:
  5958.                      High-Byte: max. Anzahl Zeilen/Bildschirmseite
  5959.                      Low-Byte:  max. Anzahl Spalten/Bildschirmzeile
  5960.  
  5961.       Ausgabe:  DL = 0FFh
  5962.                 BX = Falls die Versionsnummer von MDEBUG für die
  5963.                      der Treiber geschrieben wurde KLEINER als die in
  5964.                      BX übergebene Versionsnummer ist, muß der Treiber
  5965.                      diese in BX zurückgeben. Ansonsten darf BX nicht
  5966.                      verändert werden.
  5967.                      (BH = Hauptversion, BL = Unterversion)
  5968.                 CX = CX muß um eins erhöht werden.
  5969.  
  5970.       Besonderheiten: 
  5971.  
  5972.       Der  Aufruf der  Funktion 0  muß  an den  nächsten Prozess in der
  5973.       Kette für den Interrupt 2Fh weitergeleitet werden (nach der Ände-
  5974.       rung der Registerwerte)!
  5975.  
  5976.       Falls  mindestens einer der geladenen Treiber veraltet ist unter-
  5977.       drückt MDEBUG  ALLE  Aufrufe der  Kommandotreiber  und  gibt beim
  5978.       nächsten Aufruf des Interpreters eine Fehlermeldung aus.
  5979.       Ein  veralteter  Kommandotreiber  verursacht also die Ignorierung
  5980.       aller geladenen Kommandotreiber durch MDEBUG.
  5981.       MDEBUG arbeitet in  dieser  Version mit  allen Treibern,  die für
  5982.       MDEBUG ab  Version 1.52 geschrieben wurden zusammen.
  5983.       Diese Funktion wird von MDEBUG bei jedem Aufruf aufgerufen.
  5984.       Sie muß reentrant, d.h. immer möglich sein.
  5985.  
  5986.  
  5987.  
  5988.  
  5989.  
  5990.  
  5991.  
  5992.  
  5993.  
  5994.  
  5995.  
  5996.  
  5997.  
  5998.  
  5999.     ────────────────────────────────────────────────────────────────────────────────
  6000.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   94
  6001.  
  6002.  
  6003.  
  6004.       Für die mit (*) gekennzeichneten Daten gilt:
  6005.  
  6006.       Diese  Daten  werden von MDEBUG vor  jedem Aufruf neu  ermittelt.
  6007.       Treiber, die diese  Daten nutzen  wollen,  müssen diese daher bei
  6008.       JEDEM Aufruf  der  Funktion 0  neu übernehmen.  Außerdem  MUSS in
  6009.       diesem Fall der Treiber die Versionsnummer von MDEBUG im Register
  6010.       BX oder in der Identifikations-Tabelle überprüfen, da diese Daten
  6011.       erst ab der Version 1.60 von MDEBUG vorhanden sind!
  6012.  
  6013.       Die Funktion wird ab der  Version 1.70 von MDEBUG auch nach jeder
  6014.       Neuermittlung  der  Daten  des aktuellen  Bildschirmmodus  (Taste
  6015.       <ALT-F9>) aufgerufen.  Bei  diesem Aufruf  werden die zurückgege-
  6016.       benen Daten von MDEBUG aber nicht weiter berücksichtigt!
  6017.  
  6018.  
  6019.  
  6020.     Funktion 1  - Init Driver
  6021.     ───────────────────────────────────────────────────────────────────
  6022.  
  6023.       Funktion: Initialisieren des Treibers
  6024.  
  6025.       Eingabe:  AH = 1
  6026.                 CX = Zähler
  6027.  
  6028.       Ausgabe:  DL = DL muß auf 0FFh gesetzt werden, falls der Treiber
  6029.                      initialisiert werden konnte
  6030.                      (Andernfalls darf DL nicht verändert werden!)
  6031.                 CX = CX muß um eins erhöht werden, falls der Treiber
  6032.                      initialisiert werden konnte.
  6033.  
  6034.       Besonderheiten: 
  6035.  
  6036.       Der Aufruf der Funktion 1 muß  nach der Veränderung der Register-
  6037.       werte an den nächsten Prozess in der Kette für den  Interrupt 2Fh
  6038.       weitergeleitet werden.
  6039.  
  6040.       Diese Funktion wird von MDEBUG bei jedem Aufruf aufgerufen.
  6041.  
  6042.       Falls kein Treiber initialisiert  werden kann, unterdrückt MDEBUG
  6043.       alle Aufrufe der Kommandotreiber bei diesem Aufruf.
  6044.  
  6045.       Die Funktion muß immer möglich sein.
  6046.  
  6047.  
  6048.  
  6049.  
  6050.  
  6051.  
  6052.  
  6053.  
  6054.  
  6055.  
  6056.  
  6057.  
  6058.  
  6059.     ────────────────────────────────────────────────────────────────────────────────
  6060.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   95
  6061.  
  6062.  
  6063.  
  6064.     Funktion 2  - Execute interpreter command
  6065.    ───────────────────────────────────────────────────────────────────
  6066.  
  6067.       Funktion: Ausführen eines Befehls im Interpreter
  6068.  
  6069.       Eingabe:  AH = 2
  6070.                 BL = erstes Zeichen des Befehls
  6071.                 BH = letztes Zeichen des Befehls
  6072.                      (Leerzeichen, falls der Befehl nur ein Zeichen
  6073.                       lang ist)
  6074.                 DS:SI zeigt auf die Parameter für den Befehl als ASCII-
  6075.                       String abgeschl. mit einem Null-Byte. Führende
  6076.                       Leerzeichen sind schon entfernt.
  6077.                       Falls keine Parameter angegeben wurden zeigt
  6078.                       DS:SI auf ein Null-Byte.
  6079.  
  6080.                 DS:DI zeigt auf folgende Datenstruktur:
  6081.  
  6082.                 (Hinweis:
  6083.                  Dies ist die ORIGINAL-Struktur von MDEBUG! Änderungen
  6084.                  für  die Register  von MDEBUG müssen direkt hier ein-
  6085.                  getragen werden)
  6086.  
  6087.          ┌─────────────────┬───────┬─────────────────────────────────┐
  6088.          │ Offset          │       │ Funktion der Speicherstelle     │
  6089.          │ (relativ zu DI) │ Länge │                                 │
  6090.          ╞═════════════════╪═══════╪═════════════════════════════════╡
  6091.          │    00h          │  Word │ Register SE                     │
  6092.          │    02h          │  Word │ Register OF                     │
  6093.          │    04h          │  Word │ Register FS                     │
  6094.          │    06h          │  Word │ Register FO                     │
  6095.          │    08h          │  Word │ Register AX                     │
  6096.          │    0Ah          │  Word │ Register BX                     │
  6097.          │    0Ch          │  Word │ Register CX                     │
  6098.          │    0Eh          │  Word │ Register DX                     │
  6099.          │    10h          │  Word │ Register SI                     │
  6100.          │    12h          │  Word │ Register DI                     │
  6101.          │    14h          │  Word │ Register DS                     │
  6102.          └─────────────────┴───────┴─────────────────────────────────┘
  6103.  
  6104.  
  6105.  
  6106.  
  6107.  
  6108.  
  6109.  
  6110.  
  6111.  
  6112.  
  6113.  
  6114.  
  6115.  
  6116.  
  6117.  
  6118.  
  6119.     ────────────────────────────────────────────────────────────────────────────────
  6120.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   96
  6121.  
  6122.  
  6123.  
  6124.                           - Fortsetzung -
  6125.          ┌─────────────────┬───────┬─────────────────────────────────┐
  6126.          │ Offset          │       │ Inhalt                          │
  6127.          │ (relativ zu DI) │ Länge │                                 │
  6128.          ╞═════════════════╪═══════╪═════════════════════════════════╡
  6129.          │    16h          │  Word │ Register ES                     │
  6130.          │    18h          │  Word │ Register BP                     │
  6131.          │    1Ah          │  Word │ Register SS                     │
  6132.          │    1Ch          │  Word │ Register SP                     │
  6133.          │    1Eh          │  Word │ Register FL (Flags)             │
  6134.          │    20h          │  Word │ Register R0                     │
  6135.          │    22h          │  Word │ Register R1                     │
  6136.          │    24h          │  Word │ Register R2                     │
  6137.          │    26h          │  Word │ Register R3                     │
  6138.          │    28h          │  Word │ Register R4                     │
  6139.          │    2Ah          │  Word │ Register R5                     │
  6140.          │    2Ch          │  Word │ Register R6                     │
  6141.          │    2Eh          │  Word │ Register R7                     │
  6142.          │    30h          │  Word │ Register R8                     │
  6143.          │    32h          │  Word │ Konstante CS, Ret-Adresse       │
  6144.          │    34h          │  Word │ Konstante IP, Ret-Adresse       │
  6145.          │    36h          │ DWord │ gesicherte Monitor-Start-Adresse│
  6146.          │                 │       │ (Taste <F6>)                    │
  6147.          │    3Ah          │24 Byte│ gesicherte Registerwerte. Hier  │
  6148.          │                 │       │ stehen die Werte, die vor dem   │
  6149.          │                 │       │ Beenden des Aufrufs von MDEBUG  │
  6150.          │                 │       │ wieder geladen werden!          │
  6151.          │                 │       │ Reihenfolge der Speicherung:    │
  6152.          │                 │       │ AX, BX, CX, DX, SI, DI, DS, ES  │
  6153.          │                 │       │ BP, SS, SP, Flags               │
  6154.          │    52h          │24 Byte│ Inhalt der Register vor dem     │
  6155.          │                 │       │ Beenden des letzten Aufrufs von │
  6156.          │                 │       │ MDEBUG                          │
  6157.          │                 │       │ Reihenfolge der Speicherung:    │
  6158.          │                 │       │ AX, BX, CX, DX, SI, DI, DS, ES  │
  6159.          │                 │       │ BP, SS, SP, Flags               │
  6160.          │    6Ah          │ DWord │ Adresse des DOS-Info-Blocks     │
  6161.          │    6Eh          │ DWord │ Adresse des DOS-Busy-Flags      │
  6162.          │    72h          │  Word │ Offset des Registers, aus dem   │
  6163.          │                 │       │ das Segment für das erste       │
  6164.          │                 │       │ Monitorwindow ermittelt wird    │
  6165.          │    74h          │  Word │ Offset des Registers, aus dem   │
  6166.          │                 │       │ der Offset für das erste        │
  6167.          │                 │       │ Monitorwindow ermittelt wird    │
  6168.          │    76h          │  Word │ Name des Registers, aus dem     │
  6169.          │                 │       │ das Segment für das erste       │
  6170.          │                 │       │ Monitorwindow ermittelt wird    │
  6171.          └─────────────────┴───────┴─────────────────────────────────┘
  6172.  
  6173.  
  6174.  
  6175.  
  6176.  
  6177.  
  6178.  
  6179.     ────────────────────────────────────────────────────────────────────────────────
  6180.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   97
  6181.  
  6182.  
  6183.  
  6184.                           - Fortsetzung -
  6185.          ┌─────────────────┬───────┬─────────────────────────────────┐
  6186.          │ Offset          │       │ Inhalt                          │
  6187.          │ (relativ zu DI) │ Länge │                                 │
  6188.          ╞═════════════════╪═══════╪═════════════════════════════════╡
  6189.          │    78h          │  Word │ Name des Registers, aus dem     │
  6190.          │                 │       │ der Offset für das erste        │
  6191.          │                 │       │ Monitorwindow ermittelt wird    │
  6192.          │    7Ah          │  Word │ Speicherstelle, die als Pseudo- │
  6193.          │                 │       │ Register für den 1. Operanden   │
  6194.          │                 │       │ gilt                            │
  6195.          │    7Ch          │  Word │ Speicherstelle, die als Pseudo- │
  6196.          │                 │       │ Register für den 2. Operanden   │
  6197.          │                 │       │ gilt                            │
  6198.          │    7Eh          │ DWord │ letzte Monitor-Start-Adresse    │
  6199.          │                 │       │ (Taste <X>)                     │
  6200.          └─────────────────┴───────┴─────────────────────────────────┘
  6201.  
  6202.  
  6203.       Ausgabe:  AL = 0FFh
  6204.                 CF = 1 ->> Fehler, AH enthält die Fehlernummer
  6205.  
  6206.                 Möglich sind folgende Werte:
  6207.  
  6208.                  1 - Syntax Fehler
  6209.                  2 - 1. Shell des COMMAND.COM ist aktiv
  6210.                  3 - ESC gedrückt
  6211.                  4 - BREAK gedrückt
  6212.                  5 - DOS ist aktiv
  6213.                  6 - ¿-Befehl endete
  6214.                  7 - Division durch Null
  6215.                  8 - Fehlerhafter Bildschirmtreiber
  6216.                  9 - Fehlerhafter Kommandotreiber
  6217.                 10 - Fehler 8 und 9
  6218.                 11 - unbekannter Fehler
  6219.                 12 - Neuer Fehler, in diesem Fall muß DS:SI auf eine
  6220.                      Fehlermeldung mit max. 30 Zeichen zeigen. Die
  6221.                      Meldung muß mit einem Null-Byte abgeschlossen 
  6222.                      sein. Sie gilt nur für diesen Fehler.
  6223.                      Falls sie kürzer als 30 Zeichen ist, wird sie
  6224.                      mit Leerzeichen bis auf 30 Zeichen aufgefüllt.
  6225.  
  6226.                 Alle anderen Werte werden wie der  Wert 11 behandelt.
  6227.                 Ein Fehler wird von MDEBUG nur angezeigt aber nicht
  6228.                 ausgewertet. Tritt der Fehler in einer Befehlszeile auf
  6229.                 wird die Ausführung dieser abgebrochen.
  6230.  
  6231.  
  6232.  
  6233.  
  6234.  
  6235.  
  6236.  
  6237.  
  6238.  
  6239.     ────────────────────────────────────────────────────────────────────────────────
  6240.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   98
  6241.  
  6242.  
  6243.  
  6244.                 CF = 0 ->> AH enthält den Returncode
  6245.  
  6246.                 Mögliche Werte sind hier:
  6247.  
  6248.                 0 - Ausführung der Befehlszeile fortsetzen
  6249.                 1 - MDEBUG verlassen (Neustart im Interpreter)
  6250.                 2 - MDEBUG verlassen mit automatischem Neuaufruf
  6251.                     sobald DOS nicht aktiv ist (Neustart im Interpreter)
  6252.                 5 - Übernehme neue Befehlszeile in den Eingabepuffer.
  6253.                     Die Befehlszeile muß als Nullstring bei DS:SI
  6254.                     stehen. Sie kann max. 66 Zeichen lang sein.
  6255.                 6 - wie 5, die Befehlszeile wird allerdings sofort
  6256.                     ausgeführt. Die neue Befehlszeile wird intern nicht
  6257.                     gespeichert. (d.h. sie gilt nicht für <CTRL-RETURN>
  6258.                     oder <SHIFT-RETURN>)
  6259.  
  6260.                 Alle anderen Werte werden wie der Wert 0 behandelt.
  6261.  
  6262.       Besonderheiten: 
  6263.  
  6264.       Der Aufruf der Funktion 2  muß,  ohne  Änderung der  Register, an
  6265.       den nächsten Prozess in der Kette  für den  Interrupt 2Fh weiter-
  6266.       geleitet werden falls der Befehl für diesen Treiber nicht bekannt
  6267.       ist. Diese Funktion wird von MDEBUG für jeden Befehl vor der Aus-
  6268.       wertung dieses aufgerufen.
  6269.       Vor dem Aufruf dieser Funktion schaltet MDEBUG den Cursor aus.
  6270.  
  6271.  
  6272.  
  6273.  
  6274.  
  6275.  
  6276.  
  6277.  
  6278.  
  6279.  
  6280.  
  6281.  
  6282.  
  6283.  
  6284.  
  6285.  
  6286.  
  6287.  
  6288.  
  6289.  
  6290.  
  6291.  
  6292.  
  6293.  
  6294.  
  6295.  
  6296.  
  6297.  
  6298.  
  6299.     ────────────────────────────────────────────────────────────────────────────────
  6300.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite   99
  6301.  
  6302.  
  6303.  
  6304.     Funktion 3  - Execute key in the monitor
  6305.     ───────────────────────────────────────────────────────────────────
  6306.  
  6307.       Funktion: Bearbeiten einer Taste im Monitor
  6308.  
  6309.       Eingabe:  AH = 3
  6310.                 BX = Code der eingegebenen Taste wie er vom Interrupt
  6311.                      16h zurückgegeben wird.
  6312.  
  6313.                 CX = 0 ->> Der Cursor befindet sich in der 3. Spalte
  6314.                      1 ->> Der Cursor befindet sich in der 2. Spalte
  6315.                      2 ->> Der Cursor befindet sich im Offset-Feld
  6316.                      3 ->> Der Cursor befindet sich im Segment-Feld
  6317.  
  6318.                 DS:SI zeigt auf die gleiche Datenstruktur wie DS:DI bei
  6319.                       der Funktion 2.
  6320.  
  6321.                 ES:DI enthält  die Adresse des Bytes, auf das der
  6322.                       Cursor im Moment steht
  6323.  
  6324.       Ausgabe:  AL = 0FFh ->> Taste erkannt, AH enthält den Returncode.
  6325.  
  6326.                 Mögliche Werte sind hier:
  6327.  
  6328.                 0 - Taste bearbeitet, keine weiteren Aktionen nötig
  6329.                 1 - MDEBUG verlassen (Neustart  im Monitor)
  6330.                 2 - MDEBUG verlassen mit automatischem Neuaufruf
  6331.                     sobald DOS nicht aktiv ist (Neustart im Interpreter)
  6332.                 3 - Funktion konnte nicht ausgeführt werden, Fehlerton
  6333.                     ausgeben
  6334.                 4 - Taste wurde umdefiniert und muß weiter bearbeitet
  6335.                     werden. In diesem Fall muß BX den neuen Tastencode
  6336.                     beinhalten.
  6337.  
  6338.                 Alle anderen Werte  werden wie der Wert 0 behandelt.
  6339.  
  6340.  
  6341.       Besonderheiten: 
  6342.  
  6343.       Der Aufruf der Funktion 3  muß,  ohne  Änderung der  Register, an
  6344.       den nächsten Prozess in der Kette  für den  Interrupt 2Fh weiter-
  6345.       geleitet werden falls der Befehl für diesen Treiber nicht bekannt
  6346.       ist.
  6347.  
  6348.       Vor dem Aufruf dieser Funktion schaltet MDEBUG den Cursor aus.
  6349.       Diese Funktion wird von MDEBUG nach jeder  Eingabe einer Taste im
  6350.       Offset-  oder  im Segment-Feld, in der mittleren und in der rech-
  6351.       ten  Spalte des Monitors (ausgenommen <CTRL-P>) aufgerufen.
  6352.  
  6353.  
  6354.  
  6355.  
  6356.  
  6357.  
  6358.  
  6359.     ────────────────────────────────────────────────────────────────────────────────
  6360.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  100
  6361.  
  6362.  
  6363.  
  6364.     Funktion 4  - Execute key in the interpreter
  6365.     ───────────────────────────────────────────────────────────────────
  6366.  
  6367.       Funktion: Bearbeiten einer Taste im Interpreter
  6368.  
  6369.       Eingabe:  AH = 4
  6370.                 BX = Code der eingegebenen Taste wie er vom Interrupt
  6371.                      16h zurückgegeben wird.
  6372.                 DS:SI zeigt auf die gleiche Datenstruktur wie DS:DI bei
  6373.                       der Funktion 2
  6374.  
  6375.       Ausgabe:  AL = 0FFh ->> Taste erkannt, AH enthält den Returncode
  6376.  
  6377.                 Mögliche Werte sind hier:
  6378.  
  6379.                 0 - Taste bearbeitet, keine weiteren Aktionen nötig
  6380.                 1 - MDEBUG verlassen, (Neustart im Interpreter)
  6381.                 2 - MDEBUG verlassen mit automatischen Neuaufruf
  6382.                     sobald DOS nicht aktiv ist (Neustart im Interpreter)
  6383.                 3 - Funktion konnte nicht ausgeführt werden, Fehlerton
  6384.                     ausgeben
  6385.                 4 - Taste wurde umdefiniert und muß weiter bearbeitet
  6386.                     werden. In diesem Fall muß BX den neuen Tastencode
  6387.                     beinhalten.
  6388.                 5 - Übernehme neue Befehlszeile in den Eingabepuffer.
  6389.                     Die Befehlszeile muß als Nullstring bei DS:SI
  6390.                     stehen. Sie kann max. 66 Zeichen lang sein.
  6391.                 6 - wie 5, die Befehlszeile wird allerdings sofort aus-
  6392.                     geführt. Die neue  Befehlszeile wird intern nicht
  6393.                     gespeichert. (d.h. sie gilt nicht für <CTRL-RETURN>
  6394.                     oder <SHIFT-RETURN> )
  6395.  
  6396.                 Alle anderen Werte  werden wie der Wert 0 behandelt.
  6397.  
  6398.  
  6399.       Besonderheiten:
  6400.  
  6401.       Der  Aufruf der  Funktion 4  muß  an den  nächsten Prozess in der
  6402.       Kette für den Interrupt 2Fh weitergeleitet werden falls die Taste
  6403.       für diesen Treiber nicht bekannt  ist.  (ohne Änderung der Regis-
  6404.       terwerte)
  6405.       Vor dem Aufruf dieser Funktion schaltet MDEBUG den Cursor aus.
  6406.       Die Funktion wird von  MDEBUG nach  jeder  Eingabe einer Taste im
  6407.       Interpreter (ausgenommen <CTRL-P>) aufgerufen.
  6408.  
  6409.  
  6410.  
  6411.  
  6412.  
  6413.  
  6414.  
  6415.  
  6416.  
  6417.  
  6418.  
  6419.     ────────────────────────────────────────────────────────────────────────────────
  6420.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  101
  6421.  
  6422.  
  6423.  
  6424.     Funktion 05h bis 0Ah - reserviert
  6425.     ───────────────────────────────────────────────────────────────────
  6426.  
  6427.       Die Funktionen 05h  bis  0Ah  sind reserviert aber im Moment noch
  6428.       nicht belegt.
  6429.  
  6430.  
  6431.     Funktion 10h - Get adress of the old interrupt 2Fh
  6432.     ───────────────────────────────────────────────────────────────────
  6433.  
  6434.       Funktion: Ermitteln des nächsten Prozesses in der Kette für den
  6435.                 Interrupt 2Fh und des Segments des Treibers
  6436.  
  6437.       Eingabe:  AH = 10h
  6438.  
  6439.       Ausgabe:  DL = 0FFh
  6440.                 ES:BX = Adresse des nächsten Prozesses in der Kette für
  6441.                         den Interrupt 2Fh
  6442.                 CX    = Segment des Treibers
  6443.                 ES:DI = Adresse der Identifikationstabelle des Treibers
  6444.  
  6445.                 Aufbau der Identifikationstabelle eines Treibers:
  6446.  
  6447.                 ┌──────────────┬───────┬──────────────────────────────┐
  6448.                 │   Offset in  │ Länge │  Inhalt                      │
  6449.                 │  der Tabelle │       │                              │
  6450.                 ╞══════════════╪═══════╪══════════════════════════════╡
  6451.                 │     00h      │  1Ah  │  'Kommandotreiber für MDEBUG'│
  6452.                 │     1Ah      │  0Ch  │  Name des Treibers als String│
  6453.                 │              │       │  (ohne Längenbyte und Ende-  │
  6454.                 │              │       │   Kennzeichen)               │
  6455.                 │              │       │  Dieser String muß für jeden │
  6456.                 │              │       │  Treiber verschieden sein!   │
  6457.                 └──────────────┴───────┴──────────────────────────────┘
  6458.  
  6459.       Besonderheiten: 
  6460.  
  6461.       Die Funktion  wird  nur vom Treiber  selbst im Initialisierrungs-
  6462.       teil zum Durchlaufen der Kette für den Interrupt 2Fh benutzt. Sie
  6463.       muß  auch  implementiert  sein,  falls dieser  Treiber sie  nicht
  6464.       benutzt!
  6465.  
  6466.       Die  Funktion  muß  reentrant sein und  darf nicht weitergeleitet
  6467.       werden!
  6468.  
  6469.       Hinweis: Bei Treibern,  die für  MDEBUG Version  1.52 oder  älter
  6470.                geschrieben wurden, beginnt  die  Identifikationstabelle
  6471.                immer am Offset 104h im Code/Datensegment.
  6472.  
  6473.  
  6474.  
  6475.  
  6476.  
  6477.  
  6478.  
  6479.     ────────────────────────────────────────────────────────────────────────────────
  6480.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  102
  6481.  
  6482.  
  6483.  
  6484.     Funktion 11h - Start Driver
  6485.     ───────────────────────────────────────────────────────────────────
  6486.  
  6487.       Funktion: Diese Funktion wird vom Initialsierungsteil aufgerufen
  6488.                 um dem Treiber  mitzuteilen, daß er installiert ist.
  6489.  
  6490.       Eingabe:  AH = 11h
  6491.  
  6492.       Ausgabe:  DL = 0FFh
  6493.  
  6494.       Besonderheiten: 
  6495.  
  6496.       Die Funktion wird nur vom Treiber  selbst im Initialisierungsteil
  6497.       benutzt. Sie darf den Aufruf nicht weiterleiten. Ein Fehler  wird
  6498.       je nach Implementierung berücksichtigt.
  6499.  
  6500.       Die Funktion darf sonst nicht aufgerufen werden!
  6501.  
  6502.  
  6503.     Funktion 12h - End Driver
  6504.     ───────────────────────────────────────────────────────────────────
  6505.  
  6506.       Funktion: Diese Funktion wird vom DeInitialsierungsteil kurz vor
  6507.                 der  DeInstallierung  des Treibers  aufgerufen  um ihm
  6508.                 Gelegenheit zum 'Aufräumen' zu geben.
  6509.  
  6510.       Eingabe:  AH = 12h
  6511.  
  6512.       Ausgabe:  DL = 0FFh
  6513.  
  6514.       Besonderheiten: 
  6515.  
  6516.       Die Funktion  wird nur vom Treiber  selbst im DeInitialisierungs-
  6517.       teil benutzt. Sie darf den Aufruf nicht weiterleiten.  Ein Fehler
  6518.       wird je nach Implementierung berücksichtigt.
  6519.  
  6520.       Die Funktion darf sonst nicht aufgerufen werden!
  6521.  
  6522.  
  6523.  
  6524.  
  6525.  
  6526.  
  6527.  
  6528.  
  6529.  
  6530.  
  6531.  
  6532.  
  6533.  
  6534.  
  6535.  
  6536.  
  6537.  
  6538.  
  6539.     ────────────────────────────────────────────────────────────────────────────────
  6540.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  103
  6541.  
  6542.  
  6543.  
  6544.     Funktion 13h bis 7Fh - reserviert
  6545.     ───────────────────────────────────────────────────────────────────
  6546.  
  6547.       Die Funktionen 13h  bis  7Fh  sind reserviert aber im Moment noch
  6548.       nicht belegt.
  6549.  
  6550.  
  6551.     Funktion 80h bis 0FFh - reserviert
  6552.     ───────────────────────────────────────────────────────────────────
  6553.  
  6554.       Die Funktionen  80h bis 0FFh sind für  weitere  Treiberfunktionen
  6555.       reserviert.  Falls  in eigenen Treibern weitere  Funktionen, z.B.
  6556.       zur Kommunikation  zwischen  einem residenten Teil und dem  tran-
  6557.       sienten Teil eines  Treibers, benötigt  werden, sollten dafür nur
  6558.       Funktionsnummern zwischen 80h und 0FFh gewählt werden.
  6559.  
  6560.  
  6561.  
  6562.  
  6563.  
  6564.  
  6565.  
  6566.  
  6567.  
  6568.  
  6569.  
  6570.  
  6571.  
  6572.  
  6573.  
  6574.  
  6575.  
  6576.  
  6577.  
  6578.  
  6579.  
  6580.  
  6581.  
  6582.  
  6583.  
  6584.  
  6585.  
  6586.  
  6587.  
  6588.  
  6589.  
  6590.  
  6591.  
  6592.  
  6593.  
  6594.  
  6595.  
  6596.  
  6597.  
  6598.  
  6599.     ────────────────────────────────────────────────────────────────────────────────
  6600.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  104
  6601.  
  6602.  
  6603.  
  6604.     Zusätzlicher User-Interrupt
  6605.     ───────────────────────────
  6606.  
  6607.     MDEBUG  belegt  zur  Kommunikation  mit  anderen  Programmen  einen
  6608.     zusätzlichen Interrupt (= User-Int).  Dieser kann von  anderen Pro-
  6609.     grammen aufgerufen werden, um z.B. interne Variablen von  MDEBUG zu
  6610.     lesen oder zu schreiben oder auch um MDEBUG gezielt aufzurufen.
  6611.  
  6612.     Der User-Int wird von MDEBUG nicht weitergeleitet.
  6613.  
  6614.     Falls die  Passwort-Abfrage aktiv ist, muß  bei JEDEM Aufruf  einer
  6615.     Funktion  des  User-Ints  die Register-Kombination  DS:SI  auf  das
  6616.     korrekte Passwort oder auf ein Null-Byte zeigen.
  6617.     Ausnahme: Funktion 06h
  6618.  
  6619.     Steht  bei DS:SI  ein  Null-Byte, so wird das Passwort vom Benutzer
  6620.     erfragt. Vor der  Eingabe wird der Bildschirmmodus  überprüft.  Ist
  6621.     dieser inkorrekt,  wird die Eingabe des  Passwortes abgebrochen und
  6622.     im Register AX der Fehlercode  0FFFDh zurückgegeben.
  6623.  
  6624.     Bei  Aufruf  mit DS:SI  auf  einem  Null-Byte zeigend muß  das auf-
  6625.     rufende  Programm  dafür sorgen, daß  auf dem aktuellen Stack  noch
  6626.     genügend Platz für mehrere Aufrufe des Interrupt 10h ist.
  6627.  
  6628.     Zeigt  DS:SI auf ein inkorrektes Passwort oder hat der Benutzer ein
  6629.     falsches  Passwort  eingegeben,  so wird  die Funktion nicht ausge-
  6630.     führt und im Register AX   der  Fehlercode 0FFFEh  zurückgeliefert.
  6631.     Ist kein  Passwort  installiert  oder das Passwort inaktiv, so wird
  6632.     der Inhalt der Register DS und SI ignoriert.
  6633.  
  6634.  
  6635.     Folgende Funktionen sind für den User-Interrupt implementiert:
  6636.  
  6637.  
  6638.  
  6639.  
  6640.  
  6641.  
  6642.  
  6643.  
  6644.  
  6645.  
  6646.  
  6647.  
  6648.  
  6649.  
  6650.  
  6651.  
  6652.  
  6653.  
  6654.  
  6655.  
  6656.  
  6657.  
  6658.  
  6659.     ────────────────────────────────────────────────────────────────────────────────
  6660.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  105
  6661.  
  6662.  
  6663.  
  6664.     Funktion 0 - Status ermitteln
  6665.     ───────────────────────────────────────────────────────────────────
  6666.  
  6667.       Eingabe:  AH = 0
  6668.                 DS:SI zeigt auf das Passwort
  6669.  
  6670.       Ausgabe:  AX = 0FFFEh ->> Passwort inkorrekt
  6671.                 AX = 0FFFDh ->> Bildschirmmodus inkorrekt
  6672.  
  6673.                 sonst:
  6674.  
  6675.                 ES = Inhalt des Registers SE des Monitors
  6676.                 DI = Inhalt des Registers OF des Monitors
  6677.                 CH = Farb-Attribut des Monitors
  6678.                 CL = Farb-Attribut des Interpreters
  6679.                 BH = Startzeile des Monitors
  6680.                 BL = Startzeile des Interpreters
  6681.                 AH = Scancode des Hotkeys
  6682.                 AL = Hotkey (als CHAR)
  6683.                 DL = Status der Umschalt-Tasten bei Aufruf
  6684.                 DH = Basis-Prozessnummer für den Interrupt 2Fh
  6685.                        (= Parameter 'PRO')
  6686.                 DS:SI -> Zeiger auf die Identifikations-
  6687.                          Tabelle von MDEBUG (Original!)
  6688.  
  6689.       Aufbau der Identifikations-Tabelle von MDEBUG:
  6690.  
  6691.           ┌────────┬───────┬─────────────────────────────────────────┐
  6692.           │ Offset │ Länge │  Inhalt                                 │
  6693.           ╞════════╪═══════╪═════════════════════════════════════════╡
  6694.           │  -02h  │ Word  │ Einsprung-Offset (siehe ?-Befehl)       │
  6695.   DS:SI ->│   00h  │ Word  │ Segment des residenten MDEBUG           │
  6696.           │   02h  │ DWord │ Adresse der alten INT-08h-Routine       │
  6697.           │   06h  │ DWord │ Adresse der alten INT-09h-Routine       │
  6698.           │   0Ah  │ DWord │ Adresse der von MDEBUG benutzten        │
  6699.           │        │       │ Routine für den Interrupt 16h           │
  6700.           │   0Eh  │ n Byte│ Versions-Kennung als Pascal-String      │
  6701.           └────────┴───────┴─────────────────────────────────────────┘
  6702.  
  6703.  
  6704.  
  6705.  
  6706.  
  6707.  
  6708.  
  6709.  
  6710.  
  6711.  
  6712.  
  6713.  
  6714.  
  6715.  
  6716.  
  6717.  
  6718.  
  6719.     ────────────────────────────────────────────────────────────────────────────────
  6720.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  106
  6721.  
  6722.  
  6723.  
  6724.     Funktion 1 - Ermittle Adresse der Hilfsregister
  6725.     ───────────────────────────────────────────────────────────────────
  6726.  
  6727.       Eingabe:  AH = 1
  6728.                 DS:SI zeigt auf das Passwort
  6729.  
  6730.       Ausgabe:  AX = 0FFFEh ->> Passwort inkorrekt
  6731.                 AX = 0FFFDh ->> Bildschirmmodus inkorrekt
  6732.  
  6733.                 sonst:
  6734.  
  6735.                 ES:DI zeigt auf die Hilfsregister von MDEBUG
  6736.  
  6737.                 ES:DI-2 -> R0
  6738.                 ES:DI   -> R1
  6739.                 ES:DI+2 -> R2
  6740.                 ES;DI+4 -> R3
  6741.                 usw.
  6742.  
  6743.  
  6744.  
  6745.  
  6746.  
  6747.  
  6748.  
  6749.  
  6750.  
  6751.  
  6752.  
  6753.  
  6754.  
  6755.  
  6756.  
  6757.  
  6758.  
  6759.  
  6760.  
  6761.  
  6762.  
  6763.  
  6764.  
  6765.  
  6766.  
  6767.  
  6768.  
  6769.  
  6770.  
  6771.  
  6772.  
  6773.  
  6774.  
  6775.  
  6776.  
  6777.  
  6778.  
  6779.     ────────────────────────────────────────────────────────────────────────────────
  6780.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  107
  6781.  
  6782.  
  6783.  
  6784.     Funktion 2 - Status setzen
  6785.     ───────────────────────────────────────────────────────────────────
  6786.  
  6787.       Eingabe:  AH = 2
  6788.                 DS:SI zeigt auf das Passwort
  6789.  
  6790.                 ES = Neuer Wert für das Register SE des Monitors
  6791.                 DI = Neuer Wert für das Register OF des Monitors
  6792.                 CH <> 0 ->> CH = Farb-Attribut des Monitors
  6793.                 CL <> 0 ->> CL = Farb-Attribut des Interpreters
  6794.                 BH <> 0 ->> BH = Startzeile des Monitors
  6795.                 BL <> 0 ->> BL = Startzeile des Interpreters
  6796.                 AL <> 0 ->> AL = Neuer Hotkey (als ASCII-Zeichen)
  6797.                                  Intervall: 'A'..'Z' oder 'a'..'z'
  6798.                 DL <> 0 ->> DL = Status der Umschalt-Tasten
  6799.                                  (Es darf nur das untere Nibble gesetzt
  6800.                                   sein)
  6801.                 DH <> 0 ->> DH = Basis-Prozessnummer für den Interrupt 2Fh
  6802.  
  6803.       Die Überprüfung der Werte geschieht äquivalent  zu der Angabe der
  6804.       Werte über Parameter bei der Installation.
  6805.  
  6806.       Ausgabe:  AX = 0      ->> ok
  6807.                 AX = 0FFFEh ->> Passwort inkorrekt
  6808.                                 Keine Änderungen vorgenommen
  6809.                 AX = 0FFFFh ->> Aufruf nicht erlaubt
  6810.                                 Keine Änderungen vorgenommen
  6811.                 AX = 0FFFDh ->> Bildschirmmodus inkorrekt
  6812.                                 Keine Änderungen vorgenommen
  6813.                 sonst:
  6814.                 AX = Codierung eines Fehlers, und zwar:
  6815.  
  6816.                 ┌─────┬────────────────────────────────────────┐
  6817.                 │ Bit │ Bedeutung falls gesetzt                │
  6818.                 ╞═════╪════════════════════════════════════════╡
  6819.                 │  0  │ Falsche Startzeile für den Monitor     │
  6820.                 │  1  │ Falsche Startzeile für den Interpreter │
  6821.                 │  2  │ Falscher Hotkey angegeben              │
  6822.                 │  3  │ Falsche Prozessnummer angegeben        │
  6823.                 │  4  │ reserviert (= 0)                       │
  6824.                 │  5  │ reserviert (= 0)                       │
  6825.                 │  6  │ reserviert (= 0)                       │
  6826.                 │  7  │ reserviert (= 0)                       │
  6827.                 └─────┴────────────────────────────────────────┘
  6828.  
  6829.                 Im  Falle eines Fehlers werden nur die korrekten  Werte
  6830.                 übernommen, die anderen bleiben unverändert.
  6831.                 Die Werte der Register SE und OF werden immer geändert.
  6832.  
  6833.  
  6834.  
  6835.  
  6836.  
  6837.  
  6838.  
  6839.     ────────────────────────────────────────────────────────────────────────────────
  6840.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  108
  6841.  
  6842.  
  6843.  
  6844.     Funktion 3 - Aufruf von MDEBUG
  6845.     ───────────────────────────────────────────────────────────────────
  6846.  
  6847.       Eingabe:  AH = 3
  6848.                 DS:SI zeigt auf das Passwort
  6849.                 ES = Segment des anzuzeigenden Speicherbereichs
  6850.                 DI = Offset des anzuzeigenden Speicherbereichs
  6851.  
  6852.                 Die Werte werden in die Register SE und OF geladen  und
  6853.                 die Register-Kombination  SE:OF wird als Monitor-Start-
  6854.                 Adresse genommen.
  6855.  
  6856.       Ausgabe:  AX = 0FFFFh ->> Aufruf nicht erlaubt
  6857.                 AX = 0FFFEh ->> Passwort inkorrekt
  6858.                 AX = 0FFFDh ->> Aufruf nicht  erlaubt aufgrund eines
  6859.                                 inkorrekten Bildschirmmodus
  6860.  
  6861.                 Falls das  Passwort korrekt  abgefragt  werden  konnte,
  6862.                 sind die Register SE und OF geändert und werden für die
  6863.                 Monitor-Start-Adresse genommen.
  6864.  
  6865.                 Falls ok, wird kein Register von MDEBUG verändert.
  6866.                 Das Flag für den automatischen  Aufruf von MDEBUG falls
  6867.                 DOS nicht aktiv ist wird gelöscht.
  6868.  
  6869.  
  6870.     Funktion 4 - Aufruf von MDEBUG mit den akt. Werten
  6871.     ──────────────────────────────────────────────────
  6872.  
  6873.       Eingabe:  AH = 4
  6874.                 DS:SI zeigt auf das Passwort
  6875.  
  6876.       Ausgabe:  AX = 0FFFFh ->> Aufruf nicht erlaubt
  6877.                 AX = 0FFFEh ->> Passwort inkorrekt
  6878.                 AX = 0FFFDh ->> Aufruf nicht erlaubt aufgrund
  6879.                                 eines falschen Bildschirmmodus
  6880.  
  6881.                 Falls ok, wird kein Register von MDEBUG verändert.
  6882.                 Das Flag für den automatischen  Aufruf von MDEBUG falls
  6883.                 DOS nicht aktiv ist wird gelöscht.
  6884.  
  6885.  
  6886.  
  6887.  
  6888.  
  6889.  
  6890.  
  6891.  
  6892.  
  6893.  
  6894.  
  6895.  
  6896.  
  6897.  
  6898.  
  6899.     ────────────────────────────────────────────────────────────────────────────────
  6900.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  109
  6901.  
  6902.  
  6903.  
  6904.     Funktion 5 - Lösche oder Setze Flags von MDEBUG
  6905.     ───────────────────────────────────────────────────────────────────
  6906.  
  6907.       Eingabe:  AH = 5
  6908.                 DS:SI zeigt auf das Passwort
  6909.                 BL = Neuer Wert des Flags
  6910.                      BL =  0 ->> Aufruf von MDEBUG erlauben
  6911.                      BL <> 0 ->> Aufruf von MDEBUG verbieten
  6912.  
  6913.       Ausgabe:  AX = 0FFFEh ->> Passwort inkorrekt
  6914.                 AX = 0FFFDh ->> Bildschirmmodus inkorrekt
  6915.  
  6916.                 sonst:
  6917.                 BL = Alter Wert des Flags
  6918.                 BH = Alter Wert des Flags für den Aufruf von MDEBUG
  6919.                      falls DOS nicht aktiv ist
  6920.  
  6921.                 Das Flag für den automatischen  Aufruf von MDEBUG falls
  6922.                 DOS nicht aktiv ist wird gelöscht.
  6923.  
  6924.                 Diese  Funktion sollte  NIEMALS aus MDEBUG  heraus auf-
  6925.                 gerufen werden!
  6926.  
  6927.  
  6928.     Funktion 6 - Ermittle Passwort-Status
  6929.     ───────────────────────────────────────────────────────────────────
  6930.  
  6931.       Eingabe:  AH = 6
  6932.                 (Keine Abfrage des Passwortes!)
  6933.  
  6934.       Ausgabe:  AL = 0 ->> Passwort inaktiv
  6935.                 AL = 1 ->> Passwort aktiv
  6936.  
  6937.  
  6938.  
  6939.  
  6940.  
  6941.  
  6942.  
  6943.  
  6944.  
  6945.  
  6946.  
  6947.  
  6948.  
  6949.  
  6950.  
  6951.  
  6952.  
  6953.  
  6954.  
  6955.  
  6956.  
  6957.  
  6958.  
  6959.     ────────────────────────────────────────────────────────────────────────────────
  6960.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  110
  6961.  
  6962.  
  6963.  
  6964.     Funktion 7 - Ermittle aktiven Teil von MDEBUG
  6965.     ───────────────────────────────────────────────────────────────────
  6966.  
  6967.       Eingabe:  AH = 7
  6968.                 DS:SI zeigt auf das Passwort
  6969.  
  6970.       Ausgabe:  AX = 0FFFEh ->> Passwort inkorrekt
  6971.                 AX = 0FFFDh ->> Bildschirmmodus inkorrekt
  6972.  
  6973.                 sonst:
  6974.  
  6975.                 Bit 0 von AL = 1 ->> der nächste Aufruf von MDEBUG
  6976.                                      startet im Interpreter
  6977.                 Bit 0 von AL = 0 ->> der nächste Aufruf von MDEBUG
  6978.                                      startet im Monitor
  6979.                 Bit 1 von AL = 1 ->> der nächste Aufruf von MDEBUG
  6980.                                      startet in der Online-Hilfe
  6981.                 Bit 1 von AL = 0 ->> der nächste Aufruf von MDEBUG
  6982.                                      startet nicht in der Online-Hilfe
  6983.  
  6984.                 Die  zurückgegebenen  Werte  sind  nur  korrekt,  falls
  6985.                 MDEBUG im Moment nicht aktiv ist.
  6986.  
  6987.  
  6988.  
  6989.     Sonstiges zum User-Int
  6990.     ───────────────────────────────────────────────────────────────────
  6991.  
  6992.     Der Fehler 'Aufruf nicht erlaubt' tritt  auf,  falls das Aktiv-Flag
  6993.     von MDEBUG noch gesetzt ist.  Dies passiert z.B.  falls MDEBUG über
  6994.     einen  nicht zurückkehrenden  Interrupt (23h, 24h, etc.)  verlassen
  6995.     wird.
  6996.     In diesem Fall muß  das Flag durch einen Aufruf von  MDEBUG mit dem
  6997.     Parameter 'SET'  oder durch den  Aufruf der Funktion 05h des  User-
  6998.     Ints mit BL = 0 zurückgesetzt werden.
  6999.  
  7000.     Falls der User-Int mit einer unbekannten Funktionsnummer aufgerufen
  7001.     wird, gibt er den Fehlercode 0FFFCh zurück.
  7002.  
  7003.  
  7004.  
  7005.  
  7006.  
  7007.  
  7008.  
  7009.  
  7010.  
  7011.  
  7012.  
  7013.  
  7014.  
  7015.  
  7016.  
  7017.  
  7018.  
  7019.     ────────────────────────────────────────────────────────────────────────────────
  7020.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  111
  7021.  
  7022.  
  7023.  
  7024.  
  7025.  
  7026.  
  7027.  
  7028.  
  7029.  
  7030.  
  7031.  
  7032.  
  7033.  
  7034.                                    Anhang A
  7035.  
  7036.                            Fehlermeldungen von MDEBUG
  7037.                            ──────────────────────────
  7038.  
  7039.  
  7040.  
  7041.  
  7042.  
  7043.  
  7044.  
  7045.  
  7046.  
  7047.  
  7048.  
  7049.  
  7050.  
  7051.  
  7052.  
  7053.  
  7054.  
  7055.  
  7056.  
  7057.  
  7058.  
  7059.  
  7060.  
  7061.  
  7062.  
  7063.  
  7064.  
  7065.  
  7066.  
  7067.  
  7068.  
  7069.  
  7070.  
  7071.  
  7072.  
  7073.  
  7074.  
  7075.  
  7076.  
  7077.  
  7078.  
  7079.     ────────────────────────────────────────────────────────────────────────────────
  7080.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  112
  7081.  
  7082.  
  7083.  
  7084.     Fehlermeldungen beim Aufruf von MDEBUG
  7085.     ──────────────────────────────────────
  7086.  
  7087.     Nachfolgend  die Auflistung  aller  möglichen  Fehlermeldungen  von
  7088.     MDEBUG jeweils, falls nötig, inclusive einer kurzen Erläuterung der
  7089.     Fehlerursache.
  7090.  
  7091.     Fehler,  die zum Abbruch des Programms führen, geben zusätzlich die
  7092.     Meldung
  7093.  
  7094.          Programmausführung beendet.
  7095.  
  7096.     aus.
  7097.  
  7098.  
  7099.     ■ Nicht genügend freier Speicher vorhanden!
  7100.  
  7101.       Der  transiente  Teil von MDEBUG  benötigt mindestens 64 K freien
  7102.       Speicher.
  7103.  
  7104.  
  7105.     ■ MDEBUG: Falsche DOS-Version, es ist mindestens Version 3.0 erforderlich!
  7106.  
  7107.       Da in diesem Fall  das  Programm über  den Interrupt  20h beendet
  7108.       wird, kann kein Errorlevel zurückgegeben werden.
  7109.  
  7110.  
  7111.     ■ Der Parameter MAKE ist nur in der Vollversion möglich!
  7112.  
  7113.       Betr.: Parameter MAKE in der Shareware-Version.
  7114.  
  7115.       Bevor der Parameter in der Vollversion genutzt  werden kann,  muß
  7116.       die  Registrierungs-Nummer mit  dem Programm  SETREGNR.EXE in die
  7117.       Datei MDEBUG.COM eingetragen worden sein!
  7118.  
  7119.  
  7120.     ■ MDEBUG: Fehler bei der Speicher-Freigabe!
  7121.               Warnung: Die MCB-Liste kann zerstört sein!
  7122.  
  7123.       Betr.: Parameter EXIT
  7124.  
  7125.       Der Speicher  des  residenten  MDEBUG  konnte  nicht  freigegeben
  7126.       werden.  Da sehr wahrscheinlich die Speicherverwaltung von MS-DOS
  7127.       zerstört ist, sollte das System neu gebootet werden.
  7128.  
  7129.  
  7130.  
  7131.  
  7132.  
  7133.  
  7134.  
  7135.  
  7136.  
  7137.  
  7138.  
  7139.     ────────────────────────────────────────────────────────────────────────────────
  7140.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  113
  7141.  
  7142.  
  7143.  
  7144.     ■ Interrupt Nr. <nn> ist schon belegt!
  7145.  
  7146.       Betr.: Parameter INT
  7147.  
  7148.       Der  Offset- oder  Segment-Wert in  der Interrupt-Tabelle für den
  7149.       angegebenen Interrupt  bzw. der Voreinstellung ist ungleich Null,
  7150.       d.h. MDEBUG geht davon aus, daß er schon belegt ist.
  7151.  
  7152.       Bei  einem Aufruf mit dem Parameter 'SET' wird der User-Int der
  7153.       residenten Version nicht verändert.
  7154.  
  7155.       Der Fehler kann nicht auftreten falls der Parameter 'INT' mit dem
  7156.       Schalter ',N' angegeben wird.
  7157.  
  7158.  
  7159.     ■ MDEBUG: MDEBUG ist nicht letztes Programm in der Interrupt-Kette
  7160.               für den Interrupt 08h!
  7161.               MDEBUG wurde nicht aus dem Speicher entfernt.
  7162.  
  7163.       MDEBUG: MDEBUG ist nicht letztes Programm in der Interrupt-Kette
  7164.               für den Interrupt 09h!
  7165.               MDEBUG wurde nicht aus dem Speicher entfernt.
  7166.  
  7167.       Betr.: Parameter EXIT
  7168.  
  7169.       Nach  MDEBUG  wurde  mindestens  ein Programm  geladen,  daß  den
  7170.       Interrupt 08h  und/oder den Interrupt  09h verbiegt.  Soll MDEBUG
  7171.       aus dem Speicher entfernt werden, müssen  vorher alle nach MDEBUG
  7172.       geladenen Programme,  die einen der  Interrupts 08h oder 09h ver-
  7173.       biegen, entfernt werden.
  7174.  
  7175.  
  7176.     ■ MDEBUG: Das Passwort ist fehlerhaft!
  7177.  
  7178.       Betr.: Parameter EXIT oder SET
  7179.  
  7180.       Es wurde versucht, die Parameter einer mit einem aktivem Passwort
  7181.       installierten  Version von MDEBUG durch  eine  Version  mit einem
  7182.       anderen  oder  nicht-installierten  Passwort  zu ändern (bzw. das
  7183.       Programm aus dem Speicher zu entfernen).
  7184.  
  7185.  
  7186.  
  7187.  
  7188.  
  7189.  
  7190.  
  7191.  
  7192.  
  7193.  
  7194.  
  7195.  
  7196.  
  7197.  
  7198.  
  7199.     ────────────────────────────────────────────────────────────────────────────────
  7200.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  114
  7201.  
  7202.  
  7203.  
  7204.     ■ MDEBUG: Unbekannte Version von MDEBUG installiert!
  7205.  
  7206.       Betr.: Installieren von  MDEBUG oder  ändern einer  installierten
  7207.              Version von MDEBUG
  7208.  
  7209.       Dieser  Fehler  tritt auf,  falls  mehrere  Versionen von  MDEBUG
  7210.       gemischt  verwendet werden  sollen, oder  ein  anderes  speicher-
  7211.       residentes  Programm  mit  dem  Namen  'MDEBUG'  installiert ist.
  7212.       Der Fehler kann auch auftreten,  falls  MDEBUG durch  ein anderes
  7213.       Programm aus dem Speicher entfernt wurde. 
  7214.       Eine  Installation  dieser  Version  von MDEBUG  ist  dann  nicht
  7215.       möglich.
  7216.  
  7217.  
  7218.     ■ MDEBUG: Falscher Parameter angegeben!
  7219.  
  7220.  
  7221.     ■ MDEBUG: Fehler beim Lesen der Datei <name>
  7222.  
  7223.       Betr.: Parameter &name
  7224.  
  7225.       Der Inhalt des PSP  wird nicht verändert.
  7226.       Der Fehler führt nicht zum Programm-Abbruch.
  7227.  
  7228.  
  7229.     ■ 00000 Bytes aus der Datei <name>
  7230.       nach nnnnh:mmmmh eingelesen
  7231.  
  7232.       Betr.: Parameter &name
  7233.  
  7234.       Dies  ist kein  Fehler als  solcher.  Die Meldung wird  ausgelöst
  7235.       durch  eine  Eingabedatei  für  den  Parameter '&name'  ohne  den
  7236.       Schalter ',N'  bei  der  am  Anfang  soviele  Kommentare  stehen,
  7237.       daß  der  gesamte  Puffer für  die Datei mit ihnen belegt ist und
  7238.       kein  Platz mehr  für den  eigentlichen Dateiinhalt ist. Die Kom-
  7239.       mentare in der  Eingabedatei  sollten deshalb, falls möglich, ans
  7240.       Ende der Datei gestellt werden.
  7241.       Der Fehler führt nicht zum Programm-Abbruch.
  7242.  
  7243.  
  7244.  
  7245.  
  7246.  
  7247.  
  7248.  
  7249.  
  7250.  
  7251.  
  7252.  
  7253.  
  7254.  
  7255.  
  7256.  
  7257.  
  7258.  
  7259.     ────────────────────────────────────────────────────────────────────────────────
  7260.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  115
  7261.  
  7262.  
  7263.  
  7264.     ■ MDEBUG: Fehler beim Schreiben der Datei <name>
  7265.  
  7266.       Betr.: Parameter *name
  7267.  
  7268.       Falls die Datei schon teilweise geschrieben wurde, wird sie nicht
  7269.       gelöscht.
  7270.       Der Fehler führt nicht zum Programm-Abbruch.
  7271.  
  7272.  
  7273.     ■ 00000 Bytes aus dem PSP ab nnnnh:mmmmh in die Datei <name>
  7274.       gespeichert.
  7275.  
  7276.       Betr.: Parameter *name
  7277.  
  7278.       Dies  ist kein Fehler als solcher. Die Meldung  besagt  nur,  daß
  7279.       am  Offset 'mmmm' im PSP der  residenten  Version von  MDEBUG ein
  7280.       Null-Wort steht, daß  von MDEBUG  als Ende-Kennung genommen wird.
  7281.       (da der Schalter ',N' nicht angegeben wurde)
  7282.       Der Fehler führt nicht zum Programm-Abbruch.
  7283.  
  7284.  
  7285.     ■ MDEBUG: Angegebener Name für die Hilfstextdatei ist fehlerhaft!
  7286.     ■ MDEBUG: Hilfstextdatei <name.ext> nicht gefunden.
  7287.     ■ MDEBUG: Fehler beim Lesen der Hilfstextdatei <name.ext>
  7288.     ■ MDEBUG: Die Hilfstextdatei <name.ext> hat ein falsches Format.
  7289.  
  7290.       Betr.: Parameter HELP
  7291.  
  7292.       Der Hilfstext einer residenten Version wird nicht verändert.
  7293.  
  7294.  
  7295.     ■ MDEBUG: Die Hilfstextdatei ist zu groß und wurde nicht vollständig
  7296.               gelesen.
  7297.  
  7298.       Betr.: Parameter HELP
  7299.  
  7300.       Die Online-Hilfe ist trotzdem verfügbar, allerdings nur die voll-
  7301.       ständig geladenen Zeilen der angegebenen Datei.
  7302.       Der Fehler führt nicht zum Programm-Abbruch.
  7303.  
  7304.  
  7305.  
  7306.  
  7307.  
  7308.  
  7309.  
  7310.  
  7311.  
  7312.  
  7313.  
  7314.  
  7315.  
  7316.  
  7317.  
  7318.  
  7319.     ────────────────────────────────────────────────────────────────────────────────
  7320.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  116
  7321.  
  7322.  
  7323.  
  7324.     ■ MDEBUG: Die Hilfstext-Routinen sind in der residenten Version
  7325.               nicht vorhanden!
  7326.  
  7327.       Betr.: Parameter HELP
  7328.  
  7329.       Über  den  Parameter   'HELP'  kann  nur  ein  Hilfstext in  eine
  7330.       residente Version eingelesen werden, falls diese mit Online-Hilfe
  7331.       installiert wurde. (durch  einen  der Parameter 'HELP' oder 'BUF'
  7332.       bei der Erstinstallation)
  7333.  
  7334.  
  7335.     ■ MDEBUG: Der Puffer der residenten Version ist zu klein!
  7336.               Die Hilfstextdatei wurde nicht vollständig gelesen.
  7337.  
  7338.       Betr.: Parameter HELP zur Änderung einer residenten Version
  7339.  
  7340.       Es werden nur die  vollständig gelesenen  Zeilen in die residente
  7341.       Version übernommen.
  7342.       Der Fehler führt nicht zum Programm-Abbruch.
  7343.  
  7344.  
  7345.     ■ MDEBUG: Der Parameter MAKE ist nicht möglich!
  7346.  
  7347.       Betr.: Parameter MAKE
  7348.  
  7349.       Die Parameter
  7350.  
  7351.            'STH', 'SET', 'EXIT', '&name', '*name',
  7352.            '#', 'DEF' und '?'
  7353.  
  7354.       dürfen nicht mit 'MAKE' zusammen angegeben werden.
  7355.  
  7356.  
  7357.     ■ MDEBUG: Fehler beim Löschen von MDEBUG.BAK!
  7358.       MDEBUG: Fehler beim Umbenennen von MDEBUG.COM!
  7359.       MDEBUG: Fehler beim Erstellen von MDEBUG.COM!
  7360.  
  7361.       Betr.: Parameter MAKE
  7362.  
  7363.       Entweder kann die Datei MDEBUG.COM nicht  umbenannt  werden  oder
  7364.       die Datei MDEBUG.BAK kann nicht  gelöscht  werden  oder die Datei
  7365.       MDEBUG.COM kann nicht geschrieben werden.
  7366.  
  7367.  
  7368.  
  7369.  
  7370.  
  7371.  
  7372.  
  7373.  
  7374.  
  7375.  
  7376.  
  7377.  
  7378.  
  7379.     ────────────────────────────────────────────────────────────────────────────────
  7380.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  117
  7381.  
  7382.  
  7383.  
  7384.     ■ MDEBUG: Angegebene Prozessnummer ist fehlerhaft!
  7385.  
  7386.       Betr.: Parameter PRO
  7387.  
  7388.  
  7389.     ■ MDEBUG: Angegebener Wert für das Bildschirmsegment ist fehlerhaft!
  7390.  
  7391.       Betr.: Parameter TEXT
  7392.  
  7393.  
  7394.     ■ MDEBUG: Angegebene Bildschirmseite für den Parameter "text" ist
  7395.               fehlerhaft!
  7396.  
  7397.       Betr.: Parameter TEXT
  7398.  
  7399.  
  7400.     ■ MDEBUG: Angegebene Puffer-Größe ist fehlerhaft!
  7401.  
  7402.       Betr.: Parameter BUF
  7403.  
  7404.  
  7405.     ■ MDEBUG: Angegebene Interrupt-Nummer ist fehlerhaft!
  7406.  
  7407.       Betr.: Parameter INT
  7408.  
  7409.  
  7410.     ■ MDEBUG: Angegebene Interpreter-Farb-Nummer ist fehlerhaft!
  7411.  
  7412.       Betr.: Parameter CoD
  7413.  
  7414.  
  7415.     ■ MDEBUG: Angegebene Monitor-Farb-Nummer ist fehlerhaft!
  7416.  
  7417.       Betr.: Parameter CoM
  7418.  
  7419.  
  7420.  
  7421.  
  7422.  
  7423.  
  7424.  
  7425.  
  7426.  
  7427.  
  7428.  
  7429.  
  7430.  
  7431.  
  7432.  
  7433.  
  7434.  
  7435.  
  7436.  
  7437.  
  7438.  
  7439.     ────────────────────────────────────────────────────────────────────────────────
  7440.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  118
  7441.  
  7442.  
  7443.  
  7444.     ■ MDEBUG: Angegebene Hilfsfarbe <m> ist fehlerhaft!
  7445.  
  7446.       Betr.: Parameter CoHm
  7447.  
  7448.       <m> wird  durch die  Nummer der Hilfsfarbe, die  geändert  werden
  7449.       sollte ersetzt.
  7450.  
  7451.  
  7452.     ■ MDEBUG: Angegebene Interpreter-Start-Zeile ist fehlerhaft!
  7453.  
  7454.       Betr.: Parameter RoD
  7455.  
  7456.  
  7457.     ■ MDEBUG: Angegebene Monitor-Start-Zeile ist fehlerhaft!
  7458.  
  7459.       Betr.: Parameter RoM
  7460.  
  7461.  
  7462.     ■ MDEBUG: Angegebene Hilfsfenster-Start-Zeile ist fehlerhaft!
  7463.  
  7464.       Betr.: Parameter RoH
  7465.  
  7466.  
  7467.     ■ MDEBUG: Angegebenes Monitor-Segment ist fehlerhaft!
  7468.  
  7469.       Betr.: Parameter SE=nnnn
  7470.  
  7471.  
  7472.     ■ MDEBUG: Angegebenes Register für das Segment des Monitors ist
  7473.               fehlerhaft!
  7474.  
  7475.       Betr.: Parameter SE=reg
  7476.  
  7477.  
  7478.     ■ MDEBUG: Angegebener Monitor-Offset ist fehlerhaft!
  7479.  
  7480.       Betr.: Parameter OF=nnnn
  7481.  
  7482.  
  7483.     ■ MDEBUG: Angegebenes Register für den Offset des Monitors ist
  7484.               fehlerhaft!
  7485.  
  7486.       Betr.: Parameter OF=reg
  7487.  
  7488.  
  7489.  
  7490.  
  7491.  
  7492.  
  7493.  
  7494.  
  7495.  
  7496.  
  7497.  
  7498.  
  7499.     ────────────────────────────────────────────────────────────────────────────────
  7500.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  119
  7501.  
  7502.  
  7503.  
  7504.     ■ MDEBUG: Angegebener Hotkey ist fehlerhaft!
  7505.     ■ MDEBUG: Angegebener Status der Umschalt-Tasten ist fehlerhaft!
  7506.  
  7507.       Betr.: Parameter KEY
  7508.  
  7509.  
  7510.     ■ MDEBUG: Angegebener Dateiname für den Parameter "&name" ist fehlerhaft!
  7511.     ■ MDEBUG: Angegebener Offset für den Parameter "&name" ist fehlerhaft!
  7512.     ■ MDEBUG: Angegebene Länge für den Parameter "&name" ist fehlerhaft!
  7513.     ■ MDEBUG: Angegebener Schalter für den Parameter "&name" ist fehlerhaft!
  7514.  
  7515.       Betr.: Parameter &name
  7516.  
  7517.  
  7518.     ■ MDEBUG: Angegebener Dateiname für den Parameter "*name" ist fehlerhaft!
  7519.     ■ MDEBUG: Angegebener Offset für den Parameter "*name" ist fehlerhaft!
  7520.     ■ MDEBUG: Angegebene Länge für den Parameter "*name" ist fehlerhaft!
  7521.     ■ MDEBUG: Angegebener Schalter für den Parameter "*name" ist fehlerhaft!
  7522.  
  7523.       Betr.: Parameter *name
  7524.  
  7525.  
  7526.     ■ MDEBUG: Das Environment konnte nicht freigegeben werden!
  7527.               MDEBUG wurde nicht installiert!
  7528.  
  7529.  
  7530.     ■ MDEBUG: Das Programm konnte nicht resident gemacht werden!
  7531.               MDEBUG wurde nicht installiert!
  7532.  
  7533.       Dieser  Fehler  kann  nur  auftreten,  falls  der  Interrupt  21h
  7534.       aufgerufen mit der Funktionsnummer  31h  zurückkehrt!  Falls  der
  7535.       Fehler auftritt, wird MDEBUG über die Funktion 4Ch des Interrupts
  7536.       21h beendet (d.h. es bleibt NICHT speicherresident!)
  7537.  
  7538.  
  7539.     ■ MDEBUG: Das Programm konnte nicht korrekt beendet werden!
  7540.               Starte neuen Versuch ...
  7541.  
  7542.       Dieser Fehler kann nur auftreten,  falls der  Interrupt 21h  auf-
  7543.       gerufen mit der Funktionsnummer 4Ch zurückkehrt.  In diesem  Fall
  7544.       versucht MDEBUG sich über den Interrupt 20h zu beenden.
  7545.  
  7546.  
  7547.     ■ Interner Fehler, bitte den Autor kontaktieren!
  7548.  
  7549.  
  7550.  
  7551.  
  7552.  
  7553.  
  7554.  
  7555.  
  7556.  
  7557.  
  7558.  
  7559.     ────────────────────────────────────────────────────────────────────────────────
  7560.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  120
  7561.  
  7562.  
  7563.  
  7564.     Meldungen des Interpreters von MDEBUG
  7565.     ─────────────────────────────────────
  7566.  
  7567.     ■ *** Taste ***
  7568.  
  7569.       Aufforderung des W-Befehls eine Taste zu betätigen.
  7570.  
  7571.  
  7572.     ■ G-Command aktiv
  7573.  
  7574.       Diese Meldung wird angezeigt während ein G-Befehl bearbeitet wird.
  7575.  
  7576.  
  7577.     ■ ! Syntax Error
  7578.  
  7579.       Ein Interpreter-Befehl wurde fehlerhaft eingegeben.
  7580.  
  7581.  
  7582.     ■ ! ESC pressed
  7583.  
  7584.       Der W-Befehl wurde mit der Taste <ESC> quittiert.
  7585.  
  7586.  
  7587.     ■ ! BREAK-key pressed
  7588.  
  7589.       Die BREAK-Taste wurde gedrückt.
  7590.  
  7591.  
  7592.     ■ ! Busy-Flag not Zero
  7593.  
  7594.       Der angegebene Befehl kann nur ausgeführt werden, falls DOS nicht
  7595.       aktiv ist.
  7596.  
  7597.  
  7598.     ■ ! ¿-Command ended
  7599.  
  7600.       Der Wert des Operanden des ¿-Befehls ist gleich 0 (->> FALSE).
  7601.  
  7602.  
  7603.     ■ ! Division by Zero
  7604.  
  7605.       Es wurde versucht, durch Null zu teilen.
  7606.  
  7607.  
  7608.  
  7609.  
  7610.  
  7611.  
  7612.  
  7613.  
  7614.  
  7615.  
  7616.  
  7617.  
  7618.  
  7619.     ────────────────────────────────────────────────────────────────────────────────
  7620.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  121
  7621.  
  7622.  
  7623.  
  7624.     ■ ! 1. COMMAND-Shell aktiv
  7625.  
  7626.       Dieser Fehler tritt auf, falls der von MDEBUG unterbrochene Pro-
  7627.       zess  die oberste  Ebene des aktuellen Shell-Programmes  ist, und
  7628.       versucht wird, diesen über die Taste <CTRL-F10> abzubrechen.
  7629.  
  7630.  
  7631.     ■ ! Invalid C-Driver
  7632.  
  7633.       MDEBUG hat einen  veralteten  Kommandotreiber  in  der Interrupt-
  7634.       Kette für  den  Interrupt  2Fh  ermittelt. MDEBUG  unterdrückt in
  7635.       diesem Fall ALLE Aufrufe aller Kommandotreiber. MDEBUG  überprüft
  7636.       bei  jedem  Aufruf die installierten Kommandotreiber,  so daß der
  7637.       Fehler  durch Entfernen  des veralteten  Kommandotreibers behoben
  7638.       werden kann.
  7639.  
  7640.  
  7641.     ■ ! Invalid G-Driver
  7642.  
  7643.       MDEBUG hat  einen veralteten Bildschirmtreiber  in der Interrupt-
  7644.       Kette  für  den  Interrupt 2Fh  ermittelt. MDEBUG  unterdrückt in
  7645.       diesem Fall ALLE Aufrufe des Bildschirmtreibers. MDEBUG überprüft
  7646.       bei jedem  Aufruf den installierten Bildschirmtreiber, so daß der
  7647.       Fehler  durch Entfernen des veralteten Bildschirmtreibers behoben
  7648.       werden kann.
  7649.  
  7650.  
  7651.     ■ ! Invalid C- and G-Driver
  7652.  
  7653.       Die beiden vorherigen Fehler zusammen sind aufgetreten.
  7654.  
  7655.  
  7656.     ■ ! Not Found
  7657.  
  7658.       Diese Meldung  gibt der SH-Befehl aus, falls der Suchstring nicht
  7659.       gefunden wurde.
  7660.  
  7661.  
  7662.     ■ ! Unknown Error
  7663.  
  7664.       Dieser  Befehl  kann nur  auftreten,  falls  ein  Kommandotreiber
  7665.       einen unbekannten Fehlercode zurückliefert.
  7666.  
  7667.  
  7668.     Weitere Meldungen des Interpreters von MDEBUG
  7669.     ─────────────────────────────────────────────
  7670.  
  7671.     Jeder  Kommandotreiber  kann  zusätzliche  Fehlermeldungen  bereit-
  7672.     stellen.
  7673.  
  7674.  
  7675.  
  7676.  
  7677.  
  7678.  
  7679.     ────────────────────────────────────────────────────────────────────────────────
  7680.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  122
  7681.  
  7682.  
  7683.  
  7684.  
  7685.  
  7686.  
  7687.  
  7688.  
  7689.  
  7690.  
  7691.  
  7692.  
  7693.                                    Anhang B
  7694.  
  7695.                                Programm-Interna
  7696.                                ────────────────
  7697.  
  7698.  
  7699.  
  7700.  
  7701.  
  7702.  
  7703.  
  7704.  
  7705.  
  7706.  
  7707.  
  7708.  
  7709.  
  7710.  
  7711.  
  7712.  
  7713.  
  7714.  
  7715.  
  7716.  
  7717.  
  7718.  
  7719.  
  7720.  
  7721.  
  7722.  
  7723.  
  7724.  
  7725.  
  7726.  
  7727.  
  7728.  
  7729.  
  7730.  
  7731.  
  7732.  
  7733.  
  7734.  
  7735.  
  7736.  
  7737.  
  7738.  
  7739.     ────────────────────────────────────────────────────────────────────────────────
  7740.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  123
  7741.  
  7742.  
  7743.  
  7744.     Hinweise für die Fehlersuche - Trouble-Shooting
  7745.     ───────────────────────────────────────────────
  7746.  
  7747.     Falls bei der Arbeit mit MDEBUG ein  Fehler  auftritt, bitte zuerst
  7748.     einmal die nachfolgenden Informationen durchlesen,  und überprüfen,
  7749.     ob der Fehler damit gefunden werden kann:
  7750.  
  7751.     ■ Es finden  keinerlei  Überprüfungen statt,  ob eine Lese/Schreib-
  7752.       operation über eine Segment-Adresse geht.
  7753.  
  7754.       Falls z.B. das  Wort  an der Adresse nnnn:0FFFFh gelesen wird, so
  7755.       wird das Lowbyte von der Adresse nnnn:0FFFFh und das Highbyte von
  7756.       der Adresse nnnn:0000 gelesen.
  7757.  
  7758.       Allerdings  berücksichtigt  MDEBUG,  daß  die Prozessoren  ab dem
  7759.       80286  einen Wortzugriff  über eine  Segmentgrenze  nicht korrekt
  7760.       ausführen und teilt deshalb wortweise Speicherzugriffe in jeweils
  7761.       zwei byteweise Speicherzugriffe.
  7762.  
  7763.  
  7764.     ■ Ein Aufruf über den Hotkey sollte nicht  während einer Disketten-
  7765.       oder Plattenoperation (->> LED des Laufwerkes ist an) erfolgen!
  7766.  
  7767.  
  7768.     ■ Das Trap-Flag sollte bei der Benutzung von MDEBUG  immer gelöscht
  7769.       sein.  Ansonsten sind die Auswirkungen  der Befehle nicht vorher-
  7770.       sehbar (bis hin zum Systemabsturz!).
  7771.  
  7772.  
  7773.     ■ Ein  'INT 021'-Befehl sollte nur gegeben  werden, wenn  das Busy-
  7774.       Flag auf 0 steht, d.h. DOS nicht aktiv ist.
  7775.  
  7776.       Auf der  Ebene des COMMAND.COM ist  das Busy-Flag gesetzt bis ein
  7777.       interner oder externer Befehl ausgeführt wird.
  7778.  
  7779.       Das Busy-Flag gibt den Wert  des DOS-Busy-Flags  verODERt mit dem
  7780.       Wert des Critical-Error-Flags wieder.
  7781.  
  7782.  
  7783.  
  7784.  
  7785.  
  7786.  
  7787.  
  7788.  
  7789.  
  7790.  
  7791.  
  7792.  
  7793.  
  7794.  
  7795.  
  7796.  
  7797.  
  7798.  
  7799.     ────────────────────────────────────────────────────────────────────────────────
  7800.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  124
  7801.  
  7802.  
  7803.  
  7804.     ■ MDEBUG benutzt im  Initialisierungsteil  folgende undokumentierte
  7805.       Funktionen des Interrupt 21h:
  7806.  
  7807.            ■ Funktion  52h:  Ermittle Adresse des DOS-Info-Blocks (DIB)
  7808.                              Ausgabe: ES:BX -> DIB (= 'List of Lists')
  7809.       und
  7810.            ■ Funktion  34h:  Ermittle Adresse des DOS-Busy-Flags
  7811.                              Ausgabe (ab DOS 3.0):
  7812.                                       ES:BX   -> DOS-Busy-Flag (1 Byte)
  7813.                                       ES:BX-1 -> Critical-Error-Flag
  7814.                                                  (1 Byte)
  7815.  
  7816.  
  7817.     ■ MDEBUG wertet das aktuelle PSP  aus um zu  ermitteln, ob der beim
  7818.       Aufruf  unterbrochene   Prozess  die  oberste  Ebene  des  SHELL-
  7819.       Prozesses (normalerweise das Programm COMMAND.COM) ist.
  7820.  
  7821.       Zur Ermittlung der Adresse des aktuellen  PSP wird die Unterfunk-
  7822.       tion 62h des Interrupt 21h benutzt. Diese ist immer möglich, d.h.
  7823.       sie kann auch aufgerufen werden falls DOS schon aktiv ist.
  7824.  
  7825.       Der  COMMAND.COM  (oder  jeder andere  Kommando-Interpreter, z.B.
  7826.       4DOS.COM) ist das einzige Programm,  dessen Loader-Identifikation
  7827.       im PSP (Wort, Offset 16h) auf das eigene Code-Segment zeigt.
  7828.  
  7829.       Bei allen  anderen Programmen  enthält die  Loader-Identifikation
  7830.       das Segment des Programmes, welches das Programm aufgerufen hat.
  7831.       (im Normalfall das Segment des COMMAND.COM)
  7832.  
  7833.       Abgebrochen  wird  das  Programm  dann  über die Funktion 4Ch des
  7834.       Interrupt 21h.
  7835.  
  7836.       MDEBUG  benutzt  im  residenten Teil  (außer  den o.a. Ausnahmen)
  7837.       keine Funktionen des DOS-Interrupts 21h.
  7838.  
  7839.  
  7840.     ■ MDEBUG  ermittelt seinen aktuellen Namen und das Directory in dem
  7841.       die Datei 'MDEBUG.COM' steht aus dem Environment. Das Segment des
  7842.       Environments wird  aus dem  Wort am Offset 2Ch im PSP ermittelt.
  7843.  
  7844.  
  7845.  
  7846.  
  7847.  
  7848.  
  7849.  
  7850.  
  7851.  
  7852.  
  7853.  
  7854.  
  7855.  
  7856.  
  7857.  
  7858.  
  7859.     ────────────────────────────────────────────────────────────────────────────────
  7860.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  125
  7861.  
  7862.  
  7863.  
  7864.     ■ Zum Lesen und  Setzen von  Interrupt-Vektoren im transienten Teil
  7865.       werden nur die Funktionen 25h und 35h des Interrupts 21h benutzt.
  7866.  
  7867.  
  7868.     ■ MDEBUG arbeitet in allen Bildschirmmodi mit mindestens 80 Zeichen
  7869.       pro Zeile und mindestens 25 Zeilen pro Seite.
  7870.  
  7871.       MDEBUG ermittelt  alle  Bildschirm-Werte im  residenten Teil über
  7872.       das  BIOS-Segment. Der Interrupt 10h wird  im residenten Teil nur
  7873.       für das Ändern der Cursorposition und der Cursorform verwendet.
  7874.  
  7875.       Zur  Vermeidung eines Fehlers in manchen  älteren BIOSsen sichert
  7876.       MDEBUG  vor jedem  Aufruf des Interrupt 10h den Inhalt des Regis-
  7877.       ters BP.
  7878.  
  7879.       MDEBUG wertet  zur Ermittlung der Bildschirm-Werte  die folgenden
  7880.       Speicherstellen aus:
  7881.  
  7882.       ┌─────────────┬─────────┬────────────────────────────────────┐
  7883.       │ Adresse     │ Länge   │  Inhalt                            │
  7884.       ╞═════════════╪═════════╪════════════════════════════════════╡
  7885.       │ 0040h:0049h │  1 Byte │  Videomodus                        │
  7886.       │ 0040h:004Ah │  1 Wort │  Anzahl der Bildschirmspalten      │
  7887.       │ 0040h:004Ch │  1 Wort │  Länge einer Bildschirmseite       │
  7888.       │ 0040h:004Eh │  1 Wort │  Offset der akt. Bildschirmseite   │
  7889.       │ 0040h:0050h │  8 Byte │  Array der Cursorpositionen        │
  7890.       │ 0040h:0060h │  1 Wort │  Cursorform                        │
  7891.       │ 0040h:0062h │  1 Byte │  aktuelle Bildschirmseite          │
  7892.       │ 0040h:0063h │  1 Wort │  I/O-Basisadresse des              │
  7893.       │             │         │  Videocontrollers                  │
  7894.       │ 0040h:0065h │  1 Byte │  Inhalt des CRT-Modusregisters     │
  7895.       │ 0040h:0084h │  1 Byte │  Anzahl der Zeilen pro Seite -1    │
  7896.       └─────────────┴─────────┴────────────────────────────────────┘
  7897.  
  7898.       Die Anzahl  der Zeilen  pro Seite wird über das Byte  bei 40h:84h
  7899.       ermittelt. Falls der Inhalt dieser Speicherstelle ungleich 0 ist,
  7900.       wird er zur Ermittlung der Anzahl  Zeilen pro Seite genommen. Ist
  7901.       der Wert gleich 0, so geht MDEBUG von 25 Zeilen pro Seite aus.
  7902.  
  7903.       Das Byte  bei 40h:84h  enthält  bei CGA- und HGC-Karten normaler-
  7904.       weise 0, bei EGA- und VGA-Karten aber die Anzahl der Zeilen/Seite
  7905.       minus 1.  Da es  auch  HGC/CGA-Karten  mit  der  Möglichkeit  zur
  7906.       Darstellung von mehr als 25 Zeilen  gibt, wird hier nicht auf die
  7907.       Existenz einer EGA- oder VGA-Karte getestet.
  7908.  
  7909.  
  7910.  
  7911.  
  7912.  
  7913.  
  7914.  
  7915.  
  7916.  
  7917.  
  7918.  
  7919.     ────────────────────────────────────────────────────────────────────────────────
  7920.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  126
  7921.  
  7922.  
  7923.  
  7924.       Wenn die  aktuelle  Seite durch den Parameter 'TEXT' explizit an-
  7925.       gegeben ist, geht MDEBUG  immer von einem Bildschirm-Modus mit 80
  7926.       Zeichen pro Zeile und 25 Zeilen pro Seite aus.
  7927.  
  7928.       Bei Hercules-Karten  wird der Modus (Graphik oder Text)  über das
  7929.       CRT-Modusregister und  über das  Lightpen-Register (Datenregister
  7930.       10h  des  Video-Controllers) ermittelt.
  7931.  
  7932.       Als Bildschirmsegment wird bei Hercules-Karten B000h und für alle
  7933.       anderen Karten B800h genommen.
  7934.  
  7935.       Die Daten des aktuellen Bildschirmmodi  werden nach  jedem Aufruf
  7936.       über  den Hotkey,  den User-Int,  dem  automatischen Aufruf (über
  7937.       die  Taste  <ALT-F5>)  oder  einen  extra-Interrupt und  nach dem
  7938.       Betätigen der Taste <ALT-F9> ermittelt.
  7939.  
  7940.       Alle Ausgaben erfolgen direkt in den Bildschirmspeicher.
  7941.  
  7942.       Für Fehlermeldungen im Interpreter wird das Bit 7 des  Farbattri-
  7943.       buts  gesetzt. Je nach dem aktuellen Modus der Graphik-Karte wird
  7944.       damit  eine  blinkende  Anzeige oder  eine  helle  Farbe  für die
  7945.       Fehlermeldung gewählt.
  7946.  
  7947.       Hinweis:
  7948.  
  7949.       Falls während eines Aufrufs von MDEBUG kein Cursor erscheint, muß
  7950.       die Variable MDebugCursor verändert werden (siehe Konstante P4).
  7951.  
  7952.  
  7953.     ■ Akustische Ausgaben erfolgen direkt über die Ports 42h und 43h.
  7954.  
  7955.  
  7956.     ■ MDEBUG setzt vorraus, daß  zeitkritische Interrupt-Routinen dafür
  7957.       sorgen,  daß sie  nicht unterbrochen  werden können (mit den CLI-
  7958.       und STI-Befehlen).
  7959.  
  7960.  
  7961.     ■ Ein Aufruf über den Hotkey wird über den Interrupt 9h erkannt.
  7962.       Der  eigentliche Aufruf  von MDEBUG erfolgt aber in der Routine
  7963.       für den Interrupt 8h (indirekter Aufruf).
  7964.  
  7965.  
  7966.  
  7967.  
  7968.  
  7969.  
  7970.  
  7971.  
  7972.  
  7973.  
  7974.  
  7975.  
  7976.  
  7977.  
  7978.  
  7979.     ────────────────────────────────────────────────────────────────────────────────
  7980.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  127
  7981.  
  7982.  
  7983.  
  7984.       Die Routine für den Interrupt 9h geht von folgenden Port-Adressen
  7985.       aus:
  7986.  
  7987.       ┌──────┬─────────────────────────────────────────────────────┐
  7988.       │ Port │ Bedeutung                                           │
  7989.       ╞══════╪═════════════════════════════════════════════════════╡
  7990.       │  60h │ Datenport der Tastatur                              │
  7991.       │  61h │ Statusport der Tastatur für die Acknowledge-Meldung │
  7992.       │  20h │ Statusport des Interrupt-Controllers für die EOI-   │
  7993.       │      │ Meldung (EOI-Meldung = 20h)                         │
  7994.       └──────┴─────────────────────────────────────────────────────┘
  7995.  
  7996.       MDEBUG unterscheidet hierbei nicht  zwischen einer 'normalen' und
  7997.       einer MF2- oder AT-Tastatur.
  7998.  
  7999.  
  8000.     ■ Der  Interrupt-Handler für  den Interrupt  9h fängt, falls MDEBUG
  8001.       aktiv ist,  die  Tasten <CTRL-C>, <CTRL-2> und  <CTRL-BREAK> bzw.
  8002.       <CTRL-ScorllLock>  komplett  ab.  D.h.  diese Tasten  können auch
  8003.       in einem Kommando-Treiber NICHT verwendet werden!
  8004.  
  8005.  
  8006.     ■ Alle Tastatureingaben werden von MDEBUG über eine interne Routine
  8007.       ermittelt, d.h. MDEBUG benutzt nicht den Interrupt 16h.
  8008.  
  8009.       TSR-Programme, die  den Aufruf  über den  Interrupt 16h erkennen,
  8010.       können daher während eines Aufrufes von MDEBUG  also nur über den
  8011.       Interpreter-Befehl
  8012.  
  8013.        'MOV AH,0  ^ INT 16'  bzw. 'MOV AH,10 ^ INT 16'
  8014.  
  8015.       (oder einen äquivalenten G- bzw. B-Befehl) aufgerufen werden.
  8016.  
  8017.       Ausnahme hiervon:
  8018.       Ab  DOS 5.0 benutzt MDEBUG wieder  den Interrupt 16h benutzt,  da
  8019.       ansonsten ein  Aufruf von MDEBUG  nicht  möglich ist,  falls  die
  8020.       Shell  von DOS  aktiv ist. MDEBUG benutzt  in  diesem Fall, falls
  8021.       möglich d.h. von der Routine für den  Interrupt 16h  unterstützt,
  8022.       die Funktionen 10h,  11h und 12h für die Ermittlung der Tastatur-
  8023.       eingaben.  Falls  die Funktionen  1xh vom BIOS nicht  unterstützt
  8024.       werden, verwendet MDEBUG die alten Funktionen 0h, 01h und 02h.
  8025.       MDEBUG überprüft nur einmal im Initialisierungsteil ob die erwei-
  8026.       terten Funktionen 1xh verwendet werden können!
  8027.  
  8028.  
  8029.  
  8030.  
  8031.  
  8032.  
  8033.  
  8034.  
  8035.  
  8036.  
  8037.  
  8038.  
  8039.     ────────────────────────────────────────────────────────────────────────────────
  8040.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  128
  8041.  
  8042.  
  8043.  
  8044.       MDEBUG  sichert  während eines Aufrufs  alle Daten  der Tastatur-
  8045.       verwaltung. Dies sind folgende Speicherstellen:
  8046.  
  8047.       ┌─────────────┬─────────┬────────────────────────┐
  8048.       │ Adresse     │ Länge   │ Inhalt                 │
  8049.       ╞═════════════╪═════════╪════════════════════════╡
  8050.       │ 0040h:001Ah │  1 Wort │ Tastatur-Head-Pointer  │
  8051.       │ 0040h:001Ch │  1 Wort │ Tastatur-Tail-Pointer  │
  8052.       │ 0040h:001Eh │ 32 Byte │ Tastatur-Puffer        │
  8053.       │ 0040h:0080h │  1 Wort │ Tastatur-Puffer-Anfang │
  8054.       │ 0040h:0082h │  1 Wort │ Tastatur-Puffer-Ende   │
  8055.       └─────────────┴─────────┴────────────────────────┘
  8056.  
  8057.  
  8058.     ■ MDEBUG belegt die Interrupt-Vektoren  09h (Hardware-Interrupt für
  8059.       die Tastatur) und 08h (Hardware-Interrupt für die Uhr)  und evtl.
  8060.       einen der Interrupts zwischen 60h und 67h als User-Int.
  8061.  
  8062.       Während  der Installierung  von MDEBUG und  während eines Aufrufs
  8063.       zur Änderung der Werte eine residenten  Version  werden  außerdem
  8064.       die  Interruptvektoren  1Bh,  23h  und  24h  temporär  auf eigene
  8065.       Routinen umgeleitet. Die  Interrupt-Vektoren  23h und  24h werden
  8066.       nicht wieder zurückgesetzt (macht DOS bei Programm-Ende).
  8067.  
  8068.       Ein  Programmabbruch  während  des  Aufrufes  von  MDEBUG.COM zur
  8069.       Installation  bzw.  Änderung  einer residenten  Version  über die
  8070.       Tasten <CTRL-C>  oder  <CTRL-Break>  ist nicht möglich, kritische
  8071.       Fehler (MS-DOS: Retry, Ignore, Abort) werden abgefangen.
  8072.  
  8073.  
  8074.     ■ MDEBUG  benutzt einen  eigenen Stack.  Dieser  ist mit 100 Worten
  8075.       deklariert.  Da  der Stack  direkt hinter dem PSP liegt, wird bei
  8076.       einem  Stack-Überlauf  aber  zuerst das -  von  MDEBUG nicht mehr
  8077.       benötigte  -  PSP von MDEBUG überschrieben, so das  sich die max.
  8078.       Stack-Größe mit
  8079.  
  8080.            200 + 3 (JMP-Befehl) + 256 (PSP) = 459 Bytes = 229 Worte
  8081.  
  8082.       ergibt.
  8083.  
  8084.       Bisher haben  sich aber  die 100 Worte für  den Stack  als völlig
  8085.       ausreichend erwiesen.
  8086.  
  8087.  
  8088.  
  8089.  
  8090.  
  8091.  
  8092.  
  8093.  
  8094.  
  8095.  
  8096.  
  8097.  
  8098.  
  8099.     ────────────────────────────────────────────────────────────────────────────────
  8100.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  129
  8101.  
  8102.  
  8103.  
  8104.     ■ Der Code  zur  Ausführung von G-, B- und I-Befehlen wird  jeweils
  8105.       neu ermittelt  und in den Programmcode eingepatcht (selbstmodifi-
  8106.       zierender Code).
  8107.  
  8108.       MDEBUG benutzt  zusätzlich noch in einigen internen  Routinen aus
  8109.       Geschwindigkeits-Gründen selbstmodifizierenden Code.
  8110.  
  8111.  
  8112.     ■ Für Routinen zur Überprüfung, ob MDEBUG installiert ist gilt:
  8113.  
  8114.       Alle  folgenden  Versionen (auch diese) schreiben in ihren MCB ab
  8115.       dem Offset 08h den Namen des Programmes ('MDEBUG  ').
  8116.  
  8117.       Ab  DOS 4.00  wird dies  schon vom Betriebssystem so gemacht; bei
  8118.       DOS-Versionen  älter  als  4.00  ist dieser  Speicherbereich  un-
  8119.       genutzt.
  8120.  
  8121.       Die Versionen werden sich nur durch die Versionskennung, die über
  8122.       den User-Int zurückgegeben wird, unterscheiden lassen.
  8123.  
  8124.       Der User-Int wird immer ein Interrupt zwischen 60h und 67h sein.
  8125.  
  8126.       Direkt  vor der Routine für  den User-Int  -  d.h. der Einsprung-
  8127.       Stelle der  Interrupt-Routine - wird immer  die Kennung 'USERINT'
  8128.       stehen.
  8129.       Die bestehenden  Funktionen des User-Interrupts werden  auf jeden
  8130.       Fall beibehalten;  Erweiterungen des Funktionsumfanges  sind aber
  8131.       möglich.
  8132.  
  8133.  
  8134.     ■ MDEBUG  und  alle Utils  geben alle Meldungen und Fehlermeldungen
  8135.       des transienten Teils über die Funktion 40h des Interrupt 21h auf
  8136.       die Standard-Ausgabe aus. Sollte dabei ein Fehler auftreten (z.B.
  8137.       falls die Ausgabe in eine Datei umgelenkt wird), so  werden  alle
  8138.       Meldungen auf  das Error-Handle 2 ausgegeben.  Sollte  auch  dies
  8139.       nicht möglich  sein, so  unterdrücken MDEBUG  und alle  Utils die
  8140.       restlichen Meldungen während der Ausführung.
  8141.  
  8142.  
  8143.     ■ MDEBUG und  alle  residenten Utils und Treiber schließen  vor dem
  8144.       Beenden des transienten  Teils alle offenen Handles und geben ihr
  8145.       Environment frei.
  8146.  
  8147.  
  8148.  
  8149.  
  8150.  
  8151.  
  8152.  
  8153.  
  8154.  
  8155.  
  8156.  
  8157.  
  8158.  
  8159.     ────────────────────────────────────────────────────────────────────────────────
  8160.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  130
  8161.  
  8162.  
  8163.  
  8164.     Stack-Überlauf
  8165.     ──────────────
  8166.  
  8167.     Falls bei Benutzung von MDEBUG  ein  'Interner Stapelüberlauf'  das
  8168.     System   zum Absturz  bringt (erst  ab  DOS-Version 3.3), muß  nach
  8169.     dem  Neustart  des Computers in  der Datei CONFIG.SYS der Wert  für
  8170.     den  STACKS-Befehl erhöht  oder  auf  0,0  gesetzt  werden und  das
  8171.     System neu gebootet werden. (siehe DOS-Handbuch)
  8172.  
  8173.     Dies  kann  passieren,  falls über MDEBUG  öfter  Prozesse  während
  8174.     der Ausführung  einer  Interrupt-Routine  abgebrochen werden. Falls
  8175.     der  abgebrochene  Interrrupt von der STACK-Verwaltung  noch unter-
  8176.     stützt  wird,  ist  der dem  unterbrochenem  Interrupt  zugeordnete
  8177.     STACK-Frame dann immer  noch als belegt gekennzeichnet und kann von
  8178.     der STACK-Verwaltung  nicht mehr verwendet werden.
  8179.  
  8180.     Falls  MDEBUG über  den  Hotkey aufgerufen  wurde und der Interrupt
  8181.     9h immer  noch  über  die  Stack-Verwaltung  läuft, ist der  STACK-
  8182.     Frame der  dem Interrupt   9h beim Aufruf zugeordnet war, ebenfalls
  8183.     von der STACK-Verwaltung nicht  mehr verwendbar. Gleiches gilt beim
  8184.     Aufruf von MDEBUG  über den  Interrupt   8h nach dem Verlassen  von
  8185.     MDEBUG über  <ALT-F5>  falls  der  Interrupt  8h auch noch über die
  8186.     STACK-Verwaltung läuft.
  8187.  
  8188.     Zur Vermeidung dieses  Problems, sollte der Abbruch eines Prozesses
  8189.     über <CTRL-F10> nur  äußerst  sparsam verwendet  werden. Vorbeugend
  8190.     sollte  mit dem  Programm  FREESTCK die STACK-Frames nach  mehreren
  8191.     Abbrüchen  jeweils  korrigiert  werden.  FREESTCK  benötigt   keine
  8192.     Parameter oder Benutzer-Eingaben; es läuft erst ab DOS 3.3.
  8193.  
  8194.     Aufruf von FREESTCK:
  8195.  
  8196.          FREESTCK <RETURN>
  8197.  
  8198.  
  8199.  
  8200.  
  8201.  
  8202.  
  8203.  
  8204.  
  8205.  
  8206.  
  8207.  
  8208.  
  8209.  
  8210.  
  8211.  
  8212.  
  8213.  
  8214.  
  8215.  
  8216.  
  8217.  
  8218.  
  8219.     ────────────────────────────────────────────────────────────────────────────────
  8220.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  131
  8221.  
  8222.  
  8223.  
  8224.     Tastatur-Codes
  8225.     ──────────────
  8226.  
  8227.     Als Funktionstasten  werden von MDEBUG alle Tasten gewertet, die im
  8228.     Lowbyte des  Scancodes einen  der Werte 00h, 0E0h oder 0F0h und im
  8229.     Highbyte des Scancodes einen Wert ungleich 00h zurückliefern.  Das 
  8230.     Lowbyte wird allerdings nicht weiter berücksichtigt.
  8231.  
  8232.     Die ASCII-Zeichen 0E0h und 0F0h müssen  über die Tasten-Kombination 
  8233.     <ALT-ASCIICode> eingegeben werden,  wobei MDEBUG davon ausgeht, daß
  8234.     das Highbyte in diesem Fall 0 ist.
  8235.  
  8236.     Von MDEBUG erwartete Tastatur-Codes der Funktions-Tasten:
  8237.     ('xxh' steht für 00h, E0h oder F0h)
  8238.  
  8239.     ┌──────────────────────────────┬───────┬─────────┬───────┬────────┐
  8240.     │ Taste  [NumLock aus] mit ... │       │  SHIFT  │ CTRL  │  ALT   │
  8241.     ╞══════════════════════════════╪═══════╪═════════╪═══════╪════════╡
  8242.     │ <PgDn>                       │ 51xxh │         │ 76xxh │ A1xxh  │
  8243.     ├──────────────────────────────┼───────┼─────────┼───────┼────────┤
  8244.     │ <PgUp>                       │ 49xxh │         │ 48xxh │ 99xxh  │
  8245.     ├──────────────────────────────┼───────┼─────────┼───────┼────────┤
  8246.     │ <Home>                       │ 47xxh │         │ 77xxh │        │
  8247.     ├──────────────────────────────┼───────┼─────────┼───────┼────────┤
  8248.     │ <End>                        │ 4Fxxh │         │ 75xxh │        │
  8249.     ├──────────────────────────────┼───────┼─────────┼───────┼────────┤
  8250.     │ <CursorLeft>                 │ 4Bxxh │         │ 73xxh │        │
  8251.     ├──────────────────────────────┼───────┼─────────┼───────┼────────┤
  8252.     │ <CursorRight>                │ 4Dxxh │         │ 74xxh │        │
  8253.     ├──────────────────────────────┼───────┼─────────┼───────┼────────┤
  8254.     │ <CursorUp>                   │ 48xxh │         │ 8Dxxh │ 98xxh  │
  8255.     ├──────────────────────────────┼───────┼─────────┼───────┼────────┤
  8256.     │ <CursorDown>                 │ 50xxh │         │ 91xxh │ A0xxh  │
  8257.     ├──────────────────────────────┼───────┼─────────┼───────┼────────┤
  8258.     │ <Insert>                     │ 52xxh │         │       │        │
  8259.     ├──────────────────────────────┼───────┼─────────┼───────┼────────┤
  8260.     │ <Delete>                     │ 53xxh │         │       │        │
  8261.     └──────────────────────────────┴───────┴─────────┴───────┴────────┘
  8262.  
  8263.  
  8264.  
  8265.  
  8266.  
  8267.  
  8268.  
  8269.  
  8270.  
  8271.  
  8272.  
  8273.  
  8274.  
  8275.  
  8276.  
  8277.  
  8278.  
  8279.     ────────────────────────────────────────────────────────────────────────────────
  8280.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  132
  8281.  
  8282.  
  8283.  
  8284.     ┌──────────────────────────────┬───────┬─────────┬───────┬────────┐
  8285.     │ Taste                mit ... │       │  SHIFT  │ CTRL  │  ALT   │
  8286.     ╞══════════════════════════════╪═══════╪═════════╪═══════╪════════╡
  8287.     │ <F1>                         │ 3Bxxh │ 54xxh   │ 5Exxh │ 68xxh  │
  8288.     ├──────────────────────────────┼───────┼─────────┼───────┼────────┤
  8289.     │ <F2>                         │ 3Cxxh │ 55xxh   │ 5Fxxh │ 69xxh  │
  8290.     ├──────────────────────────────┼───────┼─────────┼───────┼────────┤
  8291.     │ <F3>                         │ 3Dxxh │ 56xxh   │ 60xxh │ 6Axxh  │
  8292.     ├──────────────────────────────┼───────┼─────────┼───────┼────────┤
  8293.     │ <F4>                         │ 3Exxh │ 57xxh   │ 61xxh │ 6Bxxh  │
  8294.     ├──────────────────────────────┼───────┼─────────┼───────┼────────┤
  8295.     │ <F5>                         │ 3Fxxh │ 58xxh   │ 62xxh │ 6Cxxh  │
  8296.     ├──────────────────────────────┼───────┼─────────┼───────┼────────┤
  8297.     │ <F6>                         │ 40xxh │ 59xxh   │ 63xxh │ 6Dxxh  │
  8298.     ├──────────────────────────────┼───────┼─────────┼───────┼────────┤
  8299.     │ <F7>                         │ 41xxh │ 5Axxh   │ 64xxh │ 6Exxh  │
  8300.     ├──────────────────────────────┼───────┼─────────┼───────┼────────┤
  8301.     │ <F8>                         │ 42xxh │ 5Bxxh   │ 65xxh │ 6Fxxh  │
  8302.     ├──────────────────────────────┼───────┼─────────┼───────┼────────┤
  8303.     │ <F9>                         │ 43xxh │ 5Cxxh   │ 66xxh │ 70xxh  │
  8304.     ├──────────────────────────────┼───────┼─────────┼───────┼────────┤
  8305.     │ <F10>                        │ 44xxh │ 5Dxxh   │ 67xxh │ 71xxh  │
  8306.     └──────────────────────────────┴───────┴─────────┴───────┴────────┘
  8307.  
  8308.  
  8309.     Die folgenden  Tasten können nur in der Online-Hilfe benutzt werden
  8310.     und  können  dafür nicht umdefiniert werden  (wohl  aber im Monitor
  8311.     oder Interpreter):
  8312.  
  8313.     ┌──────────┬──────────────────────────────────────────────────────┐
  8314.     │          │                Eingabe über                          │
  8315.     │          ├────────────────────┬─────────────────────────────────┤
  8316.     │          │   die oberste      │ <ALT-n> mit n im externen       │
  8317.     │  Taste   │   Tastenreihe      │      Nummernblock               │
  8318.     ╞══════════╪════════════════════╪═════════════════════════════════╡
  8319.     │ <ALT-1>  │    7800h           │          0001h                  │
  8320.     │ <ALT-2>  │    7900h           │          0002h                  │
  8321.     │ <ALT-3>  │    7A00h           │          0003h                  │
  8322.     │ <ALT-4>  │    7B00h           │          0004h                  │
  8323.     │ <ALT-5>  │    7C00h           │          0005h                  │
  8324.     │ <ALT-6>  │    7D00h           │          0006h                  │
  8325.     │ <ALT-7>  │    7E00h           │          0007h                  │
  8326.     │ <ALT-8>  │    7F00h           │          0008h                  │
  8327.     │ <ALT-9>  │    8000h           │          0009h                  │
  8328.     └──────────┴────────────────────┴─────────────────────────────────┘
  8329.  
  8330.  
  8331.  
  8332.  
  8333.  
  8334.  
  8335.  
  8336.  
  8337.  
  8338.  
  8339.     ────────────────────────────────────────────────────────────────────────────────
  8340.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  133
  8341.  
  8342.  
  8343.  
  8344.     Make-Code der Aufruf-Taste
  8345.     ──────────────────────────
  8346.  
  8347.     MDEBUG erwartet folgende Make-Codes für die Hotkey-Taste:
  8348.  
  8349.     ┌─────────────┬───────────┐          ┌─────────────┬───────────┐
  8350.     │ ASCII-Code  │ Make-Code │          │ ASCII-Code  │ Make-Code │
  8351.     ╞═════════════╪═══════════╡          ╞═════════════╪═══════════╡
  8352.     │    'A'      │     1Eh   │          │    'N'      │     31h   │
  8353.     │    'B'      │     30h   │          │    'O'      │     18h   │
  8354.     │    'C'      │     2Eh   │          │    'P'      │     19h   │
  8355.     │    'D'      │     20h   │          │    'Q'      │     10h   │
  8356.     │    'E'      │     12h   │          │    'R'      │     13h   │
  8357.     │    'F'      │     21h   │          │    'S'      │     1Fh   │
  8358.     │    'G'      │     22h   │          │    'T'      │     14h   │
  8359.     │    'H'      │     23h   │          │    'U'      │     16h   │
  8360.     │    'J'      │     17h   │          │    'V'      │     2Fh   │
  8361.     │    'I'      │     24h   │          │    'W'      │     11h   │
  8362.     │    'K'      │     25h   │          │    'X'      │     2Dh   │
  8363.     │    'L'      │     26h   │          │    'Y'      │     2Ch   │
  8364.     │    'M'      │     32h   │          │    'Z'      │     15h   │
  8365.     └─────────────┴───────────┘          └─────────────┴───────────┘
  8366.  
  8367.  
  8368.  
  8369.  
  8370.  
  8371.  
  8372.  
  8373.  
  8374.  
  8375.  
  8376.  
  8377.  
  8378.  
  8379.  
  8380.  
  8381.  
  8382.  
  8383.  
  8384.  
  8385.  
  8386.  
  8387.  
  8388.  
  8389.  
  8390.  
  8391.  
  8392.  
  8393.  
  8394.  
  8395.  
  8396.  
  8397.  
  8398.  
  8399.     ────────────────────────────────────────────────────────────────────────────────
  8400.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  134
  8401.  
  8402.  
  8403.  
  8404.     Verträglichkeit gegenüber anderen Programmen
  8405.     ────────────────────────────────────────────
  8406.  
  8407.  
  8408.     ■ Bei Aufruf von MDEBUG über den Hotkey während WORD läuft, wird im
  8409.       Graphikmodus kein akustisches Signal ausgegeben.
  8410.       Zudem kommt MDEBUG der Tastaturverwaltung  von WORD ins Gehege so
  8411.       daß  ein Aufruf von MDEBUG falls WORD läuft unterbleiben sollte.
  8412.  
  8413.     ■ Ein  Maustreiber wird  von MDEBUG  nicht ausgeschaltet; eine Maus
  8414.       hat in MDEBUG aber keine Funktion.
  8415.  
  8416.     ■ Da MDEBUG die normalerweise von Debuggern benutzten Interrupts 01
  8417.       und 03 nicht benutzt,  ist der  Aufruf  von MDEBUG aus 'normalen'
  8418.       Debuggern heraus problemlos möglich.
  8419.  
  8420.     ■ Bei manchen  DOS-Versionen  3.2 ist teilweise  schon  eine Stack-
  8421.       Verwaltung wie ab DOS 3.3 implementiert.  Hier  lautet der Befehl
  8422.       für die Datei CONFIG.SYS aber 'STACK=n,m'.
  8423.       (siehe Stack-Überlauf).
  8424.       Das Programm FREESTCK.COM läuft aber erst ab DOS 3.3.
  8425.  
  8426.     ■ MDEBUG läuft  auch unter 4DOS ab Version  3.0 fehlerfrei. 
  8427.  
  8428.     ■ Falls ein Aufruf  von MDEBUG  abgebrochen wird,  z.B. durch einen
  8429.       Befehl  wie 'INT 20 <RETURN>', sind die  Tastenkombination <CTRL-
  8430.       ScrollLock> bzw. <CTRL-BREAK>, <CTRL-C> und <CTRL-2> blockiert.
  8431.       Der Fehler kann durch den Aufruf von MDEBUG mit dem Parameter SET
  8432.       behoben werden.
  8433.  
  8434.     ■ MDEBUG läuft auch unter DOS 5.0 fehlerfrei.
  8435.  
  8436.       Ausnahme:
  8437.  
  8438.       Falls der Swapper von DOS 5.0 aktiv ist,  kann  (muß aber nicht!)
  8439.       ein Aufruf  von MDEBUG das System zum Absturz bringen.  Der Grund
  8440.       dieses  Fehlers  ist mir,  aufgrund fehlender  Dokumentation  zum
  8441.       Swapper, leider noch nicht bekannt.
  8442.  
  8443.  
  8444.  
  8445.  
  8446.  
  8447.  
  8448.  
  8449.  
  8450.  
  8451.  
  8452.  
  8453.  
  8454.  
  8455.  
  8456.  
  8457.  
  8458.  
  8459.     ────────────────────────────────────────────────────────────────────────────────
  8460.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  135
  8461.  
  8462.  
  8463.  
  8464.  
  8465.  
  8466.  
  8467.  
  8468.  
  8469.  
  8470.  
  8471.  
  8472.  
  8473.                                    Anhang C
  8474.  
  8475.                             Installieren von MDEBUG
  8476.                             ───────────────────────
  8477.  
  8478.  
  8479.  
  8480.  
  8481.  
  8482.  
  8483.  
  8484.  
  8485.  
  8486.  
  8487.  
  8488.  
  8489.  
  8490.  
  8491.  
  8492.  
  8493.  
  8494.  
  8495.  
  8496.  
  8497.  
  8498.  
  8499.  
  8500.  
  8501.  
  8502.  
  8503.  
  8504.  
  8505.  
  8506.  
  8507.  
  8508.  
  8509.  
  8510.  
  8511.  
  8512.  
  8513.  
  8514.  
  8515.  
  8516.  
  8517.  
  8518.  
  8519.     ────────────────────────────────────────────────────────────────────────────────
  8520.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  136
  8521.  
  8522.  
  8523.  
  8524.     Installieren von MDEBUG
  8525.     ───────────────────────
  8526.  
  8527.     Normalerweise kann  MDEBUG sofort  ohne  eine Installation  genutzt
  8528.     werden.
  8529.  
  8530.     Allerdings  ist es möglich eine Kopie von  MDEBUG.COM, in  der  die
  8531.     Voreinstellungen  für  (fast)  alle Parameter den eigenen  Wünschen
  8532.     angepasst sind, zu erstellen.
  8533.  
  8534.     MDEBUG muß dazu mit dem Parameter 'MAKE' und den  neuen Voreinstel-
  8535.     lungen  für  die  zu ändernden Parameter aufgerufen werden.
  8536.     (Der Parameter 'MAKE' ist nur in der Vollversion implementiert!)
  8537.  
  8538.     Falls z.B. die  Farbattribute  für den  Monitor und den Interpreter
  8539.     geändert werden sollen, lautet der Aufruf:
  8540.  
  8541.          MDEBUG MAKE CoD=3E CoM=47
  8542.  
  8543.     MDEBUG  erstellt  dann eine neue Kopie der Datei MDEBUG.COM in  der
  8544.     die  Voreinstellungen  für  die  beiden  angegebenen Parameter ent-
  8545.     sprechend geändert sind. Alle anderen Voreinstellungen werden hier-
  8546.     durch nicht  verändert.  Ein  eventuell installiertes Passwort wird
  8547.     ebenfalls nicht verändert.
  8548.  
  8549.     Natürlich  können beim Aufruf der  neu erstellten  Kopie von MDEBUG
  8550.     durch die explizite Angabe der Parameter die geänderten Voreinstel-
  8551.     lungen  wieder  überschrieben  werden. Es  ist  auch  ohne weiteres
  8552.     möglich, eine so erstellte  Kopie von MDEBUG noch mal mit dem Para-
  8553.     meter 'MAKE' zur Änderung der neuen Voreinstellungen aufzurufen.
  8554.  
  8555.     Geändert werden können die Voreinstellungen für folgende Parameter:
  8556.  
  8557.          'INT', 'KEY', 'STD', 'STM',
  8558.          'CoM', 'CoD', 'CoHm',
  8559.          'RoM', 'RoD', 'RoH',
  8560.          'SEG=nnnn', 'SEG=reg', 'OFF=nnnn', 'OFF=reg',
  8561.          'TEXT', 'GRAPH', 'PRO',
  8562.          'HELP', 'NOHELP' und 'BUF'.
  8563.  
  8564.  
  8565.  
  8566.  
  8567.  
  8568.  
  8569.  
  8570.  
  8571.  
  8572.  
  8573.  
  8574.  
  8575.  
  8576.  
  8577.  
  8578.  
  8579.     ────────────────────────────────────────────────────────────────────────────────
  8580.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  137
  8581.  
  8582.  
  8583.  
  8584.     Ändern der Tastenbelegung von MDEBUG
  8585.     ────────────────────────────────────
  8586.  
  8587.     Mit Hilfe der Ausgaben von MDEBUG bei der Angabe des Parameters '#'
  8588.     kann die Tastenbelegung von MDEBUG den eigenen  Wünschen  angepasst
  8589.     werden.
  8590.  
  8591.     Die Ausgabe des Parameters '#' sieht wie folgt aus (verkürzt):
  8592.     (Die  Ausgabe sollte in eine Datei gelenkt werden;  die angegebenen
  8593.      Offsets können bei der aktuellen Version von MDEBUG anders lauten!
  8594.      Falls Sie die Beispiele  nachvollziehen wollen,  verwenden Sie die
  8595.      Tabellen,  die über den  Parameter '#' ausgegeben werden und nicht
  8596.      die hier wieder gegebenen!!)
  8597.  
  8598.     ────────────────────────────────────────────────────────────────────────────
  8599.  
  8600.     Offsets der Variablen für die Tastaturverwaltung in MDEBUG
  8601.     (im geladenem Programm -> in MDEBUG.COM jeweils -0100h)
  8602.  
  8603.     Offset der Tabelle mit dem High-Bytes der Funktions-Tasten: 1167h
  8604.     Aufbau der Tabelle:
  8605.  
  8606.      Offset in der     Funktionstaste       Inhalt
  8607.      Tabelle
  8608.     ------------------------------------------------
  8609.          00h              <CTRL-F1>           5Eh
  8610.          01h              <CTRL-PgUp>         84h
  8611.          {...}
  8612.          26h              <ALT-CursorDown>    A0h
  8613.          27h              <ALT-CursorUp>      98h
  8614.          28h              <ALT-PageUp>        99h
  8615.          29h              <ALT-PageDown>      A1h
  8616.  
  8617.     Offset der Tabelle mit den Scancodes für den Aufruf über den Hotkey: 1127h
  8618.     Aufbau der Tabelle:
  8619.  
  8620.      Offset in der     Taste    Inhalt
  8621.        Tabelle
  8622.     --------------------------------------------
  8623.           00h           <A>       1Eh
  8624.           01h           <B>       30h
  8625.           {...}
  8626.           19h           <Z>       15h
  8627.  
  8628.  
  8629.  
  8630.  
  8631.  
  8632.  
  8633.  
  8634.  
  8635.  
  8636.  
  8637.  
  8638.  
  8639.     ────────────────────────────────────────────────────────────────────────────────
  8640.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  138
  8641.  
  8642.  
  8643.  
  8644.     Offset der Tastenkodierungstabelle (alt) für den Interpreter: 1141h
  8645.     Offset der Tastenkodierungstabelle (neu) für den Interpreter: 1154h
  8646.     Länge der Tabellen: 0013h
  8647.     Aufbau der Tabellen:
  8648.  
  8649.     Offset in den      Inhalt (alt)       Inhalt (neu)
  8650.       Tabellen
  8651.     ---------------------------------------------------
  8652.         00h              <CTRL-O> ------>> <|>
  8653.         01h              <ä> ----------->> <«>
  8654.         {...}
  8655.         12h              <X> ----------->> <X>
  8656.  
  8657.     ────────────────────────────────────────────────────────────────────────────
  8658.  
  8659.     Mit  Hilfe dieser  Tabellen kann nun die Tastenbelegung  von MDEBUG
  8660.     den eigenen  Wünschen angepasst  werden.
  8661.  
  8662.     Dies  ist  vor  allen dann  nötig, falls eine von  MDEBUG erwartete
  8663.     Funktionstaste auf Ihren Computer unterdrückt wird (sei  es von der
  8664.     Tastatur oder vom Tastaturtreiber).
  8665.  
  8666.     Erkennbar  ist dieser  Fall daran,  daß  nach  dem Betätigen  einer
  8667.     Funktionstaste in MDEBUG nicht die gewünwschte Aktion  erfolgt.  In
  8668.     diesem Fall sollten Sie zuerst in MDEBUG über die Befehlsfolge
  8669.  
  8670.          MOV AH,0 ^I 16 <RETURN> { entsprechende Funktionstaste drücken}
  8671.  
  8672.     oder  falls  die  Funktion 10h  von der  Interrupt-Routine  für den
  8673.     Interrupt 16h unterstüzt wird:
  8674.  
  8675.          MOV AH,10 ^I 16 <RETURN> { entsprechende Funktionstaste drücken}
  8676.  
  8677.     den Scancode dieser Taste ermitteln (steht  nach der  Ausführung im
  8678.     Register AX) und mit den von MDEBUG erwarteten Code vergleichen.
  8679.  
  8680.     Stimmt der ermittelte Wert nicht mit dem von MDEBUG erwarteten Wert
  8681.     überein, müssen Sie  nach den  unten angeführten  Verfahren den von
  8682.     MDEBUG  erwarteten  Scancode für die Taste  korrigieren.  Falls der
  8683.     Wert übereinstimmt,  empfielt  sich  die  nochmalige  Lektüre  über
  8684.     die Funktion der Taste  in der Dokumentation - denn  dann haben Sie
  8685.     sehr wahrscheinlich irgend etwas falsch gemacht.
  8686.  
  8687.  
  8688.  
  8689.  
  8690.  
  8691.  
  8692.  
  8693.  
  8694.  
  8695.  
  8696.  
  8697.  
  8698.  
  8699.     ────────────────────────────────────────────────────────────────────────────────
  8700.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  139
  8701.  
  8702.  
  8703.  
  8704.     Hinweis:
  8705.  
  8706.     Falls Sie einen Tastaturtreiber  verwenden, der die neuen Tastatur-
  8707.     codes ab DOS 3.2  nicht  unterstützt,  sind umfangreiche Änderungen
  8708.     der Tastenbelegung erforderlich. In diesem Fall sollten  Sie  einen
  8709.     anderen Tastaturtreiber verwenden  (möglichst  einen, von  dem auch
  8710.     der Quellcode erhältlich ist)
  8711.     Ich  empfehle  für  diesen Fall  den Tastaturtreiber K3.COM aus der
  8712.     c't 7/88.  Dieser ist  inclusive  Assembler-Quellcode  über die c't
  8713.     erhältlich.
  8714.  
  8715.  
  8716.     Beispiel:
  8717.  
  8718.     Die Tasten  <ALT-CursorUp> und  <ALT-CursorDown>  liefern auf Ihrer
  8719.     Tastatur  keinen Code. Sie möchten deshalb für diese Funktionen die
  8720.     Tasten <ALT-E> und <ALT-X> verwenden.
  8721.  
  8722.     Um dies zu realisieren gehen Sie folgendermaßen vor:
  8723.  
  8724.     Zuerst muß  der  Scancode  der  neuen  Tasten  ermittelt werden. Im
  8725.     Interpreter von MDEBUG kann dies folgendermaßen erfolgen:
  8726.  
  8727.     Geben Sie den Befehl
  8728.  
  8729.          MOV AH,0 ^I 16 <RETURN>
  8730.  
  8731.     ein und drücken Sie die entsprechende  Taste. Notieren Sie den Wert
  8732.     aus AX, dies ist der benötigte Scancode der neuen Taste.
  8733.  
  8734.     Hinweis:
  8735.  
  8736.     Alle Tasten,  die  in MDEBUG  als Funktionstasten  verwendet werden
  8737.     sollen, müssen im LowByte den Wert 0h, 0E0h oder 0F0h liefern. Dies
  8738.     sind die meisten Funktionstasten und ALT-<zeichen>-Kombinationen.
  8739.  
  8740.     Diesen Vorgang wiederholen Sie für alle neuen Tasten.
  8741.     Um im Beispiel fortzufahren gehen wir von folgenden Werten aus:
  8742.  
  8743.           <ALT-E>  - Scancode 1200h
  8744.           <ALT-X>  - Scancode 2D00h
  8745.  
  8746.  
  8747.  
  8748.  
  8749.  
  8750.  
  8751.  
  8752.  
  8753.  
  8754.  
  8755.  
  8756.  
  8757.  
  8758.  
  8759.     ────────────────────────────────────────────────────────────────────────────────
  8760.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  140
  8761.  
  8762.  
  8763.  
  8764.     Ermitteln Sie aus der Tabelle von MDEBUG den  Offset der Funktions-
  8765.     tasten-Tabelle ('Tabelle mit dem High-Bytes der Funktions-Tasten'),
  8766.     im  Beispiel  ist  der Wert 1167h.  Dann  muß  aus der  angezeigten
  8767.     Tabelle der  Offset der umzubelegenden Tasten entnommen  werden. Im
  8768.     Beispiel ist das für die Taste  <ALT-CursorDown> 26 (hex.!) und für
  8769.     die Taste <ALT-CursorUp> 27 (hex). Ermitteln Sie nun für jede Taste
  8770.     den  Offset  in MDEBUG  indem Sie  den Offset  der Tabelle plus dem
  8771.     Offset der Taste in der Tabelle nehmen.
  8772.  
  8773.     Hier: <ALT-CursorDown> : 1167h + 26h = 118Dh
  8774.           <ALT-CursorUp>   : 1167h + 27h = 118Eh
  8775.  
  8776.  
  8777.     Nun starten Sie von der DOS-Ebene aus den DOS-Debugger Debug mit
  8778.  
  8779.          DEBUG MDEBUG.COM <RETURN>
  8780.  
  8781.     Jetzt  kann  für jede  zu  ändernde  Taste  über  den  Debug-Befehl
  8782.     'e nnnn'  die  jeweilige  Belegung  von  MDEBUG geändert werden. Im
  8783.     Beispiel  wäre  das (die Kommentare hinter ';' bitte nicht mit ein-
  8784.     geben)
  8785.  
  8786.     - für <ALT-CursorDown>
  8787.  
  8788.          e 118D <RETURN>   ; ermittelte Adresse der Funktionstaste
  8789.          2D     <RETURN>   ; neuer Scancode
  8790.                 <RETURN>
  8791.  
  8792.     - für <ALT-CursorUp>
  8793.  
  8794.          e 118E <RETURN>   ; ermittelte Adresse der Funktionstaste
  8795.          12     <RETURN>   ; neuer Scancode
  8796.                 <RETURN>
  8797.  
  8798.    Nachdem  Sie so  alle  Belegungen angepasst haben, schreiben Sie die
  8799.    geänderte Datei mit dem Befehl
  8800.  
  8801.          w <RETURN>
  8802.  
  8803.     zurück auf die Diskette/Platte.  Beachten Sie bitte, daß  Sie keine
  8804.     anderen  Speicherstellen  im  Programm  verändern  und  während der
  8805.     Debugsitzung auch keine Register über Debugbefehle verändern.
  8806.  
  8807.  
  8808.  
  8809.  
  8810.  
  8811.  
  8812.  
  8813.  
  8814.  
  8815.  
  8816.  
  8817.  
  8818.  
  8819.     ────────────────────────────────────────────────────────────────────────────────
  8820.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  141
  8821.  
  8822.  
  8823.  
  8824.     Verlassen Sie Debug über den Befehl
  8825.  
  8826.     q <RETURN>
  8827.  
  8828.  
  8829.     Durch den erneuten Aufruf von  MDEBUG mit dem  Parameter '#' können
  8830.     Sie nun überprüfen,  ob die Änderungen gelungen sind.
  8831.  
  8832.     Bei den angeführten  Verfahren sind folgende  Punkte zu berücksich-
  8833.     tigen:
  8834.  
  8835.     1. Die Änderungen sollten  natürlich  nur an einer Kopie von MDEBUG
  8836.        durchgeführt werden!
  8837.  
  8838.     2. Ein  Scancode  darf  nicht  zweimal vorkommen.  Sollte dies doch
  8839.        einmal  vorkommen, wird von MDEBUG nur die letzte  Angabe in der
  8840.        Tabelle berücksichtigt. Die vorherigen Angaben werden ignoriert.
  8841.        Dies  kann aber  genutzt werden,  um eine bestimmte Funktion von
  8842.        MDEBUG zu unterbinden.
  8843.  
  8844.        Beispiel:
  8845.  
  8846.        Falls für die Taste  <CLRL-F10> der Scancode einer Taste  die in
  8847.        der Tabelle NACH dieser kommt eingesetzt wird, z.B. der Scancode
  8848.        der  Taste <F5>, so wird die Funktion, die der Taste  <CTRL-F10>
  8849.        zugeordnet ist, nie ausgeführt.
  8850.  
  8851.        Gleiches erreicht man natürlich auch dadurch, daß  man einen nie
  8852.        vorkommenden Scancode einsetzt.
  8853.  
  8854.     3. Die  neue Tastenbelegung  sollte auch  in der  Datei  MDHELP.INP
  8855.        geändert werden und diese dann neu übersetzt werden.
  8856.  
  8857.     4. Die Codes der folgenden Tasten sollten nicht verändert werden:
  8858.        <F1>, <F4>, <F10>, <CursorRight> und <CursorLeft>.
  8859.  
  8860.  
  8861.     Weiteres Beispiel:
  8862.  
  8863.     Sie  möchten die Umbelegung der Taste <CTRL-O> aufheben, da Sie das
  8864.     Zeichen '|' auch anders erzeugen können.
  8865.  
  8866.     Dazu muß  die Tastenkodierungstabelle (neu)  oder  die Tastenkodie-
  8867.     rungstabelle (alt) verändert werden
  8868.  
  8869.  
  8870.  
  8871.  
  8872.  
  8873.  
  8874.  
  8875.  
  8876.  
  8877.  
  8878.  
  8879.     ────────────────────────────────────────────────────────────────────────────────
  8880.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  142
  8881.  
  8882.  
  8883.  
  8884.     Im Beispiel verändern wir die  Tastenkodierungstabelle (alt), indem
  8885.     wir die Umbelegung elimieren.
  8886.  
  8887.     Zuerst ermitteln Sie wieder den Offset der benötigten Tabelle, hier
  8888.     1141h, und den Offset der zu ändernden Tastenbelegung in der Tabel-
  8889.     le, hier 00h.
  8890.  
  8891.     Danach werden beide Werte wieder addiert um den Offset in MDEBUG zu
  8892.     ermitteln, also
  8893.  
  8894.          1141h + 00h = 1141h
  8895.  
  8896.     Die Änderung an  sich geschieht wieder über das Programm Debug.
  8897.     (Aufruf: debug MDEBUG.COM <RETURN>).
  8898.  
  8899.     Zur  Eliminierung  der Belegung  reicht es  aus, das  entsprechende
  8900.     Zeichen  in der Tastentabelle (alt) mit dem entsprechenden  Zeichen
  8901.     in der Tastentabelle neu (also '|') zu überschreiben.
  8902.  
  8903.     Die Debug-Befehle hierfür lauten:
  8904.  
  8905.          e 1141 <RETURN>
  8906.          7C     <RETURN>   ; 7Ch = ASCII-Code von '|'
  8907.                 <RETURN>
  8908.  
  8909.     Danach  kann die  geänderte  Version  von  MDEBUG  wieder zurückge-
  8910.     schrieben und Debug verlassen werden.
  8911.  
  8912.          w      <RETURN>
  8913.          q      <RETURN>
  8914.  
  8915.  
  8916.     Bei den angeführten  Verfahren sind  folgende Punkte zu berücksich-
  8917.     tigen:
  8918.  
  8919.     1. Die Änderungen sollten  natürlich  nur an einer Kopie von MDEBUG
  8920.        durchgeführt werden!
  8921.  
  8922.     2. Die neue  Tastenbelegung  sollte  auch  in  der Datei MDHELP.INP
  8923.        geändert werden  und diese dann neu übersetzt werden.
  8924.  
  8925.     3. Über diese beiden Tabellen können nur normale Tasten (-> LowByte
  8926.        des  Scancodes  ist  ungleich 0) und nur im Interpreter umbelegt
  8927.        werden.
  8928.  
  8929.  
  8930.  
  8931.  
  8932.  
  8933.  
  8934.  
  8935.  
  8936.  
  8937.  
  8938.  
  8939.     ────────────────────────────────────────────────────────────────────────────────
  8940.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  143
  8941.  
  8942.  
  8943.  
  8944.     4. Die Einträge am  Ende der  Tabelle (X <-> X) sind für neue Umbe-
  8945.        legungen durch den Benutzer reserviert.  Für eine  neue Belegung
  8946.        muß  in der Tastentabelle (alt) am gewünschten  Offset die umzu-
  8947.        belegende  Taste und  am  gleichen  Offset in der  Tastentabelle
  8948.        (neu) die neue Belegung eingetragen werden.
  8949.  
  8950.        Beachten  Sie  bitte,  daß  auch  hier  Sie selbst  dafür sorgen
  8951.        müssen,  daß  in der Tastentabelle (alt) keine Zeichen  mehrfach
  8952.        vorkommen.  In  der  Tastentabelle  (neu)  hingegen  kann  jedes
  8953.        Zeichen  beliebig oft vorkommen. Da  die Tabelle  nur einmal pro
  8954.        Taste  von  MDEBUG  konsultiert  wird, ist  eine  Rekursion  bei
  8955.        Tastenbelegungen wie
  8956.  
  8957.             'A' -> 'B'
  8958.             'B' -> 'A'
  8959.  
  8960.        ausgeschlossen.
  8961.  
  8962.     5. Die  Konvertierung über  die Tastentabellen erfolgt VOR der Kon-
  8963.        vertierung  eines  Zeichens  in  Großbuchstaben. Ein umkodiertes
  8964.        Zeichen wird NICHT mehr in Großbuchstaben konvertiert.
  8965.        Falls also, z.B., das  Zeichen 'a' öfters gebraucht wird, reicht
  8966.        der  Eintrag  von  'a' als alte und neue Tastenbelegung  in  den
  8967.        Tabellen aus um die Konvertierung von 'a' in 'A' zu unterbinden.
  8968.        D.h.  die  Eingabe  von 'a'  ist dann ohne die vorherige Eingabe
  8969.        des Prefix-Zeichens <CTRL-P> möglich.
  8970.  
  8971.  
  8972.     Weiteres Beispiel:
  8973.  
  8974.     Änderungen in der Tabelle  mit  den Scancodes sollten normalerweise
  8975.     nicht vorgenommen  werden.
  8976.  
  8977.     Temporäre Umbelegungen der Tasten  lassen sich sinnvollerweise über
  8978.     einen Kommandotreiber realisieren.
  8979.  
  8980.     Falls  diese Änderungen über einen Hex-Editor  direkt in der  Datei
  8981.     MDEBUG.COM durchgeführt werden, müssen von allen Offsets die MDEBUG
  8982.     ausgibt jeweils 100h abgezogen werden!
  8983.  
  8984.     Die angegebenen Verfahren  zum Anpassen  von MDEBUG sind zwar etwas
  8985.     umständlich,  aber  da sie im  Normalfall  nur einmal  durchgeführt
  8986.     werden ist dies m.E. noch erträglich.
  8987.  
  8988.  
  8989.  
  8990.  
  8991.  
  8992.  
  8993.  
  8994.  
  8995.  
  8996.  
  8997.  
  8998.  
  8999.     ────────────────────────────────────────────────────────────────────────────────
  9000.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  144
  9001.  
  9002.  
  9003.  
  9004.  
  9005.  
  9006.  
  9007.  
  9008.  
  9009.  
  9010.  
  9011.  
  9012.  
  9013.                                    Anhang D
  9014.  
  9015.                    Utilities und Beispieldateien zu MDEBUG
  9016.                    ───────────────────────────────────────
  9017.  
  9018.                                 Hinweis:
  9019.  
  9020.               Die mit dem Zeichen (VV) gekennzeichneten Dateien
  9021.             bzw. Programme sind nur in der Vollversion enthalten.
  9022.  
  9023.               Die Beschreibung der mitgelieferten Kommando- und
  9024.                  Bildschirmtreiber befindet sich in der Datei
  9025.                               'DRIVER.PRT'
  9026.  
  9027.  
  9028.  
  9029.  
  9030.  
  9031.  
  9032.  
  9033.  
  9034.  
  9035.  
  9036.  
  9037.  
  9038.  
  9039.  
  9040.  
  9041.  
  9042.  
  9043.  
  9044.  
  9045.  
  9046.  
  9047.  
  9048.  
  9049.  
  9050.  
  9051.  
  9052.  
  9053.  
  9054.  
  9055.  
  9056.  
  9057.  
  9058.  
  9059.     ────────────────────────────────────────────────────────────────────────────────
  9060.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  145
  9061.  
  9062.  
  9063.  
  9064.     MDEBUG.HLP
  9065.  
  9066.     Hilfstextdatei für MDEBUG
  9067.     'MDEBUG.HLP'  enthält den Hilfstext für die Online-Hilfe von MDEBUG
  9068.     in komprimierter Form.
  9069.  
  9070.     Die Datei wird beim Start  von MDEBUG mit dem Parameter 'HELP' ohne
  9071.     Angabe einer Hilfstextdatei einmal eingelesen und danach nicht mehr
  9072.     benötigt.
  9073.     Falls der Parameter 'HELP' ohne den  Zusatz '=name' angegeben wird,
  9074.     muß sich die Datei MDEBUG.HLP im  aktuellen Verzeichnis oder in dem
  9075.     Verzeichnis, in dem die Datei  MDEBUG.COM residiert befinden.
  9076.  
  9077.     MDHELP.INP  (VV)
  9078.  
  9079.     Quelldatei zur Erstellung von MDEBUG.HLP
  9080.  
  9081.  
  9082.     MDMKHLP.COM  (VV)
  9083.  
  9084.     MDMKHLP.COM  ist ein  Programm zur  Erstellung einer Hilfstextdatei
  9085.     für die Online-Hilfe von MDEBUG.
  9086.  
  9087.     Aufruf:
  9088.  
  9089.     MDMKHLP eingabedatei ausgabedatei {/N} {/I} {/S} {/B} {/Q} {@}
  9090.  
  9091.     Die Parameter haben folgende Bedeutungen:
  9092.  
  9093.     /N - Ausgabedatei nicht komprimieren
  9094.  
  9095.     Falls  der Parameter /N nicht angegeben ist,  wird die Ausgabedatei
  9096.     komprimiert,  ansonsten  werden  die  Zeilen der  Eingabedatei nach
  9097.     einer Syntaxüberprüfung unkomprimiert übernommen. MDEBUG kann beide
  9098.     Formate anzeigen,  aber das  unkomprimierte Format belegt natürlich
  9099.     mehr Speicher.
  9100.  
  9101.     /I - Sonderzeichen bei der Anzeige nicht interpretieren
  9102.  
  9103.     Falls  der Parameter '/I' angegeben ist, werden  alle Sonderzeichen
  9104.     in der  Ausgabedatei  mit dem Prefix-Zeichen versehen, so daß  eine
  9105.     Interpretierung bei  der Anzeige  in MDEBUG unterbleibt. Kommentare
  9106.     in der Eingabedatei werden dann ebenfalls in die Ausgabedatei über-
  9107.     nommen.
  9108.  
  9109.  
  9110.  
  9111.  
  9112.  
  9113.  
  9114.  
  9115.  
  9116.  
  9117.  
  9118.  
  9119.     ────────────────────────────────────────────────────────────────────────────────
  9120.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  146
  9121.  
  9122.  
  9123.  
  9124.     /B - Befehle für MDMKHLP nicht interpretieren
  9125.  
  9126.     /S - Zeilen mit mehr als 80  Zeichen umbrechen.
  9127.  
  9128.     Wenn  der Parameter '/S' angegeben  ist, können die Zeilen der Aus-
  9129.     gabedatei  max.  254 Zeichen  lang  werden.  Ohne den  Parameter /S
  9130.     dürfen die Zeilen der Ausgabedatei nur bis zu 80 Zeichen lang sein.
  9131.  
  9132.     /Q - Meldungen und Warnungen unterdrücken
  9133.  
  9134.     @  - Kommentar, Rest der Parameter überlesen
  9135.  
  9136.  
  9137.     Die Ein- und  Ausgabedateien müssen in der angegebenen  Reihenfolge
  9138.     angegeben werden; alle  anderen Parameter sind  optional und können
  9139.     hinter den  Dateinamen  in beliebiger Reihenfolge  angegeben werden
  9140.     (ausgenommen das Zeichen für den Kommentar '@').
  9141.  
  9142.     Falls die Datei ausgabedatei schon existiert, wird sie ohne Warnung
  9143.     überschrieben.  Eine  leere Ausgabeatei, d.h. ohne den eigentlichen
  9144.     Hilfstext, kann nicht erstellt werden.
  9145.  
  9146.     eingabedatei  muß  eine Textdatei mit jeweils  durch das Zeichen CR
  9147.     oder  die Zeichen-Kombination  CR/LF  abgeschlossenen  Zeilen sein.
  9148.     Alle  anderen ASCII-Steuerzeichen  (z.B. Tabulatoren)  werden nicht
  9149.     interpretiert.
  9150.     Jede Zeile der Eingabedatei kann max. 254 Zeichen lang sein.
  9151.  
  9152.     Die maximale Länge einer Zeile für die Ausgabedatei (also die Länge
  9153.     der  Zeile  der Eingabedatei  abzüglich  der Control-  und  Prefix-
  9154.     Zeichen  bis zu  einem  Kommentar-Zeichen, bzw.  bis  zum Ende  der
  9155.     Zeile, falls kein Kommentar-Zeichen  vorhanden ist), ist 80.
  9156.     Längere  Zeilen führen  zu einem  Syntaxfehler und zum Abbruch  des
  9157.     Programms (falls nicht der Parameter '/S angegeben ist).
  9158.  
  9159.     Die max. Größe  der Eingabedatei ist nicht beschränkt, die Ausgabe-
  9160.     datei kann max. 64 K groß  werden. Allerdings  muß die Beschränkung
  9161.     der  Puffergröße  von  MDEBUG  beachtet  werden,  falls die gesamte
  9162.     Datei in MDEBUG eingelesen werden soll.
  9163.  
  9164.     Das Zeichen '@' gilt als Kommentar-Zeichen; d.h. jede Zeile der
  9165.     Eingabedatei wird nur bis zum ersten '@' übernommen.  Soll das Zei-
  9166.     chen '@' in  die Ausgabedatei  übernommen  werden, so  muß  es  mit
  9167.     einem vorangestellten Prefix-Zeichen versehen werden.
  9168.  
  9169.  
  9170.  
  9171.  
  9172.  
  9173.  
  9174.  
  9175.  
  9176.  
  9177.  
  9178.  
  9179.     ────────────────────────────────────────────────────────────────────────────────
  9180.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  147
  9181.  
  9182.  
  9183.  
  9184.     Folgende Zeichen  gelten  als Sonderzeichen und werden bei der Aus-
  9185.     gabe der Datei in MDEBUG interrpetiert:
  9186.  
  9187.     # - Prefix-Zeichen, das folgende Zeichen wird uninterpretiert über-
  9188.         nommen
  9189.  
  9190.     ^ - Control-Zeichen,  falls das  folgende Zeichen im  Intervall von
  9191.         'A' bis 'Z' (bzw. 'a'...'z') ist, wird es in den entsprechenden
  9192.         CTRL-Code umgewandelt. Ansonsten wird das Zeichen  '^' so über-
  9193.         nommen. (Beispiel: '^A' = 01h, '^B' = 02h, usw.)
  9194.  
  9195.     $ - Umschalten  auf die  Farbe  2  bzw. zurück auf die  Farbe 1 und
  9196.         Ausgabe eines Leerzeichens
  9197.  
  9198.     ! - Umschalten  auf die  Farbe  3  bzw. zurück auf die  Farbe 1 und
  9199.         Ausgabe eines Leerzeichens
  9200.  
  9201.     Ein Nullbyte darf in der Eingabedatei  nicht vorkommen!  Jede Zeile
  9202.     der Eingabedatei muß mit CR/LF oder CR enden (auch die letzte!).
  9203.  
  9204.     Die  Control- und Prefix-Zeichen  sollten  bei der Formatierung der
  9205.     Zeilen berücksichtigt werden, sie dürfen  nicht ohne Prefix-Zeichen
  9206.     am Ende einer Zeile stehen. Falls ein Sonderzeichen in die Ausgabe-
  9207.     datei als Zeichen  übernommen  werden soll, muß  es mit dem Prefix-
  9208.     Zeichen versehen werden. (z.B. '##' für '#')
  9209.  
  9210.     Zu  Anfang jeder Zeile wird auf die Ausgabe-Farbe 1 geschaltet.
  9211.     Leerzeilen  werden übernommen;  Zeilen die nur aus einem  Kommentar
  9212.     bestehen (-> 1. Zeichen der Zeile ist '@') werden vollständig über-
  9213.     lesen.
  9214.  
  9215.     Die  erste zu übernehmende  Zeile der  Eingabedatei wird  als Über-
  9216.     schrift genommen und beim Scrollen des Hilfstextes in  MDEBUG immer
  9217.     angezeigt.  Ein Rahmen um den  Hilfstext muß   Bestandteil der Ein-
  9218.     gabedatei sein, falls er angezeigt werden soll.
  9219.  
  9220.     Alle Zeilen der Eingabedatei,  die mit  einem Punkt  in der  ersten
  9221.     Spalte  beginnen, werden als Befehl für  MDMKHLP  angesehen. Hinter
  9222.     einem korrekten Befehl kann noch ein beliebiger  Text als Kommentar
  9223.     stehen. Die Befehle setzen evtl. anders angegebene Parameter  außer
  9224.     Kraft.
  9225.  
  9226.  
  9227.  
  9228.  
  9229.  
  9230.  
  9231.  
  9232.  
  9233.  
  9234.  
  9235.  
  9236.  
  9237.  
  9238.  
  9239.     ────────────────────────────────────────────────────────────────────────────────
  9240.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  148
  9241.  
  9242.  
  9243.  
  9244.     Folgende Befehle sind implementiert:
  9245.  
  9246.     .Mn     mit 1 <= n <= 9
  9247.  
  9248.     Mit  diesem Befehl  kann  ein Marker mit  der Adresse der folgenden
  9249.     Zeile  als Voreinstellung belegt  werden. Für jeden Marker kann nur
  9250.     ein .M-Befehl in einer Datei angegeben werden. .M-Befehle für schon
  9251.     gesetzte  Marker werden als  falsche  Befehle behandelt.  Nicht ge-
  9252.     setzte Marker  werden von MDMKHLP auf die zweite Zeile der Ausgabe-
  9253.     datei  gesetzt.  MDMKHLP  gibt  jeweils für  jeden gesetzten Marker
  9254.     die Zeilennummer aus.
  9255.  
  9256.     .I0
  9257.  
  9258.     Interpretierung der besonderen Zeichen bei der Ausgabe für die fol-
  9259.     genden Zeilen verhindern
  9260.  
  9261.     .I1
  9262.  
  9263.     Interpretierung  der  besonderen  Zeichen für  die folgenden Zeilen
  9264.     wieder einschalten
  9265.  
  9266.     .N0
  9267.  
  9268.     Komprimierung der folgenden Zeilen verhindern
  9269.  
  9270.     .N1
  9271.  
  9272.     Komprimierung der folgenden Zeilen wieder einschalten
  9273.  
  9274.     .Kz
  9275.  
  9276.     Nehme das Zeichen z als Kommentar-Zeichen für die Eingabedatei.
  9277.     Voreinstellung für z ist das Zeichen '@'.
  9278.  
  9279.     .Q1
  9280.  
  9281.     Meldungen und Warnungen unterdrücken
  9282.  
  9283.     .Q0
  9284.  
  9285.     Meldungen und Warnungen ausgeben
  9286.  
  9287.  
  9288.  
  9289.  
  9290.  
  9291.  
  9292.  
  9293.  
  9294.  
  9295.  
  9296.  
  9297.  
  9298.  
  9299.     ────────────────────────────────────────────────────────────────────────────────
  9300.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  149
  9301.  
  9302.  
  9303.  
  9304.     .B
  9305.  
  9306.     Beende  die  Interpretierung  von Befehlen,  d.h.  ab diesen Befehl
  9307.     werden auch alle mit einem Punkt beginnenden Zeilen in die Ausgabe-
  9308.     datei übernommen. (von diesem Befehl gibt es kein zurück!)
  9309.  
  9310.  
  9311.     Die  folgenden  Befehle können jeweils nur EINMAL  VOR  dem eigent-
  9312.     lichen  Text  der  Hilfstext-Datei  angegeben  werden. (Fehlerhafte
  9313.     Befehle zählen nicht)  Der Hilfstext  beginnt  mit der ersten Zeile
  9314.     die  keinen  Befehl  enthält  und  nicht  nur  aus  einem Kommentar
  9315.     besteht. (Leerzeilen werden in den Hilfstext übernommen!)
  9316.  
  9317.     .Pz
  9318.  
  9319.     Nehme das Zeichen z als Prefix-Zeichen für  die Anzeige
  9320.     Voreinstellung für z ist das Zeichen '#'
  9321.  
  9322.     .Cz
  9323.  
  9324.     Nehme das Zeichen z als Control-Zeichen für die Anzeige
  9325.     Voreinstellung für z ist das Zeichen '^'
  9326.  
  9327.     .F1z
  9328.  
  9329.     Nehme das Zeichen z als 1. Farbmarker für die Anzeige
  9330.     Voreinstellung für z ist das Zeichen '$'
  9331.  
  9332.     .F2z
  9333.  
  9334.     Nehme das Zeichen z als 2. Farbmarker für die Anzeige
  9335.     Voreinstellung für z ist das Zeichen '!'
  9336.  
  9337.     Für den Parameter z der Befehle gilt:
  9338.  
  9339.     Außer  den Zeichen mit dem ASCII-Codes 00h,  07h, 08h, 09h, 0Ah und
  9340.     0Dh  kann jedes  Zeichen als besonderes Zeichen benutzt werden.  Es
  9341.     ist nicht möglich einem Zeichen mehrere Bedeutungen zuzuordnen.
  9342.  
  9343.     Für  jeden fehlerhaften  Befehl gibt  MDMKHLP  eine Warnung auf die
  9344.     Standard-Ausgabe  aus. Zeilen  mit falschen Befehlen  werden  nicht
  9345.     übernommen und führen nicht zum Programm-Abbruch.
  9346.  
  9347.  
  9348.  
  9349.  
  9350.  
  9351.  
  9352.  
  9353.  
  9354.  
  9355.  
  9356.  
  9357.  
  9358.  
  9359.     ────────────────────────────────────────────────────────────────────────────────
  9360.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  150
  9361.  
  9362.  
  9363.  
  9364.     Soll eine Zeile, die mit einem Punkt beginnt, bei aktiver Interpre-
  9365.     tierung  der Befehle  durch  MDMKHLP in die Ausgabedatei übernommen
  9366.     werden,  so muß  diese  mit  einem  vorangestellten  Prefix-Zeichen
  9367.     versehen werden.
  9368.  
  9369.     MDMKHLP gibt jeweils eine Meldung über die Bearbeitungsschritte auf
  9370.     die Standard-Ausgabe auf. Falls ein Fehler bei der Dateibearbeitung
  9371.     oder ein Syntax-Fehler auftritt, wird  das Programm abgebrochen und
  9372.     eine Fehlermeldung auf die Standard-Ausgabe ausgegeben.
  9373.     Bei  Syntaxfehlern  werden  die Zeile  und die  Spalte des falschen
  9374.     Zeichens  mit ausgegeben. Die Angaben beziehen sich  dabei  auf die
  9375.     Eingabedatei (Kommentarzeilen zählen dabei mit).
  9376.  
  9377.     Nach einer  erfolgreichen Bearbeitung  gibt MDMKHLP  die  Größe der
  9378.     Ausgabedatei  in  Byte und  die  verwendeten  Sonderzeichen auf die
  9379.     Standard-Ausgabe aus.
  9380.  
  9381.     Hinweis:
  9382.  
  9383.     Falls  bei  Angabe des  Schalters /S ohne  den Schalter /N  das 80.
  9384.     Zeichen in einer Folge mit mehr als 3 Zeichen  liegt, so werden nur
  9385.     die vor dem 80. Zeichen liegenden Zeichen dieser Folge angezeigt.
  9386.     Das gleiche gilt für die Spalten 160 und 240.
  9387.  
  9388.     Abhilfe:  Komprimierung für diese Zeile(n) ausschalten.
  9389.  
  9390.  
  9391.  
  9392.  
  9393.  
  9394.  
  9395.  
  9396.  
  9397.  
  9398.  
  9399.  
  9400.  
  9401.  
  9402.  
  9403.  
  9404.  
  9405.  
  9406.  
  9407.  
  9408.  
  9409.  
  9410.  
  9411.  
  9412.  
  9413.  
  9414.  
  9415.  
  9416.  
  9417.  
  9418.  
  9419.     ────────────────────────────────────────────────────────────────────────────────
  9420.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  151
  9421.  
  9422.  
  9423.  
  9424.     MDSHELP.COM  (VV)
  9425.  
  9426.     MDSHELP.COM ist ein Programm zum Überprüfen der  Formatierung einer
  9427.     mit MDMKHLP erstellten Hilfstextdatei für MDEBUG.
  9428.  
  9429.     Aufruf: MDSHELP {hilfstextdatei} {@} {kommentar}
  9430.  
  9431.     Parameter:
  9432.  
  9433.     hilfstextdatei - Name der zu testenden Datei
  9434.                      Der Name  der Hilfstextdatei  kann nicht mit dem
  9435.                      Zeichen '@' beginnen.
  9436.  
  9437.     @              - Rest der Parameter überlesen
  9438.  
  9439.     Die Voreinstellung  für die Hilfstextdatei ist 'MDEBUG.HLP' im akt.
  9440.     Directory.
  9441.  
  9442.     MDSHELP zeigt den Hilfstext in der oberen  Bildschirmhälfte genauso
  9443.     wie er in der Online-Hilfe von MDEBUG angezeigt würde an.
  9444.  
  9445.     Zusätzlich gibt MDSHELP zur Information  auch  noch die verwendeten
  9446.     Sonderzeichen  in der Datei auf die Standard-Ausgabe  aus. Bei  der
  9447.     Anzeige sind alle Tasten wie in der Onlinehilfe von MDEBUG  belegt.
  9448.     Allerdings  kann das Fenster von  MDSHELP  nicht  verschoben werden
  9449.     und MDSHELP unterstützt keine  externen Bildschirmtreiber. (MDSHELP
  9450.     ermittelt die Daten des aktuellen  Bildschirm-Modus über den Inter-
  9451.     rupt 10h und die BIOS-Data-Area.)
  9452.  
  9453.     MDSHELP kann bis zu 55 K große Dateien bearbeiten.
  9454.  
  9455.  
  9456.     SETMD.EXE
  9457.  
  9458.     Mit  SETMD kann das Passwort von MDEBUG geändert, gelöscht oder neu
  9459.     eingerichtet werden.
  9460.  
  9461.     Aufruf: SETMD
  9462.  
  9463.     SETMD erfragt alle benötigten Daten im Dialog mit dem Benutzer.
  9464.  
  9465.     Falls eine mit einem Passwort versehene Version von MDEBUG geändert
  9466.     werden soll, so muß  das alte Passwort bekannt sein. Ein Fehler bei
  9467.     der Eingabe führt zum Programm-Abbruch.
  9468.  
  9469.  
  9470.  
  9471.  
  9472.  
  9473.  
  9474.  
  9475.  
  9476.  
  9477.  
  9478.  
  9479.     ────────────────────────────────────────────────────────────────────────────────
  9480.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  152
  9481.  
  9482.  
  9483.  
  9484.     SETREGNR.EXE  (VV)
  9485.  
  9486.     Mit dem Programm  SETREGNR kann  ein Benutzer der Vollversion seine
  9487.     Registrierungs-Nummer  in  das  Programm  MDEBUG.COM eintragen. Die
  9488.     Eintragung deaktiviert die Shareware-Meldung und gibt den Parameter
  9489.     'MAKE' frei.
  9490.  
  9491.     Aufruf: SETREGNR
  9492.  
  9493.     SETREGNR erfragt alle  benötigten Daten im Dialog mit dem Benutzer.
  9494.  
  9495.  
  9496.     CALLMDB.COM  (VV)
  9497.  
  9498.     CALLMDB.COM ist ein Programm zum Aufruf von MDEBUG aus einer Batch-
  9499.     datei heraus.
  9500.  
  9501.     Aufruf: CALLMDB {/opt} {"text"} {#nnnn} {...} {#} {@ kommentar}
  9502.  
  9503.     Parameter:
  9504.  
  9505.     opt  - Optionen für CALLMDB:
  9506.  
  9507.              N     - Diese  Option unterdrückt das  Anhängen  von <F10>
  9508.                      hinter den Parametern durch CALLMDB
  9509.  
  9510.              Pxxxx - 'xxxx' ist das Passwort für MDEBUG
  9511.  
  9512.  
  9513.     text - Text der zeichenweise übergeben wird
  9514.  
  9515.     Falls das Zeichen " übergeben werden soll, muß  es durch "" angege-
  9516.     ben werden.  Control-Codes  können durch  das Zeichen ^ gefolgt von
  9517.     einem  Großbuchstaben  eingegeben werden.  Das  Zeichen ^ vor einem
  9518.     Großbuchstaben muß als ^^ angegeben werden.
  9519.  
  9520.  
  9521.  
  9522.  
  9523.  
  9524.  
  9525.  
  9526.  
  9527.  
  9528.  
  9529.  
  9530.  
  9531.  
  9532.  
  9533.  
  9534.  
  9535.  
  9536.  
  9537.  
  9538.  
  9539.     ────────────────────────────────────────────────────────────────────────────────
  9540.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  153
  9541.  
  9542.  
  9543.  
  9544.     #nnnn - Scancode einer Taste (hexadezimal)
  9545.               speziell:
  9546.  
  9547.               #0 - Simuliere leeren Tastaturpuffer.
  9548.                      Der Code ist notwendig, falls nach einen mit einen
  9549.                      Fehler endenden Befehl noch weitere Befehle ausge-
  9550.                      führt werden sollen.  (MDEBUG löscht den Tastatur-
  9551.                      puffer nach einem Fehler)
  9552.  
  9553.     Die  Scancodes  der  Funktionstasten  können  der  Tabelle  in  der
  9554.     Dokumentation von MDEBUG entnommen  werden oder  über MDEBUG ermit-
  9555.     telt werden.  Der  angegebene Wert  darf  nicht  größer  als 0FFFFh
  9556.     sein;  führende Nullen  sind möglich.  Der ermittelte Wert wird bis
  9557.     auf Wortgröße  von links mit Nullen aufgefüllt (z.B. wird aus '#0D'
  9558.     der Scancode 000Dh). Da MDEBUG den Status der Umschalt-Tasten nicht
  9559.     berücksichtigt,  können  auch die Tastaturcodes für Tasten wie z.B.
  9560.     <SHIFT-F6> o.ä. übergeben werden.
  9561.  
  9562.  
  9563.     # - Ausgabe der von CALLMDB verwendeten Tastencodes und Beenden des
  9564.         Aufrufs. Falls die Codes der Tasten <F10>,  <F4> oder  <ESC> in
  9565.         MDEBUG geändert werden, müssen die neuen Codes auch  in CALLMDB
  9566.         eingetragen werden!
  9567.         (siehe Beschreibung der Parameter von MDEBUG)
  9568.  
  9569.  
  9570.     @ - Rest der Parameter überlesen
  9571.  
  9572.  
  9573.     Übergeben werden nur die  Zeichen  zwischen  zwei  Gänsefüßchen und
  9574.     die  explizit  angegebenen  Scancodes.  Zwischen  diesen dürfen zur
  9575.     Trennung Leerzeichen und Tabulatoren gesetzt werden. Maximal können
  9576.     256 Tastencodes übergeben werden. Dieses Maximum kann aber aufgrund
  9577.     der Beschränkung von DOS nie erreicht werden.
  9578.  
  9579.     Ein falscher Parameter führt zum Abbruch von CALLMDB.
  9580.  
  9581.     Der User-Int von MDEBUG muß  installiert sein falls CALLMDB benutzt
  9582.     werden soll.  CALLMDB installiert, nachdem es festgestellt hat, das
  9583.     MDEBUG mit einem User-Int geladen ist,  eine eigene Routine für die
  9584.     Ermittlung der Tastatureingaben in MDEBUG und ruft den User-Int von
  9585.     MDEBUG auf.  Die Parameter  werden dann sequentiell an MDEBUG über-
  9586.     geben.
  9587.     Nach  dem Aufruf  über CALLMDB startet MDEBUG immer im Interpreter.
  9588.  
  9589.  
  9590.  
  9591.  
  9592.  
  9593.  
  9594.  
  9595.  
  9596.  
  9597.  
  9598.  
  9599.     ────────────────────────────────────────────────────────────────────────────────
  9600.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  154
  9601.  
  9602.  
  9603.  
  9604.     Befehle  für MDEBUG  können  wie im  Interpreter angegeben  werden,
  9605.     müssen  aber jeweils  mit dem  ScanCode der  Taste <RETURN> beendet
  9606.     werden:
  9607.  
  9608.     Beispiel:   CALLMDB "M FS,CS ^M FO,0 ^M "
  9609.                                  ─┐      ┌─
  9610.                                   └──┬───┘
  9611.                                  <RETURN>
  9612.                 oder
  9613.  
  9614.                 CALLMDB "M FS,CS " #0D " M FO,0" #0D
  9615.                                    ──┐           ┌──
  9616.                                      └───┬───────┘
  9617.                                       <RETURN>
  9618.  
  9619.     Die  Tastenumbelegungen des Interpreters sind auch für über CALLMDB
  9620.     übergebene Befehl gültig:
  9621.  
  9622.     Beispiel:  CALLMDB "M AX,4ä1" #0D
  9623.                        ──────────
  9624.                        Interpreter-Befehl: M AX,4«1
  9625.  
  9626.  
  9627.     Kleinbuchstaben  werden von MDEBUG in  Großbuchstaben  konvertiert.
  9628.     Soll  ein Kleinbuchstabe eingegeben werden, so muß  diesem der Code
  9629.     für <CTRL-P> vorangestellt werden.
  9630.  
  9631.     Beispiel:   CALLMDB "M R8,'^Pa' ^M "
  9632.                                ──
  9633.                                <CTRL-P>
  9634.                 oder
  9635.  
  9636.                 CALLMDB "M R8,'" #1910 "a'" #0D
  9637.                                  ─────
  9638.                                  <CTRL-P>
  9639.  
  9640.     Steuerzeichen müssen ebenfalls mit dem Prefix-Zeichen versehen ein-
  9641.     gegeben werden.
  9642.  
  9643.     Hinter den angegegebenen Parametern setzt CALLMDB noch den Scancode
  9644.     für <F10> damit MDEBUG nach der Bearbeitung sofort wieder verlassen
  9645.     wird. Soll dies verhindert werden, so muß CALLMDB mit dem Parameter
  9646.     '/N' aufgerufen  werden  oder  als letzter Befehl für MDEBUG der W-
  9647.     Befehl übergeben werden:
  9648.  
  9649.     Beispiel:   CALLMDB "M R8,'A' ^ W " #0D
  9650.  
  9651.  
  9652.  
  9653.  
  9654.  
  9655.  
  9656.  
  9657.  
  9658.  
  9659.     ────────────────────────────────────────────────────────────────────────────────
  9660.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  155
  9661.  
  9662.  
  9663.  
  9664.     Hinweis:
  9665.  
  9666.     Falls das Passwort von MDEBUG aktiv ist und der  Parameter '/P' für
  9667.     CALLMDB nicht angegeben wird,  wird MDEBUG nach der Bearbeitung der
  9668.     Parameter NICHT sofort verlassen.
  9669.  
  9670.  
  9671.     Natürlich kann in den  Parametern auch  vorher schon ein Befehl zum
  9672.     Verlassen von MDEBUG enthalten sein. Die  Parameterteile,  die dann
  9673.     von MDEBUG  nicht mehr  bearbeitet  werden, werden verworfen (keine
  9674.     Weitergabe an andere Programme).
  9675.  
  9676.     Beispiel:   CALLMDB {irgendwas}  #1B #1B      {irgendwas}
  9677.                         ──────────   ───────      ───────────
  9678.                         wird ausge-  2 x <ESC>,   wird ignoriert
  9679.                         führt        MDEBUG
  9680.                                      verlassen
  9681.  
  9682.     Falls das  Passwort  von  MDEBUG aktiv  ist, sollte  der  Parameter
  9683.     '/Pxxxx' benutzt werden, da das Passwort  ansonsten zweimal vor den
  9684.     eigentlichen Parametern und zusätzlich einmal manuell eingegeben werden
  9685.     muß.
  9686.     Falls  nach  jedem Start  von MDEBUG über CALLMDB  Voreinstellungen
  9687.     vorgenommen werden sollen, wird sinnvollerweise  das Passwort durch
  9688.     SETMD zwar eingerichtet,  aber so,  daß es beim Start zuerst ausge-
  9689.     schaltet ist. Als erster  Parameter für CALLMDB wird dann der Scan-
  9690.     code  von <F3>, #3D00h,  angegeben womit das Passwort eingeschaltet
  9691.     wird.
  9692.  
  9693.     Beispiel:   CALLMDB #3D00 {weitere Befehle/Tasten}
  9694.  
  9695.     Über CALLMDB kann auch  während der  Abarbeitung  einer Batch-Datei
  9696.     die Tastatur für einen Teil der Befehle gesperrt werden:
  9697.  
  9698.          REM Befehle, die unterbrechenbar ausgeführt werden sollen
  9699.          REM ...
  9700.  
  9701.          REM Tastatur blockieren (falls das Passwort von MDEBUG schon
  9702.          REM eingeschaltet ist, kann der Tastencode #3D00 entfallen,
  9703.          REM xxxx = Passwort von MDEBUG)
  9704.          CALLMDB #3D00 "QL ^M" /Pxxxx
  9705.  
  9706.          REM Befehle, die mit Tastaturblockierung ausgeführt werden
  9707.          REM sollen
  9708.          REM ...
  9709.  
  9710.          REM und Tastaturblockierung wieder aufheben
  9711.          CALLMDB /Pxxxx
  9712.  
  9713.  
  9714.  
  9715.  
  9716.  
  9717.  
  9718.  
  9719.     ────────────────────────────────────────────────────────────────────────────────
  9720.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  156
  9721.  
  9722.  
  9723.  
  9724.     TESTMD.PAS
  9725.  
  9726.     Demo-Programm in Turbo-Pascal 4.0/5.0 zur Demonstration der Nutzung
  9727.     von MDEBUG in eigenen Programmen.
  9728.  
  9729.     Zur Compilierung werden die Dateien
  9730.  
  9731.          CHECKMD.OBJ, CALLMD.OBJ, MDCMD.OBJ und KONVERT.OBJ
  9732.  
  9733.     benötigt.
  9734.  
  9735.     TESTMD.EXE
  9736.  
  9737.     Übersetzte Version von TESTMD.PAS
  9738.  
  9739.     Aufruf: TESTMD
  9740.  
  9741.  
  9742.     CHECKMD.A86
  9743.  
  9744.     Assember-Routine  zum Überprüfen,  ob MDEBUG  installiert  ist und,
  9745.     falls ja, Ermitteln des User-Ints von MDEBUG. Der Quelltext ist für
  9746.     die Übersetzung mit dem Assembler A86 geschrieben.
  9747.  
  9748.     Die  Routine wurde  speziell zur Nutzung in Turbo-Pascal-Programmen
  9749.     geschrieben und sollte für andere  Programmiersprachen als Beispiel
  9750.     genommen werden.
  9751.  
  9752.     CHECKMD.OBJ
  9753.  
  9754.     Übersetzte Version von CHECKMD.A86
  9755.  
  9756.  
  9757.     CALLMD.A86
  9758.  
  9759.     Assembler-Routine  zum Aufruf  des User-Ints  von MDEBUG  aus einem
  9760.     Turbo-Pascal-Programm heraus. Der Quelltext ist für die Übersetzung
  9761.     mit dem Assembler A86 geschrieben.
  9762.  
  9763.     Die  Routine wurde  speziell zur Nutzung in Turbo-Pascal-Programmen
  9764.     geschrieben und sollte für andere Programmiersprachen als  Beispiel
  9765.     genommen werden.
  9766.  
  9767.     CALLMD.OBJ
  9768.  
  9769.     Übersetzte Version von CALLMD.A86
  9770.  
  9771.  
  9772.  
  9773.  
  9774.  
  9775.  
  9776.  
  9777.  
  9778.  
  9779.     ────────────────────────────────────────────────────────────────────────────────
  9780.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  157
  9781.  
  9782.  
  9783.  
  9784.     MDCMD.A86
  9785.  
  9786.     Assembler-Routine  zur Ausführung von  Befehlszeilen über MDEBUG in
  9787.     eigenen Programmen.  Der Quelltext ist für die  Übersetzung mit dem
  9788.     Assembler A86 geschrieben.
  9789.  
  9790.     Die  Routine wurde  speziell zur Nutzung in Turbo-Pascal-Programmen
  9791.     geschrieben und sollte für andere Programmiersprachen als  Beispiel
  9792.     genommen werden.
  9793.  
  9794.     MDCMD.OBJ
  9795.  
  9796.     Übersetzte Version von MDCMD.A86
  9797.  
  9798.  
  9799.     KONVERT.A86
  9800.  
  9801.     Konvertierungs-Routinen für TESTMD.PAS
  9802.     Der  Quelltext  ist  für  die  Übersetzung  mit  dem  Assembler A86
  9803.     geschrieben.
  9804.  
  9805.     KONVERT.OBJ
  9806.  
  9807.     Übersetzte Version von KONVERT.A86
  9808.  
  9809.  
  9810.     UPSTR.BIN
  9811.     LOWSTR.BIN
  9812.  
  9813.     Beispieldateien für die Möglichkeit über den Parameter '&name' auch
  9814.     übersetzte  Routinen ins PSP von MDEBUG  einzulesen.  In den beiden
  9815.     Dateien  steht jeweils  am Ende  der Datei die Länge  des Codes als
  9816.     Wort (eingerahmt  mit der Zeichenfolge  '**') und dahinter der Name
  9817.     der Routine (abgeschl. durch '*').
  9818.     UPSTR.BIN und LOWSTR.BIN belegen jeweils 32 Byte.
  9819.  
  9820.     Benutzung (z.B.):  MDEBUG &upstr.bin,,,N
  9821.                        MDEBUG SET &lowstr.bin,0,32,N
  9822.  
  9823.     UPSTR.A86
  9824.     LOWSTR.A86
  9825.  
  9826.     Quelldateien für UPSTR.BIN und LOWSTR.BIN. Die Übersetzung erfolgte
  9827.     mit  dem A86.  Dieser Assembler  ist für solche  Aufgaben auf jedem
  9828.     Fall dem MASM vorzuziehen.
  9829.  
  9830.  
  9831.  
  9832.  
  9833.  
  9834.  
  9835.  
  9836.  
  9837.  
  9838.  
  9839.     ────────────────────────────────────────────────────────────────────────────────
  9840.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  158
  9841.  
  9842.  
  9843.  
  9844.     SHOWINT.COM  (VV)
  9845.  
  9846.     SHOWINT.COM ist ein  Util  zum Überwachen  der  Aufrufe  einer oder
  9847.     mehrerer Funktionen eines beliebigen Interrupts.
  9848.  
  9849.     SHOWINT hängt sich dafür direkt  in den zu  überwachenden Interrupt
  9850.     ein und zeigt  jeden Aufruf  des Interrupts  mit einer der zu über-
  9851.     wachenden  Funktionsnummern vor  oder nach der  Ausführung in einem
  9852.     Popup-Fenster an.
  9853.  
  9854.     SHOWINT kann folgendermaßen aufgerufen werden:
  9855.  
  9856.          SHOWINT {n1} {n2..n3} {schalter} {@}
  9857.  
  9858.  
  9859.     Die Parameter haben dabei folgende Bedeutung:
  9860.  
  9861.  
  9862.     n1     - Festlegen einer zu überwachenden Funktionsnummer
  9863.  
  9864.     n2..n3 - Festlegen mehrerer  zu überwachender Funktionsnummern über
  9865.              ein Intervall. Alle Funktionsnummern  zwischen  'n2' und
  9866.              'n3' (incl.) werden überwacht.  Falls 'n2 > n3' werden die
  9867.              Nummern vertauscht.
  9868.  
  9869.  
  9870.     SHOWINT speichert die zu  überwachenden Funktionsnummern  intern in
  9871.     einer Tabelle. Alle Funktionsnummern sind daher additiv.
  9872.  
  9873.     'n1', 'n2' und 'n3' müssen hexadezimale Werte zwischen 00h und 0FFh
  9874.     sein.
  9875.  
  9876.  
  9877.     /V     - Schalte Lösche/Setze-Schalter um (Voreinst.: Setzen)
  9878.  
  9879.     Normalerweise führt die Angabe von 'n1' oder 'n2..n3' dazu, daß die
  9880.     angegebenen Funktionsnummern  von SHOWINT  überwacht werden.  Falls
  9881.     aber der Lösche/Setze-Schalter auf 'Löschen' steht, ist die Wirkung
  9882.     der Parameter 'n1'  und 'n2..n3'  genau umgekehrt, d.h. diese Funk-
  9883.     tionsnummern werden von SHOWINT dann nicht überwacht!  Der Schalter
  9884.     kann beliebig oft umgeschaltet werden.
  9885.  
  9886.  
  9887.  
  9888.  
  9889.  
  9890.  
  9891.  
  9892.  
  9893.  
  9894.  
  9895.  
  9896.  
  9897.  
  9898.  
  9899.     ────────────────────────────────────────────────────────────────────────────────
  9900.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  159
  9901.  
  9902.  
  9903.  
  9904.     Beispiel: SHOWINT 00..40 /V  05 06  /V 80..FF
  9905.                         setzen    löschen    setzen
  9906.  
  9907.     In  diesem Beispiel werden alle Funktionsnummern zwischen 0 und 40h
  9908.     mit Ausnahme der  Funktionsnummern 05h und  06h und alle Funktions-
  9909.     nummern zwischen 80h und 0FFh überwacht.
  9910.  
  9911.  
  9912.     /L     - Lösche die ganze Tabelle (unabhängig vom Schalter '/V')
  9913.  
  9914.     Dieser Schalter löscht die interne Tabelle für die zu überwachenden
  9915.     Funktionsnummern, d.h. es werden keine Aufrufe des Interrupts über-
  9916.     wacht. 
  9917.     Der Schalter ist unabhängig vom Wert des Lösche/Setze-Schalters.
  9918.  
  9919.  
  9920.     /S     - Ausgabe der aktuellen Tabelle auf die Standard-Ausgabe.
  9921.  
  9922.     Durch  den Schalter '/S' kann  der Inhalt der  internen Tabelle für
  9923.     die zu überwachenden Funktionsnummern auf die Standard-Ausgabe aus-
  9924.     gegeben werden. (->> Ausgabe aller momentan  überwachten Funktions-
  9925.     nummern)
  9926.     Falls  schon eine  Version des  Programms resident ist,  wird deren
  9927.     Tabelle ausgegeben.
  9928.  
  9929.  
  9930.     /U     - Überschreibe die Tabelle einer  residenten  Version  von
  9931.              SHOWINT
  9932.  
  9933.     Die zu überwachenden Funktionsaufrufe von SHOWINT  können auch nach
  9934.     der Installierung noch  geändert werden. Hierzu muß einer der Para-
  9935.     meter '/U', '/!' oder '/&' angegeben werden.
  9936.  
  9937.     Wird  nur  der  Parameter  '/U'  angegeben,  wird  die  Tabelle der
  9938.     residenten Version überschrieben, d.h.  es werden  nur noch die neu
  9939.     angegebenen Funktionsnummern überwacht.
  9940.  
  9941.  
  9942.     /!     - Korrigiere die Tabelle einer residenten Version von
  9943.              SHOWINT
  9944.  
  9945.     Dieser Parameter wirkt wie der Parameter '/U',  allerdings wird die
  9946.     Tabelle der residenten Version nicht überschrieben, sondern mit der
  9947.     neuen  Tabelle verANDet,  d.h. es werden nur noch die Funktionsnum-
  9948.     mern überwacht, die in beiden Tabellen gesetzt sind.
  9949.  
  9950.  
  9951.  
  9952.  
  9953.  
  9954.  
  9955.  
  9956.  
  9957.  
  9958.  
  9959.     ────────────────────────────────────────────────────────────────────────────────
  9960.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  160
  9961.  
  9962.  
  9963.  
  9964.     /&     - Korrigiere die Tabelle einer residenten Version von
  9965.              SHOWINT
  9966.  
  9967.     Dieser Parameter wirkt wie der Parameter '/U',  allerdings wird die
  9968.     Tabelle der residenten Version nicht  überschrieben sondern mit der
  9969.     neuen Tabelle verODERt, d.h. es werden  alle Funktionsnummern über-
  9970.     wacht, die in einer der beiden der Tabellen gesetzt sind.
  9971.  
  9972.  
  9973.     /R     - Entferne eine residente Version von SHOWINT aus den
  9974.              Speicher.
  9975.  
  9976.     Mit diesem Parameter kann eine residente Version von SHOWINT wieder
  9977.     aus dem Speicher entfernt werden.  Beim Erstaufruf von SHOWINT ver-
  9978.     hindert der Parameter die Installation des Programms.
  9979.  
  9980.  
  9981.     /A     - Residentes Version von SHOWINT neu aktivieren
  9982.  
  9983.     Der Aufruf von SHOWINT mit dem Parameter '/A' ist nötig, falls eine
  9984.     residente  Version von  SHOWINT über die  Eingabe von <CTRL-X> oder
  9985.     durch  einen  nicht-zurückkehrenden   Interrupt-Aufruf  deaktiviert
  9986.     wurde (siehe unten).
  9987.  
  9988.  
  9989.     /C     - Anzeigen der Interrupt-Aufruf VOR der Ausführung
  9990.  
  9991.     Normalerweise zeigt SHOWINT einen zu überwachenden Interrupt-Aufruf
  9992.     jeweils NACH dem Aufruf an.  Mit diesem Parameter kann es aber dazu
  9993.     veranlasst werden,  ihn vor  dem eigentlichen Aufruf anzuzeigen. In
  9994.     diesem Fall kann dann der Interrupt-Aufruf auch vom Benutzer unter-
  9995.     drückt werden (siehe unten).
  9996.     Der Parameter wird nur beim Erstaufruf von SHOWINT berücksichtigt.
  9997.  
  9998.  
  9999.     /Fn    - Festlegen der Farbe für das Popup-Window von SHOWINT
  10000.  
  10001.     'n' ist das Farbattribut für die Anzeige.
  10002.     (hex., Intervall: 0h..0FFh, Voreinst.: 70h)
  10003.     Der Parameter wird nur beim Erstaufruf von SHOWINT berücksichtigt.
  10004.  
  10005.  
  10006.  
  10007.  
  10008.  
  10009.  
  10010.  
  10011.  
  10012.  
  10013.  
  10014.  
  10015.  
  10016.  
  10017.  
  10018.  
  10019.     ────────────────────────────────────────────────────────────────────────────────
  10020.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  161
  10021.  
  10022.  
  10023.  
  10024.     /Zn    - Festlegen der Startzeile für das Window des Programms.
  10025.  
  10026.     'n' ist die Startzeile der Anzeige.
  10027.     (hex., Intervall: 01h..06h, Voreinst.: 01h)
  10028.     Der Parameter wird nur beim Erstaufruf von SHOWINT berücksichtigt.
  10029.  
  10030.  
  10031.     /In    - Festlegen des zu überwachenden Interrupts.
  10032.  
  10033.     'n' ist die Nummer des zu überwachenden Interrupts.
  10034.     (hex., Intervall: 00h..0FFh, Voreinst.: 05h)
  10035.  
  10036.     Der von SHOWINT zu überwachende Interrupt kann mit diesem Interrupt
  10037.     beliebig gewählt werden.  Falls eine residente  Version von SHOWINT
  10038.     geändert werden soll, muß dieser Parameter mit der korrekten Inter-
  10039.     rupt-Nummer IMMER angegeben werden!
  10040.  
  10041.     Die Interrupts 22h, 23h und 24h werden nicht unterstützt.
  10042.  
  10043.  
  10044.     /?     - Ausgabe eines Hilfstextes und Programmende
  10045.  
  10046.     @      - Rest der Paramter überlesen
  10047.  
  10048.  
  10049.     Alle Parameter werden sequentiell von links nach rechts ausgeführt.
  10050.     Parameter, die bei  einem Aufruf von SHOWINT keine Bedeutung haben,
  10051.     werden ignoriert.
  10052.  
  10053.     Die Graphik-Karte und die Bildschirm-Parameter werden aus der BIOS-
  10054.     Display-Data-Area  gewonnen.  Die  Interrupt-Aufrufe  werden nur im
  10055.     Textmodus abgefangen.
  10056.     SHOWINT unterstützt keine externen Bildschirmtreiber.
  10057.  
  10058.     Geschachtelte Aufrufe der zu überwachenden Interrupts  werden nicht
  10059.     berücksichtigt  (falls nicht der Parameter '/C' angegeben ist).
  10060.  
  10061.     Nachdem  SHOWINT  installiert  ist, werden  nach  jedem  Aufruf des
  10062.     zu  überwachenden  Interrupts mit  einer  Funktionsnummer  aus  der
  10063.     Tabelle  der  zu überprüfenden Funktionsnummern  die Register-Werte
  10064.     vor und nach dem Aufruf ausgegeben.
  10065.  
  10066.  
  10067.  
  10068.  
  10069.  
  10070.  
  10071.  
  10072.  
  10073.  
  10074.  
  10075.  
  10076.  
  10077.  
  10078.  
  10079.     ────────────────────────────────────────────────────────────────────────────────
  10080.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  162
  10081.  
  10082.  
  10083.  
  10084.     Dabei wird folgende Maske benutzt:
  10085.  
  10086.            ╔═ Hier steht jeweils die Nummer und Adresse des abgefangenen
  10087.            ║  Interrupts
  10088.            ╚══════════════════════════════════════════╦══════════════╗
  10089.     ┌───────────────────────── Vor dem Aufruf des Int 10h: (Adresse: 22C0:4560)────┐
  10090.     │ AX = 0E0D  BX = 0007  CX = 0002  DX = 0000  SI = 00D3  DI = 0004  BP = 26F2  │
  10091.     │ DS = 0261  ES = 0261  Ret-Adress: 0070:06A7  Flags = ________________        │
  10092.     │ DS:SI = )......n.p.n...!.....+.......Y..CON        ...................p..    │
  10093.     │ ES:DI = ..BUG ..............C............. ta...a...p.n.p.........H...=..    │
  10094.     │ DS:DX = ..r...BUG ..............C............. ta...a...p.n.p.........H..    │
  10095.     │ DS:BX = 55 47 20 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 43 15 03 00 01    │
  10096.     │ ES:BX = 55 47 20 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 43 15 03 00 01    │
  10097.     └──────────────────────────────────────────────────────────────────────────────┘
  10098.         Bitte eine Taste drücken ...  (CTRL-X -> deaktivieren)
  10099.  
  10100.     ┌───────────────────────── Nach dem Aufruf des Int 10h: (Adresse: 22C0:4560)───┐
  10101.     │ AX = 0E0D  BX = 0007  CX = 0002  DX = 0000  SI = 00D3  DI = 0004  BP = 26F2  │
  10102.     │ DS = 0261  ES = 0261                         Flags = ________________        │
  10103.     │ DS:SI = )......n.p.n...!.....+.......Y..CON        ...................p..    │
  10104.     │ ES:DI = ..BUG ..............C............. ta...a...p.n.p.........H...=..    │
  10105.     │ DS:DX = ..r...BUG ..............C............. ta...a...p.n.p.........H..    │
  10106.     │ DS:BX = 55 47 20 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 43 15 03 00 01    │
  10107.     │ ES:BX = 55 47 20 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 43 15 03 00 01    │
  10108.     └──────────────────────────────────────────────────────────────────────────────┘
  10109.  
  10110.     Durch die Taste <CTRL-X> kann SHOWINT für die  weiteren Aufrufe des
  10111.     Interrupts  deaktiviert werden,  d.h. SHOWINT ist für den angegeben
  10112.     Interrupt  erst wieder  nach  einem  Aufruf mit dem Parameter  '/A'
  10113.     aktiv. Jede andere Taste führt  zur Fortsetzung  des unterbrochenen
  10114.     Prozesses nach  dem  abgefangenen  Interrupt-Aufruf.
  10115.  
  10116.     Falls SHOWINT mit dem Parameter '/C' installiert wurde,  werden vor
  10117.     dem  Ausführen der Original-Routine für den Interrupt die Eingangs-
  10118.     Parameter angezeigt. In  diesem Fall wird folgende Maske verwendet:
  10119.  
  10120.            ╔═ Hier steht jeweils die Nummer und Adresse des abgefangenen
  10121.            ║  Interrupts
  10122.            ╚══════════════════════════════════════════╦══════════════╗
  10123.     ┌───────────────────────── Vor dem Aufruf des Int 10h: (Adresse: 22C0:4560)────┐
  10124.     │ AX = 0E70  BX = 0007  CX = 0001  DX = 0000  SI = 00D3  DI = 000E  BP = 2644  │
  10125.     │ DS = 0261  ES = 0261  Ret-Adress: 0070:06A7  Flags = ________________        │
  10126.     │ DS:SI = ,......n.p.n...!.............Y..CON        ...................p..    │
  10127.     │ ES:DI = ..........C............. ta...a...p.n.p.....Y...H...=............    │
  10128.     │ DS:DX = ..r...BUG ..............C............. ta...a...p.n.p.....Y...H..    │
  10129.     │ DS:BX = 55 47 20 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 43 15 03 00 01    │
  10130.     │ ES:BX = 55 47 20 00 00 00 00 00 00 00 00 00 00 FF FF FF FF 43 15 03 00 01    │
  10131.     └──────────────────────────────────────────────────────────────────────────────┘
  10132.      Bitte eine Taste drücken ...  (CTRL-X -> deaktivieren ESC -> Int. unterdrücken)
  10133.  
  10134.  
  10135.  
  10136.  
  10137.  
  10138.  
  10139.     ────────────────────────────────────────────────────────────────────────────────
  10140.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  163
  10141.  
  10142.  
  10143.  
  10144.     Der  Benutzer kann  nun entscheiden,  ob der Interrupt  normal aus-
  10145.     geführt oder abgebrochen werden soll.
  10146.     Durch die  Eingabe von  <ESC> wird  der Interrupt  unterdrückt, die
  10147.     Eingabe  von  <CTRL-X> hat die  gleiche Wirkung wie  oben angeführt
  10148.     und  jede andere  Taste führt  zur  Ausführung  der  unterbrochenen
  10149.     Interruptroutine.
  10150.  
  10151.     Falls der Interrupt abgebrochen wird, liefert SHOWINT dem aufrufen-
  10152.     den  Prozess 0FFFFh  im Register AX und setzt das  Carry-Flag. Eine
  10153.     Anzeige nach der Rückkehr des Interrupts findet nicht statt.
  10154.  
  10155.  
  10156.     Interrupts die nicht zurückkehren,  blockieren das Programm,  falls
  10157.     es nicht  mit  dem Parameter '/C' aufgerufen  wurde. In diesem Fall
  10158.     muß SHOWINT nochmal mit dem Parameter '/A' aufgerufen werden.
  10159.  
  10160.     Das Programm kennt und berücksichtigt folgende Interrupts als nicht
  10161.     zurückkehrende Aufrufe (d.h. in diesem Fall wird der Parameter '/C'
  10162.     implizit für die entsprechenden Interrupt-Aufrufe gesetzt):
  10163.  
  10164.          Int 19h mit allen Funktionsnummern
  10165.          Int 20h mit allen Funktionsnummern
  10166.          Int 21h mit den Funktionsnummern 00h, 31h und 4Ch
  10167.          Int 27h mit allen Funktionsnummern
  10168.  
  10169.  
  10170.     Es kann  maximal für jeden Interrupt eine Kopie von SHOWINT gleich-
  10171.     zeitig geladen sein.  Bei jedem  Aufruf zur  Änderung der Variablen
  10172.     einer residenten  Version von SHOWINT  MUSS die durch diese Version
  10173.     überwachte Interruptnummer angegeben werden!
  10174.  
  10175.     SHOWINT  hängt sich in jedem Fall auch in den Interrupt 21h ein und
  10176.     fängt alle Aufrufe zum Lesen und Setzen des zu überwachenden Inter-
  10177.     rupts ab. Damit ist  gewährleistet, daß  SHOWINT  bei ordnungsgemäß
  10178.     programmierten  Programmen immer  als erstes in der Interrupt-Kette
  10179.     des zu überwachenden Interrupts steht. Falls ein Programm das Lesen
  10180.     und Setzen der Interrupts direkt über die Interrupt-Tabelle bei 0:0
  10181.     ausführt,  ist  dies  allerdings nicht mehr so. In diesem Fall kann
  10182.     SHOWINT erst wieder aus den Speicher entfernt werden, wenn das nach
  10183.     SHOWINT geladene Programm aus dem Speicher entfernt ist.
  10184.  
  10185.     Probleme können vor allem auftreten, falls ein Programm die direkte
  10186.     Benutzung der Interrupt-Tabelle bei 0:0 und die Benutzung der Funk-
  10187.     tionen 25h und 35h des Interrupt 21h mischt.
  10188.  
  10189.  
  10190.  
  10191.  
  10192.  
  10193.  
  10194.  
  10195.  
  10196.  
  10197.  
  10198.  
  10199.     ────────────────────────────────────────────────────────────────────────────────
  10200.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  164
  10201.  
  10202.  
  10203.  
  10204.     Beispiele für die Anwendung von SHOWINT:
  10205.  
  10206.     Installieren von SHOWINT zur Überwachung der Aufrufe des Interrupts
  10207.     21h mit den Funktionsnummern 00h bis 0Ch (incl.):
  10208.  
  10209.          SHOWINT /I21 00..0C
  10210.  
  10211.     Erweitern  der  Überwachung  der  Aufrufe  des Interrupt 21h um die
  10212.     Funktionsnummern 20h bis 24h (incl.), 35h und 60h:
  10213.  
  10214.          SHOWINT /I21 /! 60 20..24 35
  10215.  
  10216.     Installieren einer  ZUSÄTZLICHEN  Kopie von SHOWINT zur Überwachung
  10217.     aller Aufrufe des Interrupts 12h mit  den Funktionsnummern zwischen
  10218.     0h und 03h und zwischen 08h und 0FFh:
  10219.  
  10220.          SHOWINT /I12 00..FF   /V   4..7
  10221.                       ┌─────   ┌─   ┌───
  10222.                       │        │    Funktionsnummern zwischen 4 und 7
  10223.                       │        │    (incl.) ausschalten
  10224.                       │        Schalter auf 'Löschen' setzen
  10225.                       Alle Funktionsnummern einschalten
  10226.  
  10227.     Überwachen der Aufrufe des Interrupt 12h einstellen
  10228.     (Programm aus den Speicher entfernen):
  10229.  
  10230.          SHOWINT /I12 /R
  10231.  
  10232.  
  10233.     Hinweise für die Benutzung von SHOWINT:
  10234.  
  10235.  
  10236.     Erste Versuche sollten mit einen ungefährlichen Interrupt (z.B. dem
  10237.     Interrupt 05h - PrintScreen) gemacht werden.
  10238.  
  10239.  
  10240.     Die  Angabe der zu überwachenden Funktionsnummern  ist nur möglich,
  10241.     falls diese  über das Register  AH dem Interrupt  übergeben werden.
  10242.     Interrupts, die  die Funktionsnummer  im Register AX erwarten (z.B.
  10243.     der Maus-Interrupt  33h) können nur ganz  oder gar  nicht überwacht
  10244.     werden.
  10245.  
  10246.  
  10247.  
  10248.  
  10249.  
  10250.  
  10251.  
  10252.  
  10253.  
  10254.  
  10255.  
  10256.  
  10257.  
  10258.  
  10259.     ────────────────────────────────────────────────────────────────────────────────
  10260.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  165
  10261.  
  10262.  
  10263.  
  10264.     Bei Interrupts, die asyncron aufgerufen werden, ist  der Inhalt des
  10265.     Registers AH beim Aufruf nicht vorhersehbar.  Falls diese überwacht
  10266.     werden sollen,  muß für  die zu überwachenden  Funktionsnummern das
  10267.     Intervall 00..0FF angegeben werden.
  10268.  
  10269.  
  10270.     SHOWINT darf zur Überprüfung  eines zeitkritischen Interrupts (z.B.
  10271.     die  Interrupts  1Ch  und 08h) nicht  verwendet werden! Das gleiche
  10272.     gilt  für  Interrupt-Funktionen, die in der Routine für einen zeit-
  10273.     kritischen  Interrupt aufgerufen werden (z.B. die  Funktion 0Fh des
  10274.     Interrupt 10h falls diese von einem Uhrenprogramm in der Interrupt-
  10275.     Routine für den Interrupt 08h oder 1Ch aufgerufen wird).
  10276.  
  10277.     Falls über SHOWINT der  Interrupt  0Fh überwacht  werden soll,  muß
  10278.     folgendes beachtet werden:
  10279.  
  10280.     Der Interrupt-Controller 8259A behandelt alle nicht eindeutig iden-
  10281.     tifizierbaren Interrupt-Aufrufe  und Störimpulse auf den Interrupt-
  10282.     Leitungen als IRQ7. Da der Drucker-Interrupt 0Fh ebenfalls über den
  10283.     IRQ7 läuft, muß  in der Routine für den Drucker-Interrupt normaler-
  10284.     weise getestet werden, ob wirklich ein Interrupt oder nur ein Stör-
  10285.     impuls vorliegt. Da SHOWINT dies nicht macht,  werden  vom Programm
  10286.     auch alle o.a. Ausnahmen als Interrupt 0Fh ausgegeben.
  10287.  
  10288.  
  10289.     Nicht zurückkehrende Interrupts sollten nur mit  äußerster Vorsicht
  10290.     abgebrochen werden,  da normalerweise jedes Programm davon ausgeht,
  10291.     daß diese niemals zurückkehren!
  10292.  
  10293.  
  10294.     Hardware-Interrupts dürfen  nicht im Abbruchmodus überwacht werden,
  10295.     da SHOWINT keinerlei Interrupt-Bestätigungen an den Controller oder
  10296.     an den den Interrupt auslösenden Baustein gibt.
  10297.  
  10298.  
  10299.  
  10300.  
  10301.  
  10302.  
  10303.  
  10304.  
  10305.  
  10306.  
  10307.  
  10308.  
  10309.  
  10310.  
  10311.  
  10312.  
  10313.  
  10314.  
  10315.  
  10316.  
  10317.  
  10318.  
  10319.     ────────────────────────────────────────────────────────────────────────────────
  10320.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  166
  10321.  
  10322.  
  10323.  
  10324.     SHOW2FP.COM
  10325.  
  10326.     SHOW2FP ist  ein Programm zum  Testen der Prozessnummern des Inter-
  10327.     rupts 2Fh.
  10328.  
  10329.     Aufruf: SHOW2FP {prozessnummer} {@ kommentar}
  10330.  
  10331.     Parameter:
  10332.  
  10333.     prozessnummer
  10334.  
  10335.     'prozessnummer'  ist  die zu  testende Prozessnummer des Interrupts
  10336.     2Fh (hex., Interavll: 0C0h..0FEh).
  10337.  
  10338.     @      - Rest der Parameter überlesen
  10339.  
  10340.     Ist eine Prozessnummer  angegeben, gibt  SHOW2FP aus,  ob diese und
  10341.     die folgende Prozessnummer schon belegt ist oder nicht.
  10342.  
  10343.     Wird kein Parameter  angegeben,  so gibt SHOW2FP alle belegten Pro-
  10344.     zessnummern zwischen C0h und FFh aus.
  10345.  
  10346.  
  10347.     FREESTCK.COM
  10348.  
  10349.     Programm  zur  Freigabe aller  belegten  und  übergelaufenen Stack-
  10350.     Frames der STACK-Verwaltung.
  10351.     (erst ab DOS 3.3 vorhanden, siehe 'Stack-Überlauf')
  10352.  
  10353.     Aufruf: FREESTCK
  10354.  
  10355.  
  10356.     MDCGADRV.ASM  (VV)
  10357.  
  10358.     Quelltext des Treibers MDCGADRV.COM
  10359.     (ausführlich kommentierter Assemblertext für den A86)
  10360.  
  10361.  
  10362.     MDHGCDRV.ASM  (VV)
  10363.  
  10364.     Quelltext des Treibers MDHGCDRV.COM
  10365.     (ausführlich kommentierter Assemblertext für den A86)
  10366.  
  10367.  
  10368.  
  10369.  
  10370.  
  10371.  
  10372.  
  10373.  
  10374.  
  10375.  
  10376.  
  10377.  
  10378.  
  10379.     ────────────────────────────────────────────────────────────────────────────────
  10380.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  167
  10381.  
  10382.  
  10383.  
  10384.     MDDRIVER.ASM  (VV)
  10385.  
  10386.     Gerüst zur Programmierung von eigenen Bildschirmtreibern.
  10387.     (ausführlich kommentierter Assemblertext für den A86)
  10388.     MDDRIVER.ASM  enthält  schon  die gesamte  Logik des Treibers;  was
  10389.     fehlt sind nur die Routinen zum Erkennen, Sichern und  Restaurieren
  10390.     der Bildschirmdaten.
  10391.  
  10392.  
  10393.     MDBSPDRV.ASM  (VV)
  10394.  
  10395.     Quelltext des Kommandotreibers MDBSPDRV.COM (residenter Teil)
  10396.     (ausführlich kommentierter Assemblertext für den A86)
  10397.  
  10398.     MDBSPDRV.INC  (VV)
  10399.  
  10400.     Quelltext des Kommandotreibers MDBSPDRV.COM (transienter Teil)
  10401.     (ausführlich kommentierter Assemblertext für den A86)
  10402.  
  10403.  
  10404.  
  10405.  
  10406.  
  10407.  
  10408.  
  10409.  
  10410.  
  10411.  
  10412.  
  10413.  
  10414.  
  10415.  
  10416.  
  10417.  
  10418.  
  10419.  
  10420.  
  10421.  
  10422.  
  10423.  
  10424.  
  10425.  
  10426.  
  10427.  
  10428.  
  10429.  
  10430.  
  10431.  
  10432.  
  10433.  
  10434.  
  10435.  
  10436.  
  10437.  
  10438.  
  10439.     ────────────────────────────────────────────────────────────────────────────────
  10440.     MDEBUG - Benutzer- und Referenz-Handbuch                            Seite  168
  10441.