Anleitung MEGAMON - Teil 2
m)" O"- SELECT MEMORYBANK Hiermit schalten Sie eine spezielle
Speicherkonfiguration für alle Speicherspezifischen 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 RAMund 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 untersuchen, und man daher ständig zwischen RAM
und ROM hinund herschalten muß, kann
man die Speicherkonfiguration für den
MegaMon voreinstellen. Schalten Sie z. B.
alle ROMs ab, so arbeiten die oben genannten Befehle immer im RAM unter den
ROMs. Die Verwaltung des Hinund Her- schaltens wird dabei automatisch vom
MegaMon übernommen, so daß für Sie der
Eindruck entsteht, als hätten Sie momentan 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önnen Sie auch einen Parameter, bestehend
aus einer Ziffer von 0-7, anhängen, der
die Konfiguration Ihren Wünschen entsprechend einstellt. Diese Ziffer entspricht den untersten drei Bits der
Speicherzelle $0001 die die Speicherkonfiguration 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 BASICund
Betriebssystem-ROM einoder ausschalten
und dann in dem gegebenen Bereich arbeiten.
Zusätzlich verfügt diese Funktion noch
über einen speziellen Parameter. Geben
Sie hinter dem " O" ein " D" an, so " blendet" 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 hineinschreiben. Die Aufteilung des C64- Speichers sieht nach einem " . OD" wiefolgt aus:
Adr. Funktion
---------------------------------------- $0000-$1FFF Floppy-RAM $2000-$BFFF C64-RAM (dieses Bereiches) $C000-$FFFF Floppy-ROM
Sie können ja einmal die Speicherkonfiguration auf diese Art und Weise umschalten. 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 Assemblerprogramm sehr langsam Ablaufen lassen. Hierbei muß natürlich als Parameter
die Startadresse dieses Programms angegeben 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 Programmablauf ü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 Statusanzeige 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 überschrieben haben.
p)" T"- TRANSFER Hiermit können Sie einen Speicherbereich
an eine andere Adresse kopieren. Der Befehl verlangt drei Parameter: Startund Endadresse des zu kopierenden Bereichs, sowie die Startadrese des Speichers, an die kopiert werden soll. So
kopiert der Befehl " . T E000, E3 E7,0400" den Anfang des Betriebssystems-ROMs
( wenn eingeschaltet) in den Bildschirmspeicher. Haben Sie übrigens mittels
" . OD" den Floppy-Speicher eingeschaltet, so können Sie auch diesen in den Speicher des C64 umkopieren und dort verändern!
q)" U"- SHOW RASTERTIME Die Geschwindigkeit einer Routine wird
oft in der Zeit gemessen, die der Rasterstrahl braucht um eine Rasterzeile
aufzubauen. Selbiger läuft pro Sekunde
50 Mal über den Bildschirm und baut dabei jeweils 312 Zeilen auf. Schnelle
Grafikroutinen müssen Ihre Arbeit in
einem gewissen Zeitrahmen erledigen, damit das Bild nicht zu flackern beginnt. Mit der " U"- Funktion können Sie sich nun anzeigen lassen, wie lange Ihre
Routine braucht. Geben Sie hierzu einfach 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 Rasterbalken im Bildschirmrahmen, der die
benötigte Rasterzeit angibt. Je schmaler
der Streifen, desto schneller die Routine. Der MegaMon ermittelt dabei übrigens
auch die Anzahl der verbrauchten Rasterzeilen, die er hinter dem " U"- Kommando
auf dem Bildschirm ausgibt. Um die Funktion 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
50 stel Sekunde, so sieht man einen ständig hellblauen Bildschirmrahmen, der an
manchen Stellen flackert!
r)" W"- TRACE MODE
Dies ist eine der nützlichsten Funktionen des MegaMon. Mit ihr können Sie den
Ablauf eines Assemblerprogramms schrittweise 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 Befehls 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öglichkeiten 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 allerdings 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 jedoch ' 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 folgende Zeile an. Auf diese Weise können
Sie Unterroutinen, von denen Sie sicher
wissen, daß sie funktionieren, normal
ablaufen lassen, da sie ja nicht gesondert auf Fehler untersucht werden müssen. Desweiteren kann auch hier, wie
schon bei der " Q"- Funktion, der Programmablauf durch Gedrückthalten der
' Commodore'- Taste beschleunigt werden, wobei jedoch weiterhin die beiden Informationszeilen angezeigt werden. Der Trace- 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 manuell 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änderten NMIund 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 Rasterbalkenroutine 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 arbeitet nun im Hintergrund. Damit dies
reibungslos funktioniert muß Sie allerdings 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 betroffenen Bereiche sind die Zeropage, die Betriebssystemsvektoren, und der
Bildschirmspeicher, im Bereich von
$0000-$07 FF, sowie der Bereich von
$8000-$9 FFF, in dem ja der MegaMon untergebracht 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 Ladeund Speicherfunktionen kennt. Zum Einen sind das
die normalen Funktionen mit denen Daten
wie gewohnt gelesen und geschrieben werden können, zum Anderen gibt es spezielle Ladeund Speicherkommandos, die die
zu schreibendenen, bzw. zu lesenden Daten, packen, bzw. entpacken, können. Auf
diese Weise kann man eine Menge Diskettenspeicher 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 einmal 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 abgeschlossen wird. Manche Funktionen verlangen ggf. noch eine oder zwei Adress-Angaben, die, jeweils durch Kommata voneinander und vom Filenamen getrennt,
angehängt werden. Hier nun eine Auflistung der Befehle:
a)" Z"- SAVE Diese Funktion speichert einen bestimmten Speicherbereich, dessen Startund
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 Speicher 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 optional eine Ladeadresse angeben, an die das File geladen werden soll. Geben Sie
diese Adresse nicht an, so lädt der MegaMon das File an seine absolute Adresse, 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 hinzugefügt werden. Während des Ladens wird
das File dann automatisch entpackt und
an der entsprechenden Speicheradresse
abgelegt. Zusätlich verfügt dieser Ladebefehl über einen Floppy-Speeder, der
die zu ladenenden Daten weitaus schneller in den Speicher lädt als sonst. Er
erkennt übrigens auch ein ungepacktes
File, das dann automatisch auch als solches behandelt wird. Zusätzlich gibt er
die Startund 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 Speicherinhalt. Wird keine zusätzliche Adresse
angegeben, so wird ab der Ladeadresse
des Files verglichen. Geben Sie eine
Adresse an, so wird die Ladeadresse ignoriert 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 ausschließlich ungepackte Files. Ein gepacktes File wird bei einem Vergleich
immer als verschieden zu den Rohdaten
erkannt, da die gepackten Daten natürlich 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 ausgegeben. Desweiteren können Sie optional ein
"$"- Zeichen nachstellen, was zur Folge
hat, daß der MegaMon das Inhaltsverzeichnis der eingelegten Diskette lädt
und auf dem Bildschirm anzeigt.
Möchten Sie ein Diskettenkommando ( z. B.
zum Formatieren oder Validieren der Diskette, bzw. zum Löschen von Files, etc.) an die Floppy schicken, so muß das Kommando direkt an das "<"- Zeichen angehä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 Programms besprochen haben, möchte ich Sie noch auf einige Tastenfunktionen hinweisen, 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 Assemblerprogramms ein wenig erleichtert.
Desweiteren sind im MegaMon die F-Tasten
mit einigen nützlichen MegaMon-Befehlen
vorbelegt:
F1 : Umschalten zwischen Disassembleund
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 Zeile eingefügt, und der Cursor auf die
erste Stelle nach der Adresse positioniert, so daß Sie Daten direkt
eingeben können.
F5 : Assemblierungscodierung in die akt.
Zeile schreiben. Haben Sie ein Disassemblieres Programm auf dem Bildschirm, so können Sie auf diese Weise einen einzelnen Befehl ändern, indem Sie ' F5' drücken und dann den
Befehl der Zeile wie gewünscht eintragen.
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 Inhaltsverzeichnis 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 befindet 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 Assembler- Routinen auf dieser MD, die Sie
sich mit dem MegaMon einmal anschauen
können.
( ub)