Nachdem im letzten Teil dieser Serie über Multiplattform-Programmierung die über die gemeinsame Basis BASIC 2.0 hinausgehenden, vergleichbaren Eigenschaften der Commodore-Rechner im Mittelpunkt standen und Wege gesucht wurden, diese auf den unterschiedlichen Geräten einheitlich anzusprechen, geht es diesmal um Beispiele für die Nutzung spezifischer, individueller Eigenschaften. Diese zu kennen und zu berücksichtigen, ist oft hilfreich und in manchen Fäller sogar erforderlich. Auch der CBM-Checker macht Gebrauch davon.
Einige dieser Besonderheiten beziehen sich auf Befehle aus höheren BASIC-Versionen (BASIC 4.0, 4.7, 3.5 und 7.0). In diesen Fällen ist es erforderlich, dass die betroffenen Programmzeilen nur vom passenden Rechnertyp abgearbeitet werden. Erschwerend kommt hinzu, dass die Token, also die Verschlüsselung der zusätzlichen Befehle, für die BASIC-Versionen 4.x und 3.5/7.0 unterschiedlich und daher inkompatibel sind. In einer späteren Folge werden wir uns mit einem solchen Fall noch beschäftigen müssen. Hier aber sollen nur das Befehlspaar FAST
und SLOW
und das Kommando GRAPHIC
0
des C128 betrachtet werden.
Commodore 128: Die Kombination SLOW:GRAPHIC
0
findet sich auch im Programm CBM-Checker. Sie soll sicherstellen, dass das Programm, wenn es im 80-Zeichen-Modus gestartet wurde, in den 40-Zeichen-FAST
in den 2 Mhz-
Andere Besonderheiten beziehen sich auf spezielle Zeropage bzw. I/O-Adressen. Einige davon sind uns schon im Programm CBM-Checker begegnet. Hier sollen nun die und eine weitere näher betrachtet werden.
CBM 4001/8001 Series: Mittels PEEK(224)
unterschiedet man zwischen einem CBM-Rechner mit 40-Zeichen (PEEK(224)<>0) und mit 80-Zeichen (PEEK(224)=0) Bildschirmbreite. Diese Information kann genutzt werden, um ein spezielles Programm (CBM4032 ANY HZ) nachzuladen, das die erforderlichen Einstellungen vornimmt, um den Bildschirm in den 40-Zeichen-Betrieb umzustellen und diese Änderung in das Betriebssystem einzubinden. Durch diesen Trick können viele Spiele für einen CBM 40xx auch auf einem CBM 80xx laufen.
PET 2001 / CBM 3001 Series: Ein bekanntes Beispiel für systemspezifische Eigenschaften ist der Killer-Poke, auch Fastprint-Poke genannt. Diesen sollte man aus bekannten Gründen nie auf CBM-Rechner mit dem neuen Universalboard (board#3) und CRTC-Chip anwenden. Andererseits laufen ältere CBM-Rechner mit altem Board (board#2) ohne ein gesetztes Bit 5 an Adresse 59458 ($E842; VIA) wie eine Schnecke. Das fragliche Bit wird mittels POKE59458,PEEK(59458)OR32
gesetzt.
Killer poke! (PET 2001): Ein ziemlich sinnfreies Video, aber ein schöner Totenkopf
PET 2001: Ein paar hübsche Blinkeffekte aber auch ein sauberes „Umschalten“ von Bildschirminhalten erhält man mit dem Blank-Poke (Adresse 59409, Bit 3; $E811; PIA 1) . Um den Bildschirm auszuschalten verwendet man POKE59409,52
mit POKE59409,60
läßt sich der Bildschirm wieder einschalten. Dieser POKE-Befehl funktioniert nur bei einem PET 2001 (board#1) und schaltet den Bildschirm komplett ab. Das Programm Distichon nutzt diesen Effekt, um unbemerkt die Darstellung des Einleitungstexts korrigieren zu können. Bekanntlich sind beim PET 2001 im Zeichensatz Groß- und Kleinschriftzeichen vertauscht. Dies wird in besagtem Programm unsichtbar durch eine kleine Assemblerroutine korrigiert.
PET/CBM: Während man bei den farbfähigen Commodore-Rechnern zwischen den zwei implementierten Zeichensätzen bequem über Steuerzeichen umschalten kann [Groß-/Kleinschrift: PRINT CHR$(14)
; Grafikzeichen: PRINT CHR$(142)
], muss dies bei PET/CBM mittels POKE-Befehl bewerkstelligt werden. POKE59468,14
aktiviert Groß-/Kleinschrift und POKE59468,12
den Grafikzeichensatz.
Plus/4, C16, C116: Bedingt durch die Speicherkonfiguration überlagern sich RAM-Bank und ROM-Bank. Da anders als beim C128 kein BANK-Befehl verfügbar ist, wird über Adresse 1177 ($0499) gesteuert, auf welche Speicherbank ein PEEK-Befehl zugreift. Nach einem POKE1177,62
liest PEEK aus dem ROM, nach POKE1177,63
(Grundeinstellung) aus dem RAM. CBM-Checker benutzt diesen Trick, um an den für die Systemerkennung benötigten IRQ-Vektor zu kommen.
Mit den gesammelten Informationen sollte es jetzt eigentlich möglich sein, ein Multiplattform-
Nachtrag (22.12.2012) : Zusammenfassung
Funktion | Computer | Code |
Umschaltung auf 40-Zeichen | Commodore 128 | SLOW:GRAPHIC 0 |
Test auf 40/80-Zeichen | CBM 4001/8001 | PEEK(224) [0:80 / >0:40 Zeichen] |
Killer-Poke / Fastprint-Poke | PET 2001/CBM 3001 | POKE59458,PEEK(59458)OR32 |
Blank-Poke (Bildschirm aus/an) | PET 2001 | POKE59409,52 / POKE59409,60 |
Zeichensatzumschaltung (Kleinschrift/Grafik) |
PET/CBM | POKE59468,14 / POKE59468,12 |
Speicherzugriff (PEEK auf ROM/RAM) | Plus/4, C16, C116 | POKE1177,62 / POKE1177,63 |
Hallo Leute,
schöne Grüße aus Deutschland (NRW). Bin froh, dass es noch 128er-Fans gibt. Sind echt selten geworden. Habe selbst noch einen in meiner Sammlung. Ist sogar noch angeschlossen. Nur der Monitor hat einen weg und muss unbedingt repariert werden. Weiß nur nicht, welche Werkstatt das noch kann.
Viele liebe Grüße und weiterhin viel Erfolg mit diesem Blog. Werde jetzt regelmäßíg hier rein schauen.
Gruß!
Feuerball03
Hallo Feuerball03!
Freut mich, dass Dir der Blog gefällt.
Ja, wir sind eine aussterbende Spezies, aber Todgesagte leben länger 😉
Wenn Du aus NRW kommst, lebst Du ja vielleicht in der Nähe von Bochum/Dortmund, dann kannst Du ja mal beim Dienstagstreff vorbeischauen, die kennen sich auch mit Monitoren aus.
Alternativen zu einem 1901 oder 1084 sind Konverter für VGA-Monitore. Dazu findet man hier (und hier) auch Infos.
Gruß WTE