Die Maschine
Intern ist der C=64 ähnlich einer virtuellen Maschine, denn alle programmierbaren Bauteile sind fest in den Adressraum der CPU eingebunden. Eine unmittelbare Beschädigung der echten Hardware durch zum Beispiel fehlerhaften Code oder korrumpierte Daten ist so garnicht leicht möglich. Sowohl direkte Hardwareleitungen zu Steuerelementen als auch komplexere Schaltungen auf die internen Register der einzelnen Chips sind so ganz einfach in den Adressraum verlinkt und ohne weiteres technisches Wissen erreichbar.
Das bedeutete für das Beispiel von Seite drei, in dem am SID Chip einmal die Lautstärke voll aufgedreht wurde, dass ich mich nicht darum kümmern muss ChipSelect zu aktivieren oder in den Schreibmodus zu schalten. Auch die fünf Adressleitungen zu den internen Registern des SID Chip sind von der programmierbaren Seite im C=64 aus so garnicht vorhanden. Es gibt einfach für alle SID Register festgelegte Speicherstellen im normalen Adressraum. Den Rest der komplizierten Feinarbeit erledigt jedesmal die Maschine routinemäßig selbst. Dem Beispiel nach würde ich den Wert $0f (eine Hexadezimalzahl für 00001111) in die Speicheradresse $d418 (Link zum Register 11000 im SID) schreiben. Fertig!
Das scheint doch erstmal eine gute Nachricht, und angesichts des Alters dieser klassischen Computer ist es das auch, denn es gibt keine Hinweise darauf, dass je ein Commodore 64 durch irgendeine Software beschädigt werden konnte, was vielleicht auch nicht so im Zentrum der Bemühungen stand, aber eben auch, dass unwissendes Programmieren je dazu geführt haben könnte einen physischen Schaden am Computer selbst anzurichten. Normalerweise ist Maschinensprache in der großen Computerwelt dafür sehr bekannt schon bei kleinsten Fehlern genau dieses Potential frei zu entfalten. Für alle, die also nicht auf diese Gefahr verzichten wollten, ist das eine eher schlechte Nachricht. Es wäre ja garkeine radikal echte Maschinensprache.. Mi Mi Mi.. nein, ist es nicht. Um einen C=64 kaputt zu machen, musst Du schon so etwas wie einen Hammer nehmen.
Vor allem, da die unterschiedlichen Modelle, die im Laufe der Zeit auf den Markt geworfen wurden, besonders die Nachfolgemodelle, keine identischen Hardwarebausteine haben, ist es auf diese Weise ganz leicht möglich, dass sie wie ein und dieselbe Maschine programmiert werden können. Die Computer wurden im Laufe der Zeit von Commodore selbst immer wieder überarbeitet, verbessert, vereinfacht, verkleinert, verbilligt. Trotzdem funktionieren sie alle gleich.
Diese typischen Bausteine sind:
- Die CPU-6510, ein einfacher 1MHz Prozessor mit drei programmierbaren 8Bit Registern, einer überschaubaren Menge cooler Funktionen, einer nicht ganz so leicht einsichtigen Menge wirklich cooler Funktionen und seiner 16Bit Adressierung für genau 64kByte RAM.
- 64kByte RAM, weil es eben nur so Sinn macht.
- VIC-II, der Videochip, über den sich Bände schreiben lassen würden. Nur soviel, es ist ein echtes Dilemma, dass er immernoch einen alten Fernseher mit Elektronenrasterstrahl steuern muss und nicht etwa einen modernen Laser lenken darf. Er macht auch so reichlich Faxen, die schwer zu erklären sind aber irgendwie echt auch beeindruckend. Vor allem beeinflusst er den glatten 1MHz Systemtakt negativ aus einer allgemeinen Notwendigkeit heraus. Das verschafft leider dem Sound nicht wirklich echte Vorteile. Er ist aber auch verantwortlich für die geradezu magische Rasterzeit, die eigentlich immer einfach richtig genial ankommt - auch im Sound.
- 1kByte FarbRAM, als extra Chip und festgelegter Farbspeicher für den etwas flexibleren Bildschirminhalt. Weil es genau 16 Farben gibt, wird jedes einzelne Byte dieses winzigen Wunders nur zur Hälfte benutzt. Der Rest ist Geisterfrei.
- Die baugleichen Zwillinge CIA1 und CIA2, die für triviale Zeitfragen zuständig sind und vor allem die Eingabe und Ausgabe steuern. Auch darüber ließen sich endlose Geschichten erzählen.
- Ein 8kByte KERNAL ROM Chip, und das ist kein Rechtschreibfehler.
- Ein 4kByte BASIC ROM Chip, das ist das GPI, das General Programmers Interface, hab ich mir grad ausgedacht. Das Konzept von Usern existiert bei diesen klassischen Computern so einfach nicht. Wer sich an einen Computer setzt, WILL einfach programmieren. BASIC ist cool als General Interface, tatsächlich, es eignet sich für Rechenaufgaben besonders gut. Zum Programmieren von Sound ist es total ungeeignet.
- Der 4kByte Character ROM Chip beinhaltet zwei festgelegte Zeichensätze mit je 256 Zeichen. In älteren Büchern werden die noch als ASCII bezeichnet, heute werden sie zur Unterscheidung vom echten ASCII vor allem wegen ihrer zahlreichen Grafikzeichen im Homecomputerbereich PETSCII genannt. Es kann frei nach Geschmack einer der beiden Zeichensätze ausgewählt werden, schnelles Umschalten kein Problem, und natürlich lassen sich die Zeichen auch ins RAM kopieren und verändern.
- Eine PLA. Oft vergessen und ein bisschen unscheinbar organisiert sie auch die Adressierung des RAM und der übrigen Hardwarebausteine mit. Wer leise mitgezählt hat, kommt jetzt schon auf insgesamt 81kByte zu adressierende Bausteine, und ich verrate so nebenbei, dass für die internen Register von CIA, VIC II, SID und nochmal das FarbRAM ganz locker und großspurig zusätzlich 4kByte im Adressraum bereitgehalten werden. Dass das nicht ohne Jonglieren geht, zumal das BASIC ja von über 32kByte freien Speichers im Editor prahlt, wird langsam klarer. Hab ich gesagt, es wäre einfach? Vielleicht hab ich ja mal wieder Unsinn erzählt.
- und.. klar.. der SID Chip für Sound. Der wird ja hoffentlich noch richtig vorgestellt.
Das sind die berühmten Chips mit ihren trivialen Namen. Als kleiner Funfact, über die CPU läuft unsinnigerweise tatsächlich noch ein Tonbandgerät zur Datenspeicherung - die Datasette ist quasi der Blinddarm - etwas, das wirklich da ist, egal ob es da ist, obwohl es kein Mensch jemals wirklich braucht. Das Zeugnis dafür, wie wenig irgendwer damit gerechnet hatte, dass diese Maschine nach locker.. in Worten.. vierzig Jahren immernoch aktiv lebt, während ich das allerschärfste Gerät vom letzten Jahr schon für ein neues verschrottet habe.