Contact us
Leave a message

Alte EPROMS, neu gebrannt

Die 4 kB-ROMs, die im PET verbaut sind, entsprechen von ihrer Pin-Belegung her leider dem TMS2532-EPROM, nicht dem heute einfacher zu erhaltenden und zu programmierenden 2732-Chip.Natürlich gibt es Adapter-Platinen, mittels derer auch 2732er in einem PET-Sockel funktionieren, aber schön sieht das ja nicht aus -- wie man z. B. in meiner Reparatur-Dokumentation sehen kann.

Nun lassen sich ja durchaus noch (gebrauchte) 2532er auftreiben. Leider benötigen diese aber eine Programmierspannung von 25 V -- was viele der günstigeren aktuellen Chip-Programmiergeräte aber nicht bereitstellen können. Eine Ausnahme stellt der Xgecu T48 dar, der 25 V zu liefern vermag, den TMS2532 allerdings leider nicht als unterstützen Chip aufführt.

Sehr wohl unterstützt ist allerdings der TMS2732A. Mittels eines Adapters sollte es doch möglich sein, dem Brenner vorzugaukeln, dass da ein solcher Chip im Sockel sitzt statt eines 2532? Wenn man dann noch die Programmierspannung explizit auf 25 V setzt (der 2732 benötigt nur 21 V), könnte man Glück haben...

Einen Keil in den PET treiben

Akut wurde die Frage nach der Machbarkeit dieses Vorgehens, als ich beschloss, es wäre doch schön, immer ein DOS-Wedge parat zu haben, um z. B. beim Anzeigen eines Directory-Listings nicht immer das aktuelle BASIC-Programm zu verlieren (wie es beim BASIC 2 der 3000er-Serie ja leider noch der Fall ist). Auf zimmers.net -- dem Archiv für 8-Bit-Commodore-Systeme -- fand sich ein Disk-Image mit Wedge-Code, der auch als ROM bei $9000 oder $a000 eingesetzt werden kann.

Als Adapter kam hier ein 2532(Sockel)-zu-2732(Chip)-Adapter zur Anwendung, der auf einer großen Internet-Auktionsplattform von einem spanischen Anbieter eingestellt worden war. Der Adapter kam in Einzelteilen zum selbst zusammenlöten -- wobei ich ihn "umgekehrt" zusammengebaut habe, d. h. mit den Stiftleisten in 2732- und dem Sockel für die Aufnahme des Chips in 2532-Position.

Der eigentliche Brenvorgang erfolgte mittels der fabehlaften minipro-Software von David Griffith, die den Betrieb des T48 unter Linux ermöglicht. Der konkrete Aufruf lautetete:

minipro -p 'TMS2732A@DIP24' -w /path/to/rom.bin -o vpp=25

Es war fast zu schön, um wahr zu sein -- der Brennvorgang war gleich beim ersten Versuch erfolgreich, und das Wedge konnte per SYS 9*4096 gestartet werden:

Ich will mehr!

Nun waren aber Begehrlichkeiten geweckt! Zum fand ich zimmers.net-Archiv ich ein ROM-Image für einen gegenüber dem eingebauten TIM deutlich erweiterten Maschinensprache-Monitor (Micromon, $a000), der natürlich auch noch in den PET musste. Zum anderen wäre es cool, wenn a) das Wedge gleich nach dem Einschalten verfügbar wäre, ohne es per SYS 9*4096 aktivieren zu müssen, und b) bei einem BRK gleich der Micromon statt des TIM anspringen würde.

Das erforderte allerdings einige Änderungen am eigentlichen PET-Start-Code, der sich im Wesentlichen im KERNAL-ROM ab $E000 befindet. Also musste noch eine gepatchte Version dieses ROMs gebrannt werden, die an einer geeigneten Stelle einen Sprung in den neuen Wedge- und Micromon-Initialisierungscode vornimmt (der seine Heimat übrigens ebenfalls im Wedge-ROM fand (ab $9c00), da dort noch massig Platz vorhanden war). Es reichte dabei übrigens nicht, die Original-Initialisierungsroutinen der beiden Tools aufzurufen, da diese ja einen Aktivierung von der BASIC-Kommandozeile erwarteten und sich bei direktem Anspringen während des Boot-Vorgangs verschluckten. Stattdessen finden sich nun ab $9c00 im Wesentlichen Kopien der beiden Routinen mit kleineren Anpassungen, um sie Boot-Kompatibel zu machen. (Außerdem konnte ich es nicht lassen, den Startup-Sound der späteren PET-Reihen noch in den Startvorgang aufzunehmen ;)

Nun zeigte sich, dass mindestens ein Programm -- nämlich die grandiose BACK-TO-THE-PET-Demo -- mit dem von vornherein aktivierten Micromon nicht laufen wollte. Daher habe ich noch die Möglichkeit eingebaut, wahlweise eines der oder beide neuen ROMS beim Einschalten per Tastendruck zu deaktivieren und kommuniziere das in einer erweiterten Startmeldung. Den Code dazu gibt's in meinem entsprechenden GitLab-Projekt.