P 500 (aka C128-40)


Klicken, um das Bild zu vergrößern (75kB) Der leider nie in den Handel gelangte Homecomputer vom Typ "Commodore P 500" ist ein Mitglied der CBM-II-Familie. Er besticht, ebenso wie seine Brüder CBM 6XX und CBM 7XX, durch sein preisgekröntes, von Ira Velinsky entworfenes, Design. Sein "Herz" besteht aus einem Prozessor vom Typ 6509. Er besitzt eine echte RS232-Schnittstelle und, als einziger Homecomputer von Commodore, einen parallelen IEEE488-Bus. Dieser Bus ermöglicht einen wesentlich schnelleren Datenfluß zwischen Rechner und Peripherie, als es der private Anwender bisher vom VC20 mit seiner langsamen seriellen Schnittstelle gewohnt war. Speicherkapazitäten bis zu 7,5MB (CBM D9090) und der Zugriff auf die gesamte Palette der "Business-Perpherie", einschließlich Stiftplotter und Eprombrenner; wurden dadurch wahr. Weiterhin verbirgt sich in seinem Inneren eine Weiterentwicklung des vom VC20 her bekannten Farb-Grafik-Chips, der VIC-II. Klicken, um das Bild zu vergrößern (140kB) Dieser erzeugt im Textmodus ein Bild von 25 Zeilen mit je 40 Zeichen, die in 16 verschiedenen Farben dargestellt werden können. Außerdem ist es im "Hochauflösungs-Modus" möglich, bis zu 64000 Bildpunkte einzeln anzusprechen. Dieser Chip zeichnet auch dafür verantwortlich, daß der Prozessor in dieser Maschine nur mit 1MHz getaktet wird. Alle anderen Maschinen der CBM-II-Serie hingegen werden mit einer Taktfrequenz von 2MHz betrieben, da der dort eingebaute, nur monochrom darstellende, Grafikchip vom Typ 6545 CRTC dieses zuläßt. Der RAM-Speicher hat eine Größe von 128kB, der aufgrund des nur 16 Bit breiten Adressbusses der 65XX-Prozessoren in zwei sogenannte "Bänke" von 64kB aufgeteilt ist. Ursprünglich war geplant, den Rechner in den 4 Speicherausbaustufen von 64kB (P505), 128kB (P510), 192kB (P515) und 256kB (P520) anzubieten. Da jedoch niemals ein Kunde die von ihm gewünschte Speichergröße auswählen durfte, sondern die wenigen existenten (echten) Geräte als Anschauungsobjekte an Computerläden und Fachzeitschriften-Verlage "verschenkt" wurden, besitzen alle bekannten Maschinen die Ausbaustufe von 128kB! Klicken, um das Bild zu vergrößern (67kB) Andere Ausbaustufen sind grundsätzlich umgerüstet und nur mit selbstgeschriebenen Routinen ansprechbar, da jede Speichergröße eine eigene Betriebssystem- und Basic-Version zum Betrieb benötigt. Weltweit ist jedoch nur die 128kB Version als original von Commodore gefertigte Version bekannt!
Von Aussen läßt sich der P500 von seinem Zwillingsbruder CBM6X0 nur durch die grüne Leuchtdiode und zwei zusätzliche Joystickports auf der Rückseite unterscheiden. Daß auf dem links gezeigten Bild der Rückseite weder Typenschild noch der Aufkleber mit Angaben zur Stärke der Sicherung und der benötigten Betriebsspannung zu finden sind, ist schnell erklärt: Es handelt sich bei meinem Gerät nicht um eines der sehr seltenen "Originale", sondern um einen aus Originalteilen bestehenden "Eigenbau". Die bereits gefertigten Einzelteile wurden nämlich, als Commodore die Markteinführung des P500 "kippte", an den Elektronikhändler "Völkner" abgegeben, der diese dann billig verkaufte.
Bei meinem Eigenbau habe ich versucht, (bis auf ein später angesprochenes Detail) den Originalzustand der ersten Geräte möglichst genau nachzubilden, jedoch sind nicht allzuviele Informationen darüber verfügbar. Klicken, um das Bild zu vergrößern (128kB) So ist mir beispielsweise nicht bekannt, ob das Schaltnetzteil der Originale wie bei diesem Exemplar an der Unterschale des Gehäuses oder, wie beim CBM6X0, am Deckel befestigt wurde.
Hier nun ein erster Blick in das Innere meines P500. Gut zu erkennen ist das goldfarbene, vollgekapselte Schaltnetzteil, das bei längerem Betrieb ständig mit thermischen Problemen zu kämpfen hat. Links vorne ist die Adapterplatine mit den Kernal- und Basic-Eproms der 2. Generation zu sehen. Leider besitze ich die Keramik-ROMs der ersten Generation nicht. Hinter dieser Adapterplatine ist die erste RAM-Bank zu erahnen. Klicken, um das Bild zu vergrößern (161kB) Die Bausteine mit Aufklebern, die sich weiter rechts auf der Platine befinden, sind die !zwei! PLAs und zwischen den Steckerleisten für Erweiterungen, wie z. B. ein geplantes Co-Prozessor-Board, sind die für den internen Maximalausbau benötigten restlichen 3 RAM-Bänke zu erkennen. Mit externen Erweiterungen sind insgesamt 960kB RAM möglich. Zusammen mit der, durch Cartridges vollbestückten, Systembank ergibt das einen, für damalige Zeiten satten, Adressraum von 1MB!
Auf dem nächsten Bild erkennt man die, für einen Homecomputer unverzichtbaren, übereinander angeordneten Joystickports. Die Steckerleiste vor den Joystickports ist der sogenannte "User Port", der bei diesem Rechnertyp allerdings nirgendwo nach aussen geführt ist. Der Sicherungshalter rechts daneben ist im Original nicht vorhanden, die Bohrung dafür ist normalerweise mit einer Kunststoffkappe verschlossen. Klicken, um das Bild zu vergrößern (214kB) Da sich die ursprüngliche Sicherung im Netzteil befindet, zum Wechseln derselben aber das Netzteil !komplett! zerlegt werden muß, habe ich mich zu diesem Schritt entschlossen.
Unter der Metallabschirmung rechts im Bild ist das Videoteil untergebracht, das auf dem nächsten Bild zusammen mit den umliegenden Chips ohne Abdeckung zu sehen ist. Dort sieht man, von rechts nach links, den Prozessor 6509, den bei allen CBM-II-Rechnern eingebauten Soundchip 6581 und, innerhalb der Metallabschirmung, den bereits angesprochenen VIC-II. Am linken Bildrand sind noch die, unter Anderem für die Game-Ports zuständige, CIA 6526 und eines der beiden Tri-Port-Interfaces 6525 zu erkennen. Dieses hier bedient den IEEE-488-Bus.
Klicken, um das Bild zu vergrößern (32kB) Solange man sich bei der Programmierung dieses Rechners auf das eingebaute Basic V4+ beschränkt, unterscheidet sich das Erstellen umfangreicher Programme nicht von der Programmierung der alten CBM-Modelle. Das Basic unterstützt, vom Anwender und Programmierer unbemerkt, den Zugriff auf den gesamten Benutzerspeicher von 128kB und den Textbildschirm. Will der Programmierer jedoch Routinen in Maschinencode oder gar "Sprites" und "hochauflösende" Grafik verwenden, wird er sehr schnell an seine Grenzen stoßen. Da in der Systembank (Bank $0F) nur !1kB! freies RAM existiert, lassen sich weder Sprites noch Grafikbildschirm problemlos realisieren. Da der VIC-II-Chip nur einen Bereich von 16kB "sieht", und sich der Bildschirm und die Spritedaten in dem gleichen 16kB großen Bereich befinden müssen, gibt es innerhalb des 64kB großen Adressraumes der CPU also genau 4 Möglichkeiten, diese "VIC-Bank" mit Hilfe der Bits #6 und #7 der Speicherstelle $DF02 zu positionieren. Es existiert aber in keinem dieser Bereiche innerhalb der Systembank genügend freies RAM, um Bildschirm UND Spritedaten zu speichern! Durch Löschen des Bits #6 in der Speicherstelle $DE06 kann man den VIC-II-Chip jedoch dazu veranlassen, nicht mehr auf die Systembank $0F, sondern auf die, eigentlich für den Basic-Code reservierte, Speicherbank $00 zuzugreifen. Durch Verändern des Zeigers auf die Obergrenze des Basic-Textes (Speicherstellen $2F und $30) schafft man sich reservierten Raum für Bildschirme, Spritedaten und Zeichensätze. Leider ist nun weder direktes Lesen, noch direktes Schreiben des Bildschirminhalts möglich. Hier setzt jedoch das schon erwähnte "Bankswitching" an. Der Wert in der Speicherstelle $01 repräsentiert die Nummer der Speicherbank auf die durch indirekte Zeropage-Adressierung lesend oder schreibend zugegriffen wird. Hier nun zum besseren Verständnis ein kleines Beispiel:
Nehmen wir an, wir haben den Beginn unseres Textbildschirms aus obengenannten Gründen nach $C000 in der Speicherbank $00 verlegt, und möchten in die linke obere Ecke des Bildschirms einen "Klammeraffen" setzen. Also coden wir z. B.:

