So,
im Anhang ist ein Bild. Heute von der Vicky geschossen, kein Fake ^^
Gut, ein bisschen musste ich nachhelfen, und der "Effekt" ist auch nicht wirklich von Dauer. Aber der Reihe nach.
Zuerst mal habe ich festgestellt, dass der Befehl 132c.com den 132-Zeichen-Modus nur vorbereitet, aber nicht einschaltet. Im Wesentlichen wird der spezielle Zeichensatz und vermutlich ein Stück Programmcode geladen.
Mit dem Befehl 132on.com wird der Modus dann umgeschaltet, und als ich das probiert habe, passierte folgendes: Der CRTC wurde umprogrammiert, das Raster war auf einmal 50*132, der Cursor klein, und auf dem Bildschirm erschien ein lustiges Durcheinander von Zeichen und Bitmustern.
Für mich war das ein weiteres Indiz, dass der 6845 vermutlich in Ordnung ist - die fehlende Umschaltung, die ich immer vermisst hatte, hatte es einfach noch nie gegeben.
Und außerdem wurde mir klar, dass das System im normalen Textmodus (25*80) offenbar zufällig auf den zusätzlichen Zeichensatz des 132-Modus gestoßen war, und da eben nicht "passend" (das wär auch des Zufalls zuviel gewesen).
Und offenbar wird der kleine Zeichensatz - obwohl für die 6*8 Pixel locker 8 Byte pro Zeichen gereicht hätten - wieder in je 16 Worten abgelegt, so dass der "Zeichenversatz" immer gleich blieb und auch mit dem 10*16-Raster nur eines der kleinen Zeichen dargestellt wurde.
Die nächste Aufgabe war nun die Suche des Zeichensatzes im RAM. Dazu habe ich per 132c.com den zusätzlichen Zeichensatz geladen und dann wieder über die serielle Verbindung einen kompletten Speicherdump der ersten 128 KB gemacht. In diesem Dump habe ich die Zeichen gesucht und gefunden: Die Klammer, die immer statt eines Blanks gezeichnet wurde, liegt von 0xD088 bis 0xD0A7. Allerdings fehlte unten ja immer eine Pixelreihe, und oben waren Pixel eines anderen Buchstabens zu erkennen, so dass offensichtlich die Bytes an den Adressen 0xD080 bis 0xD09F gelesen werden.
Das "echte" Bitmuster des Blanks liegt dagegen von 0x1080 bis 0x109F. Ergo sind da zwei Bits gesetzt, die nicht gesetzt sein dürften:
0001 0000 1000 0000b - erwartete Startadresse des Zeichenmusters
1101 0000 1000 0000b - tatsächliche Startadresse
Die unteren 5 Bits dieser Adresse werden durch die Rasterzeilenadressbits des CRTC geliefert, die oberen Bits dagegen aus dem Bildschirmspeicher (Refresh Memory/LUT - auf jeden Fall das SRAM), genauer aus dessen Datenausgängen. Da dieser Speicherbereich beim Auslesen korrekte Werte anzeigt, werden diese beiden Bits offenbar auf dem Weg von den Datenausgängen des SRAM zu den Adressleitungen des Hauptspeichers verändert. Das ist jetzt ein überschaubarer Bereich, den ich mir als nächstes mit dem Oszilloskop anschauen werde.
Um meine Theorie zu prüfen, habe ich ein Miniprogramm geschrieben, dass den Zeichensatz von seiner "korrekten" Position an die "erwartete" Position im Speicher kopiert. Original: 0x00c80 - 0x02c7f, Kopie: 0x0cc80 - 0x0ec7f
Und danach habe ich den Screenshot angefertigt
Natürlich ist das nicht von Dauer, weil das nächstbeste Programm beim Laden diesen Zeichensatz wieder überschreibt. Aber die eingebauten DOS-Befehle kann ich problemlos absetzen, und mir geht es zunächst nur ums Prinzip.
Jetzt hoffe ich nur, dass die Adress- und Buslogik nicht auch in dem Fujitsu-Käfer steckt. Eigentlich hat es auf dem Board genügend Decoder/Multiplexer etc.
Und vielleicht wiord dann auch endlich gelötet