XS1541 - universal serial adapter for CBM Floppy

Es gibt 209 Antworten in diesem Thema, welches 50.359 mal aufgerufen wurde. Der letzte Beitrag (1. Juli 2009 um 23:14) ist von DerSchatten.

  • Bei einer 1571 dauert das Backup aller Blöcke 39 Sekunden.

    Eine Disk die zu 90% gefüllt ist dauert mit BAM Backup 2:20 also 140 Sekunden.

    Keine Intelligenz am PC hat sich für die Disk Backup Sache als Nachteil erwiesen. Da die Floppy und der AVR zuwenig RAM haben, eine ganze Spur auf einmal lesen zu können, wird ein schnelles einlesen einer Diskette ein Wunschtraum bleiben.

    Als Ausweg gibt es nur folgende Möglichkeiten:

    • RAM Erweiterung in der Floppy
    • RAM Erweiterung im XS-1541
    • Programm im PC
    • Ein spezielles Image Format (keine Norm wie D64 sondern was eigenes)

    Dieses spezielle Image Format ist wohl die Lösung die (von mir) kommen wird. Da wird es einen kleinen Header geben wo drin steht um welche Art von Diskette es sich handelt (Diskettenaufbau: Spuren, Sektoren ...). Dann folgen die Sektoren, allerdings nicht geordnet sondern in der Reihenfolge wie die Floppy sie anliefert. Daher ist die Sektornummer immer mit dabei (258 Byte statt 256). Am PC kann man diese Imagefiles dann mit einem kleinen Tool in ein D64 oder D71 konvertieren.

    Man hat also die Wahl zwischen schnellem und langsamen Backup. Das schnelle hat den Nachteil, dass man am PC nach bearbeiten muss ... :(

    Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen.

  • Das Image D64 wird wohl das am häufigsten verwendete Format sein. Deshalb lohnt es sich da was für die Geschwindigkeit zu tun.

    Das dumme ist, das d64 Image Format hat die Sektoren aufsteigend ohne Lücken angeordnet. Auf der Diskette ist das ebenso. Man kann aber nicht jeden Sektor erwischen, weil die GCR Dekodierung und der Transfer Zeit frisst. Bei der 1571 im Burstmode erwischt meistens jeden vierten Sektor, immer jedoch jeden Fünften. Deshalb ist das auch standardmäßig so eingestellt (Soft Interleave 5).

    Am schnellsten ist man also wenn man jeden fünften Sektor liest. Bei 300 rpm einer 1571 hat man 5 Umdrehungen pro Sekunde. Bei Interleave 5 braucht man genau 5 Umdrehungen für alle Sektoren. Bei Interleave 1 hätte man genau die richtige Sektor Reihenfolge: 0,1,2,3,4 ... Leider braucht man dann aber 21 Umdrehungen (4,2 Sekunden) für alle 21 Sektoren einer Spur.

    Bei Interleave 5 kommen aber die Sektoren nicht in der richtigen Reihenfolge, sondern 0,6,11,16,1,7,12 ... Zum PC muss man in der Reihenfolge 0,1,2,3 ... senden. Also braucht man Platz die Sektoren 6,11,16 zwischen zu speichern bis Sektor 1 dran ist (Sektor 0 ist inzwischen im PC). Das geht so weiter (7,12,17), (8,13,18) und (9,14,18). Bis jetzt braucht man bereits 12 Buffer und einen für den gerade gesendeten Sektor 5. Dann kann man zum Glück wieder abbauen, jeweils den ersten jeder Serie. Zum PC sendet man schneller als die Sektoren rein laufen, also bauen sich die Buffer wieder ab.

    13 Buffer für eine Spur mit 21 Sektoren. Durch die Verwendung eines 644 Atmega hat man 4KB RAM. 13 Buffer benötigen 3328 Bytes. Das dürfte gerade die Grenze des machbaren sein. Denn die restlichen 768 Byte gehen für Stack, 2 X-Modem Buffer, RS-232, sonstige Buffer und Variable drauf.


    Es dürfte damit wohl eine spezielle Funktion zum Lesen einer Spur geben für 1571 und 1541 parallel. Kein spezielles Image File wie zuerst angedacht ...

    Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen.

  • Hi, Versuche mich gerade unter Linux und XS1541 (Pollin)..
    Minicom scheint so nicht zu gehen..? Will wohl Modemsignale..? Schnittstelle ist /dev/ttyS0
    Habe picocom genommen.. damit kann ich arbeiten.. aber xmodem receive ueber lrx geht nicht..?

    Was nehmt ihr denn dafuer? Und mit welchem Kommando..?

    Peter

  • Hallo Peter, wie war der Urlaub?

    Ich nehm einfach das Hyperterm des Win XP.

    Die aktuelle Version läuft mit Echo, wie du es wolltest. Dh. der Atmega schickt jedes Zeichen zurück wenn er in der Eingabe Loop ist. Dadurch reagiert er ähnlich wie ein CeVi, solange er was tut kommt nix zurück. man kann aber trotzdem eingeben. Sobald er fertig ist kommen alle Zeichen auf einmal.

    Hast du eine SpeedDos Floppy oder eine Burst Floppy (1571,1581)? Dann empfehle ich dir dringend einen Atmega644 anzuschaffen (ist Pin kompatibel zum 32) ... ;)

    Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen.

  • Hi. Danke, Urlaub war gut aber wie immer viel zu kurz :wink:
    Unter XP habe ich auch Hyperterm genommen.. geht wunderbar.. aber unter Linux..??

    Peter

  • ok. so geht auch unter linux...
    Problem war, das picocom an lrx keinen Dateinamen weitergeben hat.. sowieso etwas komisch im picocom.c Source..?
    Wenn Dateiname eingegeben wird, wird lsx = senden xmodem aufgrufen.. nur bei leerem Dateinamen wird lrx aufgerufen.. das aber verweigert den Dienst bei fehlendem Dateinamen...

    Muss ich mal aendern.. habe aber einen work around..indem ich einen besten Dateinamen vorgebe...

    Peter

  • Die Antwort auf alle Buffer Probleme ist der Atmega 1284. Er ist Pin kompatibel und hat 16KB RAM! Damit kann man nicht nur ganze Spuren auf einmal lesen, sondern auch in einer Umdrehung (200 Millisekunden)!!

    Damit ist dann theoretisch ein Nibblecopy machbar, dh. das Ergebnis steht in einem .G64 File und enthällt alle Daten einer Diskette (inkl. Kopierschutz).


    Für Mega32 User ist kopieren einer ganzen 1541 Diskette langsam weil mangels Buffer Speicher ein Interleave von 1 verwendet werden muss. 4 Sekunden pro Spur. Ausnahme sind Floppy mit RAM Erweiterung und alle 1581 Floppy, da geht es auch beim Mega32 blitzschnell.

    Für Mega644 User kann ein Interleave zwischen 6 und 7 gefahren werden. Die 4KB langen für 13 Buffer. Damit erreicht man etwas über 2000 Bytes pro Sekunde, eine ganze Spur dauert etwas über eine Sekunde (~ 1200 bis 1400ms).

    Ein Mega1284 liest so schnell wie die Floppy es zulässt. Dh. immer mit optimalen Interleave. Bei einer 1571 sind das weit über 4000 Bytes pro Sekunde. Durch die GCR Dekodierung liegt der optimale Interleave jedoch immer noch bei 5, weil die Floppy solange rechnen muss. Wenn die 1571 MFM kodierte Disketten liest dann ist sie wirklich sauschnell. Man erwischt fast jeden Block, zumindest aber jeden Zweiten.

    Mit einem kleinen Maschinenprogramm in der Floppy kann man die Sektordaten roh (unverarbeitet) senden. Damit hat man 25% mehr Daten, also bei 21 Blöcke statt 5376 Bytes 6720 Bytes + Header Bytes. Die aufwendige 5 zu 4 Bit Umrechnung (GCR Dekodierung) kann dann der schnellere Atmega oder der PC machen. Weil die Floppy "nur" die Daten lesen und senden muss, kann sie das in einer Umdrehung machen. Also braucht sie dazu exakt 200 Millisekunden. Rein theoretisch könnten also 5 Spuren pro Sekunde gelesen werden! Dazu kommen aber Spurwechsel und Erstblock Sync Zeiten, es würde sich also auf 8 Sekunden pro Diskette einpendeln.

    Die serielle Schnittstelle kann diese 7000 Byte pro Sekunde locker zum PC schaufeln. Bei 115200 Baud kann man fast 10 KB pro Sekunde schaffen.

    Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen.

  • Hast Du Interesse an einem IEC / IEEE - Drucker - Interface? 11

    1. Nein, drucken brauche ich nicht (7) 64%
    2. ja, seriell / USB nach parallelem IEEE (1) 9%
    3. ja, seriell / USB nach seriellem IEC (1) 9%
    4. ja, parallel IEEE nach Centronics (1) 9%
    5. Für mich sind alle Kombinationen interessant (1) 9%
    6. ja, seriell IEC nach Centronics (0) 0%

    Ich habe mehrere Drucker mit parallelem IEEE-Anschluß und einen mit seriellem IEC-Anschluß. Die mit parallelem würde ich gerne auch für meine anderen Rechner benutzen.

    Würde es viel Aufwand bedeuten, eine "Druckervariante" des XS1541 zu erstellen?

    An PB0-7 könnte man 8 DIP-Schalter anschließen, die wenn geschlossen Verbindung nach Masse herstellen. Wenn offen, könnte durch die internen Pull-ups 1 gelesen werden, ansonsten Null.

    Über USB / die serielle Schnittstelle kämen die zu druckenden Daten.

    Über die DIP-Schalter könnte man angeben, ob man auf den IEEE oder den IEC-Anschluß ausgeben möchte.
    Und auf welche Kanal-Nummer (2 Bits: 4-7) der Drucker hört.
    Über einen weiteren könnte man wählen, ob die Daten 1:1 weiter gereicht werden sollen, oder eine ASCII / PETSCII - Wandlung vorgenommen werden soll.

    Für andere (nicht für mich) wäre vielleicht auch eine andere Variante interessant: das XS1541 als IEC/IEEE ==> Centronics-Interface.
    Die Centronics ist zwar eigentlich auch schon ausgestorben, aber sicher noch weiter verbreitet als IEC- oder IEEE-Drucker. Damit könnte man sicher deutlich leichter mal eben einen Drucker an einen Commodore anschließen.

    Um mal die Stimmung zu testen, habe ich mir erlaubt, eine Umfrage einzurichten...

  • Die DIP switch braucht man nicht, man könnte alles fein über PC konfigurieren und im eeprom abspeichern.

    Aber da wo der Speeddos Anschluss ist, könnte man einen Centronics anschliessen. Jede Kombination wäre denkbar, - IEEE auf IEC, IEEE auf Centronics, IEC auf Centronics, IEC auf IEEE wirds wohl kaum geben ...

    Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen.

  • Die DIP switch braucht man nicht, man könnte alles fein über PC konfigurieren und im eeprom abspeichern.

    Gute Idee! Dann müsste man sich nur eine Escape-Sequenz ausdenken, um wieder von der "Ich bin nur ein Drucker-Interface"-Betriebsart zurück zur interaktiven Betriebsweise des XS1541 zurück zu schalten.
    Es sollte nicht stören, wenn der vermeintliche Drucker "antworten", also auch Daten senden würde. Vielleicht könnte das XS1541 nach Power-on einen kurzen Hinweis ausgeben, wie man es wieder zurück schaltet.

    Der 8-Bit-Port würde für 7 Bit ASCII + STROBE reichen, schöner wäre natürlich, wenn man auch 8-Bit-Daten an den Drucker senden könnte. Vielleicht PC0 der LED für STROBE borgen?

  • Seh ich das richtig, du meldest dich freiwillig diese Software zu schreiben? :D


    Soll ich dir Sourcen zum XS-1541 und zum IEEE2IEC zukommen lassen?

    Das IEEE2IEC realisiert eigentlich schon eine Richtung für das Drucker Bridge. Man muss nur mit den Gerätenummern was machen, zB. 5 (IEEE) auf 4 (IEC).

    Solltest du die andere Richtung implementieren (IEC2IEEE), dann wäre es gut dies für Flppy auch gleich mit zu machen.

    -------

    Schön wäre ein Bridge Interface, dass alle Richtungen für Floppy und Drucker in einer Firmware vereint.

    -------

    Welche Escape Sequenz? Willst du auch einen PC Drucker dazu nehmen? Gute Idee!

    Aber es braucht keine Escape Seuqenz. Es braucht nur ein kleines Programm am PC als Server Software, der von der seriellen (USB) Daten nimmt und zum Drucker schickt. Gleichzeitig kann jederzeit das Modul konfigueriert werden.

    Oder meinst du direkt an einen USB Drucker senden?. Das geht nicht, der USB Teil ist nur seine COM Bridge. Aber mit einem anderen Atmega, einem USB Mega der aktiv USB Host sein kann ...

    Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen.

  • Seh ich das richtig, du meldest dich freiwillig diese Software zu schreiben? :D

    Soll ich dir Sourcen zum XS-1541 und zum IEEE2IEC zukommen lassen?


    Nun mal langsam mit den jugen Pferden! :smile: Bevor ich die Firmware verschlimmbessere, sollte ich erst einmal ein XS1541 auf meinem Schreibtisch stehen haben!!

    Ich gestehe, die Teile liegen bereits auf meinem Schreibtisch und ein defekter Digitus HPR4C0-Router hat sich dankbarerweise als Gehäusespender angeboten... also ja, über die Sourcen würde ich mich ausgesprochen freuen!

    Das IEEE2IEC realisiert eigentlich schon eine Richtung für das Drucker Bridge. Man muss nur mit den Gerätenummern was machen, zB. 5 (IEEE) auf 4 (IEC).

    Solltest du die andere Richtung implementieren (IEC2IEEE), dann wäre es gut dies für Floppy auch gleich mit zu machen.


    An diese Richtungen dachte ich zwar ursprünglich nicht, aber ja... das ließe sich sicher auch erledigen.

    Schön wäre ein Bridge Interface, dass alle Richtungen für Floppy und Drucker in einer Firmware vereint.


    Naja... in gut drei Monaten ist Weihnachten! :wink:

    Welche Escape Sequenz? Willst du auch einen PC Drucker dazu nehmen? Gute Idee!

    Aber es braucht keine Escape Seuqenz. Es braucht nur ein kleines Programm am PC als Server Software, der von der seriellen (USB) Daten nimmt und zum Drucker schickt. Gleichzeitig kann jederzeit das Modul konfigueriert werden.


    Das nenne ich mal ein "konstruktives Mißverständnis"! :smile:

    Auf diese Möglichkeit wäre ich nie gekommen, finde ich aber sehr interessant. Nein, ich dachte: PC-Drucker ja, aber ohne PC und ohne USB. Also am IEEE z.B. einen CBM 8296, der z.B. eine Visicalc-Tabelle drucken möchte und am Parallel-Port PB0-7 einen PC-Drucker mit paralleler Schnittstelle nach Centronics-Standard (z.B. mein HP Laserjet 5L zum Anschluß an LPT1 / SPP-Interface um im PC-slang zu schreiben). Stand alone - ganz ohne PC. Das ist die Variante CBM ==> LPT

    Was ich ursprünglich wollte, war die Variante SER ==> IEEE. Also z.B. meinen Mac, einen PC oder ein CP/M-System oder jede andere Kiste mit seriellem Interface treiberlos an einen Drucker mit IEEE-Schnittstelle anschließen. Stand-alone. Ohne Software, ohne Treiber. Nur mit dem XS1541 dazwischen, das die Daten 1:1 von der seriellen an den IEEE durchschaufelt.
    Damit könnte ich all meine Dateien auf dem Mac an diese herrlichen CBM-Drucker schicken und z.B. Listings auf dem ewig breiten Papier mit den grün-weissen Leselinien ausdrucken. Oder Etiketten drucken vom Endlosettikettenband. Oder, oder, oder...
    Das ist die Variante SER ==> IEEE.
    Wenn das nun die Daten 1:1 durchschaufelt, werden die nicht mehr interpretiert. Also niemand, der nachsieht, ob da ein Befehl kommt, um z.B. ein Diskettenimage einzulesen.

    Wenn ich also das Ding zwischen Mac und CBM 8024 habe und drucke und irgendwann fertig bin mit drucken, dann wird das vom CBM 8024 abgezogen und z.B. wieder an eine CBM 8050. Deshalb dachte ich an eine Escape-Sequenz, die dem Ding mitteilt: okay, genug gedruckt für heute, jetzt sollen wieder Disketten beackert werden, jetzt musst Du die an der seriellen Schnittstelle ankommenden Daten wieder als Befehle interpretieren.

    Oder meinst du direkt an einen USB Drucker senden?. Das geht nicht, der USB Teil ist nur seine COM Bridge. Aber mit einem anderen Atmega, einem USB Mega der aktiv USB Host sein kann ...


    Das war mir bewußt, das war ja auch gar nicht gemeint. Mit USB kenne ich mich nicht so gut aus... dann wäre zu prüfen, ob USB-Drucker das unterstützen, einfach wie klassische Drucker eine Reihe von ASCII-Zeichen zu bekommen und die in ihrer Standard-Schriftart auszugeben. Oder arbeiten die mittlerweile nur noch mit graphischen Daten und/oder Seitenbeschreibungssprachen?

  • Achs so, du willst vom PC an einem IEEE-488 Drucker verwenden? 1:1 durchschleifen? Aha einen ASCI Stream am COM ausgeben?

    Nee, wenn schon dann als Drucker Treiber implementieren (IEEE-Drucker device im Win32).


    An einen Drucker was ausgeben geht jetzt schon:

    Code
    #4
    OPEN "" 1
    listen 1
    BSOUT xx ..
     :   :
    
    
    unlisten 1


    Man müsste nur ein kleines PC Programm haben, oder eben besser einen printer driver und gut.


    Sollte man so ein PC Proggi machen (oder nen Driver) dann würde man im XS-1541 natürlich einen neuen Befehl implementieren:

    Code
    PRINT#4 "xx"
    ?"xxx"
    ?5"jhfkdjs"
    PRINT#5 HEX xx xx xx ...
    ?5h xx xx xx ...

    Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen.

    Einmal editiert, zuletzt von Diddl (9. September 2008 um 15:39)

  • Nee, wenn schon dann als Drucker Treiber implementieren (IEEE-Drucker device im Win32).

    In der DOS-Box:

    Code
    REN generic.drv cbmieee.drv

    Mal im Ernst... wofür bitte einen Treiber?! Und einen für Win 98, Win NT, Win XP, Win Vista, einen für OS X, einen für CP/M und einen für Mac OS? och nööö....

  • Naja irgendwie hast du Recht. Aber warum einfach wenn es auch kompliziert geht? :D


    Also fassen wir zusammen. Du willst alles was das XS-1541 über die serielle kriegt 1:1 an einen IEC oder IEEE Printer senden. Diese Übung wäre sehr simpel zu lösen. Zwei neue Kommandos:

    • Conf prn-bridge [ieee|iec] [dev#]
    • Start prn-bridge


    Der erste Befehl speichert Typ und Device Nummer ins EEPROM. Der Zweite startet den PRN Bridge Modus und markiert sich im EEPROM damit es nach einem Reset auch so ist.

    Erwecken tut man das Kind per Escape Sequenz oder einem bestimmten Zeichen nach dem Reset.


    Ein kleines Problem ist wann das Open und Close gesendet wird. Auch kann man doch beim Open bestimmte Einstellungen übergeben? Die müsste man eben noch als Escape Sequenzen implementieren.

    Ich habe nie einen Commodore Drucker besessen und kenne die Dinger daher auch nicht.

    Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen.

  • Schön! KISS!
    ähm... damit keine Mißverständnisse entstehen: keep it simple, stupid! ;o)

    Das OPEN kann man ja nach Start prn-bridge senden. Und dann bei power-on, wenn die prn-bridge läuft.
    Auf das CLOSE würde ich getrost verzichten. Ich sehe keine Funktion, die ein CLOSE hätte.

    Mir ist nicht bekannt, daß die Drucker irgendwelche Einstellungen bei OPEN übernehmen würde. Auf die Schnelle kann ich das nur für den CBM 8028 sagen, da ist das nicht der Fall. Der macht alle Einstellungen über Steuerzeichen und ESC-Sequenzen. Ich gehe davon aus, daß das bei anderen Druckern auch so ist, da das ja i.d.R. keine Commodore-Eigenentwicklungen waren, sondern dazu gekaufte Lösungen. Dann wurde noch ein IEEE-Interface dazu gebastelt, fertig. Glaube nicht, daß die extra die Firmware umgeschrieben haben, um Einstellungen per OPEN zu übernehmen, wenn man das genau so gut und jederzeit nach OPEN wie bei einem seriellem oder parallelem Interface auch machen kann.
    Ich mache mich aber auf jeden Fall noch schlau nach den Steuersequenzen der anderen Drucker -- wenn da irgendjemand was zu beisteuern kann, wäre ich dafür dankbar!

  • Ich nehme alles zurück und behaupte das Gegenteil. Es werden wohl tatsächlich Parameter von OPEN übernommen: Bitte melde dich an, um diesen Link zu sehen.

    Ich werde erst mal recherchieren, was sicher kein leichter Auftrag werden wird, und dann sieht man weiter...

  • Ich nehme alles zurück und behaupte das Gegenteil. Es werden wohl tatsächlich Parameter von OPEN übernommen: Bitte melde dich an, um diesen Link zu sehen.

    Ich werde erst mal recherchieren, was sicher kein leichter Auftrag werden wird, und dann sieht man weiter...

    Es ist sogar noch etwas komplizierter. Man müsste wohl wenn Daten kommen ein Open senden und wenn sagen wir 2 Sekunden keine mehr kommen ein Close. oder zumindest ein UnListen().

    Weil sonst ist erstens der Bus blockiert und zweitens der Printer auf remote.

    Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen.

  • So, das Teil ist bei mir angekommen, mal schaun wie weit ich zwischen RR Compo Beitrag und RealLife komme.

    Diddl:
    Kannst du mir einen kurzen Abriss aller Befehle zukommen lassen die das Teil kann?

    Blog: Bitte melde dich an, um diesen Link zu sehen. - The Seventies Board: Bitte melde dich an, um diesen Link zu sehen. Bitte melde dich an, um diesen Link zu sehen.

    Ein Terminal und ein Z80 :D

  • Sehr gut, die Post ist ja gar nicht soo langsam.

    Ich aktualisiere heute Abend die Befehlsliste und poste sie hier. Ich kann auch gerne Anpassungen und/oder Erweiterungen machen.

    Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen.