Kommen wir nun zur zweiten Möglichkeit, den 1200- Baud-Fehler zu beheben. Diese
Lösung ist ebenfalls softwaremäßig, dennoch hat sie einige Vorteile im Gegensatz zu der vorherigen. Angenommen, nämlich, Sie wollten gar nicht ein eigenes
Terminalprogramm schreiben, sondern
wollten Ihr bisher Gewohntes weiter benutzen, 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 Komplikationen kommen kann, doch will ich Ihnen
den Lösungsweg erläutern.
Ich hatte ja Anfangs groß und breit dargelegt, 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 richtigen Wert enthält. Nun, da stellt sich
uns zunächst noch ein kleines Problem.
Da sich diese Tabelle ja im ROM befindet, 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 folgenden POKE-Befehl:
POKE 1,53
Sollten Sie dies jedoch gleich so versuchen, werden Sie ganz schön auf die Nase
fallen, da der 64 er jetzt höchstwahrscheinlich 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 darunterliegende RAM umkopieren, wenn wir diesen
Absturz vermeiden wollen.
Jetzt dürfen wir POKEn ohne auf irgendwelche 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 Herzenslust 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 $ E4 EC ( 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 LOWund
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 folgendermaß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 64 er
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 Speicherzelle des Speichers, da der Monitor
diese nicht kopiert hat ( das liegt an
der Art, mit der die Kopierparameter angegeben 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 Programm " 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 wahrscheinlich 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 gespeichert ist, ganz einfach gegen einen
neuen auswechseln werden. Dieser neue
ROM-Chip wird sich von dem alten in nur
dieser einen Speicherzelle unterscheiden, 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 Betriebssystem 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 bestückten Elektronikfachgeschäft erhältlich sein zu einem Preis von ca.9-15 DM.
Dann brauchen Sie noch einen Eprommer.
Mit ihm brennen Sie nun das neue Betriebssystem (" 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 64 er 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 Zusammenlöten im Prinzip nicht viel kaputt
machen, doch könnten die einzelnen Pins
falsch verbunden worden sein, weshalb es
Ihnen passieren kann, daß Ihr 64 er nachher beim Einstecken des neuen ROMs in
Flammen aufgeht ( ich gebe zu - das ist
etwas übertrieben mit den Flammen!) .