Hello, Guest the thread was called416 times and contains 5 replays

last post from Diddl at the

Nochmals 1571 burst mode

  • Die Burst Kommandos 1 und 2 dienen zum direkten Lesen bzw. Schreiben von Blöcken.


    Das funktioniert tadellos mit einzelnen Blöcken. Man kann aber auch gleich mehrere Blöcke lesen und schreiben bis hin zur ganzen Spur. Nicht genug, die Commodore Entwickler haben sogar noch weiter gedacht und uns einen weiteren Parameter beschert: Man kann die Spur angeben die nach der Operation angefahren werden soll.


    Alles in allem eine wirklich geile Sache diese Burst Read/Write Kommandos!



    Leider funktioniert es nur bei der 1581 richtig. Die 1571 liest/schreibt nur einzelne Blöcke richtig. Beim Lesen mehrerer Blöcke oder der ganzen Spur kommt nur der erste Block richtig an. Danach verwürfelt das Laufwerk die Reihenfolge der Blöcke!! Da nur die reinen Blockdaten kommen, hat man auch keine Chance das nachträglich zu korrigieren. Also die Blockdaten kommen immer korrekt aber die Reihenfloge in der die Blöcke kommen ist nicht aufsteigend. Das KANN nicht Absicht sein, ich unterstelle hier einen schweren Bug. Wie gesagt, bei der 1581 funktioniert das alles tadellos und immer ... :(



    Nun meine Frage(n):


    • Hat schon jemand Erfahrung mit den Dingen?


    • Kann man das mehrfach Block lesen trotzdem verwenden? Der Geschwindigkeitsvorteil zum Einzelblock lesen ist gewaltig!


    • Es gibt ja DOS Upgrade ROM für die 1571, welche Fehler wurden damit behoben? Funktioniert das etwa in neueren ROM's?


    • Kann das mit dem Interleave zusammenhängen? Es gibt Kommandos die den Interleave einer Spur auf der Diskette analysieren. Es hat aber nix gebracht diese Funktion vor dem Blockread auf zu rufen. Zudem wurde diese Diskette mit dem Laufwerk formatiert ...



    Natürlich kann man ein Maschinenprogramm in die 1571 laden und das Kommando 1 und 2 nach implementieren. Es wär halt schön gewesen wenn es mit Boardmittel bzw. Standard Laufwerken geklappt hätte ...

  • Zusatz: Übrigens hat die 1581 auch einen "Fehler" un den Burst Routinen



    Beim Blockread und Write Kommando kommt ein Burst Status zurück. Bit 4 und 5 informieren über die zu erwartende Sektor Größe (128, 256, 512 und 1024 Bytes). Bei Disketten die normal mit einer 1581 durch @N formatiert wurden ist die Sektor Größe 512.


    Nun gibts beim Burst Blockread die Möglichkeit physikalisch oder logisch zu lesen/schreiben. Logisch bedeutet Commodore Aufteilung: 80 Spuren, einseitig, 40 Sektoren zu 256 Bytes. Physikalisch bedeutet 40 Spuren, zweiseitig, 10 Sektoren zu 512 Byte.



    Nun zum "Fehler": Beim physikalischen Blockread werden im Statusbyte 512 Byte angezeigt die auch prompt nach dem Statusbyte gesendet werden. Liest man jedoch logisch dann kommen nur 256 Bytes nach dem Status (=richtig), das Statusbyte jedoch zeigt ebenfalls 512 Byte Blöcke an. Natürlich kann man darüber streiten ob das richtig oder falsch ist ...

  • Bau Dir doch mal eine Testdiskette, auf der Du Sektor eins mit '01'-Bytes füllst, Sektor 2 mit '02' usw. Und dann schau, in welcher Reihenfolge das Komando die Daten anliefert. Ich tippe mal ins Blaue hinein, daß da tatsächlich ein Software-Interleave angewendet wird- was dann kein Fehler im eigentlkichen Sinne wäre, sondern eher eine Lücke in der Dokumentation. Das würde übrigens auch erklären, warum das Lesen einzelner Blöcke deutlich langsamer ist; versuch doch mal, in der Reihenfolge Block 1 - Block 4 - Block 7... zu lesen. (Was Interleave ist und wozu es dient ist Dir klar?)

  • Mir ist schon klar was interleave ist. Nur

    • erstens würde durch den Sektorversatz zB. die Speicherfolge 1,4,7,2,5 ... die optimale auslese Reihenfolge 1,2,3,4 .. sein


    • zweitens würde es keinen Sinn machen mit fixen Versatz auszulesen. Eine Diskette mit anderem Interleave würde immer falsch ausgelesen und ich würde es nie merken.
  • Bau Dir doch mal eine Testdiskette, auf der Du Sektor eins mit '01'-Bytes füllst, Sektor 2 mit '02' usw. Und dann schau, in welcher Reihenfolge das Komando die Daten anliefert. Ich tippe mal ins Blaue hinein, daß da tatsächlich ein Software-Interleave angewendet wird- was dann kein Fehler im eigentlkichen Sinne wäre, sondern eher eine Lücke in der Dokumentation.


    Du wirst schon Recht haben. Wenn man 5 Sektoren liest bekommt man immer Sektor 0,5,10,15,1 usw. Ist auch logisch wenn sonst kommt man nicht auf die Geschwindigkeit wenn man zuwenig RAM hat. Die 1581 hat das nicht nötig mit Ihren 16KB RAM, die liest IMMER eine ganze Spur auch wenn man nur einen Sektor verlangt.


    Da mein AVR auch nicht genug RAM hat und die Reihenfolge zum PC passen muss ist der Kuchen gegessen. Es wird nicht schneller ohne Intelligenz am PC oder mehr RAM irgendwo (Floppy oder AVR). So sieht es aus ... :(

  • Es ist alles geklärt. Mit dem Burst Kommando Interleave kann man den Soft Interleave einstellen und abfragen. Stellt man ihn auf 1 dann kommen die Sektoren in der korrekten Reihenfolge. Natürlich leidet die Geschwindigkeit enorm, 20 Umdrehungen für 20 Blöcke ...


    Sendet man der Floppy 'U', '0',$08,$01 ist ein Interleave von 1 eingestellt.

    Ich habe eine gute Beschreibung der Burst Kommandos gefunden im 1571 bzw. im 1581 User Manual: