DreaMon Handbuch Doc Bacardi -------------------------------------------------------------------------------- Table of Contents 1. Einleitung 2. Installation Wie kommt man an DreaMon Start 3. Command Reference Command Index Assemble Compare Disassemble Fill Go Hunt Ascii und Screencode dump Load Load FKeys Load Labels Ascii und Screencode memory dump Opcode hunt Preferences Dump und Memdump Ausgabe I/O Device Wähle Mapping Mode Registers Save Save FKeys Save Labels Transfer Verify Swap Exit Freezepoints Verwalten Dos Kommandos 4. General Usage Standard Zahlensysteme Range Bereich Scrollmode Ctrl-Shift keys Label Zahlen Vergrößern F-Keys Freezepoints Terme A. Past, present and future History ToDo B. Index -------------------------------------------------------------------------------- Chapter 1. Einleitung DreaMon ist ein Maschinensprachemonitor für die Super CPU. Er benötigt eine Super Ram Card. Einige Features:   * Freezepoints unterbrechen das laufendes Programm   * der Scrollmode ermöglicht schnelles und komfortables Debuggen   * im gesamten Programm können Zahlen durch eine beliebige Kombination aus Binär, Oktal, Dezimal und Hexadezimal sowie Label und Rechenoperationen dargestellt werden. Mehr steht im Kapitel Terme.   * die FKeys sind mit freidefinierbaren Makros belegbar   * auf einem C128 kann der 80 Zeichen Screen mit bis zu 39 Zeilen verwendet werden (da macht mein Monitor schluß, DreaMon kann bis zu 50 Zeilen verwalten) Diese Anleitung beschreibt Version 1.2.4 . Was ich für die Zukunft plane, erfahrt ihr im Kapitel ToDo. Das Kapitel Start erklärt, wie der DreaMon im Speicher installiert wird. Eine Übersicht aller Kommandos findet ihr in der Command Reference. Alle Kapitel sind im Index aufgelistet. Wenn ihr Ideen, Kritik oder Bugreports habt, könnt ihr mich per Mail erreichen: Zur Entwicklung dieses Programms benutze ich folgende Tools:   * den Crossassembler XA von Andre Fachat und Jolse Maginnis,   * das Entwicklungssystem KDevelop,   * das Transfertool PrLink,   * den Crosspacker PuCrunch von Pasi Ojala und   * Ninja's Onlinehilfe AAY 64. Ich möchte mich ganz besonders bei der Go64! bedanken, die mir solange eine SCPU zur Verfügung stellte, bis ich genug für eine eigene zusammengespart hatte. Weiterhin unterstützten mich folgende Leute durch Ideen, Motivation und Betatesten: Ninja/DRM Count Zero/SCS+TRC Jolse Maginnis Stephan Andres Krill und Brix/+H Mac Gyver/DMAgic Auch an Euch ein großes Danke! Doc Bacardi/The Dreams       ______              ______              ___________                     __\     \    ______ __\     \    ______ __\          \    ______         /\  \_____\ __\     \   \_____\ __\     \   \__________\ __\     \       /  \__\__  ¬\_  \_____\ __\__  ¬\_  \_____\ __\_______  ¬\_  \_____\     /   /    /    /\__\__  ¬\_   /____/\__\__  ¬\_   /    /    /\__\__  ¬\_  /   /    /    / /   _/    /  ___/_  /   _/    /  /    /    / /    /____/  \  /    /    / /    \____/  /    / /    \    /  /    /    / /\___    \     ·/_________/ /    /    /_______/ /    /    /__/____/    /\/    /    /                \/____/    /        \/____/    /      \/_____\ \________/                     \/_____\            \/_____\                                           cRu/1oo                                                                     ·                       http://www.the-dreams.de            -------------------------------------------------------------------------------- Chapter 2. Installation Wie kommt man an DreaMon Die neueste Version des DreaMon liegt zusammen mit diesem Handbuch immer im 'Little Dreamland' : http://people.freenet.de/LittleDreamLand. -------------------------------------------------------------------------------- Start Nachdem DreaMon gestartet wurde, erscheint ein kleines Menue. Dort kann die gewünschte Position im SRam eingestellt werden. Dabei wird das obere Ende des Rams vorgeschlagen. Mit den Cursortasten wird der Balken bewegt und mit Return ein Feld zum Editieren angewählt. Dazu stehen die Cursortasten, Home, Clear, Stop und Ctrl+ Cursortasten (um zum Anfang bzw. Ende zu springen) zur Verfügung. Mit Return wird die Eingabe bestätigt. 'Code' ist die Position des DreaMon. 'Text' ist ein Puffer für Labels und FKeys. Der Code darf keine Bankgrenze überschreiten. Zur Kontrolle wird hinter dem Eingabefeld die momentane Endadresse angezeigt. Eine fehlerhalfte Eingabe wird natülich abgefangen. Die Größe des Textpuffers ist variabel. Sie kann von 2 Pages bis zu allem verfügbaren SRam reichen. Eine sinnvolle Größe hängt davon ab, wieviele Label und Makros ihr verwenden wollt. Für den Anfang sollte der angezeigte Vorschlag mehr als ausreichen. Nachdem alles eingestellt wurde, verschwindet das Menue, und auf dem Screen erscheint ein 'sys'-Kommando. Das solltet Ihr Euch irgendwo notierern, denn damit wird der DreaMon vom Basic aus gestartet. -------------------------------------------------------------------------------- Chapter 3. Command Reference Command Index +--------------------------------------+--------------------------------------+ |Syntax |Kommando | +--------------------------------------+--------------------------------------+ |a Adresse [Opcode] |Assemblieren | +--------------------------------------+--------------------------------------+ |c Bereich Ziel |Vergleichen | +--------------------------------------+--------------------------------------+ |d Range |Disassemblieren | +--------------------------------------+--------------------------------------+ |f Bereich Pattern |Füllen | +--------------------------------------+--------------------------------------+ |g Adresse |Go | +--------------------------------------+--------------------------------------+ |h Bereich Wildpattern |Suchen | +--------------------------------------+--------------------------------------+ |i Range |Ascii Dump | +--------------------------------------+--------------------------------------+ |j Range |Screencode Dump | +--------------------------------------+--------------------------------------+ |l "Filename" [,Device [,Ladeadresse]] |Load | +--------------------------------------+--------------------------------------+ |lf "Filename" [,Device] |Load FKeys | +--------------------------------------+--------------------------------------+ |ll "Filename" [,Device] |Load Labels | +--------------------------------------+--------------------------------------+ |m Range |Memory Ascii Dump | +--------------------------------------+--------------------------------------+ |n Range |Memory Screencode Dump | +--------------------------------------+--------------------------------------+ |o Bereich Wildpattern |Opcode Suche | +--------------------------------------+--------------------------------------+ |p settings... |preferences | +--------------------------------------+--------------------------------------+ |r |Register zeigen | +--------------------------------------+--------------------------------------+ |s "Filename" ,Device ,Range |Save | |[,Ladeadresse] | | +--------------------------------------+--------------------------------------+ |sf "Filename" [,Device] |Save FKeys | +--------------------------------------+--------------------------------------+ |sl "Filename" [,Device] |Save Labels | +--------------------------------------+--------------------------------------+ |t Bereich Ziel |Speicher Verschieben | +--------------------------------------+--------------------------------------+ |v "Filename" [,Device [,Ladeadresse]] |Verify | +--------------------------------------+--------------------------------------+ |w Bereich Ziel |Speicher Austauschen | +--------------------------------------+--------------------------------------+ |x [t] |Exit/Trace | +--------------------------------------+--------------------------------------+ |z [all | Adresse [JumpTyp Aktion |Freezepoints Verwalten | |[Parameter] ]] | | +--------------------------------------+--------------------------------------+ |£LabelName [= [Term]] |Label definieren/benutzen/löschen | +--------------------------------------+--------------------------------------+ |? Term |Zeigt Ergebnis des Terms | +--------------------------------------+--------------------------------------+ |@ [#Device] [Kommando] |DOS Kommando senden / Status zeigen | +--------------------------------------+--------------------------------------+ |> Disass Output |Disassembler Output Editieren | +--------------------------------------+--------------------------------------+ |. Ascii Dump Output |Ascii Dump Output Editieren | +--------------------------------------+--------------------------------------+ |, Screencode Dump Output |Screencode Dump Output Editieren | +--------------------------------------+--------------------------------------+ |: Memory Ascii Dump Output |Memory Ascii Dump Output Editieren | +--------------------------------------+--------------------------------------+ |; Memory Screencode Dump Output |Memory Screencode Dump Output | | |Editieren | +--------------------------------------+--------------------------------------+ |[ [Register] |Erste Hälfte der Register Anzeigen / | | |Editieren | +--------------------------------------+--------------------------------------+ |] [Register] |Zweite Hälfte der Register Anzeigen / | | |Editieren | +--------------------------------------+--------------------------------------+ -------------------------------------------------------------------------------- Assemble Mit 'a' kann Code eingegeben werden. Die Syntax lautet: a Adresse [Opcode] Bei der ersten Form wird in der nächsten Zeile nochmal die Adresse angezeigt, hinter der man dann den Opcode eingeben kann. Nachdem eine Zeile eingegeben wurde, wird die nächste Adresse in der folgenden Zeile angezeigt, wo man mit dem Code fortfahren kann: a c000 a00C000 a9 00 lda #$00 a00C002 Note Registergröße   Ist der 'follow Rep/Sep' Modus aktiv, wird die Größe des Akkus und der Indexregister automatisch angepasst, wenn einer dieser Opcodes eingegeben wird. Das M und X Flag des Prozessor Status wird davon nicht verändert. Das standard Zahlensystem beim Assemblieren ist Hex. -------------------------------------------------------------------------------- Compare Vergleicht zwei Speicherbereiche und zeigt die Unterschiede an. Ist der 'Verbose Modus' aktiv, werden neben den Adressen auch die unterschiedlichen Inhalte angezeigt. Die Syntax lautet: c Bereich Ziel Ziel ist eine Adresse, die den Anfang des Speicherbereichs angibt, der mit Bereich verglichen werden soll. Das standard Zahlensystem für alle Parameter ist Hex. -------------------------------------------------------------------------------- Disassemble Disassembliert einen Bereich. Ist der 'follow Rep/Sep' Modus aktiv, wird die Größe des Akkus und der Indexregister automatisch angepasst, wenn einer dieser Opcodes auftritt. Das M und X Flag des Prozessor Status wird davon nicht verändert. Die Syntax lautet: d Range Tip Die Ausgabe des 'd' Kommandos kann editiert werden. -------------------------------------------------------------------------------- Fill Füllt ein Speicherberich mit Bytes. Die Syntax lautet: f Bereich Pattern Pattern ist eine Liste von Parametern die durch Kommata getrennt sind. Sie beschreibt das Bytemuster, mit dem Bereich gefüllt werden soll. Sie kann Zahlen beliebiger Länge (Byte, Word, Long) und Strings enthalten, die mit Anführungszeichen gekennzeichnet werden. Beispiel: Der Speicherbereich von $1000 bis $3000 soll mit dem Text "hallo!", der von einem Nullbyte beendet wird, gefüllt werden. f 1000 3000 "hallo!",0 Das standard Zahlensystem für alle Parameter ist Hex. Tip Strings können nicht nur Petascii-Zeichen enthalten. Wird ein Buchstabe zusammen mit der Ctrl Taste gedrückt, erscheint er invertiert. DreaMon erkennt ihn nun als Screencode. -------------------------------------------------------------------------------- Go Verläßt den DreaMon und springt an eine Adresse. Die Syntax lautet: g Adresse Das standard Zahlensystem von Adresse ist Hex. -------------------------------------------------------------------------------- Hunt Sucht nach einer Reihe von Bytes in einem Speicherbereich. Bei einem Treffer wird die Adresse ausgegeben. Die Syntax lautet: h Bereich Wildpattern Wildpattern ist dem Pattern des Fill-Befehls sehr ähnlich. Es ist eine durch Kommata getrennte Liste aus Zahlen und Strings und '?'. Die Zahlen können bis zu 3 Bytes lang sein (Byte, Word, Long). '?' steht für eine beliebige Zahl. Im Hex, Bin und Oct Format kann '?' auch in den Zahlen benutzt werden. Beispiel: h 1000 1100 f? ...sucht nach allen Bytes, deren oberes Nibble $f ist. Es geht bei Dez nicht, da hier die einzelnen Ziffern nicht eindeutig die benutzten Bits abgrenzen. Beispiel: h e000 10000 "basic" ...sucht nach dem String 'basic' (Wie in der Einschaltmeldung) h 8000 9fa0 "ab",?,"d" ...sucht nach einer Bytefolge, die an erster Stelle ein 'a' hat, an zweiter ein 'b' und an vierter ein 'd'. Die dritte Selle ist beliebig. h 2300 2600 fff? ...sucht nach $ff00 bis $ffff. h a000 c000 d,"ok",d,0 ...sucht nach der Basic Meldung 'ok'. Tip Strings können nicht nur Petascii-Zeichen enthalten. Wird ein Buchstabe zusammen mit der Ctrl Taste gedrückt, erscheint er invertiert. DreaMon erkennt ihn nun als Screencode. -------------------------------------------------------------------------------- Ascii und Screencode dump Zeigt den Speicherinhalt eines Bereichs mit Ascii oder Screencodes an. Die Syntax lautet: i Range für Ascii dump j Range für Screen dump Tip Die Anzahl der angezeigten Bytes pro Zeile kann mit dem 'pt' Befehl eingestellt werden. Die Ausgabe der beiden Kommandos kann editiert werden. -------------------------------------------------------------------------------- Load Läd ein Programm in den Speicher. Load funktioniert über Bank-Grenzen hinaus und hat keine Probleme mit Files, die größer als 64K sind. Während des Vorgangs wird die Adresse angezeigt, bis zu der schon geladen wurde. Die Syntax lautet: l "Filename" [,Device [,Ladeadresse]] Soll die Startadresse des Files ignoriert werden, kann die gewünschte mit Startadresse vorgegeben werden. Load kann mit der Stop Taste unterbrochen werden. Das standard Zahlensystem für Device is Dec! Für Startadresse ist es Hex. -------------------------------------------------------------------------------- Load FKeys Läd eine Belegung der FKeys. Während des Vorgangs wird die Adresse im Textbuffer angezeigt, bis zu der schon geladen wurde. Die Syntax lautet: lf "Filename" [,Device] 'Load FKeys' kann mit der Stop Taste unterbrochen werden. Das standard Zahlensystem für Device is Dec! -------------------------------------------------------------------------------- Load Labels Läd Labels. Während des Vorgangs wird die Adresse im Textbuffer angezeigt, bis zu der schon geladen wurde. Caution Vorsicht   Vor dem Laden wird der komplette Labelspeicher gelöscht! Die Syntax lautet: ll "Filename" [,Device] 'Load Labels' kann mit der Stop Taste unterbrochen werden. Das standard Zahlensystem für Device is Dec! -------------------------------------------------------------------------------- Ascii und Screencode memory dump Zeigt den Speicherinhalt eines Bereichs mit Ascii oder Screencodes und den zugehörigen Hex-Werten an. Die Syntax lautet: m Range für Ascii memory dump n Range für Screen memory dump Tip Die Anzahl der angezeigten Bytes pro Zeile kann mit dem 'pt' Befehl eingestellt werden. Die Ausgabe der beiden Kommandos kann editiert werden. -------------------------------------------------------------------------------- Opcode hunt Opcode hunt kombiniert Disassemble und Hunt. Es Disassembliert jede Adresse und durchsucht die Ausgabe. Bei einem Treffer wird die Adresse angezeigt. Ist der 'Verbose Hunt' Modus aktiv, wird zusätzlich die disassemblierte Zeile angezeigt. Die Syntax lautet: o Bereich Wildpattern Wildpattern ist der selbe Parameter wie beim Hunt Befehl. -------------------------------------------------------------------------------- Preferences Stellt einige Preferences ein. -------------------------------------------------------------------------------- Dump und Memdump Ausgabe pt DumpLänge MemDumpLänge DumpLänge ist die Anzahl an Bytes, die bei den Ascii- und Screendump Befehlen 'i ' und 'j' pro Zeile ausgegeben wird. MemDumpLänge ist das selbe für die Memory Dump Befehle 'm' und 'n'. Es können nur soviele Bytes angegeben werden, wie auch auf den Screen passen. Das standard Zahlensystem für beide Parameter ist Hex. -------------------------------------------------------------------------------- I/O Device pi ReadDevice po WriteDevice pio ReadDevice [WriteDevice] Legt das Gerät fest, das bei Memoryzugriffen benutzt wird. 0 ist der C64 und 8 bis 31 die Geräte am seriellen Bus. 'pi' bestimmt die Lesezugriffe und 'po' die Schreibzugriffe. 'pio' kombiniert die beiden vorigen Befehle. Beispiele: pi 8 m 300 ...zeigt den Speicher in der Floppy #8 bei $300 an. pio 8 t 300 380 600 a 400 sei ...kopiert den Speicher in der Floppy #8 von $300 bis $380 nach $600. Danach wird ein assemblerprogramm im Floppyspeicher begonnen. Wenn 'pio' wie in diesem Beispiel nur ein Parameter hat, werden das Lese und Schreibdevice auf den selben Wert gesetzt. pio 0,8 t c00 e4c 300 pio 0 ...kopiert den Speicher von $c00 bis $e4c aus dem C64 in die Floppy #8 ab $300. Das abschliessende 'pio 0' lenkt die Lese und Schreibbefehle wieder auf den Speicher des C64. Das standard Zahlensystem für alle Parameter ist Dec! -------------------------------------------------------------------------------- Wähle Mapping Mode Wählt den mapping mode für Adressen in Kommandos. Die Syntax lautet: pm [d | n | p | Bank [,ZeroPage]] Normalerweise übernimmt DreaMon eingegebene Adressen ohne Veränderung. m 0 zeigt wirklich den Speicherinhalt ab $000000 an, ohne Rücksicht auf das Direct-Page Register. Das mag in manchen Situationen praktisch sein, wird aber auf jeden Fall lästig, wenn Programm- oder Data-Bank nicht 0 sind. Dann müsste nämlich jede Adresse komplett mit 3 Bytes eingegeben werden, um die gewünschte Bank zu erreichen. Hier kommen die Mapping Modes zu Hilfe, die eingegebene 1 oder 2 Byte lange Adressen automatisch erweitern. Dazu gibt es 4 Möglichkeiten:   * Data Bank und Zeropage   * Programm Bank   * Eigene Werte   * kein Mapping Data Bank und Zeropage Mapping. Zu 2 Byte Adressen wird der momentane Wert des 'Data Bank' Registers addiert und zu 1 Byte langen Adressen der Wert des 'Direct Page' Registers. Dieser Mode wird entweder mit dem Kommando pmd oder dem Hotkey Ctrl+Shift+d aktiviert. Das 'Data Bank' Registers wird beim 'r' Befehl unter 'DB' angezeigt und das 'Direct Page' Register unter 'DP'. r    PC    A    X    Y   SPTR NVMXDIZCE [00C4A7 FF01 0031 0009 01F2 001100010  DB  DP  01 ]08 E240 37 Hier enthält das 'Data Bank' Register $08 und das 'Direct Page' Register $E240. Somit ergibt im Data Bank Mapping Mode m f0 :00E330 viele Bytes m 10C0 :0810C0 viele Bytes 3 Byte lange Adressen werden nicht vom Mapping verändert: m 0010C0 :0010C0 viele Bytes Programm Bank Mapping. Zu 1 und 2 Byte langen Adressen wird der momentane Wert des 'Programm Bank' Registers addiert. Dieser Mode wird entweder mit dem Kommando pmp oder dem Hotkey Ctrl+Shift+p aktiviert. Der momentane Wert des 'Programm Bank' Registers wird beim 'r' Befehl als Bank Byte des 'Programm Counters' (PC) angezeigt: r    PC    A    X    Y   SPTR NVMXDIZCE [15C002 8D91 0000 000C 01F8 001100110  DB  DP  01 ]00 E200 37 Hier ist er also $15. Somit ergibt im Programm Bank Mapping Mode: m f0 :1500f0 viele Bytes m 10C0 :1510C0 viele Bytes 3 Byte lange Adressen werden nicht vom Mapping verändert: m 0010C0 :0010C0 viele Bytes Mapping mit eigenen Werten. Hier können die Erweiterungen für 1 und 2 Byte lange Adressen frei gewählt werden. pm Bank ...erweitere 2 Byte lange Adressen mit Bank. 1 Byte lange Adressen werdern nicht verändert. Beispiel: pm 82 m f0 :0000f0 viele Bytes m 10C0 :8210C0 viele Bytes pm [Bank [,ZeroPage]] ...erweitere 2 Byte lange Adressen mit Bank. 1 Byte lange Adressen werdern mit ZeroPage erweitert. Beispiel: pm 82,1d80 m f0 :001E70 viele Bytes m 10C0 :8210C0 viele Bytes Kein Mapping. In diesem Modus werden keine Adressen erweitert. Dieser Mode wird entweder mit dem Kommando pmn oder dem Hotkey Ctrl+Shift+n aktiviert. Das standard Zahlensystem für Bank und ZeroPage ist Hex! -------------------------------------------------------------------------------- Registers Zeigt die Register an: Akku, X, Y, processor flags, stack pointer, emulation flag, program counter, direct page, data bank, program bank und der Inhalt von $01. Die Syntax ist: r -------------------------------------------------------------------------------- Save Speichert einen Speicherbereich. Save funktioniert über Bank-Grenzen hinaus und hat keine Probleme mit Files, die größer als 64K sind. Während des Vorgangs wird die Adresse angezeigt, bis zu der schon gespeichert wurde. Die Syntax lautet: s "Filename" ,Device ,Range [,Ladeadresse] Die standard Ladeadresse des Files ist der Anfang des Bereichs. Soll das File später an eine andere Adresse geladen werdern, kann diese mit LoadAdresse bestimmt werden. Save kann mit der Stop Taste unterbrochen werden. Das standard Zahlensystem für Device ist Dec! Für alle anderen Parameter ist es Hex. -------------------------------------------------------------------------------- Save FKeys Speichert die Belegung der FKeys. Während des Vorgangs wird die Adresse im Textbuffer angezeigt, bis zu der schon gespeichert wurde. Die Syntax lautet: sf "Filename" [,Device] 'Save FKeys' kann mit der Stop Taste unterbrochen werden. Das standard Zahlensystem für Device ist Dec! -------------------------------------------------------------------------------- Save Labels Speichert die definierten Labels. Während des Vorgangs wird die Adresse im Textbuffer angezeigt, bis zu der schon gespeichert wurde. Die Syntax lautet: sl "Filename" [,Device] 'Save Labels' kann mit der Stop Taste unterbrochen werden. Das standard Zahlensystem für Device ist Dec! -------------------------------------------------------------------------------- Transfer Kopiert einen Speicherbereich. Die Syntax lautet: t Bereich Ziel Ziel ist eine Adresse, die den Start des Speicherbereichs festlegt, in den Bereich kopiert werden soll. Transfer läuft auch problemlos, wenn innerhalb von Bereich liegt. Das standard Zahlensystem für alle Parameter ist Hex. -------------------------------------------------------------------------------- Verify Vergleicht einen Speicherbereich mit dem Inhalt eines Files. Verify funktioniert über Bank-Grenzen hinaus und hat keine Probleme mit Files, die größer als 64K sind. Während des Vorgangs wird die Adresse angezeigt, bis zu der schon verglichen wurde. Die Syntax lautet: v "Filename" [,Device [,Ladeadresse]] Normalerweise wird das File ab seiner Ladeadresse mit dem Speicher verglichen. Eine andere Position kann mit LadeAdresse angegeben werden. Verify kann mit der Stop Taste unterbrochen werden. Das standard Zahlensystem für Device ist Dec! Für StartAdr ist es Hex. -------------------------------------------------------------------------------- Swap Tauscht zwei Speicherbereiche aus. Die Syntax lautet: w Bereich Ziel ist eine Adresse, die den Start des Speicherbereichs festlegt, der mit Bereich getauscht werden soll. Swap läuft auch problemlos, wenn innerhalb von Bereich liegt. Das standard Zahlensystem für alle Parameter ist Hex. -------------------------------------------------------------------------------- Exit Verläßt den DreaMon und fährt am momentanen Programm Counter fort. Die Syntax lautet: x Wird der Befehl um ein 't' erweitert, setzt DreaMon direkt hinter den Befehl am momentanen programm counter einen Freezepoint. Somit wird nur um einen einzigen Befehl weitergetraced. xt DreaMon erkennt selbständig Sprung- und Returnbefehle und unterscheidet bei den branch-Befehlen, ob die entsprechende Bedingung erfüllt ist. -------------------------------------------------------------------------------- Freezepoints Verwalten Der Befehl 'z' zeigt, setzt oder löscht Freezepoints. Mit 'z' ohne weitere Parameter werden alle Freezepoints angezeigt. Ein Freezepoint wird mit z Adresse JumpTyp Aktion [Parameter] gesetzt. Bitte werft einen Blick in den Freezepoint Abschnitt, wo ihr eine genauere Beschreibung aller Parameter findet. Freezepoints können auch beim assemblieren gesetzt werden. Mehr dazu steht ebenfalls im Freezepoint Abschnitt. Um einen einzelnen Freezepoint zu löschen, dient die Syntax: z Adresse Alle Freezepoints können mit z all gelöscht werden. Das standard Zahlensystem für alle Parameter ist Hex. -------------------------------------------------------------------------------- Dos Kommandos Mit dem '@' Befehl werden Kommandos auf dem Seriellen Bus gesendet und der Status gelesen. Soll ein anderes Device als das aktuelle benutzt werden, kann das gewünschte mit '#Device' direkt hinter dem '@' angegeben werden. Das standard Zahlensystem ist dabei Dez. Das zu sendende Kommando kann in Anführungszeichen eingeschlossen werden, obwohl selbst Leerzeichen im Kommando das nicht erfordern. Neben den normalen Dos Kommandos der Drives versteht DreaMon die folgenden Spezialbefehle: +-------------------------+-----------------------------+ |Kommando |Aktion | +-------------------------+-----------------------------+ |@ $ |zeigt das Directory an | +-------------------------+-----------------------------+ |@ me Adresse |Führt Code in der Floppy aus | +-------------------------+-----------------------------+ |@ br Track Sector Adresse|Liest Sektor von Disk | +-------------------------+-----------------------------+ |@ bw Track Sector Adresse|Schreibt Sektor auf Disk | +-------------------------+-----------------------------+ Bis auf '$' treten die Spezialbefehle nur ohne Anführungszeichen in Kraft. Mit Anführungszeichen wird der Text nur zur Floppy gesendet, und kein Spezialbefehl ausgeführt. Caution Action-Replay Besitzer   Der Parameter Adresse beim Sektoren lesen und schreiben ist eine vollständige Adresse, und nicht wie beim Action Replay nur das High-Byte einer Page. Das standard Zahlensystem für Adresse ist Hex. Dieses Kommando liest Track 18, Sektor 1 nach $c000: @br 12 1 c000 Bevor ein Scratch oder New Kommando ausgeführt wird, erscheint eine Sicherheitsabfrage. Beispiele: +-------+-----------------------------------------------------------+ |@i |Initialisiert das aktuelle Device  | +-------+-----------------------------------------------------------+ |@$ |Zeigt das Directory des aktuellen Devices | +-------+-----------------------------------------------------------+ |@#10i |Setzt das aktuelle Device auf 10 und initialisiert es | +-------+-----------------------------------------------------------+ |@ #10 i|...das selbe für Space Liebhaber | +-------+-----------------------------------------------------------+ |@#9 |Setzt das aktuelle Device auf 9 und zeigt dessen Status an | +-------+-----------------------------------------------------------+ |@#10$ |Setzt das aktuelle Device auf 10 und zeigt das Directory | +-------+-----------------------------------------------------------+ -------------------------------------------------------------------------------- Chapter 4. General Usage Standard Zahlensysteme An den meisten Monitoren nervte mich, daß man vor jede Zahl ein '$' setzen mußte. Dazu kam noch, daß meisstens gar kein anderes Format unterstützt wurde. DreaMon versteht neben Hex nicht nur Dez, Oct und Bin, sondern hat auch "standard Zahlensysteme". Damit ist das System gemeint, das in einer Situation am gebräuchlichsten ist, z.B. Hex beim Assemblieren. Dieses System kann ohne sein zugehöriges Prefix benutzt werden. Statt a00C000 ldx #$c0 reicht also auch a00C000 ldx #c0 DreaMon ergänzt das fehlende '$' automatisch. Hex ist fast immer das standard Zahlensystem. Ausnahmen sind z.B. die Geräteadresse, wo Dez standard ist. Natürlich kann überall ein anderes System benutzt werden, indem die Zahl einfach mit dem entsprechenden Prefix versehen wird: +--+----+ |! |Dez | +--+----+ |$ |Hex | +--+----+ |& |Oct | +--+----+ |% |Bin | +--+----+ Weiterhin kann überall, wo eine Zahl erwartet wird, eine beliebige Kombination aus Binär, Oktal, Dezimal und Hexadezimal sowie Label und Rechenoperationen verwendet werden. Im Kapitel Terme gibt es mehr Informationen dazu. -------------------------------------------------------------------------------- Range Einige Befehle haben den Parameter Range, wie z.B. 'd' oder 'i'. Das ist eine Abkürzung für eine Reihe von Möglichkeiten: +-------------+-------------------------------------------------------------+ |d |von momentaner Adresse an abwärts im Scrollmode | +-------------+-------------------------------------------------------------+ |d a000 |eine einzelne Adresse | +-------------+-------------------------------------------------------------+ |d a000 b000 |vorwärts von $a000 bis $b000 | +-------------+-------------------------------------------------------------+ |d b000 a000 |rückwärts von $b000 bis $a000 (der Screen scrollt nach oben) | +-------------+-------------------------------------------------------------+ |d =a000 |von $a000 an rückwärts im Scrollmode | +-------------+-------------------------------------------------------------+ |d a000= |von $a000 an vorwärts im Scrollmode | +-------------+-------------------------------------------------------------+ |d a000 = b000|vorwärts von $a000 bis $b000 im Scrollmode | +-------------+-------------------------------------------------------------+ |d b000 = a000|rückwärts von $b000 bis $a000 im Scrollmode | +-------------+-------------------------------------------------------------+ Das standard Zahlensystem für alle Adressen ist Hex. -------------------------------------------------------------------------------- Bereich Ein Bereich definiert einen Speicherblock durch zwei Werte: die Start- und die Endadresse. Beide werden durch ein oder mehrere Spaces getrennt. Natürlich muß die Endadresse größer als die Startadresse sein. Das standard Zahlensystem für alle Adressen ist Hex. -------------------------------------------------------------------------------- Scrollmode Mit dem Scrollmodus könnt ihr einfach und schnell durch den Speicher blättern. Nach jeder ausgegebenen Zeile wartet der DreaMon auf eine der folgenden Tasten: +-------------+--------------------------------------------------+ |Cursor Auf/Ab|Ein Schritt nach Oben/Unten | +-------------+--------------------------------------------------+ |Space |Ein Schritt in die aktuelle Richtung | +-------------+--------------------------------------------------+ |Return |nur im Disass Modus: folge Operand | +-------------+--------------------------------------------------+ |LeftArrow |Rücksprung zu Ausgangsadresse nach 'folge Operand'| +-------------+--------------------------------------------------+ |+/- |Voriges/Nächstes Byte | +-------------+--------------------------------------------------+ |d |wechsel zu Disass Modus | +-------------+--------------------------------------------------+ |i |wechsel zu Acsii-Dump Modus | +-------------+--------------------------------------------------+ |j |wechsel zu Screen-Dump Modus | +-------------+--------------------------------------------------+ |m |wechsel zu Mem-Ascii-Dump Modus | +-------------+--------------------------------------------------+ |n |wechsel zu Mem-Screen-Dump Modus | +-------------+--------------------------------------------------+ |Stop |Scrollmode verlassen | +-------------+--------------------------------------------------+ Die Ctrl-Shift Tasten können ebenfalls benutzt werden. Es kann 85 mal einem Opcode gefolgt werden, ohne daß die Rücksprungadresse verlorengeht. Ab dem 86. mal wird die jeweils erste Adresse vergessen. -------------------------------------------------------------------------------- Ctrl-Shift keys Neben den altbekannten Tasten des C64 wie Ctrl+Shift sind noch einige neue (und ich hoffe nützliche) dazugekommen: +---------------------+--------------------------------------------------------+ |Ctrl+Shift+m |Akku 8/16 Bit (M Flag wird nicht beeinflusst | +---------------------+--------------------------------------------------------+ |Ctrl+Shift+LinksPfeil|Memory Mapping An/Aus (aka Debug Mode. Also Finger weg, | | |wenn ihr nicht genau wisst, was ihr da tut! ;) | +---------------------+--------------------------------------------------------+ |Ctrl+Shift+0 - 9 |Setzt $01 auf #$3x (Ctrl+Shift+5 ist wie lda #$35:sta 1)| +---------------------+--------------------------------------------------------+ |Ctrl+Shift+x |X/Y 8/16 Bit (X Flag wird nicht beeinflusst) | +---------------------+--------------------------------------------------------+ |Ctrl+Shift+f |'follow Rep/Sep' Modus An/Aus | +---------------------+--------------------------------------------------------+ |Ctrl+Shift+h |'verbose hunt/opcodehunt' Modus An/Aus, zeige ein paar | | |mehr infos als nur die Adresse | +---------------------+--------------------------------------------------------+ |Ctrl+Shift+v |wähle VideoMode: (Vic, VDC 2531, VDC Super6 und ParDis | | |(Experimental) ) | +---------------------+--------------------------------------------------------+ |Ctrl+Shift++ |Mehr Zeilen (nur VDC2531 und Super6) | +---------------------+--------------------------------------------------------+ |Ctrl+Shift+- |Weniger Zeilen (nur VDC2531 und Super6) | +---------------------+--------------------------------------------------------+ |Ctrl+Shift+Cursors |Setze Cursor an die Screenränder (Ctrl+Shift+Down = | | |Cursor in letzte Zeile) | +---------------------+--------------------------------------------------------+ |Ctrl+Shift+p |mapping mode 'program bank' | +---------------------+--------------------------------------------------------+ |Ctrl+Shift+d |mapping mode 'data bank and zeropage' | +---------------------+--------------------------------------------------------+ |Ctrl+Shift+n |mapping mode 'none' | +---------------------+--------------------------------------------------------+ Ctrl+Shift+m und x verändern nur interne Flags für Akku- und Registergrößen. Das M und X Flag des Prozessor Status wird nicht beeinflusst. Der Videomodus 'VDC2531' nutzt den 80-Zeichen Screen eines C128. Mit den Tastenkombinationen Ctrl+Shift++ und Ctrl+Shift+- kann die Zeilenzahl zwischen 25 und 31 variiert werden. Der 'Super6' Modus ähnelt 'VDC2531', doch hier wird ein veränderter Zeichensatz benutzt, der nur 6 Pixel hoch ist. So passen mehr Zeilen auf den Screen. Wieviele es insgesamt sind, hängt von Eurem (Hardware-) Monitor ab. Die Zeilenanzahl wird wie im 'VDC2531' Modus variiert. Da beide Modes den VDC Chip nutzen, sind sie nur auf einem C128 verfügbar! -------------------------------------------------------------------------------- Label Alle Label müssen mit einem '£' beginnen. Ein Label wird mit £LabelName = Term definiert. Der Labelname darf aus allen Zeichen ausser den folgenden bestehen: + * - / ( ) < > & UpArrow und Space Das standard Zahlensystem für Term ist Hex. Um einen Label wieder zu löschen muß einfach nur Term weggelassen werden. Beispiel: Definiere den Label "border" mit dem Wert $d020 £border = $d020 Definiere den Label "Background" mit dem Wert $d021 £Background = £border +1 Lösche den Label "border" £border = Natürlich können überall die lästigen Spaces weggelassen werden. -------------------------------------------------------------------------------- Zahlen Vergrößern Beim Assemblieren nimmt DreaMon normalerweise die kleinstmöglichste Adressierungsart. Manchmal ist das jedoch nicht erwünscht (z.B. wenn Absolut statt Zeropage benutzt werden soll). Um eine längere Adressierungsart anzugeben, als eine Zahl normalerweise hat, müssen genügend Nullen vor sie gestellt werden. Beispiel: 'sta $fb' soll Absolut werden a00C000 sta 0fb Eine Hex Zahl mit 3 Ziffern ist schon 2 Bytes lang. Somit wird Absolut statt Zeropage benutzt. Natürlich würde das genauso gehen: a00C000 sta 00fb Aber wer tippt schon gerne sinnlose Nullen? a00C000 sta 000fb ist nicht mehr Absolut, da eine fünfstellige Hex Zahl 3 Bytes benötigt. Natürlich funktioniert diese Vergrößerung nur mit Zahlensystemen, in denen die Ziffernzahl eindeutig die Anzahl der benötigten Bits angibt. Das ist bei Hex, Bin und Oct der Fall, nicht aber bei Dez. Setzt sich ein Term aus mehreren Zahlen zusammen, behält das Ergebnis die maximale Vergrößerung bei. Labels können auch vergrößert werden. -------------------------------------------------------------------------------- F-Keys DreaMon kennt mehr als die normalen 8 FKeys. 8 zusätzliche können mit der C= und Ctrl Taste erreicht werden: +------------+--------------+ |C=+F1 : F9 |Ctrl+F1 : F10 | +------------+--------------+ |C=+F3 : F11 |Ctrl+F3 : F12 | +------------+--------------+ |C=+F5 : F13 |Ctrl+F5 : F14 | +------------+--------------+ |C=+F7 : F15 |Ctrl+F7 : F16 | +------------+--------------+ Alle FKeys außer F16 können mit Makros belegt werden. Um ein Makro aufzunehmen drückt zuerst F16. Nun blinkt der Cursor schneller und wartet auf den FKey, der mit dem Makro belegt werden soll. Danach folgt der Makro Text. Die Aufnahme wird mit dem FKey des Makros beendet. Ein Makro kann auch andere Makros beinhalten. Beispiel: F1 soll den Text 'm 478' und Return erhalten. F16 F1 m 478 Return F1 Makros laufen auch über ein Systemauftauen weiter. -------------------------------------------------------------------------------- Freezepoints Ein Freezepoint unterbricht das laufende Programm und springt zum DreaMon. Alle Register der I/O Chips werden dabei gerettet, sodaß in das Programm zurückgekehrt werden kann, als wäre nichts geschehen. Es gibt zwei Typen der Freezepoints, die sich in der Sprungart zum DreaMon unterscheiden: +------+-----------------+-----+-----------------------------------------------+ |Typ |Benötigt |Länge|Bedingung | +------+-----------------+-----+-----------------------------------------------+ |J |die Vektoren bei |3 |I/O muß aktiv sein und der Freezepoint muß in | |(JSR) |$d3xx | |Bank 0 liegen | +------+-----------------+-----+-----------------------------------------------+ |L |nichts |4 |keine | |(JSL) | | | | +------+-----------------+-----+-----------------------------------------------+ Der Speicherinhalt beim Freezepoint wird gerettet und durch dem Sprungbefehl ersetzt. Also passt auf, daß ihr nicht über selbstmodifizierenden Code stolpert. (Eine Lösung dafür findet ihr weiter unten) Nachdem der Freezepoint ausgeführt wurde, wird der ursprüngliche Speicherinhalt wieder zurückgeschrieben. Im DreaMon sieht man also immer den ursprünglichen Speicher. Der Disassemble Befehl zeigt einen Freezepoint mit einem kleinen Kommentar hinter dem Opcode an. Wird ein Freezepoint erreicht, können 4 Dinge geschehen: +----------+----------------------+--------------------------------------------+ |Typ |Parameter |Aktion | +----------+----------------------+--------------------------------------------+ |N (Normal)|keine |Springt einfach zum DreaMon | +----------+----------------------+--------------------------------------------+ |C (Count) |n (eine Zahl von 0 bis|Freezed beim (n+1)-ten mal (also ist n=0 wie| | |$ff) |'normal') | +----------+----------------------+--------------------------------------------+ |A |n (eine Zahl von 0 bis|Aktiviert die Bits aus n, weiter passiert | |(Activate)|$ff) |nichts | +----------+----------------------+--------------------------------------------+ |R (Remote)|n (eine Zahl von 0 bis|Freezed wenn mindestens ein Bit aus n | | |$ff) |aktiviert ist | +----------+----------------------+--------------------------------------------+ Das standard Zahlensystem für alle Parameter ist Hex. Activate und Remote Freezepoints sind nur in Kombination nützlich. Sie werden benötigt, wenn timingkritische Routinen oder selbstmodifizierender Code gefreezed werden soll und die anderen Typen nicht funktionieren. Remote Freezepoints werden nicht in den Speicher geschrieben, wenn sie gesetzt wurden. Sie werden nur vorgemerkt, bis ein Activate Freezepoint erreicht wird. Nun wird der Remote Freezepoint in den Speicher geschrieben und kann ausgeführt werden. Der Parameter für beide Typen ist eine Bit Maske, die steuert, welcher Freezepoint aktiviert wird. Bei einem Activate mit Parameter $15 werden alle Remote Freezepoints gesetzt, die mindestens die Bits 0, 2 oder 4 gesetzt haben, z.B. einer mit $32. Freezepoints können auf zwei verschiedene Arten gesetzt werden:   * Beim Assemblieren oder editieren von Disassembler Output Dazu muß der Opcode an der zu Freezenden Stelle einfach durch zJumpTyp Aktion und einem Parameter für Count, Activate and Remote ersetzt werden. Beispiel: An dieser Stelle soll gefreezed werden... >00c018 ad 20 d0 lda $d020 Nun gebt ihr ein... >00c018 ad 20 d0 zjn;$d020 ...um einen 'Normal' 'JSR' Typ zu setzen (Das Semikolon nach 'zjn' zeigt das Zeilenende an. DreaMon ignoriert beim Assemblieren alles dahinter) >00c018 ad 20 d0 zlc12;$d020 ...um einen 'Count' 'JSL' Typ zu setzen, der erst beim 18. mal (=$12) Freezed.   * Mit dem 'z' Befehl. Bitte schaut dazu im Abschnitt Freezepoints Verwalten nach. -------------------------------------------------------------------------------- Terme Immer, wenn ein Befehl eine Zahl erwartet, kann sie durch einen Term dargestellt werden. Darin sind die folgenden Rechenoperationen möglich: +-------------+-------------------------------+ |UpArrow, <, >|Bank-, Hi-, Lo-Byte | +-------------+-------------------------------+ |mod |Modulo | +-------------+-------------------------------+ |*, / |Multiplikation/Division | +-------------+-------------------------------+ |+, - |Addition/Subtraktion | +-------------+-------------------------------+ |+, - |positives/negatives Vorzeichen | +-------------+-------------------------------+ |>>, << |Rechts/Linksrotation | +-------------+-------------------------------+ |@a |And | +-------------+-------------------------------+ |@n |Not | +-------------+-------------------------------+ |@e |Eor | +-------------+-------------------------------+ |@o |Or | +-------------+-------------------------------+ Die Operatoren sind nach ihrer Priorität aufgelistet. Mit Klammern kann diese ausser Kraft gesetzt werden. Beispiel: Alle Befehle machen das selbe m c002 m !49152+8>>2 m (8+4)*1000 + 2 -------------------------------------------------------------------------------- Appendix A. Past, present and future History 08.Mar.2001. The next semester started. More time for coding. ;) New:   + Updated the docs. Now all working commands are mentioned (I hope).   + Mapping modes   + Ctrl+Shift+p program bank mapping, Ctrl+Shift+d data bank and zeropage mapping Ctrl+Shift+n no mapping Debug mode set to Ctrl+Shift+LeftArrow Bugfix:   + Trace now uses long fp's in all cases which is more secure 07.Feb.2001. New:   + debug vector for long calls. Just insert 'jsl $00d304' somewhere in your code to wake up DreaMon. Bugfix:   + assembling branches did not work with $0 and $1 as destination adress.   + the assembler did not accept branches wrapping at the bank border Thanks to Stephan Andres for this bugreport!   + enter freezepoints directly (z 1234 ln) lost first char of adress 30.Jan.2001. New:   + Memory execute (@me adress), block read (@br track sector adress) block write (@bw track sector adress) Caution Action Replay owner   please note that the adress argument for block read and write is a full adress and not just a high byte like the action replay syntax. This reads track 18, sector 1 to $c000: '@br 12 1 c000' Bugfix:   + HW-regs enable and optimisation mode were not restored correctly   + E-flag was changed sometimes   + assembling a branch mnemonic filled the following byte with garbage Thanks to Stephan Andres for reporting this bug!   + tracing RTS, RTI and RTL did not work   + drivemem access now cares about errors like 'drive not present'   + the patched kernal rom (active with enabled hw-regs) was shown instead of the real one   + writing to $a000-$bfff and $e000-$ffff with $01=#$37 now changes the pseudo rom and not the ram below   + entering the debug mode just changed the VIC-border even if you were viewing a vdc screen   + remapped the scroll lock key from shift to ctrl This seems to make more sense as the scpu acts the same way 12.Jan.2001. Thanks to Stephan Andres for this bugreport! Bugfix:   + all adresses in pages $1d and $29 could not be used as operands for opcodes 22.Dez.2000. Only 2 days left till 24th. Happy, happy! Time for the DreaMon christmas edition. New:   + Left Shift and Scroll Lock act as scroll lock Bugfix:   + Errorchannel was cleared after a command sometimes Now the message always gets through 15.Dez.2000. This time I killed a funny bug. With enabled hw-regs it's possible to crash the scpu just by writing to some vic-regs. The Opcode must be located in the SRam at a special position in any page which depends on the number of the vic-reg. Sounds strange, hm? New:   + FKeys and Label Load/Save just append f or l to the load/save command (lf"fkeys",8) Bugfix:   + writing to Vic registers with enabled hardware-regs is unstable I have no idea why, so I just switched the hw-regs off before every vic access. 06.Dez.2000. Bugfix:   + E-Flag was not correctly set   + "Trace" and "Step In" ignored settings for Direct Page and Data Bank 27.Nov.2000. Thanks to Jolse for the ideas and reported bugs in this update! New:   + Ctrl+Shift+i inserts line, Ctrl+Shift+k kill line, Ctrl+Shift+c clear line   + default setting for F5 and F7 is now 'fast scroll up/down' Bugfix:   + a Range was always mistaken as scrollmode   + for some commands (like 'h') buffered mem access worked only for the first few bytes 06.Nov.2000. Phew, I passed the second block of tests at the end of my semester holydays! Long time no update, but this will become better. Er, I hope... New:   + Buffered memory access for all commands except freezepoints (needed for redirect)   + Redirect read/write to drive memory Bugfix:   + dump adress and memory contents were mixed up in bad situations   + inserted a ':' to fix this 17.Aug.2000. New:   + Trace command 'xt'   + Opcode Hunt speeded up a bit   + Warning message if DreaMon is started by an unknown FreezePoint. This happens if a FP is copied to another memory location. You have to delete the FP at the old location by hand (sorry).   + Check for VDC/PrLink before switching to that Video Mode. So (hopefully) no more crashes after some Ctrl+Shift+v and no PrDis daemon running.   + Disk operations at 20Mhz Bugfix:   + Counter FPs did not work with all Opcodes   + Redefining Labels and using other Labels in the definition screwed things up   + Opcodes 'AND' and 'OR' were mistaken as Math Operands in some situations. I had to change the Math Ops to '@a', '@o', '@n' and '@e' for 'and', 'or', 'not' and 'eor'. Sorry if you already got used to them.   + Delete at the start of a double-line did not work 19.Jul.2000. New:   + The installer is now packed with PuCrunch. Wow, almost 40% saved. Thanks to Pasi Ojala for this great tool! The depacker is a 65816 optimized version.   + Docs and history in english   + While disassembling in scroll mode you can follow the operand by hitting return. If the adressmode is something indexed or indirect the destination adress is calculated using the actual values of the registers.   + New display mode: PrDisplay It shows the DreaMon screen in a unix console using a parallel cable. So the C64 remains unchanged and the screen can be bigger (how about 80x50? :). You might have already guessed by the name that I'm using PrLink by Marko Mäkelä and Olaf Seibert. It's not completely done at the moment, but if anyone has a X1541, PC64 or prlink cable and a unix box I'd be happy to mail you the client. Just contact me. 07.Jul.2000. Hurray! Two of 3 tests are done. Now I can code without a bad feeling! New:   + Labels can be deleted by '£='   + 'p' sets one of the many prefs from inside the DreaMon. 'pt ,' sets the number of bytes per line for ascii/screencode dump and memory dump. Bugfix:   + Defining an empty FKey no more kills the following.   + '?argh' evaluated to $0a.   + funny data bank causes not a crash anymore 08.Jun.2000. Schon merkwürdig: Die Klausuren rücken immer näher, und obwohl ich noch _nichts_ gelernt habe, code ich viel mehr am DreaMon weiter, als im übrigen Semester. Es ist wohl doch etwas dran, dass am meissten Spass macht, was man nicht soll. ;-) New:   + Der erste Teil eines kleinen Setup-Tools ist fertig. Dort kann schnell die Position des DreaMons und des Buffers im Mem festgelegt werden. Die meissten I/O-Routinen sind dabei schon vom DreaMon, der sich danach einfach ohne den Setup-Krams verschiebt. Ich habe versucht, die gröbsten Fehler in der Eingabe abzufangen, wie z.B. Code überschreitet Bank-Grenze, Code und Text überschneiden sich, usw. Schaut doch bitte, was noch fehlt! Bugfix:   + Save müllt nicht mehr den ganzen Screen voll   + Viele kleine Fehler, die das Relocaten mit sich brachte... 18.Mai.2000. Bugfix:   + Beim Optimieren einiger Routinen stellte ich entsetzt fest, dass das Memory Mapping eigentlich nur durch Zufall funktioniert hatte, da ein Speicherbereich bis jetzt am Pagestart lag. Oops!   + Durch den Reloc-Krams klappten die Long-Freezepoints nicht mehr 26.Apr.2000. New:   + Der Umstieg auf den XA hat sich gelohnt. Der DreaMon ist jetzt im kompletten Super-Ram Byteweise verschiebbar! Nun fehlt mir nur noch ein kleines Interface, in dem man die gewünschte Position einstallen kann.   + Makro-Recording Das sollte eigentlich schon in die Symmek Version rein, aber ich habs nicht auf die Reihe bekommen. 15.Mar.2000. Im letzten Monat habe ich die meisste Zeit damit verbracht, das System zu wechseln. Ich code jetzt auf einer netten, kleinen Linux-Box mit dem XA. Leider musste ich mich von Acme verabschieden, da McBacon schon seit langem nichts mehr daran gemacht hat, und mit der momentanen Version die schon lange überfällige Verschiebbarkeit des DreaMons Höllenqualen für mich bedeuten würden. Bye, bye... New:   + Alle Argumente können ab sofort mathematische Terme mit Klammern sein. Die Klammerzahl ist beliebig, bzw. soviel eben in eine Zeile reingehen. ("...77, 78, 79!" :-)   + '? Term' zeigt Term als Hex, Dez, ASCII und Binär   + Mit '£' können Label definiert und benutzt werden 02.Feb.2000. New:   + Test, ob ein 65816 drin ist ohne Illegale Ops Bei fehlender SCPU kommt jetzt eine kleine CSW-Werbung. :-)   + Test, ob 65816 wirklich SCPU und nicht Flash8 ist Ob das läuft? Hm...   + Dieses putzige Historyfile ;-) Bugfix:   + Grösse des X/Y Registers wurde beim Assemblieren nicht berücksichtigt   + Dx0D-Read klappt endlich   + Freezen im Dezimal-Mode läuft auch -------------------------------------------------------------------------------- ToDo Das plane ich für die nächsten Versionen des DreaMon:   * Verschieben von Code und Textpuffer während des Betriebs   * Edit-Funktion für den gefreezten Textscreen   * Unix Shell als DreaMon Screen verwenden, die Daten werden mit dem PrLink System übertragen   * bedingte Freezepoints ...und eure Ideen! :) -------------------------------------------------------------------------------- Appendix B. Index A B C D E F G H L O P R S T V Z A. Ascii dump Ascii memory dump Assemble B. Bereich C. Command Index Compare Ctrl-Shift keys D. Disassemble Dos Kommandos E. Exit F. Fill F-Keys Freezepoints Freezepoints Verwalten G. Go H. History Hunt L. Label Load Load FKeys Load Labels O. Opcode hunt P. Preferences R. Range Registers S. Save Save FKeys Save Labels Screencode dump Screencode memory dump Scrollmode Standard Zahlensysteme Start Swap T. Terme ToDo Transfer V. Verify Z. Zahlen Vergrößern A B C D E F G H L O P R S T V Z