Navigation überspringen
Seiteninhalt:
NO TITLE
Redcode Quelldateien
Man kann zwar mit ARES seine Programme direkt in den Core eingeben, was praktisch ist, wenn man kurz etwas ausprobieren will. Meistens wird man seine Kampfprogramme aber in Dateien speichern. Vor dem Programmstart werden diese Dateien von einem Programm (dem "Assembler") eingelesen, ausgewertet und als Maschinencode im Hauptspeicher des MARS abgelegt.
Load File Format
Die Quelldateien können Redcode-Anweisungen beinhalten, wie sie auch im Monitor angezeigt werden. Wenn es sich um reinen Redcode handelt, dann spricht man von einem "Load File" - alle aktuellen MARS-Programme können solche Dateien einlesen und übersetzen. Der Dwarf sieht im LoadFile-Format so aus: MOV +3, @+3
ADD #4, +2
JMP -2
DAT #0
Präprozessor
Solche Quellcodes sind nicht besonders übersichtlich, besonders bei längeren Programmen. Darum erlauben viele Assembler weitere Angaben, die die Lesbarkeit der Programme verbessern und dem Programmierer Arbeit ersparen. Vor der eigentlichen Übersetzung in den Core werden diese zusätzlichen Angaben ausgewertet und in reine Redcode-Anweisungen, wie sie in einem Load File vorkommen könnten, übersetzt. Solche Quellcodes können schon sehr komplex aussehen und können an den Code einer Hochsprache erinnern. Der Dwarf kann auch so aussehen: ;redcode
;name Dwarf
;strategy bombs every fourth cell
;assert (CORESIZE % 4 == 0)
STEP EQU 4
ORG loop
loop MOV bomb, @ptr ; move bomb to target position
ADD #STEP, ptr ; increment pointer
JMP loop ; infinite loop
bomb
ptr DAT #0 ; ptr is also used as bomb
END
Leerzeilen werden bei der Übersetzung einfach ignoriert, ein Strichpunkt (";") bedeutet, daß der Text danach ein Kommentar ist. Wenn man seine Programme gut Kommentiert, kann man sie sehr viel leichter wieder verstehen, wenn man sie ein Jahr später liest. Manche Kommentare haben allerdings eine Sonderbedeutung, es handelt sich um die Direktiven, wie in diesem Beispiel die Direktive ;assert. Die Anweisungen ORG/END und EQU sind sogenannte "Pseudo-Instruktionen". Sie werden nicht in den Core geladen, sondern geben dem Assembler lediglich Zusatzinformationen, wie das Programm zu übersetzen ist.
Bezeichner und Sprungmarken
Manchen Befehlen ist ein sogenannter "Bezeichner" ("Label") vorangestellt, wie etwa loop in der Zeile mit der ersten "echten" Instruktion. Labels sind case sensitive, man muß also auf die Groß/Kleinschreibung achten. Es gibt zwei Möglichkeiten, wie Labels zum Einsatz kommen können: Man kann bestimmten Instruktionen einen Namen geben, und diesen Namen in anderen Anweisungen anstelle der relativen Adresse angeben: JMP loop
Die andere Anwendung kommt in Verbindung mit der Pseudoinstruktion EQU vor. Es handelt sich um ein Text-Ersetz-Werkzeug, im obigen Beispiel des Dwarf wird der Text STEP in den Instruktionen durch den Text "4" ersetzt, bevor die Instruktion in den Core geladen wird.
Ausdrücke
Um dem Programmierer noch mehr Flexibilität zu geben, darf man einfache mathematische Ausdrücke verwenden. Die Zeile imp MOV imp, imp+1
würde bei der Auswertung der Sprungmarken umgewandelt in: MOV +0, +0+1
und nach der Auswertung der Ausdrücke in: MOV +0, +1
Dieser Text kann vom Ladeprogramm übernommen und im Core gespeichert werden.
Kommentare
[...]
Content Management:
μCMS α1.6