C64/C128 Alles über Maschinensprache

Aus C64-Wiki
Zur Navigation springenZur Suche springen


C64/C128 Alles über Maschinensprache
Cover/Buchdeckel
Sprache deutsch
Autor(en) Frank Riemenschneider
Verlag Markt&Technik Verlag (1988)
Jahr 1988
ISBN ISBN 3-89090-571-4
Neupreis DM 59.-
Datenträger Icon disk525 1.png
Seitenzahl 314
letzte Auflage 1. Auflage, 1988
Genre Fortgeschrittene
Information Commodore Sachbuchreihe




Buchrückseite[Bearbeiten | Quelltext bearbeiten]

Bei kaum einem anderen Heimcomputer ist die Diskrepanz zwischen der Leistungsfähigkeit der Hardware und deren Ausnutzung durch das eingebaute Basic so groB wie beim C64. So nutzen Maschinensprache-Programme gegenüber Basic den gesamten Speicher aus, erreichen eine bis zu 100mal schnellere Verarbeitungsgeschwindigkeit und lassen neue Programmiertechniken wie die Interrupt-Programmierung zu.

Da jetzt aber viele C64-Besitzer sagen: Assembler bzw. Maschinensprache ist mir zu schwierig, zu kompliziert, ging der Autor dieses Buches einen neuen Weg. Er führt den Leser über Theorie und anschließende, vertiefende Praxis zum Erfolg, wobei die nötige Software auf der beiliegenden Diskette enthalten ist.

Im ersten Kapitel finden Sie jeden einzelnen 6510-Prozessorbefehl in Funktion, Wirkung und anhand von Beispielen erklärt. Alle weiteren Kapitel beschäftigen sich, aufgeteilt nach Anwendungsgebieten, mit ausführlichen, praktischen Übungen.

Die Grundlage bildet das beiliegende Assembler-Entwicklungspaket mit den Programmen Hypra-Ass-Plus Makroassembler, SMON-Plus Maschinensprachemonitor, Reassembler und Einzelschrittsimulator.

Folgende Themen werden umfassend beschrieben:

  • der 6510-Mikroprozessor
  • die Interrupt-Programmierung
  • der Variableneinsatz in Maschinensprache
  • die HiRes-Grafik-Programmierung
  • die Programmierung einer Basic-Erweiterung

Mit den gewonnenen Kenntnissen lassen sich z.B. Hunderte von Datensätzen in Sekunden sortieren, anspruchsvolle Grafiken programmieren, oder Sie richten Ihren C64 mit eigenen Basic-Befehlen auf Ihre individuellen Bedürfnisse ein. Zu allen beschriebenen Anwendungen finden Sie Beispielprogramme, die auch auf der beiliegenden Diskette, im Format 1541, enthalten sind.

Ein umfangreicher Anhang mit Tabellen, Übersichten und Aufstellungen aller wichtigen Daten für die Maschinenprogrammierung wie Befehle, Opcodes, Token, ROM-Routinen rundet das Buch ab.

Hardware-Voraussetzungen:

C64 bzw. C128 im 64er-Modus mit einer Floppy (1541, 1570, 1571)

Inhalt der Begleitdiskette:

Hypra-Ass-Plus Makroassembler, SMON-Plus Maschinensprachemonitor, Reassembler, Einzelschrittsimulator, Beispielprogramme.

Inhaltsverzeichnis[Bearbeiten | Quelltext bearbeiten]

Vorwort                                                               9
Ladehinweise zur beiliegenden Diskette                               11

