Hallo Besucher, der Thread wurde 1,3k mal aufgerufen und enthält 9 Antworten

letzter Beitrag von StefR am

1571 ´n paar Fragen zum Fast Serial Protocol

  • Moin zusammen,


    ich versuche gerade über selbstgebastelte Hardware einen Burst Sector Read über Fast Serial meiner 1570 anzuleiern und komme nicht wirklich weiter. Im 1541 Mode alles toll, aber natürlich leider ziemlich langsam. Ich habe zwar teils uralte Dokumentationen vorliegen, aber die Umsetzung der Informationen bringt mich auch nicht weiter. Ein C128 ist leider auch nicht vorhanden.


    Faktisch reinitialisiere ich erst einmal die Floppy zurück auf den 1571 Mode und zwar direkt über eine Befehlskette. Klappt bis dahin (anstelle dessen erst einmal 8*[4/7 Mikrosekunden lange Impulse] auf SRQ rauzuschicken brachte bislang kein Erfolg. Warum, weiß ich nicht, laut Analyzer direkt auf dem Floppyboard kommen die Impulse an. In jedem Falle ist die Floppy nach Abarbeitung dieses Kommandos Akiv und dann Idle.


    Danach mache ich ohne Fast-Request einen Befehls-und Datenkanal auf, schicke danach "U0"+[Command]+Track+Sektor+Anzahl Sektoren+nächster Sektor+Return, danach Unlisten, ziehe dann alle Leitungen nach oben. Diese Kommandostruktur scheint sich vom 1541 Sektor Transfer zu unterscheiden (bspw "U1: 2 0 18 0", alles in ASCII, bei der 1571 nur die ersten zwei Bytes Ascii, Rest "rohe" Bytes bis auf Return)


    Floppy reagiert, Motor ist aktiv, Kopf bewegt sich aber nicht zum Zieltrack, blinkt anschließend, auf der SRQ-Leitung liegt kein Impuls an. Wie ich die Standard-Clock oder Datenleitung im Vorfeld setze spielt dabei keine Rolle.


    Daher meine Fragen:


    - Vertauscht sich ,wie im 1541-Mode die Standard-CLK-Leitung, die Rolle der SRQ-Leitung, d.h. wenn die Floppy senden will, taktet sie dann die SRQ-Leitung? Bislang gehe ich davon aus.


    - muß für den schlussendlichen Fast Transfer Richtung Computer grundsätzlich vor -jedem- ATN die 8 Impulse über SRQ gesendet werden, auch wenn die nachfolgenden Kommandos im "Standardmode" gesendet werden?


    - muß vor der Datenübertragung Richtung Computer bei ATN HIGH ebenfalls nochmals 8 mal gepulst werden?


    - muß für einen Fast Transfer überhaupt ein separater Datenkanal geöffnet werden oder reicht der Kommandokanal (zwecks Umgehung des Floppybuffers) ?


    - als Command im Befehlsstring "U0" wird für den Fast Serial Read eine GCR-Diskette "0" angegeben. Passt das?


    - Für mich riecht das fast so, als würde idie Floppy das Kommando ansich fehlinterpretieren. Wenn ja, warum? Der Befehlsstring müsste laut Dokumentationen so passen.


    Ich habe den gleichen Befehlsablauf spaßeshalber mal übers C64 Basic mit separaten Datenkanal versucht, was natürlich zwecks Datenübertragung nicht klappen würde. Nach Kommandoübermittlung ohne Daten per Get# zu ziehen, danach schließen von Kommando und Datenkanal geht die Floppy nach einem kurzen aufleiuchten der LED sofort ins Idle. Wird wohl auch so richtig sein; ich wäre aber davon ausgegangen, das die Floppy zumindest den Zieltrack anfährt. Macht sie aber auch hier nicht.






    Liebe Grüsse & vielen Dank!

  • Ein C128 ist leider auch nicht vorhanden.

    Hast Du einen C64? Mit zwei Strippen am Userport kann man ihn entsprechend aufrüsten. Das ist natürlich nur die Hardwareseite - wenn Dich das Verhalten des 128er-ROMs interessiert, bringt das nichts.

    Faktisch reinitialisiere ich erst einmal die Floppy zurück auf den 1571 Mode und zwar direkt über eine Befehlskette. Klappt bis dahin (anstelle dessen erst einmal 8*[4/7 Mikrosekunden lange Impulse] auf SRQ rauzuschicken brachte bislang kein Erfolg.

    Woran siehst Du, welche Methode funktioniert hat und welche nicht?

    bei der 1571 nur die ersten zwei Bytes Ascii, Rest "rohe" Bytes bis auf Return

    Ja, von dem ASCII-Gehampel hat man sich beim Burst-Protokoll glücklicherweise verabschiedet. Wie kommst Du auf Return am Ende? Ich weiß nicht, ob das hier das Problem ist, aber es geht definitiv ohne.

    - Vertauscht sich ,wie im 1541-Mode die Standard-CLK-Leitung, die Rolle der SRQ-Leitung, d.h. wenn die Floppy senden will, taktet sie dann die SRQ-Leitung? Bislang gehe ich davon aus.

    Ja. Das passiert direkt durch die Schieberegister-Hardware der CIAs: Die sendende Seite gibt den Takt vor.

    - muß für den schlussendlichen Fast Transfer Richtung Computer grundsätzlich vor -jedem- ATN die 8 Impulse über SRQ gesendet werden, auch wenn die nachfolgenden Kommandos im "Standardmode" gesendet werden?

    Diese Impulse dienen nur dazu, der anderen Seite mitzuteilen, dass das Gerät Burst-Mode-fähig ist. Wenn Du ein Burst-Kommando schickst, sollte(tm) eine 1571 dieses Kommando auch ausführen, egal ob vorher diese Impulse gesendet/empfangen wurden oder nicht. Im 1571-Modus sollte das Laufwerk natürlich schon sein...

    - muß vor der Datenübertragung Richtung Computer bei ATN HIGH ebenfalls nochmals 8 mal gepulst werden?

    Siehe oben, ich wüsste nicht, welchen Zweck das erfüllen sollte.

    - muß für einen Fast Transfer überhaupt ein separater Datenkanal geöffnet werden

    Nein. Im Gegensatz zum restlichen Strubbelcode des Laufwerks-DOS sind die Burstbefehle relativ klar und einfach (inklusive einer Ausnahme, die die Regel bestätigt, nämlich der Zählung der Ladeadresse beim Burst-Fastload...)

    - als Command im Befehlsstring "U0" wird für den Fast Serial Read eine GCR-Diskette "0" angegeben. Passt das?

    Ich weiß den korrekten Wert nicht auswendig, aber mit dem im deutschen 1571-Handbuch angegebenen Wert habe ich entsprechende Programme hinbekommen. Mein Sourcecode sagt 0x40, da ist aber wohl noch ein Bit gesetzt für "bei Fehlern nicht abbrechen", das ist nützlich bei Übertragung mehrerer Sektoren in einem Rutsch.


    Wenn Du die Übertragung hinbekommst:

    Achtung, mehrere Sektoren hintereinander kommen standardmäßig mit dem Sektorversatz fünf. Man kann den Wert ändern, muss das aber an die Spurlänge anpassen: Auf einer Spur mit 18 Sektoren sorgt der Interleave sechs z.B. dafür, dass die gleichen drei Sektoren mehrmals übertragen werden und nicht die komplette Spur.

    EDIT: Der Interleave-Wert eins behebt das Problem der Reihenfolge, macht das ganze Unterfangen aber merklich langsamer, da pro Umdrehung nur ein Sektor gelesen wird. Aber für erste Tests kann das nützlich sein.

  • Erst einmal vielen Dank euch beiden !

    Mit dem vorherigen Raustakten der 8 Impulse war ich mir nicht sicher , wie die Floppy zu reagieren hat, wenn diese Impulse ohne Mode-Umschaltung gesendet werden - ob sie das gleiche veranstalten muss wie bei der Umschaltung auf den 1571 Mode per U0>M0 - Motor an, kurzes Kopfbewegen, Idle.

    Am C128 klemmend sagt man, das sich die Floppy automatisch vom 1541 Mode in den 1571 Mode umschaltet, nur was dies veranlasst, ist mir nicht klar- ob dafür die vorhergehenden 8 Impulse verantwortlich sind, oder ob die Floppy gundsätzlich beim Empfang eines Burst Kommandos auf den 1571 Modue umschaltet usw. Bislang bleibe ich halt mal beim U0>M0.


    In jedem Falle gut zu wissen das kein Datenkanal offen sein muß. Ich gehe mal davon aus, das dies nur der Fall sein müsste, wenn man anstelle übers Fast Protocol in den Buffer liest?!?


    Das mit dem chr$(13) kann gut sein, das dies den Fehler darstellt - dachte, dies wäre halt wie beim Standard-1541-Kommando irgendeine Form der Bestätigung, aber $0D kann wohl als zusätzliches Datenbyte interpretiert werden.

    Vielleicht macht auch die Tatsache Probleme. das, das ich bislang im Vorfeld kein Inquiry sende - es heißt zumindest im Floppyhandbuch, das dieses Kommando Voraussetzung dafür sei, damit die Floppy wisse, mit welchem Diskettenformat sie es zu tun habe - vielleicht ist das aber auch nur nötig, wenn man auf GCR und MFM-Disketten zugeifen will . Allerdings, dieser C64 Umbau der sich am Userport bedient, sendet auch kein Inquiry, sondern sendet nur $55,30,$1F für Fastload...


    Ich beschäftige mich mal heute weiter damit...


    Nochmals vielen Dank !

  • Am C128 klemmend sagt man, das sich die Floppy automatisch vom 1541 Mode in den 1571 Mode umschaltet, nur was dies veranlasst, ist mir nicht klar- ob dafür die vorhergehenden 8 Impulse verantwortlich sind, oder ob die Floppy gundsätzlich beim Empfang eines Burst Kommandos auf den 1571 Modue umschaltet usw

    Wenn ich mich recht entsinne schaltet die 1571 beim Empfang eines Fast-Serial-Bytes automatisch (und still) in den 1571-Modus. Einfach mal im ROM-Listing den Verlauf des Interrupthandlers verfolgen, da müsste das irgendwo passieren.



    Das mit dem chr$(13) kann gut sein, das dies den Fehler darstellt - dachte, dies wäre halt wie beim Standard-1541-Kommando irgendeine Form der Bestätigung,

    Die normalen Laufwerkskommandos interessieren sich nicht für das chr$(13) am Ende, die Ausführung des Befehls wird durch das UNLISTEN ausgelöst.

  • Vielleicht macht auch die Tatsache Probleme. das, das ich bislang im Vorfeld kein Inquiry sende - es heißt zumindest im Floppyhandbuch, das dieses Kommando Voraussetzung dafür sei, damit die Floppy wisse, mit welchem Diskettenformat sie es zu tun habe - vielleicht ist das aber auch nur nötig, wenn man auf GCR und MFM-Disketten zugeifen will . Allerdings, dieser C64 Umbau der sich am Userport bedient, sendet auch kein Inquiry, sondern sendet nur $55,30,$1F für Fastload.

    Der nimmt aber eben auch "Burst-Fastload" und nicht "Burst-Read". "Burst-Read" funktioniert erst nach "Inquire Disk" oder "Query Disk", ja. Dann dürfte das hier das Problem sein.

    Die Zusatzinfos von "Query" sind eigentlich nur bei MFM-Disks interessant, daher nimm lieber "Inquire".

  • Ja, das war das eine Problem, das andere tatsächlich - Chr$(13) darf nicht sein - ein paar andere Kleinigkeiten wie nach dem letzten Untalk das warten auf Data High und danach initial CLK low, damit SRQ seitens der Floppy aktiv wird, das nächste. Ich hatte nach Untalk lediglich drauf gewartet, das SRQ anfängt von sich aus zu ballern - Fehlanzeige, wie sich natürlich rausstellte.


    Funktioniert natürlich noch nicht perfekt, aber es geht schon mal irgendwie.


    Danke !!!

  • Leider noch eine Zusatzfrage, da mir Burst Block Write Probleme bereitet. Sektorweise klappt hervorragend, leider aber nicht linear für einen ganzen Track.


    Habe den Commandstring mit der Sektoranzahl des jeweiligen Tracks gesendet, kann 255 Bytes zur Floppy übertragen, bekomme aber keine Rückantwort oder Reaktion, da es ja heißt, die Floppy würde im Anschluss ein Datenbyte übertragen. Auch eine Verminderung des Datenblocks auf 254 Bytes mit anschließender Prüfung, ob die Floppy versucht ein Statusbyte zu übertragen schlägt fehl. Händisches nachfiolgendes ziehen bzw releasen der CLK bringt dabei keiene Änderung.


    Was könnte da meinerseits schief laufen?

    Ich sende zwischendrin / am Ende kein Unlisten oder ähnliches, wda ich bislang davon ausgeehe, das dies beim Burst-Write mit Sektoranzahl >1 nicht nötig ist.

    Es kommt nach dem letzten übertragenen Byte quasi keine Änderung von CLK als ACK. Auch ein zusätzliches SRQ-Takten hilft da nicht.