Anleitung MEGAMON - Teil 2 ----------------------------------------
m) "O" - SELECT MEMORYBANK Hiermit schalten Sie eine spezielle Speicherkonfiguration für alle Speicher- spezifischen Befehle ein (A, C, D, E, F, H, I, J, N, T, W). Wie Sie vielleicht wissen, so verfügt der C64 über ein Speichermodell, in dem RAM- und ROM- Bereiche teilweise an den gleichen Adressen liegen. Durch Schreiben eines Wertes in Adresse $0001 können Sie nun in bestimmten Bereichen ROM-Speicher über dem RAM einblenden und somit auf dieses zugreifen. Da es recht aufwendig ist, das RAM unter dem ROM zu untersu- chen, und man daher ständig zwischen RAM und ROM hin- und herschalten muß, kann man die Speicherkonfiguration für den MegaMon voreinstellen. Schalten Sie z.B. alle ROMs ab, so arbeiten die oben ge- nannten Befehle immer im RAM unter den ROMs. Die Verwaltung des Hin- und Her- schaltens wird dabei automatisch vom MegaMon übernommen, so daß für Sie der Eindruck entsteht, als hätten Sie momen- tan tatsächlich nur das RAM aktiviert. Benutzen Sie die "O"-Funktion ohne einen Parameter, so gibt Ihnen der MegaMon einen Zifferncode aus, der die aktuelle Einstellung repräsentiert. Optional kön- nen Sie auch einen Parameter, bestehend aus einer Ziffer von 0-7, anhängen, der die Konfiguration Ihren Wünschen ent- sprechend einstellt. Diese Ziffer ent- spricht den untersten drei Bits der Speicherzelle $0001 die die Speicherkon- figuration wiefolgt beeinflussen:
Par. $A000-$BFFF $D000-$DFFF $E000-$FFFF ----------------------------------------
0 RAM RAM RAM 1 RAM CHAR-ROM RAM 2 RAM CHAR-ROM KERNEL-ROM 3 BASIC-ROM CHAR-ROM KERNEL-ROM 4 RAM RAM RAM 5 RAM I/O RAM 6 RAM I/O KERNEL-ROM 7 BASIC-ROM I/O KERNEL-ROM
Alle anderen Adressbereiche enthalten immer RAM-Speicher und werden nicht überlagert. Je nach Konfiguration können Sie also die I/O-Chips (SID/VIC/CIAs), das Zeichensatz-ROM, sowie BASIC- und Betriebssystem-ROM ein- oder ausschalten und dann in dem gegebenen Bereich arbei- ten. Zusätzlich verfügt diese Funktion noch über einen speziellen Parameter. Geben Sie hinter dem "O" ein "D" an, so "blen- det" ihnen der MegaMon den Speicher der Floppy in den C64-Adressbereich ein. Auf diese Weise können Sie direkt in diesem Bereich arbeiten und somit Assembler- Programme in das Floppy-RAM hinein- schreiben. Die Aufteilung des C64- Speichers sieht nach einem ".OD" wie- folgt aus: Adr. Funktion
---------------------------------------- $0000-$1FFF Floppy-RAM $2000-$BFFF C64-RAM (dieses Bereiches) $C000-$FFFF Floppy-ROM
Sie können ja einmal die Speicherkonfi- guration auf diese Art und Weise um- schalten. Hieraufhin kann mit dem Befehl "I C000" ein Blick in das Floppy-ROM geworfen werden (erkennbar am Copyright, das irgendwann in der ASCII-Darstellung des "I"-Befehls erscheint)! n) "Q" - EXECUTE SLOWLY Mit diesem Befehl kann man ein Assem- blerprogramm sehr langsam Ablaufen las- sen. Hierbei muß natürlich als Parameter die Startadresse dieses Programms ange- geben werden. Es wird nun Befehl für Befehl abgearbeitet, jedoch mit langen Pausen zwischen den Befehlen. Dadurch kann man besser einen Fehler im Programm erkennen. Da der MegaMon während der Ausführung keine Angaben auf dem Bild- schirm macht, eignet sich die Funktion eigentlich nur für Grafikroutinen, bei denen man erkennt, wenn etwas falsch gelaufen ist. Durch Gedrückthalten der 'Commodore'-Taste können Sie den Pro- grammablauf übrigens beschleunigen. Mit 'RUN/STOP' brechen Sie die Ausführung ganz ab, wobei die Registerinhalte zum Zeitpunkt der Unterbrechung ausgegeben werden. o) "R" - REGISTERS Dieser Befehl verlangt keine Parameter und gibt ihnen lediglich den Statusan- zeige des Prozessors auf dem Bildschirm aus. Dabei stehen hier immer die Werte der letzten Unterbrechung (BRK oder NMI) in den Registern, bzw. eigene Werte, falls Sie die Anzeige mit selbigen über- schrieben haben. p) "T" - TRANSFER Hiermit können Sie einen Speicherbereich an eine andere Adresse kopieren. Der Befehl verlangt drei Parameter: Start- und Endadresse des zu kopierenden Be- reichs, sowie die Startadrese des Spei- chers, an die kopiert werden soll. So kopiert der Befehl ".T E000,E3E7,0400" den Anfang des Betriebssystems-ROMs (wenn eingeschaltet) in den Bildschirm- speicher. Haben Sie übrigens mittels ".OD" den Floppy-Speicher eingeschaltet, so können Sie auch diesen in den Spei- cher des C64 umkopieren und dort verän- dern! q) "U" - SHOW RASTERTIME Die Geschwindigkeit einer Routine wird oft in der Zeit gemessen, die der Ra- sterstrahl braucht um eine Rasterzeile aufzubauen. Selbiger läuft pro Sekunde 50 Mal über den Bildschirm und baut da- bei jeweils 312 Zeilen auf. Schnelle Grafikroutinen müssen Ihre Arbeit in einem gewissen Zeitrahmen erledigen, damit das Bild nicht zu flackern be- ginnt. Mit der "U"-Funktion können Sie sich nun anzeigen lassen, wie lange Ihre Routine braucht. Geben Sie hierzu ein- fach die Startadresse der Routine als Parameter an, und stellen Sie sicher, daß sie mit einem "RTS"-Befehl beendet wird. Nach Aufruf durch das "U"-Kommando sehen Sie nun einen hellblauen Raster- balken im Bildschirmrahmen, der die benötigte Rasterzeit angibt. Je schmaler der Streifen, desto schneller die Routi- ne. Der MegaMon ermittelt dabei übrigens auch die Anzahl der verbrauchten Raster- zeilen, die er hinter dem "U"-Kommando auf dem Bildschirm ausgibt. Um die Funk- tion zu beenden, müssen Sie wieder die 'RUN/STOP'-Taste drücken. Beachten Sie bitte, daß diese Funktion nur einen Sinn bei besonders schnellen Routinen hat. Dauert die Abarbeitung länger als eine 50stel Sekunde, so sieht man einen stän- dig hellblauen Bildschirmrahmen, der an manchen Stellen flackert! r) "W" - TRACE MODE Dies ist eine der nützlichsten Funktio- nen des MegaMon. Mit ihr können Sie den Ablauf eines Assemblerprogramms schritt- weise verfolgen. Hierbei werden Ihnen nach Aufruf zwei Zeilen angezeigt, die nacheinander den Zustand von SR, AC, XR YR, SP, und PC anzeigen. Hiernach folgen bis zu drei Bytes, in denen der Opcode und ggf. die Operandenbytes eines Be- fehls stehen, sowie der Befehl selbst in Textform. In der ersten Zeile sehen Sie immer die gerade ausgeführte, in der zweiten die als nächstes auszuführende Instruktion. Es gibt nun zwei Möglich- keiten den Programmablauf um jeweils einen Befehl fortzusetzen. Im Regelfall können Sie entweder die 'CTRL' oder die 'SPACE'-Taste zum Fortfahren um einen Schritt verwenden. Die Tasten haben al- lerdings unterschiedliche Funktionen, wenn der nächste Befehl ein JSR-Befehl ist. Drücken Sie hier 'SPACE', so wird der JSR-Befehl ausgeführt und in die Unterroutine eingetreten, wo der nächste Befehl angezeigt wird. Drücken Sie je- doch 'CTRL', so wird die Unterroutine als Ganzes aufgerufen und ausgeführt. Erst wenn Sie mittels RTS beendet wurde unterbricht der MegaMon die Ausführung wieder und zeigt die dem JSR-Befehl fol- gende Zeile an. Auf diese Weise können Sie Unterroutinen, von denen Sie sicher wissen, daß sie funktionieren, normal ablaufen lassen, da sie ja nicht geson- dert auf Fehler untersucht werden müs- sen. Desweiteren kann auch hier, wie schon bei der "Q"-Funktion, der Pro- grammablauf durch Gedrückthalten der 'Commodore'-Taste beschleunigt werden, wobei jedoch weiterhin die beiden Infor- mationszeilen angezeigt werden. Der Tra- ce-Modus erkennt automatisch das Ende des Programms, wenn es durch den letzten RTS-Befehl den Stapelzeiger auf $FF zurücksetzt, und beendet dann die Ausführung. Gleiches erreichen Sie ma- nuell durch drücken der 'RUN/STOP'- Taste. Der Aufruf des Trace-Modus kann mit oder ohne Startadresse erfolgen. Geben Sie letztere nicht an, so wird der aktuelle Inhalt des Programmzählers als Startadresse angenommen. Auf diese Weise kann ein abgebrochener Trace-Vorgang wieder fortgesetzt werden. s) "X" - EXIT Dieser Befehl verlangt keine Parameter und beendet den MegaMon, indem er in die BASIC-Eingabe zurückspringt. Die verän- derten NMI- und BRK-Vektoren bleiben dabei jedoch erhalten. t) "Y" - TEST IRQ Dies ist eine nützliche Funktion zum einfachen Installieren eines Raster- IRQs. Sie verlangt als Parameter die Adresse, an der sich die IRQ-Routine befindet, sowie die Rasterzeilennummer, an der der IRQ ausgelöst werden soll. So können Sie z.B. eine einfache Rasterbal- kenroutine bei $1800 ablegen, die in Rasterzeile $20 die Hintergrundfarbe ändern soll. Durch Eingabe von ".Y 1800,20" im MegaMon wird die Routine dann automatisch initialisiert und ar- beitet nun im Hintergrund. Damit dies reibungslos funktioniert muß Sie aller- dings das VIC-ICR durch einen "DEC $D019"-Befehl löschen, sowie durch einen Sprung auf den Betriebssystems-IRQ bei $EA31 beendet werden. Wird der MegaMon übrgens durch drücken der 'RESTORE'- Taste neu angestartet, so entfernt er den IRQ wieder aus dem IRQ-Vektor bei $0314/$0315. Geben Sie nun den "Y"- Befehl OHNE Parameter an, so werden die zuletzt benutzten Parameter (im Beispiel 1800,20) automatisch vorrausgesetzt und wieder neu eingetragen. u) "#" - CONVERT DEC->HEX Mit dieser Funktion können Sie eine Zahl im Dezimalsystem, die als Parameter dem Kommandozeichen "#" folgen muß, in das Hexadezimalsystem umwandeln. v) "$" - CONVERT HEX-DEC Dies ist die Umkehrfunktion von "#". Sie wandelt eine Hexadezimalzahl in eine Dezimalzahl um. w) "***" - CLEAR MEMORY Dies ist der einzige Befehl der aus drei Zeichen besteht. Er löscht den gesamten Speicher, indem er ihn mit Nullbytes auffüllt. Die einzigen nicht davon be- troffenen Bereiche sind die Zeropage, die Betriebssystemsvektoren, und der Bildschirmspeicher, im Bereich von $0000-$07FF, sowie der Bereich von $8000-$9FFF, in dem ja der MegaMon un- tergebracht ist. 3) DIE DISKETTEN-FUNKTIONEN DES MEGAMON Außer den oben beschriebenen Funktionen verfügt der MegaMon auch über eine Reihe von Befehlen, die die Zusammenarbeit mit der Floppy erleichtern sollen. Zunächst einmal sollte erwähnt werden, daß das Programm zwei Arten von Lade- und Spei- cherfunktionen kennt. Zum Einen sind das die normalen Funktionen mit denen Daten wie gewohnt gelesen und geschrieben wer- den können, zum Anderen gibt es speziel- le Lade- und Speicherkommandos, die die zu schreibendenen, bzw. zu lesenden Da- ten, packen, bzw. entpacken, können. Auf diese Weise kann man eine Menge Disket- tenspeicher und auch Ladezeit einsparen, da die Packroutine recht effizient und auch schnell arbeitet. Das Format der Parameterangabe ist bei all diesen Befehlen (wie auch bei der Verify-Funktion) ähnlich. Zunächst ein- mal muß dem Befehlszeichen immer ein Anführungszeichen (") folgen. Hiernach wird der Filename angegeben, der jedoch nicht, wie man annehmen könnte, durch ein weiteres Anführungszeichen abge- schlossen wird. Manche Funktionen ver- langen ggf. noch eine oder zwei Adress- Angaben, die, jeweils durch Kommata vo- neinander und vom Filenamen getrennt, angehängt werden. Hier nun eine Aufli- stung der Befehle: a) "Z" - SAVE Diese Funktion speichert einen bestimm- ten Speicherbereich, dessen Start- und Endadresse dem Filenamen unbedigt folgen müssen, ungepackt auf Diskette. Hierbei wird auch die Startadresse, als absolute Ladeadresse, im File vermerkt. b) "S" - SAVE COMPRESSED Diese Funktion wird wie die "Z"-Funktion benutzt, nur daß die zu schreibenden Daten in gepackter Form auf die Diskette gelangen. Ein so geschriebenes File kann dann mit der "K"-Funktion in den Spei- cher geladen werden, wobei die Daten automatisch wieder entpackt werden. c) "L" - LOAD Hiermit wird ein File normal in den Speicher geladen. Dabei können Sie op- tional eine Ladeadresse angeben, an die das File geladen werden soll. Geben Sie diese Adresse nicht an, so lädt der Me- gaMon das File an seine absolute Adres- se, die im File selbst vermerkt ist. d) "K" - LOAD COMPRESSED Dieser Befehl dient primär dem Laden von Files, die mit der "S"-Funktion gepackt und gespeichert wurden. Hierbei kann wie bei "L" eine optionale Ladeadresse hin- zugefügt werden. Während des Ladens wird das File dann automatisch entpackt und an der entsprechenden Speicheradresse abgelegt. Zusätlich verfügt dieser Lade- befehl über einen Floppy-Speeder, der die zu ladenenden Daten weitaus schnel- ler in den Speicher lädt als sonst. Er erkennt übrigens auch ein ungepacktes File, das dann automatisch auch als sol- ches behandelt wird. Zusätzlich gibt er die Start- und Endadresse an, an die das File geladen wurde. Im Prinzip macht er den "L"-Befehl überflüssig. Letzterer ist aus Kompatibilitätsgründen zu ande- ren Floppyspeedern eingebaut worden. e) "V" - VERIFY Diese Funktion wird wie der "L"-Befehl benutzt. Sie vergleicht den Inhalt eines Files auf Diskette mit dem Speicherin- halt. Wird keine zusätzliche Adresse angegeben, so wird ab der Ladeadresse des Files verglichen. Geben Sie eine Adresse an, so wird die Ladeadresse ig- noriert und der Speicherinhalt ab der gegebenen Adresse mit dem Fileinhalt verglichen. Ist irgendwo auch nur ein Byte ungleich, so wird ein Fragezeichen hinter dem Befehlsaufruf ausgegeben. Der "V"-Befehl behandelt übrigens aus- schließlich ungepackte Files. Ein ge- packtes File wird bei einem Vergleich immer als verschieden zu den Rohdaten erkannt, da die gepackten Daten natür- lich eine andere Struktur aufweisen, als die ungepackten (selbst wenn sie nach dem Entpacken wieder gleich sind). f) "<" - DOS COMMAND & FLOPPY STATUS Mit der "<"-Funktion senden Sie einen Befehl an die Floppy. Benutzen Sie sie ohne Parameter, so wird lediglich der Floppystatus auf dem Bildschirm ausgege- ben. Desweiteren können Sie optional ein "$"-Zeichen nachstellen, was zur Folge hat, daß der MegaMon das Inhaltsver- zeichnis der eingelegten Diskette lädt und auf dem Bildschirm anzeigt. Möchten Sie ein Diskettenkommando (z.B. zum Formatieren oder Validieren der Dis- kette, bzw. zum Löschen von Files, etc.) an die Floppy schicken, so muß das Kom- mando direkt an das "<"-Zeichen an- gehängt werden. So können Sie z.B. mit "<N:TEST,XX" eine Diskette formatieren, oder mit "<S:TEST1,TEST2" die zwei Files "TEST1", und "TEST2" löschen. 4) DIE TASTENFUNKTIONEN DES MEGAMON Nachdem wir nun alle Funktionen des Pro- gramms besprochen haben, möchte ich Sie noch auf einige Tastenfunktionen hinwei- sen, die Ihnen die Arbeit mit dem Mega- Mon erleichtern sollen. Zunächt einmal kann jede Buchstabentaste von 'A' bis 'Z' zusammen mit der SHIFT- Taste gedrückt werden. In dem Fall gibt Ihnen der MegaMon einen häufig benutzten Assembler-Befehl, der mit dem besagten Buchstaben assoziert werden kann, auf dem Bidlschirm aus. Drücken Sie z.B. 'SHIFT-L', so erscheint ein "LDA" auf dem Bildschirm; ein 'SHIFT-J' erzeugt ein "JSR", usw. Auf diese Weise wird Ihnen das Eingeben eines Assemblerpro- gramms ein wenig erleichtert. Desweiteren sind im MegaMon die F-Tasten mit einigen nützlichen MegaMon-Befehlen vorbelegt: F1: Umschalten zwischen Disassemble- und Assemble-Modus. Der aktuellen Zeile wird automatisch ein ".A" vorange- stellt. F2: Cusor um 3 Zeilen nach oben bewegen. F3: Disassemble-Modus. Ein ".D" wird am Anfang der Zeile eingefügt, so daß Sie eine ggf. dort stehende Adresse direkt disassemblieren können. F4: Bytewerte in Speicher eintragen. Befindet sich am Anfang der Zeile eine Adresse, so wird die Erkennung für den "I"-Modus am Anfang der Zei- le eingefügt, und der Cursor auf die erste Stelle nach der Adresse posi- tioniert, so daß Sie Daten direkt eingeben können. F5: Assemblierungscodierung in die akt. Zeile schreiben. Haben Sie ein Di- sassemblieres Programm auf dem Bild- schirm, so können Sie auf diese Wei- se einen einzelnen Befehl ändern, indem Sie 'F5' drücken und dann den Befehl der Zeile wie gewünscht ein- tragen. F6: '.S" :' ausgeben. " :" wird benutzt, um ein schon existierendes File zu überschreiben. Diese Taste ist beim Speichern von Daten behilflich, da Sie nur noch den Filenamen und Start-, sowie Endadresse anhängen müssen. F7: Diese Taste gibt "<$" aus und liest dadurch automatisch das Inhaltsver- zeichnis der eingelegten Diskette. F8: Auto-LOAD. Haben Sie das Directory auf dem Bildschirm, so können mit dem Cursor in eine Zeile fahren, in der sich ein zu ladenendes File be- findet und 'F8' drücken. Hierauf fügt der MegaMon einen ".K"-Befehl in die Zeile ein, und lädt dadurch automatisch das File. Zusammen mit dem Mega-Mon befinden sich auch noch einige kleine, nützliche As- sembler-Routinen auf dieser MD, die Sie sich mit dem MegaMon einmal anschauen können. (ub)