-----------------------------------------------------------------------
Kapitel 1: Maschinensprache auf dem C64                              15
-----------------------------------------------------------------------
1.1.      Der 6510-Mikroprozessor                                    16
1.2.      Die Adressierungsarten des 6510                            21
1.2.1     Die implizite Adressierung                                 21
1.2.2     Die Akkumulator-Adressierung                               22
1.2.3     Die relative Adressierung                                  22
1.2.4     Die indirekt-absolute Adressierung                         22
1.2.5     Die unmittelbare Adressierung                              22
1.2.6     Die absolute Adressierung                                  23
1.2.7     Die Zeropage-Adressierung                                  23
1.2.8     Die absolut-X-indizierte Adressierung                      23
1.2.9     Die Zeropage-X-indizierte Adressierung                     23
1.2.10    Die absolut-Y-indizierte Adressierung                      24
1.2.11    Die Zeropage-Y-indizierte Adressierung                     24
1.2.12    Die X-indiziert-indirekte Adressierung                     24
1.2.13    Die indirekt-Y-indizierte Adressierung                     25
1.3       Übersicht und Funktionen aller 6510-Befehle                25
1.3.1     Die Ladebefehle                                            26
1.3.2     Die Speicherbefehle                                        28
1.3.3     Die Transferbefehle innerhalb des Prozessors               29
1.3.4     Die arithmetischen Befehle                                 31
1.3.5     Die logischen Befehle                                      35
1.3.6     Die Zählbefehle                                            35
1.3.7     Die Verschiebebefehle                                      37
1.3.8     Die Vergleichsbefehle                                      41
1.3.9     Die Befehle zur bedingten Verzweigung                      42
1.3.10    Die Befehle zur Beeinflussung der Flags                    47
1.3.11    Die unbedingten Sprungbefehle                              49
1.3.12    Die Unterprogrammbefehle                                   50
1.3.13    Die Stackbefehle                                           51
1.3.14    Die Interruptbefehle                                       53
1.3.15    Die Sonderbefehle                                          53
1.3.16    Die illegalen Opcodes                                      54
1.4       Das Assembler-Entwicklungssystem                           59
1.4.1     Der Hypra-Ass-Plus-Makroassembler                          60
1.4.1.1   Der Quelltext                                              60
1.4.1.2   Hypra-Ass-Variable (Label)                                 64
1.4.1.3   Die Makros von Hypra-Ass                                   65
1.4.1.4   Rechnen im Quelltext                                       67
1.4.1.5   Die Pseudobefehle                                          68
1.4.1.6   Die Assemblierung                                          71
1.4.1.7   Nützliche Makros für den Hypra-Ass                         72
1.4.2     Der Reassembler zum Hypra-Ass                              73
1.4.3     Der SMON-Maschinensprachemonitor                           76
1.4.3.1   Die Befehle des SMON                                       77
1.4.3.2   Die speziellen Befehle des SMON Plus                       85
1.4.3.3   Die speziellen Befehle des SMON Illegal                    86
1.4.3.4   Die speziellen Befehle des SMON Floppy                     86

-----------------------------------------------------------------------
Kapitel 2: interruptprogrammierung von A — Z                         89
-----------------------------------------------------------------------
2.1       Was ist ein Interrupt und wodurch wird er ausgelöst        90
2.2       Der NMI und seine »Quellen«                                92
2.2.1     Die NMI-Quelle CIA 2                                       94
2.2.1.1   Die Echtzeituhr der CIA 2 als NMI-Auslöser                 97
2.2.1.2   Die 16-Bit-Timer als NMI-Auslöser                         103
2.3       Der IRQ und seine »Quellen«                               109
2.3.1     Der Systeminterrupt als IRQ-Quelle                        111
2.3.2     Die »restliche« CIA 1 als IRQ-Quelle                      113
2.3.3     Der Video-Interface-Chip (VIC) als IRQ-Quelle             113
2.3.3.1   Der Rasterzeileninterrupt als IRQ-Auslöser                117
2.3.3.2   Die Sprite-Kollisionen als IRQ-Auslöser                   120
2.3.3.3   Impuls vom Lightpen/Joystick als IRQ-Auslöser             123
2.3.4     Die Unterbrechung des IRQ durch einen IRQ                 126
2.4       Die BREAK-Routine                                         127
2.5       Der Abbruch eines IRQ durch den Programmierer             128

-----------------------------------------------------------------------
Kapitel 3: Variablen in Maschinensprache                            135
-----------------------------------------------------------------------
3.1       Aufbau der nichtindizierten Variablen                     135
3.1.1     Der Variablentyp INTEGER                                  135
3.1.1.1   Rechnen mit Integerzahlen                                 138
3.1.1.2   Bildschirmausgabe einer Integerzahl                       140
3.1.2     Der Variablentyp STRING                                   141
3.1.2.1   Bildschirmausgabe einer Stringvariablen                   142
3.1.3     Der Variablentyp FUNKTION                                 142
3.1.4     Der Variablentyp FLIESSKOMMA                              143
3.1.4.1   Rechnen mit Fließkommazahlen                              149
3.1.4.2   Übersicht aller Fließkommaroutinen                        168
3.1.4.3   Bildschirmausgabe einer Fließkommazahl                    169
3.1.5     Umwandlung der Variablenformate                           169
3.1.6     Einrichten/Suchen einer nichtindizierten Variablen        171
3.1.7     Wertetabelle in Maschinensprache                          172
3.2       Aufbau der indizierten Variablen (Arrays)                 179
3.2.1     Das Arrayelement vom Typ INTEGER                          181
3.2.2     Das Arrayelement vom Typ FLIESSKOMMA                      181
3.2.3     Das Arrayelement vom Typ STRING                           182
3.2.4     Suchen/Anlegen eines Arrayelementes                       182
3.2.5     Bubblesort in Maschinensprache                            186
3.2.5.1   Bubblesort für Integer-Variablen                          186
3.2.5.2   Bubblesort für Fließkommavariablen                        190
3.2.5.3   Bubblesort für Strings                                    193

-----------------------------------------------------------------------
Kapitel 4: Programmierung der HiRes-Grafik                          199
-----------------------------------------------------------------------
4.1       Lage der HiRes-Grafik und des Farb-RAMs                   200
4.2       Aufbau des Grafikspeichers und des Farb-RAMs              205
4.3       Zeichnen von Rechtecken                                   216
4.4       Zeichnen von Kreisen/Ellipsen                             226
4.5       Das Schreiben von Text in die HiRes-Grafik                245

