M O H A M E D ------------- / \ | The | / \ / Most Handy \ | ##### ##### | \ Memory Editor / \ / | Version 2.0 | \ / ============= produced by BERT the ;-} in 1990 ------------- Dieses Produkt ist Shareware, und somit kann sich das jeder kopieren, der Lust dazu hat. ------------- MOHAMED benoetigt MS-DOS 2.0 oder hoeher Der Zusatz zur Dokumentation von MOHAMED MS-DOS is a registered trademark of Microsoft Corp. MOHAMED - The Most Handy Memory Editor +--------------------+ | Inhaltsverzeichnis | +--------------------+ INHALT: Seite ======= Mitteilung ueber dieses File ....................... 1 Commandlineparameter ............................... 2 Start von MOHAMED .................................. 4 Maussteuerung ...................................... 5 Neue Funktionen von MOHAMED ........................ 6 MOHAMED Documentation - 2.0 - written by BERT the ;-} -------- Inhalt MOHAMED - The Most Handy Memory Editor Was Sie hier vor sich sehen ist das File "MHMEDV20.DOC". In diesem File sind alle Neuerungen aufgefuehrt, die MOHAMED seit der Version 1.0 auf- zuweisen hat. Ich haette natuerlich alle neuen Funktionen auch in das File "MOHAMED.DOC" schreiben koennen, aber erstens ist mir ein solches Vorgehen zu zeitaufwendig und zweitens halte ich diese Methode hier fuer die Bessere, da es einen bei einer neuen Version eines Programmes haupt- saechlich interessiert, was fuer neue Funktionen seit der alten Version dazugekommen sind. Ausserdem braucht man dann nicht alles nochmal auszu- drucken, sondern laesst einfach nur das File mit den neuen Funktionen ausdrucken und ist dadurch nicht gezwungen, die alte Dokumentation weg- zuwerfen. Ich habe zwar keine Ahnung, ob diese Methode Anklang findet, oder nicht, aber es ist halt mal so von mir beschlossen worden, ergo mache ich das auch so. Bei dem File "MOHAMED.TXT" handelt es sich um eine upgedatete Version des gleichnamigen Files, das der Version 1.0 beilag. Das heisst, dass ich noch einiges ueber den Speicher rausgekriegt habe, und Ihnen dieses mein Wissen nicht vorenthalten will. Ich habe die Zeilen, die ich neu eingefuegt habe mit einem "@" am Anfang versehen. Dadurch duerfte es leicht moeglich sein, den Rest rauszuhauen, um sich nur die Neuerungen ausdrucken zu lassen. Ich habe diese Methode bei "MOHAMED.DOC" nicht angewandt, da die neuen Funktionen teilweise in die alten uebergreifen, was zu einem ziemlichen Chaos am Zeilenanfang gefuehrt haette. Doch nun genug der Vorrede. Flugs umgeblaettert und hinein in die neuen Funktionen von MOHAMED!!! MOHAMED Documentation - 2.0 - written by BERT the ;-} -------- Seite 1 MOHAMED - The Most Handy Memory Editor +--------------------------+ | DIE COMMANDLINEPARAMETER | +--------------------------+ Wie schon in der Version 1.0 kann man auch in der Version 2.0 von MOHAMED einige Commandlineparameter beim Aufruf von MOHAMED eingeben. Natuerlich habe ich noch ein paar weitere eingebaut. /r Jenner hier duerfte Ihnen eigentlich noch von der Version 1.0 her gelaeufig sein: er laedt MOHAMED resident in den Speicher. Bei der Vielfalt der neuen Funktionen versteht es sich fast von selbst, dass er jetzt etwas mehr Speicher beansprucht, als vorher (ca. 24 K). Anders als bei Version 1.0 laesst sich mit diesem Parameter MOHAMED nicht mehr deinstallieren. Wenn Sie MOHAMED mit /r aufrufen, obwohl er schon resident geladen ist, teilt er Ihnen ebendiese Tatsache mit. Zur Deinstallation gibt es den folgenden Parameter: /d Mit diesem Commandlineswitch wird MOHAMED wieder deinstalliert, wenn dieses moeglich ist. Damit das moeglich ist, muessen zwei Voraussetzungen erfuellt sein: - MOHAMED muss das letzte residente Programm im Speicher sein - er darf beim ersten Aufruf nicht mit dem Parameter /x in- stalliert worden sein /x Wurde dieser Commandlineparameter gewaehlt, so laesst sich MOHAMED nicht mehr durch einen zweiten Aufruf mit /d dein- stallieren. Ich habe diesen Parameter eigentlich nur einge- baut, weil ich zu dem Zeitpunkt gerade nichts anderes zu tun hatte. Aber er kann vielleicht ganz nuetzlich sein, wenn man MOHAMED mit einem Passwort geladen hat und verhindern will, dass jemand den Passwortschutz umgeht, indem er MOHAMED ein- fach deinstalliert. Wenn MOHAMED mit diesem Parameter aufge- rufen wurde, ist es uebrigens auch nicht moeglich, MOHAMED im nicht residenten Modus zum laufen zu bringen. /n Hier haben wir eine Neuerung. Das heisst, nicht die Funktion ist neu, sondern der Parameter. Mit /n kann man naemlich den Hotkey umbelegen. Im alten MOHAMED nahm /h diese Position ein. Aber den habe ich fuer etwas Anderes gebraucht: /h Hiermit wird MOHAMED ohne den Hilfebildschirm installiert (na- tuerlich nur, wenn MOHAMED gleichzeitig resident geladen wird). Das bringt eine Speicherplatzersparnis von circa 6 K. MOHAMED Documentation - 2.0 - written by BERT the ;-} -------- Seite 2 MOHAMED - The Most Handy Memory Editor = Von nun an ist es moeglich, MOHAMED durch ein Passwort vor dem Zugriff Unbefugter zu schuetzen. Das hat aber nur Sinn, wenn man MOHAMED resident laedt. Mit diesem Parameter aufgerufen ('=' ist hier der Parameter) ver- langt MOHAMED fortan jedesmal, wenn man den Hotkey be- taetigt, dass man das nach dem '=' eingegebene Passwort wieder eingibt. Man kann die Eingabe jederzeit mit ESC abbrechen, was dann aber zur Folge hat, dass man nicht in MOHAMED reinkommt. Das Passwort muss ohne die spitzen Klammern eingegeben werden. Wenn Sie also das Passwort NIXDA definieren wollen, so muessen Sie MOHAMED wie folgt aufrufen: MOHAMED /r =nixda Hier ist auch auf die Gross- und Kleinschreibung zu ach- ten. Wenn Sie "NixDa" als Passwort eingeben, wird auch bei der Abfrage "NixDa" verlangt, wohingegen "nixda" nicht als Passwort anerkannt wird. Sie brauchen uebrigens keine Sorge zu haben, dass irgendjemand Ihnen bei der Ar- beit mit MOHAMED ueber die Schulter schaut und dann zu- faellig das Passwort am Bildschirm sieht, weil Sie sich gerade im Speicherbereich von MOHAMED befinden. Das Pass- wort steht zwar in diesem Bereich drin, ist aber ver- schluesselt. Also keine Angst vor Schulterguckern! # Dies ist nun wieder ein Commandlineparameter, mit dem wahrscheinlich mehr Leute arbeiten werden. Er sorgt naemlich dafuer, dass MOHAMED gleich zu Anfang die richtige Farbeinstellung hat (vorausgesetzt, Sie haben sich schon ein Colorfile nach Ihren Wuenschen zusammen- gestellt). Das Colorfile muss im MOHAMED Format vor- liegen, das heisst es muss mit MOHAMED erstellt werden. Das Schoene an diesem Parameter ist, dass man damit nachtraeglich noch die Farbwahl von MOHAMED veraendern kann. Wenn MOHAMED also resident im Speicher steht, und man ihn erneut mit diesem Parameter in Verbindung mit '/r' aufruft, so wird die Farbtabelle vom residenten MOHAMED upgedated. Auch hier muss man die eckigen Klammern weglas- sen. Also hat der Befehl zu lauten: MOHAMED #vga.col Dieses bewirkt, dass MOHAMED nichtresident geladen wird und vor der Ausfuehrung das File "VGA.COL" als Farbtabelle eingebaut wird. Noch ein kurzer Einwurf zum 'Switchar': Das ist das Zeichen, das vor den Commandlineparametern steht, also in diesem Falle der Schraegstrich '/'. MOHAMED benutzt den von DOS belegten Switchar, was nicht unbedingt dieser Schraegstrich sein muss. MOHAMED Documentation - 2.0 - written by BERT the ;-} -------- Seite 3 MOHAMED - The Most Handy Memory Editor So, das wars, was MOHAMED an Commandlineparametern zu bieten hat. Bevor ich nun zu den neuen Funktionen komme, wollen wir uns mal anschauen, was MOHAMED fuer neue Features hat (es weiss zwar kein Mensch, was ein Feature ist, aber MOHAMED hat ein paar neue). +-----------------------+ | DER START VON MOHAMED | +-----------------------+ Wenn Sie nun also MOHAMED aufrufen, erblicken Sie einen Screen, der in etwa so aussieht: +---------------------<=M=O=H=A=M=E=D=>---------------------+------<00001>-----+ | E-A 0 1 2 3 4 5 6 7 8 9 a b c d e f | 0123456789abcdef | * |J{01.}L{00.}F{00.}| # fff60 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff | ................ | # fff70 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff | ................ | # fff80 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff | ................ | # fff90 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff | ................ | # fffa0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff | ................ | # fffb0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff | ................ | # fffc0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff | ................ | # fffd0 ff ff 53 32 12 12 02 02 03 03 06 06 30 30 39 39 | ..S2........0099 | # fffe0 2f 2f 30 30 39 39 2f 2f 38 38 37 37 00 00 1f a2 | //0099//8877.... | # ffff0 ae 5b e0 00 f0 30 31 2f 31 39 cf 38 37 ff fc c3 | .[...01/19.87... | #k÷00000 >32<10 4f 1b fb 07 70 00 16 00 e6 10 fb 07 70 00 | 2.O...p.......p. | # 00010 fb 07 70 00 54 ff 00 f0 29 c1 00 f0 29 c1 00 f0 | ..p.T...)...)... | # 00020 ab 00 e6 10 00 01 5f 22 53 ff 00 f0 a2 02 e6 10 | ......_"S....... | # 00030 e1 11 a8 18 b2 03 e6 10 3a 04 e6 10 fb 07 70 00 | ........:....... | # 00040 b1 33 4f 1b 4d f8 00 f0 41 f8 00 f0 3b 0d 6a 14 | .3O.M...A...;.j. | # 00050 39 e7 00 f0 d8 01 a5 0b 81 02 36 0c d2 ef 00 f0 | 9.........6..... | # 00060 ab 94 00 f0 88 1d 70 00 6e fe 00 f0 11 69 06 25 | ......p.n....i.% | # 00070 53 ff 00 f0 a4 f0 00 f0 22 05 00 00 00 00 00 00 | S......."....... | # 00080 f5 16 c1 02 4a 0c 6a 14 23 07 b4 11 0f 69 06 25 | ....J.j.#....i.% | # 00090 29 64 06 25 2f 19 c1 02 8c 19 c1 02 ed 79 c1 02 | )d.%/........y.. | | 000a0 fb 16 c1 02 1e 01 72 0c fb 16 c1 02 fb 16 c1 02 | ......r......... | +-----------------< Interrupt Nr.: 00 >-<#######*########>-+------------------+ Natuerlich habe ich auch hier wieder, wie schon im MOHAMED.DOC den Rahmen stilisiert dargestellt und kritische Druckerzeichen durch haesslichere aber sicherere Zeichen ersetzt. Nun, whats also jetzt new? Nun, das Erste, was Ihnen auffallen duerfte ist, dass sich die Farbwahl etwas geaendert hat (auf Farbkarten noch immer extrem besch..eiden). Die Cursorzeile wird jetzt in einer anderen Farbe dargestellt, als der Rest, MOHAMED sticht jetzt am oberen Bild- schirmrand ins Auge und die Jokerzeile schaut auch anders aus. MOHAMED Documentation - 2.0 - written by BERT the ;-} -------- Seite 4 MOHAMED - The Most Handy Memory Editor Weiter hinten in dieser Doc finden Sie eine Beschreibung der Farben, so- wohl der alten, als auch der neuen (inzwischen sind's 41 Stck). Das naechste, was wahrscheinlich auffaellt sind die Balken rechts und unten am Rand des Darstellungsfeldes von MOHAMED. Tja, das haengt damit zusammen, dass MOHAMED jetzt eine eigene Maussteuerung besitzt. Der linke Balken zeigt Ihnen an, wo Sie sich zur Zeit im Speicher be- finden. Je weiter unten die Markierung ist, desto weiter hinten lesen Sie gerade im Speicher. Das ist zwar nicht sehr nuetzlich (schliesslich hat man ja die Anzeige der EA), aber ich finde es schaut nicht schlecht aus, und den Balken hat eigentlich jedes Programm, das eine Maus unter- stuetzt. Diesen Balken sehen Sie auch, wenn Sie keine Maus haben. Der Balken am unteren Rand des Bildschirms zeigt Ihnen an, wie empfind- lich die Maus auf Ihre Bewegungen reagiert. Das heisst, wenn Sie keine Maus angeschlossen haben, kommt dieser Balken auch nicht zum Vorschein. Den Zeiger auf dem Balken koennen Sie mit '<' und '>' hin und her schie- ben. Mit '<' verringern Sie die Mausempfindlichkeit, mit '>' erhoehen Sie diese. Von der Mausempfindlichkeit haengt die Geschwindigkeit ab, mit der Sie sich per Mausbewegung durch den Speicher bewegen koennen. Das merken Sie in vertikaler Richtung (also von oben nach unten) aller- dings erst, wenn Sie die Maus schneller bewegen. Wenn die Mausempfind- lichkeit sehr hoch ist (Zeiger ganz rechts), koennen Sie den ganzen Speicher durchqueren, wenn Sie die Maus mit hoher Geschwindigkeit nach oben oder unten schieben. Wenn Sie die Empfindlichkeit runtersetzen, kommen Sie mit der gleichen Mausbewegungsstrecke und gleicher Geschwin- digkeit nicht mehr so weit. Alles klar? Natuerlich nicht, also probieren Sie einfach ein bisschen aus, wie sich Ihre Maus (so vorhanden) bei ver- schiedenen Empfindlichkeiten verhaelt. Neben der Geschwindigkeitsregulierung gibt es noch die Moeglichkeit, die Maustasten zu belegen. Vorbelegt sind sie wie folgt: Linke Taste: '<' (verringere Mausempfindlichkeit) Rechte Taste: '>' (erhoehe Mausempfindlichkeit) Beide oder mittlere Taste: (Hilfebildschirm) Diese Belegung kann durch die Tasten linke Maustaste rechte Maustaste beide oder mittlere Maustaste geaendert werden. Nachdem Sie eine dieser Tasten betaetigt haben, fordert MOHAMED Sie auf, die Taste zu druecken, die der entsprechenden Maustaste zugewiesen werden soll. Wenn Sie uebrigens druecken, wird die vertikale Mausgeschwindigkeit halbiert. MOHAMED Documentation - 2.0 - written by BERT the ;-} -------- Seite 5 MOHAMED - The Most Handy Memory Editor +----------------------------+ | DIE FUNKTIONEN VON MOHAMED | +----------------------------+ Ja, hier fangen nun die neuen Funktionen von MOHAMED an. Zunaechst muss ich allerdings wieder auf den Bildschirmaufbau eingehen, da sich hier noch etwas geaendert hat, was aber mit den neuen Funktionen zusammen- haengt. Wie Sie vielleicht schon festgestellt haben werden, hat sich die Joker- zeile geaendert. Stand hier vorher nur ein Wert, naemlich der fuer den Joker, so koennen Sie nun drei Werte entdecken. Der erste (mit einem 'J' gekennzeichnet) ist wieder unser altbekannter Joker. Er repraesen- tiert genau das, was er auch schon im alten MOHAMED darstellte: das Wildcardzeichen fuer den Suchbefehl. Rechts neben ihm steht ein 'L'. Dieses Zeichen steht fuer 'limit' und gibt an, welches Zeichen fuer das Loeschen per als Begrenzung zu betrachten ist. Mit MOHAMED 2.0 hat man naemlich die Moeglichkeit Zeichen aus dem Speicher zu entfernen oder einzufuegen. Sicherlich kennen Sie ja die Funktion von . Nun, auch bei MOHAMED ist die Funktion die Gleiche geblieben: Mit wird ein Zeichen ent- fernt und die folgenden werden nachgezogen. Nun waere es aber fatal, wenn man auf drueckt und der komplette Speicher wuerde um ein Byte nach vorne gezogen. Das fuehrt dann in den allermeisten Faellen zum Ab- sturz. Also hat man bei MOHAMED die Moeglichkeit, ein Zeichen zu definie- ren, das als Begrenzung fuer das Nachziehen der Zeichen gilt. Dieses Zeichen steht in der Jokerzeile neben dem Buchstaben 'L'. Mit kann man dieses Zeichen aus dem Speicher uebernehmen. Natuerlich braucht man auch ein Zeichen, das am Ende der Bytefolge, die nach vorne gezogen wird, wieder eingefuegt wird. Dieses Zeichen steht in der Jokerzeile neben dem Buchstaben 'F'und wird mit aus dem Speicher uebernommen. Wie zu fast jeder Funktion gibt es auch hier wieder eine Umkehrfunktion. Und die ist ueber zu erreichen. Hiermit wird ein Zeichen in den Speicher eingefuegt. Als Begrenzung wird wieder das Zeichen neben 'L' verwendet, und als Fuellzeichen dasjenige neben 'F'. Wenn der Skip-Modus eingeschaltet ist (Taste ), werden jeweils zwei Zeichen entfernt oder eingefuegt. Auch dies traegt zur besseren Editier- barkeit von Bildschirmespeicherbereichen bei. MOHAMED Documentation - 2.0 - written by BERT the ;-} -------- Seite 6 MOHAMED - The Most Handy Memory Editor So, nachdem nun alle Klarheiten im Bezug auf die Jokerzeile beseitigt sind, komme ich zu den zusaetzlichen Modi, die MOHAMED 2.0 besitzt. Wie Sie ja sicher noch wissen hatte MOHAMED 1.0 verschiedene Modi, die man ein- oder ausschalten konnte. Da waren der Skip-Modus (), der Zaehlmodus () und der Uebersetzungmodus (). Nun, MOHAMED 2.0 kennt noch vier weitere Modi. Da waere zunaechst der Portmodus. Ihn erreicht man ueber die Taste <^> (das Caret). Wenn man nun diese Taste erstmals betaetigt, wird der Modus eingeschaltet, was sich darin aeussert, dass links oben auf dem Bildschirm die Folgendes erscheint: xx stellt hier irgendeine zweistellige hexadezimale Zahl dar. Wie Sie sehen koennen zeigt MOHAMED hier den Zustand des Ports Nummer 60 (dezimal 96) an. Das ist der Port, der die Zeichen empfaengt, die von der Tastatur kommen. Wenn Sie nun also irgendeine Taste druecken, so veraendert sich der Wert, der am Port anliegt und MOHAMED zeigt dieses an. Wenn Sie einen anderen Port betrachten wollen, fahren Sie mit dem Cursor zu einer Stelle, an der sich das Wort befindet, das den gewuenschten Port beinhaltet (oder schreiben Sie das Wort in den Speicher) und druecken Sie . Damit wird dann das Wort in den Port uebernommen. Das funktioniert auch, wenn der Portmodus ausgeschaltet ist, was durch erneutes Betaetigen der Taste <^> zu erreichen ist. Neben dem Portmodus gibt es dann auch noch den Binaermodus, welchselbiger durch ein- und ausgeschaltet wird. Ist er eingeschaltet, wechselt das ASCII-Darstellungsfeld sein Aussehen. Dort werden dann die Bytes, die sich an der Cursorposition befinden als Bitfolgen dargestellt. Wenn Sie sich gerade auf der Hex-Eingabe-Seite befinden kommen Sie mit auf die Binaer-Eingabe-Seite. Hier koennen Sie nach Herzenslust mit dem Cursor rumfahren und die einzelnen Bits veraendern. Um ein Bit zu setzen oder zu loeschen muessen Sie einfach nur irgendeine Taste druecken, die einen echten Scancode erzeugt, also irgendeine Buchstaben oder Zahlentaste. Ich nehme dafuer immer her, weil das die groesste Taste ist und sie sowieso immer in Reichweite liegt. Man kann aber genausogut be- nutzen. Mit kommt man wieder in das Hex-Eingabe-Feld und mit wird der Binaermodus wieder ausgeschaltet. Bevor ich zum naechsten neuen Modus komme, noch eine Anmerkung zum Ueber- setzungsmodus, den man mit einschaltet. Den habe ich naemlich um die Funktion erweitert. Wenn man nun also und gleichzeitig aktiviert, so wird nicht das Byte als Dezimal- und Binaerzahl dargestellt, sondern das Wort, auf dem man sich gerade be- findet. MOHAMED Documentation - 2.0 - written by BERT the ;-} -------- Seite 7 MOHAMED - The Most Handy Memory Editor Der naechste Modus ist der Timer-Modus. Man kann sich mit die aktuelle Zeit anzeigen lassen. Die Zeit, die hier angezeigt wird ist nicht die Zeit, die die Realtimeclock hat, sondern die interne software- gesteuerte Zeit. Man kann aber die Zeit aus der Realtimeclock in die Softwareuhr kopieren, indem man einfach im Hexmodus drueckt. Ich habe keine Ahnung, was da reinkopiert wird, wenn man drueckt und keine Realtimeclock besitzt, aber ich nehme an, dass dann der Timer wieder auf Null gesetzt wird. Wenn man im Hexmodus drueckt, wird die Realtimeclock wie folgt ge- setzt: Bytefolge an Cursorposition: 09 40 12 01 Uhrzeit, die gesetzt wird: 9 Uhr 40 Minuten 12 Sekunden, Sommerzeit Die Uhr wird ueber Interrupt 1a Funktion 3 gesetzt. So, nun kommen wir zu einem kleinen Leckerbissen unter den Modi (zumin- dest empfinde ich es als einen solchen): Dem Disassemblermodus. Um diesen Modus einschalten zu koennen benoetigen Sie das Programm ROPIN.COM (Resident OPcode INterpreter), das auf der MOHAMED-Diskette drauf ist. ROPIN ist ein Hilfsprogramm fuer MOHAMED und wird bei Aufruf resident installiert. Wenn Sie nun also den Disassemblermodus einschalten wollen, druecken Sie . Wenn ROPIN nicht installiert ist, verwei- gert MOHAMED mit einer Fehlermeldung die Aktivierung diese Modus. Also flugs ROPIN installiert und los gehts. Es ist uebrigens egal, ob ROPIN vor oder nach MOHAMED installiert wird. Wichtig ist nur, dass er sich im Speicher befindet. Wenn Sie nun also den Modus eingeschaltet haben, er- scheint in der Kommandozeile der Befehl, auf dessen erstem Byte Sie sich gerade befinden. Wenn es sich um einen Befehl handelt, der nur fuer be- stimmte Prozessortypen gilt, wird das als Kommentar auch noch ange- zeigt. Hier die Aufstellung der moeglichen Kommentare: 286/386: Dieser Befehl wird nur von einem AT verstanden 80x87: Dieser Befehl wird nur von mathematischen Coprocessoren verstanden 387: Dieser Befehl wird nur von dem Coprocessor 80387 verstanden ITT-2C87: Dieser Befehl wird nur vom speziellen Coprocessor ITT-2C86 verstanden (ich kenne den selber nicht) Das sind zur Zeit alle verfuegbaren Spezialopcodes, die ROPIN erkennt. Aber ich arbeite weiter dran, und werde wohl irgendwann auch noch die speziellen 80386'er und 80486'er Befehle einbauen. MOHAMED Documentation - 2.0 - written by BERT the ;-} -------- Seite 8 MOHAMED - The Most Handy Memory Editor Bei Sprungbefehlen wird die Bytefolge, die das Sprungziel angibt als EA ausgegeben, das heisst, wenn ROPIN zum Beispiel den Befehl "jb 023" (verzweige nach IP+23, wenn Ergebnis kleiner ist) vorfindet, gibt er nicht diese Zeichenfolge aus, sondern zum Beispiel "jb 02314", wobei "02314" die EA angibt, auf die der IP (Instructionpointer) gesetzt wird. Das Gleiche gilt natuerlich auch fuer alle JMP, CALL, LOOP und sonstigen Verzweigungsbefehle. Auch in diesem Modus gibt es ein paar Tasten, die spezielle Funktionen erfuellen. Da waere zunaechst die Taste . Mit dieser Taste kommt man auf den naechsten Befehl. Da jeder Befehl ein bis sechs Bytes um- fassen kann und kaum einer auswendig weiss, welcher Befehl wieviele Bytes lang ist, kann man mit dieser Taste sehr bequem ein Programm verfolgen. Um relative Sprungbefehle verfolgen zu koennen habe ich die Tasten und mit dieser Moeglichkeit versehen. Mit springt man so viele Bytes relativ, wie in dem Byte an der Cursorposition angegeben sind. Mit springt man so viele Bytes relativ, wie in dem Wort an der Cursorposition angegeben sind. Wenn man also auf einem relativen Sprungbefehl sitzt, gehe man einen Schritt nach rechts und druecke je nach Opcode oder . Die einzigen Opcodes, bei denen man braucht sind E8 und E9. Alle anderen Sprungbefehle verzweigen nur nach dem Byte, das dem Opcode folgt (wenn sie relativ verzweigen). Das waere eigentlich schon alles, was es zu diesem Modus zu sagen gibt. Ach ja, noch was: Ich schreibe natuerlich weiter an MOHAMED und bin fuer jede Anregung dankbar, was ich noch reinbauen kann. Vor allem waere ich froh, wenn mir jemand sagen kann, woher ich die speziellen Opcodes der Befehle des 80386 und 80486 mit Beschreibung der Funktionen beziehen kann. Etwas, was nicht unbedingt mit diesem Modus zusammenhaengt, aber sehr viel mit ROPIN zu tun hat, ist eine weitere Moeglichkeit, Speicherbe- reiche auf Diskette zu speichern. Zunaechst hat man natuerlich die beiden bekannten Moeglichkeiten Mohamedformat und Normalformat. Diese beiden funktionieren wie vorher. Neu hinzugekommen ist das Debugformat. Wenn man einen Speicherbereich in diesem Format abspeichert, wird eine Textdatei erstellt, in der pro Zeile ein Assemblerbefehl steht. Am Anfang der Zeile steht die EA, danach folgen die Bytes, die den Befehl repraesentieren, woran sich der Befehl selber anschliesst. Wenn es sich um einen Befehl handelt, der nur auf einem speziellen Prozessor laeuft, wird das auch noch mit angegeben. Das so erstellte File kann man sich dann mit dem TYPE-Befehl von DOS ansehen (sehr unkomfortabel), oder man nimmt sich ein Programm, das Textdateien darstellen kann. Man kann es sogar editieren, wobei ich aber den Sinn dahingestellt sein lassen will. Hier gleich noch ein Wort zu den Diskettenoperationen. Man kann jetzt auch bei residenter Installation auf die Diskette zugreifen. Das haengt allerdings davon ab, ob es sicher ist zu dem Zeitpunkt auf die Diskette zuzugreifen, oder nicht. Festgestellt wird das durch die Funktion 34 von Interrupt 21. MOHAMED Documentation - 2.0 - written by BERT the ;-} -------- Seite 9 MOHAMED - The Most Handy Memory Editor Diese Funktion liefert die Adresse des INDOS-Flags zurueck. MOHAMED ver- wendet aber nicht das Flag selber, sondern das Byte, welches sich zwei Bytes hinter diesem INDOS-Flag befindet. Er speichert es bei der Instal- lation intern ab und vergleicht dann bei jedem Diskettenzugriff das abge- speicherte Byte mit dem aktuellen. Wenn sich eine Differenz ergibt, ver- weigert er den Zugriff. Leider musste ich feststellen, dass diese Methode auch nicht immer hundertprozentig hinhaut, weshalb ich Ihnen nur den Rat geben kann, Diskettenzugriffe nur dann durchzufuehren, wenn Sie sicher sein koennen, dass kein anderes Programm zugreift. Kommen wir nun zu weiteren Funktionen von MOHAMED 2.0. Man kann nun mit Hilfe der Tasten <+> und <-> die Bytes an der Cursorpo- sition In- bzw dekrementieren. In Verbindung mit wird das High- nibble des Bytes veraendert (aus 74 wird mit 84). Das Wort an der Cursorposition wird mit den Tasten und In- bzw Dekrementiert. Auch hier wird das Highnibble des Bytes veraen- dert, wenn man die Tasten in Verbindung mit verwendet (aus 0436 wird mit 0446). Bei den grauen Tasten gibt es noch eine Besonderheit: Wenn man den Portmodus aktiviert hat, wird das Wort ganz normal veraen- dert und anschliessend als Port uebernommen. Hier haben die grauen Tasten also die gleiche Funktion als wenn man erst das Wort an der Cursorposition um eins erhoeht bzw verringert und dann drueckt. Eine weitere Funktion von MOHAMED, bei der der Sinn vielleicht nicht gleich einleuchtet, ist das Setzen eines XOR-Filters. Wenn Sie im Hex- modus druecken, wird das Byte an der Cursorposition als XOR-Operand uebernommen. Danach werden saemtliche Speicherstellen vor der Ausgabe auf den Bildschirm mit diesem Wert ge-XOR-t. Ich habe diese Funktion eingebaut, weil ich eines schoenen Tages vor dem Problem stand, dass ich in einem Programm einen Passwortschutz eingebaut hatte und das Passwort nicht mehr wusste. Nun, normalerweise braucht man sich dann nur den Programmcode durchzuschauen, da irgendwo in dem Programm das Passwort abgespeichert sein muss, damit der Computer es mit der Eingabe des Users vergleichen kann. Leider war ich da auf die glorreiche Idee gekommen, das Passwort mit irgendeinem schraegen Wert zu XOR-en, um ebendies auszuschliessen. Also musste ich diese Funktion in MOHAMED einbauen, um das Passwort wieder lesbar zu machen. Und es ist mir ge- lungen. Inzwischen verschluessele ich die Passwoerter etwas kompli- zierter, weshalb man auch das von MOHAMED intern abgespeicherte Passwort nicht auf diese Art zu Gesicht bekommt. Die Funktion habe ich zwar nur einmal gebraucht, aber bis auf einige Ausnahmen lasse ich halt alles, was ich an Funktionen einmal eingebaut habe auch drin. Und um das Ausschalten der XOR-Funktion zu ermoeglichen, habe ich auch gleich noch mit dem XOR-Operanden Null belegt, was zur Folge hat, dass die Bytes nur noch mit Null ge-XOR-t werden. MOHAMED Documentation - 2.0 - written by BERT the ;-} -------- Seite 10 MOHAMED - The Most Handy Memory Editor Nach dieser zugegebenermassen recht sinnlosen Funktion (zumindest fuer 99 % aller Anwender) jetzt wieder eine etwas sinnvollere. Es ist jetzt moeglich, bestimmte Paragraphen (16 Bytes, Sie erinnern sich?) dauerhaft auf den Bildschirm zu bringen. Dies ist mit der Taste (nur im Hexmodus) zu bewerkstelligen. Dadurch wird die aktuelle Cursorzeile als Lock-Zeile markiert und gleich in der obersten Zeile des Speicherauszugs dargestellt. Man kann auf diese Art bis zu zehn Zei- len fixieren. Die Lock-Zeilen werden, genau wie der normale Speicheraus- zug, bei jedem neuen Bildschirmaufbau upgedated. Dadurch kann man sich auch die Systemuhr staendig anzeigen lassen (wozu soll das gut sein?), oder sich anschauen, wie sich die Stacks veraendern. Es ist klar, dass man einmal fixierte Zeilen auch wieder freigeben koen- nen muss, da sonst nicht mehr benoetigte Lock-Zeilen nur sinnlos Platz auf dem Bildschirm verschwenden wuerden. Hierfuer betaetige man die Taste (auch die nur im Hexmodus). Damit wird die letzte, also die unterste, Lock-Zeile freigegeben. Wenn die Cursorzeile selber eine Lock-Zeile ist, wird diese entfernt, egal ob sie die Unterste ist, oder nicht. Natuerlich kann man auch die gleiche Zeile mehrfach fixieren, wobei mir einfach kein sinnvoller Grund dafuer einfallen will. Aber es waere mehr Aufwand gewe- sen diesen Fall zu verhindern, als jedem die Moeglichkeit offenzuhalten, sich selbst so viel Schrott auf den Bildschirm zu bringen, wie er will. Also: Froehliches Zumuellen!!!! Ich habe auch fuer den Block ein paar neue Moeglichkeiten eroeffnet. In MOHAMED 1.0 war es noch mit einem ziemlichen Aufwand verbunden, sich ein eigenes Farbfile zu erstellen. Das ist hier auch nicht sehr einfach, da die Farbeinstellung noch immer im Speicher selbst vorgenommen werden muss, aber es ist immerhin durch den Commandlineparameter '#' moeglich, einmal abgespeicherte Farbfiles standardmaessig von vornherein zu laden. Nun habe ich das Markieren der Colortabelle durch die Taste um einiges einfacher gemacht. Dadurch wird naemlich der Block auf die Farb- tabelle von MOHAMED gesetzt, der Cursor auf den Blockbeginn gebracht und die Blockgroessenanzeige um eins verringert. Letzteres ist ein Effekt, den man mit der Taste <#> (nur im Hexmodus) erzielen kann. Ich habe das Verringern der Blockgroessenanzeige um eins eingebaut, weil der Computer selbst immer bei Null zu zaehlen anfaengt. Daraus ergibt sich, dass das erste Element in einer Reihe immer Element 0 ist. Wenn man jetzt aber den Block auf dieses Element setzt zeigt die Blockgroessenanzeige immer 1 an. Somit hat man jetzt die Moeglichkeit dieses auf Null zu bringen. Nun kann man also die Werte der Farbtabelle (die uebrigens im Hilfebild- schirm aufgelistet sind) genau anfahren. Dazu braucht man nur den Count- Modus einzuschalten und das Blockende zu uebernehmen. Fortan kann man die aktuelle Farbnummer an der Blockgroessenanzeige ablesen. Um die Farbtabelle immer von Anfang an parat zu haben, ohne sie erst ueber den Commandlineparameter '#' einbinden zu muessen, habe ich noch eine weitere Funktion eingebunden. MOHAMED Documentation - 2.0 - written by BERT the ;-} -------- Seite 11 MOHAMED - The Most Handy Memory Editor Diese Funktion ist . Damit wird MOHAMED abgespeichert. Dies ist natuerlich nur im nichtresidenten Betrieb moeglich, da ja sonst der Installationsteil fehlen wuerde. Um nun also eine lauffaehige Version von MOHAMED mit Ihrer Lieblingsfarbtabelle zu erhalten gehen Sie am Bes- ten wie folgt vor: 1) MOHAMED ohne Commandlineparameter aufrufen 2) betaetigen und die Farbtabelle auf die eigenen Wuensche einstellen 3) Cursor und Block auf die Positionen setzen, die Sie bei jedem neuen Start haben sollen (ich empfehle beides auf Null zu setzen, da der Speicher nicht immer so organisiert ist, wie er es bei der Abspei- cherung war) 4) druecken 5) Namen fuer den neuen MOHAMED eingeben (z.b. ETZISGUT.COM) 6) fuer Normalformat waehlen Damit haben Sie jetzt einen MOHAMED, der die von Ihnen gewuenschte Farb- tabelle beinhaltet. Sie koennen natuerlich auch noch mehr veraendern, zum Beispiel den Hilfebildschirm (der kommt 138b Bytes hinter der Farb- tabelle) oder die Tastaturbelegung (viel Spass beim Ausknobeln). Der letzte Befehl, der mit dem Block zusammenhaengt ist . Damit kann man die Bytes an der Cursorposition mit den Bytes, die im Block liegen vergleichen. Bei jedem Byte, bei dem MOHAMED einen Unterschied zum entsprechenden Byte im Block feststellt, setzt er den Cursor auf die Position, an der die Differenz aufgetreten ist, bringt eine Meldung, die angibt, an welcher EA das Byte im Block liegt, welchen Wert dieses hat und fragt Sie, ob er weitersuchen soll. Wenn Sie eingeben, vergleicht er bis zum naechsten Unterschied weiter. Wenn kein Unterschied auftritt, bringt er eine Meldung, dass die Bereiche gleich sind. Nun bleiben an neuen Befehlen nur noch und die Gruppe der MCB- Befehle. Der Befehl bringt den Cursor auf die Position, an der der Instructionpointer war, als MOHAMED aufgerufen wurde (bei nichtresi- dentem Betrieb kommt man damit immer zur Null). Das ist vielleicht hin und wieder ganz nuetzlich, wenn man zum Beispiel in einer Warteschleife haengt und nicht weiss, was man tun soll. Dann kann man sich den Spei- cherbereich ab dieser Position mal anschauen. Es kommt natuerlich recht haeufig vor, dass der Computer gerade dabei war, einen Interrupt abzu- arbeiten. In diesem Falle sollte man MOHAMED wieder verlassen und gleich anschliessend erneut aufrufen. Irgendwann kommt man dann zu der Stelle, an der es haengt (ist natuerlich Pech, wenn man in einem Interrupt haeng- en geblieben ist.) MOHAMED Documentation - 2.0 - written by BERT the ;-} -------- Seite 12 MOHAMED - The Most Handy Memory Editor Wie Sie schon aus dem File MOHAMED.TXT entnehmen koennen, habe ich mich ziemlich eingehend mit der Verwaltung des Speichers durch MCB's befasst. Nun, MOHAMED hat einige Funktionen, mit denen man die MCB's recht gut verfolgen kann. In der Version 1.0 war man noch darauf angewiesen, den Cursor auf das dritte Byte eines MCB's zu bringen, um dann von dort aus zum naechsten springen zu koennen. Das ist jetzt nicht mehr noetig. Wenn man naemlich die Taste drueckt, springt MOHAMED zum naechs- ten MCB, egal wo sich der Cursor gerade befindet. Wenn man sich auf oder hinter dem letzten MCB (zu erkennen am ersten Byte namens 5A) befindet, springt er nach EA A0000, was die obere Speichergrenze von DOS darstellt. Drueckt man hinter EA 9FFFF auf , so landet man wieder beim letz- ten MCB. Mit kommt man zum vorhergehenden MCB, bzw. zu dem MCB, dem der Speicherbereich gehoert, in dem man sich gerade befindet. Drueckt man vor dem ersten MCB, so landet man genau auf diesem. Der erste MCB beinhaltet meist, so sie installiert sind, die Einheiten- treiber (auf Neogermanisch Devicedriver), die in der CONFIG.SYS definiert werden. Hier befinden sich auch die von DOS intern angelegten Buffer, Files und aehnliches. Fuer genauere Information schauen Sie sich bitte die Datei MOHAMED.TXT an. Nun waere ein solches Rumgespringe relativ sinnlos, wenn man nicht er- fahren kann, wem der MCB gehoert, in dem man sich gerade befindet. Des- halb greife man zur Taste . Wenn man dann ein Klingeln hoert und in der Kommandozeile darauf hingewiesen wird, dass es keinen MCB gibt, der sich fuer diesen Speicherbereich zustaendig fuehlt, sitzt man ent- weder vor dem ersten MCB oder hinter dem Ende des Speichers, den DOS ver- walten kann. Wenn hingegen ein Bildschirm eingeblendet wird, auf dem lauter Zahlen stehen, weiss man "Aha, ich habe einen MCB am Wickel!!". Nun, die Informationen auf diesem Bildschirm haben folgende Bedeutung: MCB at EA xxxxx zeigt an, wo sich der MCB zu diesem Speicher- bereich befindet DEV at EA xxxxx zeigt an, dass man einen Devicedriver vor sich hat, und wo er anfaengt PSP at EA xxxxx zeigt die Position des PSP an, der zu dem MCB gehoert Attribut : xxxx zeigt das Attribut eines Devicedrivers an, wird auch nur bei Devicedrivern sichtbar Length = xxxxx zeigt die Laenge des MCB's oder Devicedrivers an Name = $$$$$$$$ zeigt den Namen des MCB's oder DEV's an Owner = $$$$$$$$ zeigt den Eigentuemer des MCB's oder DEV's an Type = $$$$$$$$ zeigt den Typ des MCB's oder DEV's an Die rechte Haelfte (eigentlich die rechten zwei drittel) nimmt eine Ta- belle ein, in der die Interruptvektoren stehen, die in den Speicherbe- reich zeigen, auf den sich die Informationen beziehen. MOHAMED Documentation - 2.0 - written by BERT the ;-} -------- Seite 13 MOHAMED - The Most Handy Memory Editor Den Namen und den Owner des MCB's ermittelt MOHAMED aus den letzten acht Bytes des MCB's. Hier steht aber erst ab der DOS Version 4.0 der Name des MCB's. Es ist also durchaus moeglich, dass diejenigen, die fruehere Ver- sionen von MS-DOS benutzen, in diesen Feldern nur Schrott zu Gesicht be- kommen. So, das waren die neuen Funktionen von MOHAMED Version 2.0. Jetzt folgt nur noch eine Liste der Farbattribute, da die Erklaerung im Hilfebild- schirm recht mager ist. Wer noch mehr ueber die MCB's und DEV's wissen moechte, der sollte sich das File MOHAMED.TXT ausdrucken lassen. Da steht mein geballtes Wissen drin (was nicht allzuviel ist). Hier nun die Liste: Nr. | Beschreibung -----+----------------------------------------------------------------- 00 | Farbe des Rahmens von MOHAMED 01 | Farbe des Speicherauszuges 02 | Farbe des aktiven Cursors 03 | Farbe des Cursors im anderen Editierfenster 04 | Farbe der Cursorzeile im Hexmodus 05 | Farbe der Kommandozeile bei Eingabe 06 | Farbe des Cursors des Kommandozeile bei Eingabe 07 | Farbe der Meldungen in der Kommandozeile 08 | Farbe der Blockanfangs- und Endemarkierung im Hex-Modus 09 | Farbe des Blockes im ASCII-Modus 0a | Farbe der Jokerzeile (Buchstaben und geschweifte Klammern) 0b | Farbe der Modi-Anzeigen 0c | Farbe des Speichermerkers 0d | Zeichen nach dem Speichermerker 0e | Zeichen der Blockanfangsmarkierung im Hex-Modus 0f | Zeichen der Blockendemarkierung im Hex-Modus 10 | Jokerzeichen 11 | Farbe der Meldung, die beim Speichervergleich ausgegeben wird 12 | Farbe der Meldung am unteren Bildschirmrand 13 | Farbe der Ueberschrift "MOHAMED" 14 | Zeichen fuer Delete-Begrenzung 15 | Zeichen fuer Delete-Fuellung 16 | Farbe der Jokerzeile (Inhalt der geschweiften Klammer) 17 | Farbe des Hilfsbildschirms 18 | Zeichen fuer den Binaermodus, wenn Bit = 1, linkes Zeichen 19 | Zeichen fuer den Binaermodus, wenn Bit = 1, rechtes Zeichen 1a | Zeichen fuer den Binaermodus, wenn Bit = 0, linkes Zeichen 1b | Zeichen fuer den Binaermodus, wenn Bit = 0, rechtes Zeichen 1c | Farbe fuer die Zeichen im Binaermodus 1d | Farbe der fixierten Zeilen 1e | Farbe der letzten fixierten Zeile 1f | Farbe der Passwortabfrage -----+----------------------------------------------------------------- MOHAMED Documentation - 2.0 - written by BERT the ;-} -------- Seite 14 MOHAMED - The Most Handy Memory Editor Nr. | Beschreibung -----+----------------------------------------------------------------- 20 | Zeichen fuer den Balken am linken Bildschirmrand 21 | Farbe des Balkens am linken Bildschirmrand 22 | Zeichen fuer die Positionsmarkierung am linken Bildschirmrand 23 | Farbe der Positionsmarkierung am linken Bildschirmrand 24 | Zeichen fuer die Mausempfindlichkeitsanzeige 25 | Farbe fuer die Mausempfindlichkeitsanzeige 26 | Zeichen fuer den Zeiger auf die Mausempfindlichkeit 27 | Farbe des Zeigers auf die Mausempfindlichkeit 28 | Farbe der Meldungen im Disassemblermodus -----+----------------------------------------------------------------- So, das wars dann fuer diese Version von MOHAMED. Aber keine Angst, ich schreibe weiter. Deshalb hier wieder mal mein Aufruf: Schickt mir Bug-Reports, Verbesserungsvorschlaege und Anregungen fuer neue Funktionen. Bis zur naechsten Vollversion wird wahrscheinlich noch einige Zeit vergehen, aber die bring ich auch erst raus, wenn MOHAMED mehr als 30 K belegt (ohne ROPIN). Auf der Diskette zu dieser Version ist auch MUSTAFA drauf, die Drein- gabe fuer alle, die sich registrieren lassen. Auch MUSTAFA hat einige Funktionen zu bieten, die man bei anderen ASCII-Tabellen vergebens sucht. Also lesen Sie sich am Besten das File MUSTAFA.DOC durch, um auch wirklich alles ausschoepfen zu koennen, was MUSTAFA bietet. Na, das wars dann. Bis zur naechsten Registrierung alles Gute. Ach ja, die naechste Version wird teurer, denn ich habe mir das mal durch den Kopf gehen lassen mit der Funktionsvielfalt von MOHAMED und meine, dass ein geringfuegig hoeherer Preis schon angebracht waere, zumal ich nicht glaube, dass in naechster Zeit etwas Vergleichbares auf den Markt kommt. Ich plane fuer die naechste Version von MOHAMED noch folgende Funktionen: - Ausdruck als Speicherauszug oder Debugcode - Editierung von Extended Memory (evtl. auch Expanded) - Unterstuetzung von Joysticksteuerung (wer braucht's, aber was soll's?) - alles, was mir sonst noch einfaellt - alle Anregungen, die ich kriege und die mir sinnvoll erscheinen Also dann, viel Vergnuegen mit MOHAMED - The MOST handy Memory Editor !! ==== MOHAMED Documentation - 2.0 - written by BERT the ;-} -------- Seite 15