Funktionsbeschreibung des Scypmon V1.6 (Update 30.09.92) \======================================================/ Release: -------- (C) by Jörg Bublath 1989-1992 Die Entwicklung dieses Programms hat mich einige Zeit gekostet, und deshalb hätte ich auch gerne finanziell was davon. Ich persönlich hasse diese "crippled unregistered versions" und werde dieses Druckmittel NICHT anwenden um die Sharewaregebühr von (man höre und staune) DM 5,-- einzutreiben, sondern appelliere an die Anständigkeit der Nutzer. Ich weiss, daß es einen HAUFEN Geld kostet alle Shareware-Programme, die man besitzt auch wirklich zu bezahlen. Ich würde daher gerne einen Appell an alle Schreiber von Shareware richten: Ich nenne das das "sharest du mich, share ich Dich"-Konzept. Das heisst das Autoren anderer Sharewareprogramme mir ihr Programm unentgeltlich zu Verfügung stellen, sowie ich es dann auch bei ihnen tue - wer aber selber keine nützlichen Programe schreibt, der ist hiermit aufgefordert dies zu ändern - oder zu blechen! Ein eventueller Update-Service wird bei diesem gegenseitigen "sharen" natürlich nicht erwartet. Von der Shareware-Gebühr ebenfalls verschont bleiben die, die mit ihren Ideen und Test-Reports im besonderen Maße zur Verbesserung von Scypmon beigetragen haben. Die Dokumentation (evtl. der Source) und das Programm an sich dürfen ohne Erlaubnis des Autors nicht modifiziert werden. Scypmon darf nur vollständig kopiert werden. Folgende Files müssen im Paket enthalten sein: -ScypmonV1.6 -Scypmon_deutsch.doc (Deutsche Anleitung) -Scypmon_english.doc (Englische Anleitung) Zusätzlich: dis.library von Tobias Walter Verwendung in PD-Serien ist nur gestattet, wenn außer Scypmon noch möglichst viele andere Programme auf der Diskette (min. 80% gefüllt) sind, und der Preis dieser Disk DM 3,-- nicht übersteigt. Ich danke besonders: -------------------- Bernhard Möllemann, für viele Bugreports und ein paar nützliche Codefetzen Tobias Walter, für genauso viele reports,die dis.library und etwas Code und allen anderen die mit ihren Anregungen viel geholfen haben! MrScary, für Hilfe bei der englischen Anleitung. Allgemeines: ------------ Der Monitor besitzt einen Full-Screen Editor wahlweise mit/ohne Einfügen, mit einer vom Bildschirm unabhängigen Command-History (Buffer 1K). Der Cursor wird mit den Cursor-Tasten oder durch Anklicken mit der Maus bewegt. Wird dabei über den oberen oder unteren Rand hinausgegangen, wird der Bildschirm in die entsprechende Richtung gescrollt. In der Titelzeile wird angezeigt, ob man sich im Insert- oder Overwrite- Modus (Einfügen, bzw. Überschreiben) befindet. Ist beim Scrolling eine Ausgabezeile des "m", "i" oder "d" - Befehls auf dem Bildschirm, so wird die nächste logische Zeile angezeigt. Das Drücken der Cursor-Tasten "hoch" und "runter" mit "Shift" bewirkt ein Blättern der entsprechenden Ausgaben. Folgende Tasten sind außerdem noch speziell belegt: HELP (= CTRL-l) : Bildschirm löschen, Cursor in die linke obere Ecke Shift + HELP (= CTRL-k) : löscht den Rest der Zeile ab Cursor-Position Shift + DEL : Einfügen eines Leerzeichens Nummernblock: Shift + 7 : Cursor Home (obere linke Bildschirmecke) Shift + 1 : Cursor End (untere linke Bildschirmecke) Shift + 0 : Umschaltung Insert-Mode/Overwrite-Mode Shift + . : Del F1 : Jsr-Dissassemble In Shift-F1 : Umschalten "m" und "d" in Ganzbilschirmanzeige F2 : Jsr-Dissassemble Out (wird später erklärt) Alt + Cursor Hoch : Vorhergehender History-Eintrag Alt + Cursor Unten : Nachfolgender History-Eintrag Während längere Ausgaben/Wartezeiten: SPACE : Ausgabe anhalten, weiter wieder mit SPACE CTRL-C : Ausgabe abbrechen Linker Mausknopf : Niederhalten um Ausgabe anzuhalten Exceptions: ----------- Alle Exceptions außer #08 (Privilegsverletzung) und den trap #0x - Befehlen werden vom Monitor abgefangen und mit "exception #xx at xxxxxx" quittiert, sofern mit "-p" das Patchen der Exception-Vektoren aktiviert ist. Ausserdem wird eine etwas detailliertre Information über den abgestuerzten Task ausgegeben (siehe "e" Kommando) und dieser sollte dann nicht mehr in der Taskliste vorhanden sein. Sollte der Grund der Exception ein Totalabsturz sein so hilft auch hier nur ctrl + amiga + amiga ! Aufruf: ------- Aufgerufen wird der Monitor mit "scypmon [-bpdi] [Batchfile]". scypmon [!] [-bdp] [-s ] [-f ] [batchfile] "-b" bewirkt das der Monitor sich in den Hintergrund startet, d.h. daß sein Window nicht aktiv geöffnet wird. "-p" Um Abstuerze auch wirklich abzufangen muss mit dieser Option das Patchen der Exceptionvektoren aktiviert werden, geschieht das nicht macht das Betriebsystem mit den Gurus was es will. "-d" verwendet (wenn vorhanden) die dis.library zum disassemblieren, damit ist dann auch 68030 (spaeter hoeher?) code disassemblierbar. Der Assembler bleibt ein nur 68000 Assembler, deshalb werden - auch wegen der etwas anderen Syntax - die mit dis.library disassemblierten Befehle manchmal nicht assembliert. "-s" Mit 2.0+ können Public-Screen verwendet werden. Mit dieser Option kann Scypmon auf jedem beliebigen Public-Screen geöffnet werden. "-f" Zum Einsteller anderer Fonts als der Systemfont in den Preferences. Das Batchfile kann ein mit z.B. "ed" editiertes Textfile sein, daß eine Befehlsfolge enthält. Dies ist nützlich um bei Programmierung mit absoluten Programmteilen Graphik- oder Sounddaten in den Speicher zu laden. z.B.: { o 60000 7f000 00 l "graphic.data" 70000 l "sound.data" 60000 l "sinus-tabelle" 7e000 x } Dieses File löscht den Bereich von 60000 bis 7f000, lädt anschließend die 3 Programme in den Speicher und verlässt den Monitor danach sofort wieder. Eine Vorbemerkung zur Speicherverwaltung des Monitors: Um ein Alloc-Chaos zu verhindern unterstützt er Monitor die Amiga-Dos AllocMem-Befehle auf eine besondere Weise. Es werden 8 Segmente (0-7) gespeichert. Diese werden bei doppelter Verwendung oder beim Verlassen des Monitors wieder freigegeben, somit wird vorgebeugt, daß man wie z.B. beim C-Mon irgenwann keinen Überblick mehr über seinen Speicher hat, und einen Reset machen muß um ihn zu säubern. Menüs ----- Die Optionen "-p" und "-d" koennen auch noch während der Monitor läuft über Menüs eingestellt werden. Die Hilfseite ist nur eine Syntaxzusammenfassung der Befehle und kein Ersatz für diese Anleitung! Die Befehle (in alphabethischer Reihenfolge): --------------------------------------------- Alle Zahlen (auch beim Assemble/Dissassemble) müssen Hexadezimal eingegeben werden (ein vorangestelltes "$" ist nicht notwendig)! [ ] : Angaben in Eckigen Klammern müssen nicht angegeben werden. ( ) : Angaben in runden Klammern müssen angegeben werden. start : Eine Hexzahl, die die Startadresse einer Operation angibt. stop : Eine Hexzahl, die die Endadresse einer Operation angibt. ziel : Eine Hexzahl, die die Startadresse eines Ziels angibt. -> fuer start,stop und ziel können auch Variablen angegeben werden. name : Ein ASCII-String. segment: Ein Speichersegment zwischen 0 und 7. Für Hexadressen können meist auch Variablen (^(a-z)) verwendet werden. ---------------------------------------------------------------------------- [?] (expression) : Calculate Der Ausdruck wird berechnet und dezimal,hexadezimal,binär und als 4 Zeichen ASCII-String ausgegeben. Innerhalb des Ausdrucks müssen Hex-Zahlen mit "$",Dez-Zahlen mit "#" oder ohne Bezeichener, Binärzahlen mit einem "%" und maximal 4 ASCII- Zeichen mit "" oder '' gekennzeichnet werden. Ausserdem kann mit "&(Hexadresse)" der Inhalt einer Adresse und mit "^(a-z)" eine Uservariable und mit folgende Systemvariablen in die Berechnung einbezogen werden: ^s = Startadresse des letzen Load-Befehls ^e = Endadresse des letzen Load-Befehls ^S0-7 = Startadresse von den Segmenten 0-7 ^L0-7 = Laenge von den Segmenten 0-7 Erlaubte Rechenarten sind: "+" , "-" , "*" und "/". Gesetze Klammern werden berücksichtigt - es gilt Punkt vor Strich. Die Berechnung erfolgt nur als Integer, evtl ergebene Kommastellen werden abgeschnitten. Bsp.: ? $1000-(#100+%010)*2 ---------------------------------------------------------------------------- ^(a-z)=(expression) : Variablen-Zuweisung Einer der 26 User-Variablen kann ein beliebiger Ausdruck (siehe "?") zugewiesen werden. Vorsicht: Die Variablen ^s und ^e werden vom System zur Speicherung der Start- und Endadresse beim Laden verwendet. Bsp.: ^a=^a+$20-(1+4)*5 ---------------------------------------------------------------------------- b (BlockNr) (start) [anzahl] : Block Save Lädt/Speichert ab (BlockNr) (anzahl) Bytes in den Speicher ab (start). Wird keine Anzahl angegeben werden $200 Bytes = 1 Sektor geladen/gespeichert. Als Device wird die mit "V" eingestellte Device verwendet. Vorsicht: Alle Angaben müssen Hexadezimal gemacht werden ! Soll etwas in schon vom Dos belegten Speicher geladen werden, so muß die Sicherheitsabfrage mit "!" übergangen werden. Bsp.: t (tr) (hd) (sc) (start) [anzahl] : Track Save Lädt/Speichert ab track,head,sector in den Speicher ab (start). Es werden (anzahl) (Default: $1600 Bytes = 1 Seite eines Tracks) Bytes von Diskette geladen/auf Diskette gespeichert. Als Device wird die mit "V" eingestellte Device verwendet. Vorsicht: Alle Angaben müssen Hexadezimal gemacht werden ! "!"-Option wie bei " : Device Ändert die Device der Track-Befehle auf die angegebene Device (Default: df0). Bsp.: V df0 ---------------------------------------------------------------------------- w (start) ["](name)["] : Write ASCII Der angegebene String wird ab (start) als ASCII-Code im Speicher abgelegt. Bsp.: w 70000 "hello world" ---------------------------------------------------------------------------- x : Exit Verläßt den Scypmon. Belegter Speicher durch "A" oder "ld" wird wieder freigegeben. Bsp.: x ---------------------------------------------------------------------------- Jsr-Disassemble --------------- Diese Option erleichtert das Auseinandernehmen von (besonders C-)Programmen. Beim Drücken der F1-Taste wird der Assembler-Ausdruck, der in der aktuellen Cursorzeile steht, ausgewertet (und zwar der Source-Teil), dann wird die Adresse der aktuellen Zeile auf einen 16 Einträge fassenden Ringpuffer abgelegt. Schließlich wird ab der Adresse, die der Ausdruck ergab, neu disassembliert. Folgende Ausdrücke werden anhand der gespeicherten Register berechnet: $xxxx,$xxxx(pc),$xx(ax),$xx(ax,dx),$xx(ax,ax). Sollte es sich bei dem Aufrufenden Befehl nicht um einen jsr,jmp oder branch Befehl handeln, erfolgt die Ausgabe mit dem "m"-Befehl. Drueckt man die F1-Taste waehrend man in einer "m"-Zeile steht so wird die Adresse unter dem Cursor, also die naechsten 8 Digits als Long-Adress, zum Aufruf eines erneuten "m" verwendet. Auf allen anderen Zeilen bewirkt F1, das ab Cursor eine Hexadresse eingelesen und diese mit "m" angezeigt. (Achtung: Mit F2 gehts hierbei NICHT wieder zurück). Beim Drücken der F2-Taste wird dieser Vorgang wieder rückgängig gemacht. Der "Stack" faßt 16 Enträge. Beim 17ten Eintrag wird der 1ste wieder über- schrieben. Man kann also sooft man will "F1" drücken, aber nur 16-mal "F2". Sollte man mit der Auswahl ob "m" oder "d"-Anzeige nicht zufrieden sein, kann mit Shift-F1 umgeschaltet werden. Verbesserungen seit V1.5: ------------------------- Window! Sizable! Fonts! Public-Screen! Noch kompatibler! Besseres Trackloading.... Final Remarks ------------- Beim Testen wurden zwar keine Fehler mehr festgestellt, aber die eine oder andere Bug bleibt immer noch drin, deshalb bin ich für Anregungen und Verbesserungen immer aufgeschlossen. Also, wenn ein Fehler auftritt, eine Disk inklusive Rückporto und genauer Fehlerbeschreibung/Anregung an nachstehende Adresse und Sie erhalten sobald möglich die neuste Version: Jörg Bublath Holzheimerstr. 4, E07 W-8390 Passau Germany Unter Email bin ich unter "bublath@kirk.fmi.uni-passau.de" oder "bublath@eva.fmi.uni-passau.de" oder "rzbublat@ibm.rz.uni-passau.de" zu erreichen.