-----------------------------------------------------------------------
Kapitel 5: Programmierung von Basic-Erweiterungen                   261
-----------------------------------------------------------------------
5.1       Die Umwandlung in Interpretercode                         262
5.2       Die Umwandlung des Interpretercodes in Klartext           271
5.3       Die Ausführung der Basic-Befehle                          273 

-----------------------------------------------------------------------
Anhang                                                              277
-----------------------------------------------------------------------
Anhang 1  Umrechnungstabelle Dezimal — Hexadezimal — Binär          277
Anhang 2  Alphabetische Tabelle der Prozessorbefehle und Opcodes    281
Anhang 3  Nach Wert sortierte Übersicht über die Prozessorbefehle
          inklusive illegaler Opcodes                               285
Anhang 4  Beeinflussung der Prozessor-Flags                         289
Anhang 5  Routinen für Kooperation von Basic und Maschinensprache   293
Anhang 6  Betriebssystemroutinen des C64                            295
Anhang 7  Befehlsübersicht Hypra-Ass                                297
Anhang 8  Befehlsübersicht SMON Plus                                299
Anhang 9  Adressen und Token der Befehle, Funktionen und Operatoren 301
Anhang 10 Die Codes des C64                                         303

Stichwortverzeichnis                                                311
Hinweise auf weitere Markt&Technik-Produkte                         315

Leseprobe[Bearbeiten | Quelltext bearbeiten]

Seite 126/127: 2.3.4 Die Unterbrechung des IRQ durch einen IRQ

Wenn Sie die IRQ-Beispiele des VIC einmal vergleichen, sehen Sie, daß alle Routinen eine scheinbar merkwürdige Gemeinsamkeit aufweisen: Wenn sich herausstellte, daß der IRQ durch den Systeminterrupt ausgelöst wurde, wird das ICR der CIA 1 gelöscht und der IRQ mit dem CLI-Befehl freigegeben, obwohl wir uns in einer Interrupt-Routine befanden. An Hand des Rasterzeileninterrupts wollen wir dieses Rätsel lösen.

Wie in Abschnitt 1.3.3.1. erwähnt wurde, dauert der Aufbau eines kompletten Bildschirms ca. 1/20 Sekunde. Da wir im Beispielprogramm während eines solchen Aufbaus zwei IRQs durch Rasterzeilen ausgelöst haben, bleibt zwischen je zwei IRQs eine Zeitspanne von ca. 1/40 Sekunde. Da jedoch gleichzeitig der Systeminterrupt ca. alle 1/60 Sekunde ausgelöst wird, lassen sich Überschneidungen der beiden IRQs auf Dauer nicht vermeiden, d.h., während ein Systeminterrupt abgearbeitet wird, wird irgendwann ein IRQ durch Rasterzeilen auftreten. Wir haben jedoch ganz zum Anfang des IRQ-Abschnitts gesehen, daß beim Auslösen eines IRQ automatisch das Interrupt-Flag gesetzt wird und somit weitere IRQs verhindert werden. Unser Rasterzeilen-Interrupt müßte also so lange warten, bis die Systeminterruptroutine beendet wäre. Da in dieser Zeit der Bildschirmaufbau jedoch schon fortgeschritten ist, wäre die Folge für unser Beispielprogramm eine unsaubere Trennung zwischen Klein- und Großschrift-Zeichensatz, die wir vermeiden wollen. Daher hat für uns der IRQ vom VIC höchste Priorität: Wir müssen auf jeden Fall einen IRQ auslösen, auch wenn gerade der Systeminterrupt behandelt wird. Das bedeutet, daß dieser System-IRQ durch unseren VIC-IRQ unterbrochen werden muß, um eine einwandfreie Funktion der Rasterroutine zu haben. Dies ist durchaus zulässig: Wird die normale IRQ-Routine unterbrochen, wird zunächst unsere VIC-Routine abgearbeitet und dann mit der Systeminterruptroutine fortgefahren. Wenn diese beendet ist. kann mit der Bearbeitung des ursprünglich unterbrochenen Programms weitergemacht werden. Dies klingt zwar kompliziert, ist aber im Prinzip sehr einfach und logisch. Durch das Lesen des ICR der CIA 1 müssen wir daher wie bei allen Interrupts die Ursache (Unterlauf Timer A (siehe Systeminterrupt)) löschen. Dann wird mit dem CLI-Befehl der IRQ freigegeben. Hätten wir vergessen, das ICR der CIA 1 zu löschen, würde jetzt sofort ein neuer IRQ ausgelöst, was ja nicht geschehen darf. Jetzt darf man die alte IRQ-Routine anspringen, da sie nun ja vom VIC wie gewünscht unterbrochen werden kann.

Meinung[Bearbeiten | Quelltext bearbeiten]

User: "Deine Meinung zu diesem Buch"

Weblinks[Bearbeiten | Quelltext bearbeiten]