Kommen wir nun zur zweiten Möglichkeit, den 1200-Baud-Fehler zu beheben. Diese Lösung ist ebenfalls softwaremäßig, den- noch hat sie einige Vorteile im Gegen- satz zu der vorherigen. Angenommen, näm- lich, Sie wollten gar nicht ein eigenes Terminalprogramm schreiben, sondern wollten Ihr bisher Gewohntes weiter be- nutzen, zumal dieses wahrscheinlich auch viel komfortabler ist, als es ein Selbstgeschriebenes wäre. In diesem Fall wäre dieser Lösungsweg der einfachste, wobei es allerdings auch zu Komplikati- onen kommen kann, doch will ich Ihnen den Lösungsweg erläutern. Ich hatte ja Anfangs groß und breit dar- gelegt, daß die Timertabelle im Betriebssystem einen falschen Wert für die Übertragungsgeschwindigkeit 1200 Baud hat. Warum also nicht diese Tabelle ändern, und zwar so, daß sie den rich- tigen Wert enthält. Nun, da stellt sich uns zunächst noch ein kleines Problem. Da sich diese Tabelle ja im ROM befin- det, können wir hier nicht so einfach einen anderen Wert hineinPOKEn, da der ja vom ROM garnicht angenommen würde. Also bleibt uns nichts anderes übrig, als das Betriebssystem-ROM in das unter ihm liegende RAM zu kopieren, und dort dann die gefragte Speicherzelle zu verändern. Wir müssen jetzt nur noch das Betriebssystem-ROM abschalten, damit das darunterliegende RAM für den Prozessor sichtbar wird, und er praktisch im "neuen" Betriebssystem arbeiten kann. Das geschieht ganz einfach durch folgen- den POKE-Befehl: POKE 1,53 Sollten Sie dies jedoch gleich so versu- chen, werden Sie ganz schön auf die Nase fallen, da der 64er jetzt höchstwahr- scheinlich mit einem letzten Lächeln auf den Lippen sich in die Abgründe eines Systemabsturzes begeben wird. Mit dem obigen POKE-Befehl haben wir nämlich nicht nur das Betriebssystem-ROM weggeblendet, sondern auch das BASIC- ROM. Da der C64 sich allerdings immer dort befindet, wenn er auf eine Eingabe Ihrerseits wartet, haben wir ihm also praktisch den Boden unter den Füßen weggezogen, weshalb er ganz einfach abgestürzt ist. Also müssen wir besagtes BASIC-ROM ebenfalls in das darunterlie- gende RAM umkopieren, wenn wir diesen Absturz vermeiden wollen. Jetzt dürfen wir POKEn ohne auf irgend- welche Schwierigkeiten zu stoßen. Wie wir die genannten Speicherbereiche umkopieren, wollen wir vorläufig einmal noch dahingestellt lassen, ich komme hierauf später noch einmal zurück. Vorläufig genügt es, zu wissen, daß wir nun das Betriebssystem im RAM stehen haben, von wo aus wir es nach Herzens- lust verändern können. Somit können wir auch den falschen Tabellenwert ganz einfach verändern. Schauen wir uns besagte Tabelle doch einfach einmal an: Speicherauszug des Betriebssystems ab dem Byte $E4EC (dez. 58604):
Hex. Dez. Inhalt(hex.) Wert(dez.) Baud -------------------------------------- $E4EC 58604 19 26 9753 50 $E4EE 58606 44 19 6468 75 $E4F0 58608 1A 11 4378 110 $E4F2 58610 E8 0D 3560 134.5 $E4F4 58612 70 0C 3184 150 $E4F6 58614 06 06 1542 300 $E4F8 58616 02 D1 736 600 $E4FA 58618 37 01 311 1200 $E4FC 58620 AE 00 174 1800 $E4FE 58622 69 00 105 2400
Hier wurden pro Zeile immer 2 Bytes gleichzeitig angegeben, da diese im LO- HI-Byteformat die Timerwerte ergeben, die für bestimmte Baudraten vonnöten sind. Wichtig für uns ist die drittletzte Zeile. Wie Ihnen vielleicht aufgefallen ist, steht hier als Timerwert die Zahl 311. Wir hatten allerdings berechnet, daß 309 der richtige Wert für 1200 Baud sein muß. Hier liegt also der Fehler. Damit wir diesen "ausbügeln" können, müssen wir also nur das LOW- und HIGH-Byte des Wertes 309 in die Stellen 58618 und 58619 POKEn. Die beiden Bytewerte hatten wir ja schon einmal berechnet, demnach sieht das also fol- gendermaßen aus:
POKE 58618,53
POKE 58619,1 Wobei wir uns den letzten POKE-Befehl auch sparen könnten, da in Speicherzelle 58619 ja sowieso schon der Wert 1 steht. Nach dieser Änderung wird unser 64er sich nun den richtigen Wert für 1200 Baud aus der Tabelle holen, sollte ein 1200-Baud-Kanal geöffnet werden. Sie können jetzt also ruhig Ihr gewohntes Terminalprogramm laden und es benutzen. Kommen wir noch zum Umkopieren der Speicherbereiche. Benutzen Sie hierzu ein Monitorprogramm, wie beispielsweise den SMON. Bei diesem Monitor können Sie mit folgenden beiden Befehlen unsere Speicherbereiche kopieren:
w a000c000a000 w e000ffffe000
Verlassen Sie nun den SMON und kopieren Sie von BASIC aus noch die letzte Spei- cherzelle des Speichers, da der Monitor diese nicht kopiert hat (das liegt an der Art, mit der die Kopierparameter an- gegeben werden) mit folgendem Befehl:
POKE 65535,PEEK(65535)
Schalten Sie nun die ROMs ab mit dem oben genannten POKE-Befehl. Sollte Ihnen das allerdings zuviel Arbeit sein, so können Sie ebenso das auf der Rückseite abgespeicherte Pro- gramm "CHANGETAB" benutzen. Es erledigt die ganze Änderung der Tabelle schon für Sie. Ich möchte Ihnen jetzt allerdings nicht verschweigen, daß dieser Lösungsweg auch seine Nachteile hat. Es könnte nämlich sein, daß Ihr Terminalprogramm gerade die Speicherbereiche, in die wir vorhin die ROMs kopiert haben, für sich selbst beansprucht. Etwa als Speicherplatz für das ASCII-Protokoll, weswegen es wahr- scheinlich von selbst auch wieder auf das Betriebssystem-ROM umschalten wird. Für diesen Fall bleibt uns allerdings noch die dritte und letzte Möglichkeit, die wirklich absolut zuverlässig und endgültig ist. Da hier unser Problem jedoch hardwaremäßig gelöst wird, ist sie mit nicht wenig Aufwand verbunden. Hardwaremäßig heißt, daß wir den ROM- Chip, in dem das Betriebssystem gespei- chert ist, ganz einfach gegen einen neuen auswechseln werden. Dieser neue ROM-Chip wird sich von dem alten in nur dieser einen Speicherzelle unterschei- den, in der 53 stehen sollte anstatt 55. Wie realisiert man das Ganze nun? Als erstes benötigen wir einmal ein korrigiertes Betriebssystem, das wir dann auf ein EPROM brennen wollen. Um dieses Problem zu lösen, habe ich Ihnen ein kleines Programm geschrieben, daß, wenn es mit RUN gestartet wird, die Brenndaten für einen EPROM-Brenner (oder Eprommer) auf Diskette schreibt. Es heißt "MAKEKERNEL" und befindet sich auf der Rückseite dieser MAGIC DISK 64. Es speichert das geänderte Betriebssys- tem unter dem Namen "NEWKERNEL" auf die eingelegte Diskette. Achten Sie bitte darauf, daß Sie noch mindestens 33 Blocks auf dieser Diskette frei haben. Als Nächstes sollten Sie sich ein EPROM mit der Bezeichnung 2764 kaufen. Es sollte eigentlich in jedem normal be- stückten Elektronikfachgeschäft erhält- lich sein zu einem Preis von ca. 9-15 DM. Dann brauchen Sie noch einen Eprommer. Mit ihm brennen Sie nun das neue Be- triebssystem ("NEWKERNEL") auf das 2764- Eprom. Nun benötigen Sie einen Adaptersockel. Das neu gebrannte EPROM und das alte, das von Commodore ausgeliefert wird und sich schon in Ihrem 64er befindet, haben nämlich Unterschiede, was die Belegung der Pins angeht. Außerdem hat das alte CBM-Kernel-ROM nur 24 Pins, im Gegensatz zum 2764, der 28 davon aufweist. Diesen Adaptersockel können Sie sich mit Hilfe von ein paar Zentimetern Draht, zwei Präzisionssockeln, einem bißchen Lötzinn und einem Lötkolben zusammenbasteln. Wenn Sie hierin nicht so bewandert sind, sollten Sie sich vielleicht an jemanden Erfahrenen wenden. Sie können beim Zu- sammenlöten im Prinzip nicht viel kaputt machen, doch könnten die einzelnen Pins falsch verbunden worden sein, weshalb es Ihnen passieren kann, daß Ihr 64er nach- her beim Einstecken des neuen ROMs in Flammen aufgeht (ich gebe zu - das ist etwas übertrieben mit den Flammen!).