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)