Adressbereich | A2:A1:A0 - aktiver Ausgang Y | verbunden mit |
---|---|---|
0x0000..0x000F | 000: Y0 | U5 - Adressdecoder 0x0008..0x000F |
0x0010..0x001F | 100: Y4 | RS423/IEEE488 PLKPb13/PLIFb13 |
0x0020..0x002F | 010: Y2 | 0x0020..0x0027: DAC CS1 0x0028..0x002F: DAC CS2 |
0x0030..0x003F | 110: Y6 | ACO CS3 |
0x0040..0x004F | 001: Y1 | U4 - Parallelports |
0x0050..0x005F | 101: Y5 | RTC (U5) der Option "Processor Interface" U19/A2 erzeugt aus Y5 einen Low-Impuls für CS der RTC |
0x0060..0x006F | 011: Y3 | Keypad/Plotter-UART (U18) |
0x0070..0x007F | 111: Y7 | CS0 |
Auf dem Mainboard ist dazu eine UART (U18: R6551), die Daten der Keypad-Option empfangen und Daten an den Plotter senden kann. RQST wird im Schaltplan auch als CTS bezeichnet, ist am R6551 allerdings mit DSR verbunden, da darüber auch die Erkennung eines installierten Plotters läuft - CTS ist an der UART dauerhaft '0'.
Die Keypad-Daten gelangen über PLKBa15 bzw. PLIFa15 zur UART. Die Erkennung der Keypad-Option läuft über das Signal an PLKBb11 bzw. PLIFb11, das über R18 (1M) nach Masse gezogen ist: U31 bildet einen Fensterdiskriminator, der über R15 (3k9 nach +5V), R16 (2k7) und R17 (3k9 nach Masse) programmiert ist. Nur wenn die Spannung innerhalb des Bereichs [1,86V..3,14V] liegt, ist DCD auf '1' (was eigentlich umgekehrt sein müsste). In der Option ist b11 mit 3k3 nach b4 (CONBIAS) verbunden.
Der R6551 liegt im IO-Bereich 0x0000..0x007F und wird durch Y3 von U6 (MC74HC138N) auf den Adressbereich 0x0060..0x006F dekodiert, die untersten Adressbits A[1:0] werden auf RS[1:0] abgebildet. In der Firmware werden 0x0060 bis 0x0063 benutzt.
Ab 3:0x5BED erfolgt der Aufruf der Konfigurationsroutine in 0xDEB7 mit dem Parameter 0x000F in Register D. Darin werden die übergebenen Parameter für Baudrate (0x014A) und Parity (0x014B) auf dem Stack überschrieben (ab 0xDF08) mit Baud=7 (entspricht 300 Baud) und Parity=4 (keine Parität). Eine weitere Funktion (0xE715), ruft dann jeweils Unterfunktionen auf, um die Parameter in die UART zu übertragen. Der Baudratenwert wird dabei in der Unterfunktion 0xE2E9 gegen eine Tabelle 0xE354 mit 16 erlaubten Werten geprüft, die aber nur die Werte 1 bis 9 enthält, was Baudraten zwischen 50 und 1800 Baud erlaubt. Parity wird in 0xE384 programmiert.
Die höchsten möglichen Baudraten der UART sind 19200 (SBR=0xF) und 115200 (SBR=0x0). Um diese einzustellen gibt es mehrere Möglichkeiten des Patchens:
Anmerkung 0: bei einem programmierten EPROM kann ohne vorheriges Löschen der Inhalt der Adresse 0x630D auf A7 geändert werden (für 115200 Baud).
Anmerkung 1: die Änderung der Baudrate betrifft ebenfalls das Keypad. Die meisten Bytes werden beim Plotvorgang alle 1ms gesendet, d.h. 19200 Baud sind ausreichend, mit 115200 wird nur ca. 16% schneller übertragen (19s statt 22s für 4 Kanäle).
Anmerkung 2: U2 (32kB) ist in den Adressbereich 0x8000..0xFFFF gemappt, U29 (64kB) wird in 4 Pages (0 bis 3) in den Bereich 0x4000..0x7FFF gemappt.
Vermutung: beim Einschalten wird über U2 eine Prüfsumme gebildet und mit der im RAM gespeicherten Prüfsumme verglichen. Stimmen diese nicht überein werden alle Werte auf Voreinstellung zurückgesetzt und kalibriert - das passiert also wenn der Speicher nicht gepuffert war oder andere ROMs eingebaut worden sind.
Wem die Federn, das Papier oder ein passendes IEEE-488- oder RS-423-Modul zum Datenexport fehlt, kann die 600baud-Plotter-Daten mit dem Online-Konverter "Screen Plotter 104-zu-SVG" (javascript) in eine Vektorgrafik wandeln. Die Plotterdaten müssen dazu mit einem TTL-RS232-USB-Adapter eingelesen werden (600bps 8N1 mit RTS/CTS).
Der Plotter ist über eine serielle Verbindung mit dem Oszi verbunden, wobei über zwei Leitungen DATA und RQST auf 5V-TTL-Pegel kommuniziert wird.
RQST ist das Bereitschaftssignal des Plotters, vergleichbar mit DTR. Auf Osziseite kann der RQST-Eingang als CTS gesehen werden. Beim Einschalten prüft das Oszi den Pegel von RQST: ist dieser '0', wird der interne Plotter als installiert angenommen. Solange der Plotter bereit ist ein Datenbyte zu empfangen, hält er RQST auf '0'. Während des Startbits wird RQST auf '1' gesetzt, bei Bereitschaft wird es während des Stopbits wieder auf '0' zurückgesetzt.
Über die DATA-Leitung werden die seriellen Daten mit 600 Baud übertragen. Nach dem Startbit folgen 8 Datenbits und ein Stopbit.
Die Daten vom Oszi können mit einem TTL-RS232-USB-Adapter aufgezeichnet werden (RQST auf '0' halten oder mit DTR verbinden).
Der Plotter kann auch direkt am USB-Port mit einem TTL-RS232-USB-Adapter betrieben werden (RQST mit CTS verbinden).
Befehle (soweit herausgefunden):
Leerer Plot, nur Raster und Beschriftung:
0x12
S1 : Schriftgröße 1
Q1 : Schrift entlang X-Achse
I
M0,-512 : 512 Zeilen vorspulen
I : Nullen
M0,-400 : 400 Zeilen vorspulen
L0 : durchgehende Linie
C0
H : Home = M0,0
D448,0 : linie >(448,0) : Tracebereich?
D448,526 : linie >(448,526)
D0,526 : linie >(0,526)
D0,0 : linie >(0,0)
Hier würden die Kanal-Plots sein
C3
L3 : 10 vertikale Linien 3gepunktet des X-Rasters der Höhe 400 im Abstand 50
M24,12
D424,12 : gepunktete line(24,12)>(424,12)
M424,62
D24,62 : line(24,62)<(424,62)
M24,112
D424,112 : line(24,112)>(424,112)
M424,162
D24,162 : line(24,162)<(424,162)
M24,212
D424,212 : line(24,212)>(424,212)
M424,262 : Y-Achse
X1,-10,40 : Teilstriche der Y-Achse? 40mal, dabei um -10 verschieben?
L3
M24,312
D424,312 : line(24,312)>(424,312)
M424,362
D24,362 : line(24,362)<(424,362)
M24,412
D424,412 : line(24,412)>(424,412)
M424,462
D24,462 : line(24,462)<(424,462)
M24,512
D424,512 : line(24,512)>(424,512)
M24,512 : 8 horizontale Linien des Y-Rasters der Breite 500 im Abstand 50
D24,12 : line(24,12)<(24,512)
M74,12
D74,512 : line(74,12)>(74,512)
M124,512
D124,12 : line(124,12)<(124,512)
M174,12
D174,512 : line(174,12)>(174,512)
M224,512 : X-Achse
X0,-10,50 : Teilstriche der X-Achse? 50mal, dabei um -10 verschieben?
L3
M274,12
D274,512 : line(274,12)>(274,512)
M324,512
D324,12 : line(324,12)<(324,512)
M374,12
D374,512 : line(374,12)>(374,512)
M424,512
D424,12 : line(424,12)<(424,512)
Hier würden die ?Cursor-Plots? sein
M452,-60
C0
PDATE:Feb 24/18
L0
M450,-55
D450,-228 : line(450,-55)-(450,-228)
M422,-60
PTIME:09:57:56
M0,-390
A
Mit der Steckbrücke LK1 wird die Plusleitung des Akkus aufgetrennt.
Die Jahreszahl wird ab 1984 gezählt, wobei ein Datum des Jahres 1984 zu fehlerhafter Speicherung führt.
Die Busanbindung erfolgt über BA3..BA0 und BD3..BD0, sowie /CS aus dem Bereich 0x0050..0x005F.
Lt. AN-365 sollte die Anbindung beim 6802 (als nicht-Microbus-System) so aussehen:
a) b)
RD und WR werden wie in b) erzeugt (U6c wird als Invertierer genutzt), CS wird aus VMA (Valid Memory Address) erzeugt, was ähnlich a) aus E|Q (U13a), also nicht direkt aus Φ2 erzeugt wird (Φ2 entspricht beim 6808 der E-Clock: die steigende Flanke zeigt stabile Daten an; die steigende Flanke an Q zeigt eine gültige Adresse an und kommt ca. einen halben Takt vor E):
Zeit | Q | E | VMA | |
---|---|---|---|---|
0.0 | 0 | 0 | 1 | |
0.5 | 1 | 0 | 0 | Adresse gültig |
1.0 | 1 | 1 | 0 | Schreiben: Daten sind gültig |
1.5 | 0 | 1 | 0 | |
2.0 | 0 | 0 | 1 | Lesen: Daten gelatched |
Beim Zugriff auf die RTC wird auch MDRY aktiviert.
Die 24-Stunden-Einstellung wird (im Menü "Set Time") entweder ungewollt überschrieben oder der IC verliert die Einstellung und verbleibt im 12-Stunden-Modus. Dadurch werden die Zeiten ab 13 Uhr falsch gespeichert und weitergezählt, Stunden mit 2 in der Zehnerstelle werden auf 0 zurückgesetzt. Dies wird auch beschrieben im Thread "Gould 1604 waveform processor", konkret wurde das in der Electronic Times vom 04.10.1990 beschrieben [Report of Nat Semi clock chip flaw]:
Electronics Times (4 Oct, front page) reports that National Semiconductor's real-time clock chip (part number MM58274B) "has a tendency to switch from a 24hr clock to a 12hr clock when subjected to electronic noise ..".
Ich habe den MM58274BN durch den "aktuellen" MM58274CN ersetzt, seitdem läuft die Uhr richtig.
Reproduzierbar:
Ablauf: