Der Cross-Assembler
Suche
Index
FAQ
Kontakt
Zurück

Der Cross-Assembler




Einleitung


Wenn man den alten 6502-Computer einschaltet wird man von der üblichen Einschaltmeldung und dem blinkenden Cursor begrüßt. Im Prinzip sieht man ein laufendes Programm, das auf Eingaben des Nutzers wartet. Hierbei handelt es sich um den Basic-Interpreter, der ein fester Bestandteil des Rechners ist. Dieser ermöglicht eine recht komfortable Bedienung und das Ausführen von komplexeren Basic-Programmen.
Hier liegt leider auch der Haken. Wenn man ein Basic-Programm im Basic-Interpreter ausführt, wird die CPU sehr stark gefordert. Dadurch sind Basic-Programme relativ langsam.

Warum ?

Auch wenn man mit einem direkten Komfort-Verlust rechnen muss, entschädigen Assembler-Programme durch kompakten und sehr schnell ausführbaren Code. Zudem macht es komplexere Berechnungen und Timing-abhängige Anwendungen erst möglich.
Mit dem Erlernen von Assembler wird man sich intensiver mit den Funktionsabläufen im Computer auseinander setzen müssen und versteht letztlich auch das Zusammenwirken von Programm und CPU. Aber keine Angst, ein Computer mit 6502-CPU ist sehr überschaubar.

Ein Gerüst für das Programm

In unseren Beispielen wollen wir den ACME-Cross-Assembler verwenden. Tipps zur Installation unter Windows und Linux findet man in diesem Wiki.

!to"name.prg",cbm    <-- Hier wird der Name der zu erzeugenden PRG-Datei angegeben.

label=$addresse      <-- So werden einzelne Labels definiert

*=$Speicheranfang    <-- Hier wird der Anfang des Programm im Speicher definiert

  ; code             <-- Der Code darf natürlich nicht fehlen

  ; datensegmente    <-- Datensegmente hängt man möglichst hinten an


Ein erstes eigenes Programm erstellen

In unserem ersten Experiment wollen wir das allseits beliebte "Hello Word!" in Assembler programmieren.

in Basic würde eine Zeile reichen :

10 PRINT"HELLO WORLD !"


Assembler mit BASIC-ROM-Routine für den C64:

!to"hello.prg",cbm

 strout    = $ab1e

 *=$1000

    LDA #$hw      ;HIGH BYTE
    JSR strout     ;STRINGAUSGABE
    RTS

hw: !tx "HELLO WORLD!",0


Assembler mit KERNAL-ROM-Routine für den C64:

!to"hello.prg",cbm

  bsout    = $ffd2

 *=$1000

    LDX #$00
l0: LDA hw,x
    JSR bsout
    INX
    CPX #$0c
    BNE  l0
    RTS

hw: !tx "HELLO WORLD!"


Hier nun zwei Beispiele für den C64 die jeweils mit SYS 4096 gestartet werden können. Zur genauen Funktionsweise kommen wir in einem der folgenden Kapitel. Nach dem Start sollte HELLO WORLD! auf dem Bildschirm erscheinen.

Basic und Kernal-ROM: das Rad ist schon da

In den letzten beiden Beispielen erkennt man zwei unbekannte Adressen: strout=$ab1e und bsout=$ffd2. Diese werden mit JSR angesprungen und wirken wahre Wunder. Dieses lässt sich aber sehr leicht enträtseln. Jeder Commodore 8-Bit Computer arbeitet mit zwei ROMs, in denen die Funktionen zu finden sind. Es handelt sich dabei um den schon vorher erwähnten BASIC-Interpreter und das Kernal-ROM. Im Kernal-ROM sind die grundlegenden Funktionen zum Betrieb des Computers zu finden, die auch vom BASIC-ROM verwendet werden.
Daher ist bei der Programmierung in Assembler ein gutes ROM-Listing unverzichtbar. Dazu gehört auch die sogenannte Zero-Page, in der Parameter für die einzelnen Funktionen verändert werden können. Zudem bietet diese auch noch etwas Speicher und Register der CPU.
Interessant ist auch die Lage der ROMs,der I/O-Bereiche, des freien Speichers und anderer wichtiger Adressen. Dazu benötigt man die Memory-Map. Eine schöne Zusammenfassung der erwähnten Dokumente findet man z.B. für den C64 im All About Your C64 .

Anmerkungen

Der Einstieg wirkt für den Laien sicher wie eine Flut von neuen Informationen. Im gewissen Maße lässt sich das leider nicht verhindern. Daher ist es ratsam die Sache schrittweise und mit ausreichend Zeit anzugehen.
Die Beispiele sind absichtlich so gewählt, dass auch mal ein Erfolg sichtbar wird. Daher wird nicht jedes Beispiel am Anfang bis ins letzte Detail zerlegt. Es sollte neben dem Erlernen, der Spaß an der Sache auch nicht zu kurz kommen.


 

Letzte Änderung: 2019-01-04 12:57:37
  Rubrik:  CBM PET
Rubriken-Übersicht
 17 Besucher online 

Valid XHTML 1.0 Transitional Valid CSS!