Hello, Guest the thread was called616 times and contains 2 replays

last post from hoogo at the

Die 2 überzähligen Leitungen des Parallelkabels

  • DAs übliche Parallelkabel zwischen C64 und 1541 hat ja 10 Leitungen, es verbindet nicht nur die beiden 8Bit-Ports, sondern auch noch CA2(1541) mit FLAG2(C64) und CB1(1541) mit PC2(C64).


    Nach allerlei Gewühle habe ich über CA2 herausgefunden, daß es die Handshake-Leitung für den Parallelport ist und man wohl in Bit4/$DC0D angezeigt bekommt, daß auf Floppy-Seite Daten geschrieben wurden. Ich bin bisher davon ausgegangen, daß man den Handshake selber über eine Leitung des seriellen Busses stricken muß.


    Aber über die andere Verbindung habe ich mal gar nichts. Weder habe ich verstanden, was CB1 eigentlich macht (Handshake für die Leitungen, die für den seriellen Bus verwendet wurden? Ausgang für das Schieberegister?), noch habe ich etwas über PC2 herausgefunden, außer, daß es eine Leitung der CIA2 ist.


    Was fängt man mit den Dingern an?

  • Na dann will ich mich mal versuchen ob ich die Funktionsweise der Handshake Signale noch hinbekomme ;)


    Zuerst mal ja, mit den 10 Leitungen des Parallelkabels ist ein relativ bequemer Handshake Betrieb möglich ohne daß der serielle Bus benötigt wird.


    Das Prinzip des Handshake Betriebs zwischen C64 und Floppy ist etwas trickreich.
    Auf beiden Seiten gibt es Ports, auf die 8 Bits gelesen oder geschrieben werden können (8 Leitungen). Eine weitere Leitung vom C64 zur Floppy (PC2 -> CB1) liefert dabei ein Signal, wenn am C64 Port ein Zugriff passiert. Umgekehrt gibt es von der Floppy eine Signalleitung zurück zum C64 (CA2 -> FLAG2) die anzeigt, wann auf den Floppy Port zugegriffen wird.


    D.h. am C64 wird über den FLAG2 Pin festgestellt, wann die Floppy eine Portaktivität durchgeführt hat, umgekehrt erkennt die Floppy über ihren CB1 Pin, wann der C64 auf seinen Port zugegriffen hat. Diese Statusregister sind am C64 über $dd0d (nicht $dc0d) und in der Floppy über $180d abrufbar.


    Eine Datenübertragung würde daher wie folgt aussehen:


    • Der C64 wartet durch Abfrage von FLAG2 ($dd0d) bis die Floppy ein Byte auf ihren Port schreibt
    • Die Floppy schreibt auf ihren Port auf $1801 (CA2 liefert dabei ein Handshake an FLAG2) und wartet, bis dieses Byte vom C64 abgeholt wird (durch Prüfen von CB1 in $180d)
    • Durch FLAG2 erkennt der C64 ein anliegendes Byte, eine Leseoperation auf $dd01 holt dieses Byte (und gibt dadurch über PC2 eine Rückmeldung an die Floppy an Pin CB1)
    • Aufgrund dieser Rückmeldung kann nun die Floppy mit dem nächsten Byte der Übertragung fortfahren


    Noch eine Ergänzung:
    Die Flags FLAG2 am C64 und CB1 in der Floppy werden automatisch zurückgesetzt, sobald ein Zugriff auf ihre Ports passiert.
    D.h. wartet der C64 in einer Schleife bis FLAG2 gesetzt wird, so wird dieses FLAG2 automatisch zurückgesetzt, sobald der C64 einen Zugriff auf $dd01 unternimmt (Lese- oder Schreiboperation).


    Eine Besonderheit gibt es allerdings auf der Floppy Seite:
    Zum parallelen Port A auf $1801 (im VIA 6522 wird $1800 als Port B und $1801 als Port A bezeichnet) gehören normalerweise die Handshake Leitungen CA1 und CA2. Da an CA1 aber auch die ATN IN Leitung des seriellen Busses angeschlossen wurde, wurde anstelle von CA1 die Handshake Statusleitung CB1 des Port B verwendet.
    D.h. wenn in der Floppy über die CB1 Leitung gewartet wird bis der C64 auf seinen Port zugegriffen hat, so muß für das Rücksetzen dieses Flags auch dummyhalber auf $1800 zugegriffen werden um dieses CB1 zurückzusetzen. Ein Lesen oder Schreiben auf $1801 alleine reicht nicht aus.


    Das war auch mit ein Grund, warum ich in meinem Speeder einen eigenen Portbaustein eingesetzt habe, weil es durch den kastrierten Handshake geringe Verzögerungen in der Übertragung gab - hab' dies allerdings auch erst vor kurzem wieder registriert ;)

  • Wow :)
    Ich hatte mir bisher nur eine Routine zur Parallelübertragung angesehen, und die hatte ein eigenes Handshake über $dd00 aufgebaut.
    Mir dämmert da auch irgendwas: Für eine serielle Übertragung hatte ich mal mit diesem IRQ-Register in der Floppy experimentiert, um das setzen/löschen von ATN (meine Anforderung von 2 Bit) mal anders abzufragen. Das Lesen von $1800 hat den Vorteil dann wieder aufgebraucht, und dazu war die Abfrage komischerweise nur zu 99% sicher, hier und da wurde mal was geschlabbert. DA muß ich doch irgendwann mal sehen, ob mir die neuen Infos weiterhelfen.