Data Becker Führer - C64
Data Becker Führer - C64 | |||
---|---|---|---|
Sprache | deutsch | ||
Autor(en) | Dieter Vüllers | ||
Verlag | Data Becker | ||
Jahr | 1987 | ||
ISBN | ISBN 3-89011-413-X | ||
Neupreis | DM 19,80 | ||
Datenträger | |||
Seitenzahl | 208 | ||
letzte Auflage | 1. Auflage | ||
Genre | Programmieren / Hardware | ||
Information |
Inhaltsverzeichnis[Bearbeiten | Quelltext bearbeiten]
1. Das C 6 4 - B A S I C 10 1.1 Die Abkürzungen der Befehle ................... 24 1.2 Die Systemvariablen ........................... 25 1.3 Die verschiedenen Datentypen .................. 27 1.4 Mehrdimensionale Felder ....................... 27 1.5 Die abgeleiteten mathem. Funktionen ,.......... 28 1.6 Die arithmetischen Funktionen ................. 29 1.7 Allg. Informationen über das BASIC ............ 30 2. Der Video-Controller (VIC) ..................... 33 2.1 Grundsätzliches zum VIC ....................... 38 2.2 Die Einzelpunktgrafik ......................... 39 2.3 "Form, Lage und Verwaltung der Sprites ........ 41 2.4 Der Extended-Color-Modus ...................... 45 2.5 Der Multicolor-Modus .......................... 46 2.6 Verschieben des Textschirms ................... 47 2.7 I M R / I R R - Interruptprogrammierung ....... 47 3. Der Sound-Controller ( S I D ) ................. 49 3.1 Registerbeschreibung .......................... 49 3.2 Festlegen der Oszillatorfrequenz .............. 53 3.3 Festlegen der Wellenform ...................... 53 3.4 Festlegen der Hüllkurve ....................... 54 3.5 Die Filterprogrammierung ...................... 56 3.6 Allgem. zur Tonerzeugung mit dem SID .......... 58 3.7 Die A/D-Wandler ............................... 59 4. Der I/O-Controller (CIA) ....................... 60 4.1 Registerbeschreibung .......................... 60 4.2 Programmierung der Timer ...................... 67 4.3 Programmierung der Echtzeituhr ................ 69 4.4 Die I/O-Ports ................................. 70 4.5 Die CIA im Betriebssystem ..................... 72 4.6 CIA 1 (SDC00/56320) ........................... 72 4.7 CIA 2 (SDC00/56576) ........................... 73 4.8 Die Programmierung der Joysticks .............. 75 5. Der Prozessor (6510) ........................... 76 5.1 Die Register des 6510 ......................... 77 5.2 Der Befehlssatz des 6510 ...................... 82 5.3 Der Prozessör-Port ............................ 86 6.Die Speicherverwaltung im C64 ................... 87 6.1 BASIC- und KERNAL-ROM ......................... 91 6.2 TOKEN-Tabelle ................................. 93 6.3 Aufbau einer BASIC-Programmzeile .............. 96 6.4 Die Variablenverwaltung ....................... 98 6.5 Fließkomma-Arithmetik ......................... 100 6.6 Die Zeropage des C64 .......................... 105 6.7 BASIC- und KERNAL-Routinen. ................... 113 6.8 Adressen aller Routinen. ...................... 151 6.9 Ein paar wichtige Pokes ....................... 153 6.10 Kopierschutz ................................. 156 7. Die Eloppy 1541 ................................ 159 7.1 Die User-Befehle der 1541 ..................... 163 7.2 Anzahl der Sektoren pro Track ................. 164 7.3 Aufteilung des Floppyspeichers ................ 165 7.4 Belegung der I/O-Ports der 1541 ............... 166 7.5 Zeropage der Floppy 1541 ...................... 168 7.6 Die Puffer der Floppy 1541 .................... 178 7.7 Aufbau des DirectorySs ........................ 180 7.8 Format des Diskettenvorspanns ................. 181 7.10 Format des Directory-Sektors ................. 182 7.11 Format des Fileeintrags ...................... 183 7.12 Aufbau der BAM ............................... 184 7.13 Die Jobcodes ................................. 185 8. Anhang ......................................... 187 8.1 Die Schnittstellen des C64 .................... 187 8.2 Umrechnungstabelle ............................ 192 8.3 BASIC-Fehlermeldungen ......................... 195 8.4 Fehlermeldungen der Floppy 1541 ............... 198 8.5 Literaturhinweise ............................. 202 8.6 Stichwortverzeichnis .......................... 203
Vorwort[Bearbeiten | Quelltext bearbeiten]
Der Commodore 64 wie auch die Floppy 1541 bzw. 1541C sind Thema dieses Führers, der die überflüssigen Bücherberge von Ihrem Schreibtisch verbannen soll. Denn in wahren Unmengen von Büchern und in einer unüberschaubaren Zahl von Zeitschriften lassen sich nur unter großen Mühen die Detailinformationen finden, die man irgendwann irgendwo einmal gelesen hat. Und gerade jetzt benötigt. Und natürlich nicht findet.
Bedingt durch die große Anzahl von Informationen, die hier auf minimalem Raum möglichst übersichtlich zusammengefaßt wurden, ist auf einführende Erläuterungen bewußt verzichtet worden. Einen Einstieg kann und will dieser Führer nicht liefern. Um eine straffe und einheitliche Darstellung zu gewährleisten, werden in den einzelnen Kapiteln stets in einheitlichem Schema Befehle, Funktionen und etwaige Besonderheiten erklärt. Aufgrund der unterschiedlichen Themen, die in diesem Nachschlagewerk zusammengefaßt werden, ergibt sich an einigen Stelle die zwangsläufige Änderung der äußeren Darstellung, auf die dann ausdrücklich zu Kapitelbeginn hingewiesen wird.
Ein ausführliches Stichwortverzeichnis schließlich sowie der klare innere Aufbau ermöglichen sowohl eine problemorientierte Suche als auch das konkrete Nachschlagen.
Leseprobe[Bearbeiten | Quelltext bearbeiten]
1.Auflage: Seite 47, Kapitel 2.7: "IMR/IRR - Interruptprogrammierung"
Beim C64 besteht die Möglichkeit, durch den VIC einen Interrupt auslösen zu lassen. Bei diesem Interrupt handelt es sich um einen IRQ (Interrupt Request), also um einen Interrupt, der programmtechnisch zu unterdrücken ist.
Für die Interrupt-Programmierung stellt der VIC zwei Register zur Verfügung. Erstens das IRR, durch das vom Programmierer die Interrupt-Ursache ermittelt werden kann. Zweitens das IMR, durch das festgelegt wird, welche Ereignisse einen VIC-Interrupt auslösen dürfen. Bei einem IRQ springt der Prozessor indirekt über die beiden Speicherstellen $0314/$0315. Im Normalfall zeigen diese auf die IRQ-Routine des Interpreters. Soll nun mit dem VIC-Interrupt gearbeitet werden, muß der Zeiger in diesen beiden Speicherstellen auf eine eigene IRQ-Routine ’gebogen’ werden. Innerhalb dieser Routine muß dann getestet werden, ob es sich um einen VIC-Interrupt handelt. Sollte dies nicht der Fall sein, so muß wieder zur alten IRQ-Routine ($EA31) gesprungen werden. Dabei sollte aber das Interrupt-Flag mittels CLI wieder freigegeben werden, da ein VIC-Interrupt auch innerhalb der normalen IRQ-Routine auftreten kann.
Handelte es sich dagegen um einen VIC-Interrupt, so kann man nun entsprechend auf diesen reagieren. Allerdings sollte die Reaktion nicht länger als eine sechzigstel Sekunde dauern, da sonst Timing-Probleme auftreten können.
Im IMR-Register (VIC-Register 26) können Sie festlegen, bei welchem Ereignis der VIC einen Interrupt auslösen soll. Die Aufschlüsselung dieses Registers entnehmen Sie bitte der Registerbeschreibung.
Wollen Sie ein Bit im IMR setzen, so schreiben Sie dieses mit gesetztem 7. Bit in das IMR (128 + 2 * Bitnummer). Hierdurch wird das gewünschte Bit gesetzt und alle anderen Bits in ihrem alten Zustand belassen. Das Löschen einzelner Bits erfolgt analog, nur daß das 7. Bit hierbei gelöscht sein muß.
Die Kodierung des IRR ist identisch mit der des IMR. Nur Bit sieben besitzt eine andere Funktion. Dieses ist gesetzt, wenn eines der anderen Bits des IRR gesetzt ist. Ist dies nicht der Fall, so ist auch Bit 7 gleich 0. Ein Löschen des IRR ist durch das Zurückschreiben des gelesenen Wertes möglich.
Um einen Interrupt z.B. durch einen Rasterzeilendurchlauf auszulösen, muß als erstes die Rasterzeile festgelegt werden, bei der dies geschehen soll. Diese wird durch das VIC-Register 18 und Bit 7 im Register 19 festgelegt.
Dann muß der IRQ-Vektor auf eine eigene IRQ-Routine umgebogen werden, welche z.B. die Rahmenfarbe ändert (beim Ändern des Vektors sollte natürlich der IRQ verhindert werden). Dann müssen auf die oben beschriebene Art und Weise IRR und IMR präpariert werden. Vergessen Sie aber nicht das IRR in der IRQ-Routine zu löschen!