LDA #$00 damit haben wir die Speicherbank $00 für die
STA $01 folgenden Lese- und Schreibzugriffe ausgewählt
STA $F0 dieser Befehl schreibt das Lo-Byte
LDA #$C0
STA $F1 und diese Befehlsfolge das Hi-Byte für die Indirekte Zeropage-Adressierung
LDY #$00 der Index wird gesetzt
TYA wir laden den Code für den "Klammeraffen"
STA ($F0) ,Y und schreiben ihn in das linke obere Eck unseres Bildschirms

Möchten wir nun ein Maschinenprogramm schreiben, dessen Größe das 1kB freien Speicherplatz in der Systembank ($0F) übersteigt, müssen wir dem Prozessor mitteilen, aus welcher Speicherbank er den Code holen soll. Dieses legen wir mit dem Inhalt der Speicherzelle $00 fest. Wenn wir z.B. den Wert #$01 hineinschreiben, holt der Prozessor ab diesem Zeitpunkt seine Instruktionen aus der Speicherbank $01. Da der Programcounter allerdings unverändert bleibt, müssen wir den Programmcode "synchronisieren", damit das Programm nicht ins "Leere" springt. Zusätzlich erschwert wird die Programmierung dieser Maschine durch die Tatsache, daß auch der Betriebssystemcode nicht mehr erreichbar ist, auch nicht bei den Interrupts!
Wir sehen also, der P500 besitzt eine reichlich merkwürdige Architektur, die den Maschinensprache-Programmierer zu völligem Umdenken zwingt.
Ein kleines, von Commodore zur Werbung eingesetztes, Demoprogramm steht >>>hier<<< zum Download zur Verfügung. Es zeigt abwechselnd verschiedene Text- und HiRes-Bildschirme. Leider funktioniert dieses Demoprogramm auf dem VICE-Emulator nur teilweise.
Ein weiteres, auf diesem Rechnertyp weitgehend unbekanntes, Kapitel ist die Interruptprogrammierung. Diese wird hauptsächlich zur Sounderzeugung und Joystickabfrage benötigt. Der Zeiger auf den IRQ befindet sich bei $0300 und $0301 und zeigt normalerweise auf die Routine ab $FBF8. Die für die Joystickabfrage zuständige CIA befindet sich, wie beim C64, ab Speicherstelle $DC00, jedoch ist die Belegung der Bits eine ganz Andere. Der Status der Feuerknöpfe wird durch die Bits #6 und #7 der Speicherstelle $DC00 angezeigt, während die unteren 4 Bits der Speicherstelle $DC01 die Richtung des Steuerknüppels #1 und, analog dazu, die oberen 4 Bits die des Steuerknüppels #2 repräsentieren.

Da das, was ich auf dieser Seite beschrieben habe, fast alles ist, was mir über diesen Rechnertyp bekannt ist, bitte ich jeden, der noch weitergehende (oder andere) Informationen besitzt, mir Diese im Interesse der "P500-Fangemeinde" zukommen zu lassen. Ich werde selbstverständlich die Namen der Helfer auf dieser Seite veröffentlichen!