Formatieren und der PERCOM Block

1, 2

Formatieren und der PERCOM Block

von FlorianD » Sa 6. Sep 2008, 00:03
Hallo,

ich suche Infos zum "Percom Block senden". Soviel habe ich rausgefunden: Befehl $4E Aux1/2=0.
1. Wo lege ich die 12 Bytes des PERCOM Blocks ab? In den Buffer? Womit fülle ich den Rest de Buffers auf? Egal?
2. Byte 6, Aufzeichnungsformat 0=FM 4=MFM, welches nehme ich bei ner 1050 mit Speedy? Und bei einer normalen 1050?
3. Wenn ich mit $21 (normale 1050) formatiere, was kommt dann in AUX1/2? Bei $22 (enhanced Density) muss da $11/$04=17/4 rein

Führen diese Befehle dazu, dass die VTOC und Sektor 1-3 angelegt werden?

Wer kann helfen?

Grüße,
Florian

von Mathy » Sa 6. Sep 2008, 00:54
Hallo Florian

Vielles zum Percom Block findest Du in "Das Compy Shop Atari Technik Handbuch" das es als Jahresgabe 2002 gab. Wenn ich mich nicht irre, gibt's das im Shop immer noch (für die Mitleser die damals noch kein Mitglied waren). Erstellt von einem Herren namens Carsten Strotmann, der dir nicht gänzlich unbekannt sein sollte. :wink:

Den Percom Block sollte man zuerst lesen, dann ändern und dann schreiben.

Ich habe dazu ein kleines TurboBASIC Programm geschrieben. Ist aber schon einige Jahre her.

VTOC und Boot Sektoren werden nicht beschrieben/geändert/erstellt.

Tschüß

Mathy

Formatieren und der PERCOM Block

von Erhard » Sa 6. Sep 2008, 09:33
Hallo,

ich denke, ich kann Dir alles Notwendige zu diesem Thema
sagen.

Da ich aber selten auf dieser Webseite bin (Interneteinwahl per
Modem ohne Flatrate) würde ich Dich bitten, per echter eMail
Kontakt aufzunehmen.

Dazu kannst Du an floppydoc in dieser Domäne mailen und ich
werde versuchen, Deine eMail im SPAM wiederzufinden.

Alternativ gibt es auf meiner Webseite atari-central.de ein
Kontaktformular, was sich bislang gegen SPAM-Versuche
erfolgreich zur Wehr gesetzt hat.

Viele Grüße

Erhard

von FlorianD » Sa 6. Sep 2008, 10:51
Hallo,

@Mathy: das Buch habe ich, es gibt aber leider keine Auskunft zu den Fragen die ich deswegen hier gestellt habe. Es ist leider oft so in der ATARI Literatur, dass Dinge nicht ganz erklärt sind oder Wissen aus anderen Gebieten/Kapiteln voraussetzen. Und hier fehlt halt der Hinweis, wo der P-Block herkommt. Bei dem FM/MFM ist auf Seite 20 eine 2 für Fussnote, die aber nirgends erklärt wird (oder finde ich sie einfach nicht?)

@Floppydoc: bekommst direkte Mail von mir.

Danke schon mal an alle.

Grüße,
Florian

Re: Formatieren und der PERCOM Block

von tfhh » Sa 6. Sep 2008, 12:27
Moin,
FlorianD hat geschrieben:Hallo,

ich suche Infos zum "Percom Block senden". Soviel habe ich rausgefunden: Befehl $4E Aux1/2=0.
1. Wo lege ich die 12 Bytes des PERCOM Blocks ab? In den Buffer? Womit fülle ich den Rest de Buffers auf? Egal?
2. Byte 6, Aufzeichnungsformat 0=FM 4=MFM, welches nehme ich bei ner 1050 mit Speedy? Und bei einer normalen 1050?
3. Wenn ich mit $21 (normale 1050) formatiere, was kommt dann in AUX1/2? Bei $22 (enhanced Density) muss da $11/$04=17/4 rein

Führen diese Befehle dazu, dass die VTOC und Sektor 1-3 angelegt werden?

Wie bereits andere hier geschrieben haben, solltest Du immer erst den Percom-Block vom Laufwerk lesen, entsprechende Bits setzen oder löschen und dann den Block zum Laufwerk zurückschreiben. Du nimmst irgendwo 12 Bytes her, das definierst Du selbst, wie die Ladeadresse eines Sektors.

Wichtig: Bitte niemals feste Werte programmieren, sondern immer die entsprechenden Bits setzen oder löschen. Dann funzt Dein Programm nämlich mit allen Erweiterungen, die diese entsprechenden Befehle kennen.

Der Percom-Block wird nur vom Format-Kommando $21 beachtet, soweit ich weiß. $22 ist ein Sonderling nur für das Medium-Density-Format (1040 Sektoren) und sollte auch ausschließlich dafür genutzt werden.

FM = Single Density
MFM = Alles ab Medium Density

Die Format-Befehle $21 und $22 schreiben niemals Bootsektoren und/oder VTOC. Das mußt Du selbst erledigen. Beachte, daß Medium-Density (1040 Sektoren) aus 2 VTOCn bestehen (einmal Sektoren ab 369 dez., einmal Sektoren ab 1024 dez.).

Ich habe auch diverse Turbo-Basic und Basic-Programme, die Diskarrangements durchführen, geschrieben. Falls Bedarf an den Sourcen ist, schreibe mir eine Mail. Aber Achtung: Alles unkommentiert und +20 Jahre alt... :-)

Gruß, Jürgen

von Mathy » Sa 6. Sep 2008, 22:14
Hallo Leute

Percom-Block kennen (fast?) alle Laufwerke, ausser 810 (, 815?) und 1050.

Die zwei VTOC's gibt's nur bei Atari DOS 2.5. Beide sind im übrigen zum grössten Teil gleich. Was Atari sich da wohl gedacht hat?

Die VTOC's und warscheinlich auch die Bootsektoren schriebt man bei Atari ähnlichen DOSse auf der Fest- oder Schwabbelplatte wenn man das DOS auf der Platte schreibt.

Tschüß

Mathy

Formatieren und der PERCOM Block

von Erhard » So 7. Sep 2008, 14:57
Hallo,

hier eine Zusammenfassung, die ich offline erstellt habe und jetzt mal hier zur Verfügung stelle:

die SIO sendet ein 4-Byte langes Kommando zum (intelligenten) Peripherigerät und das Gerät führt diesen Befehl aus (wenn es ür dieses Gerät bestimmt ist) und meldet das Ergebnis zurück an den Rechner.

Die SIO wird vom Rechner durch einen Sprung nach $E459 aufgerufen.

Damit die SIO weiß was zu tun ist gibt es den DCB (Device Control Block), der vorher konfiguriert werden muß.

Dies sind die Speicherzellen $300 bis $30F, welche wie folgt definiert sind:

    DDEVIC = $0300
    DUNIT = $0301
    DCOMND = $0302
    DSTATS = $0303
    DBUFLO = $0304
    DBUFHI = $0305
    DTIMLO = $0306
    DUNUSE = $0307
    DBYTLO = $0308
    DBYTHI = $0309
    DAUX1 = $030A
    DAUX2 = $030B
    TIMER1 = $030C
    ADDCOR = $030E
    CASFLG = $030F

Zumindest für die Kommunikation mit Disklaufwerken werden $30C-$30F nicht verwendet.

DDEVIC muß die Kennung des Gerätes beinhalten, welches angesprochen werden soll, bei Disklaufwerken $31.

DUNIT muß die Laufwerksnummer beinhalten, normalerweise 1-8 oder 1-9.

DCOMND muß das auszuführende Kommando beinhalten, z.B. $52 bei Sektor lesen. Nicht alle Geräte können alle Kommandos, so kann eine 1050 ohne Erweiterung kein PERCOM-Kommando.

DSTATS enthalt Angaben über die Richtung, in die Daten übertragen werden sollen: $40 beim Lesen vom Peripheriegerät, $80 beim Schreiben zum Peripheriegerät und $00, wenn das Kommanod keine Datenübertragung erfordert.

DBUFLO/DBUFHI muß die Speicheradresse (des Puffers) beinhalten, wo die Daten abgelegt werden sollen bzw. wo die Daten stehen, die gesendet werden sollen, wenn es sich um ein Schreibkommando handelt.

DTIMLO enthält den Wert in Sekunden, die die Operation normalerweise maximal dauern darf. Dauert sie länger, wird sie abgebrochen und es gibt einen Timeout-Fehler.

DBYTLO/DBYTHI enthält die Menge der zu übertragenden Daten. Dies sind bei einem SD-Sektor 128, bei einem DD-Sektor 256, bei dem Percom-Block 12, bei dem Statusbefehl 4 oder andere Werte je nach Kommando.

DAUX1/DAUX2 enthält Parameter zum Kommando, beim Lesen oder Schreiben eines Sektors eben die Sektornummer. Es gibt Kommandos, die keine Parameter brauchen, wie z.B. die Statusabfrage, das Percom- Kommando oder der Formatierbefehl. Dann sollte man die Werte auf Null setzen.

Nach dem Aufruf der SIO über $E459 wird das Kommando an das Gerät gesendet. Dabei werden nur 5 Bytes übertragen. Dies sind (bei einem Diskettenlaufwerk):

1) Geräte-ID + Laufwerksnummer -1 (Floppy 1 = $31, Floppy 2 = $32 usw)
2) Kommando (z.B. $52 bei Sektor lesen)
3) DAUX1 (unteren 8 Bit der Sektornummer)
4) DAUX2 (oberen 8 Bit der Sektornummer)
5) Prüfsumme

Die länge der zu übertragenden Daten braucht dem Peripheriegerät nicht mitgeteilt werden, da es das ja selbst weiß und die Pufferadresse braucht das Peripheriegerät nicht wissen, da ja der Atari die Daten selbst im Speicher ablegt oder daraus liest.

Ein Puffer muß auch nicht mit irgendwelchen Werten aufgefüllt werden, außer beim Format-Custom Befehl, da dort immer 128 Byte übertragen werden. Dieser Befehl wird selten verwendet und nur bestimmte Laufwerkserweiterungen beherrschen ihn.

Nach dem SIO-Aufruf muß man anhand von Speicherstelle $303 überprüfen, ob das Kommando erfolgreich war. Normalerweise ist 1 = OK, dazu gibt es Geräteabhängige Fehlerlisten.

Bezüglich des PERCOM-Blocks hier einige Beispiele für die Standardformate:

Code: Alles auswählen
        TR SR SH SL DS FM BH BL OL na na na
------------------------------------------------------------------------------
0090    28 01 00 12 00 00 00 80 FF 00 00 00   SD,   720 sectors of 128 bytes
0130    28 01 00 1A 00 04 00 80 FF 00 00 00   MD,  1040 sectors of 128 bytes
0180    28 01 00 12 00 04 01 00 FF 00 00 00   DD,   720 sectors of 256 bytes
0360    28 01 00 12 01 04 01 00 FF 00 00 00   QD,  1440 sectors of 256 bytes
0720    50 01 00 12 01 04 01 00 FF 00 00 00        2880 sectors of 256 bytes
1440    50 01 00 24 01 04 01 00 FF 00 00 00   HD,  5760 sectors of 256 bytes
2880    50 01 00 48 01 04 01 00 FF 00 00 00   ED, 11520 sectors of 256 bytes
HDD/RD  01 01 xx yy 00 04 01 00 FF 00 00 00   any other sectors of 256 bytes


    TR Tracks per disk *1)
    SR Step rate timing
    SH Number of sectors/track high *1)
    SL Number of sectors/track low *1)
    DS Disk is double sided
    FM FM / MFM encoding, FM =$00, MFM =$04
    BH Bytes per sector high
    BL Bytes per sector low
    OL Drive online
    na reserved
    na reserved
    na reserved

Dazu gibt es folgende Anmerkungen:

FM/MFM
======
SD (singe density) ist das einzige Format bei einer Atari 1050, bei der der Controller die Diskette in der Aufzeichnungsart FM formatiert.

Floppy oder Harddisk/Ramdisk/Emulatoren
=======================================
Es gibt zwei Arten des Percom-Blocks. Entweder wird eine echte Diskettengeometrie mit Tracks, Sektoren pro Spur und Seiten beschrieben oder ein Datenträger mit einfach durchgehender Sektornummer. Im zweiten Fall ist die Anzahl der Spuren 1, (bei einer RAMDISK manchmal Null), die Zahl der Seiten ist 0 und die Gesamtzahl der Sektoren steht in SH/SL.

Beispiel für einen Formatierbefehl an D2:
=========================================

    DDEVIC : $31
    DUNIT : $02
    DCOMND : $21
    DSTATS : $40
    DBUFLO : $00
    DBUFHI : $40
    DTIMLO : $E0
    DUNUSE : $00
    DBYTLO : $80
    DBYTHI : $00
    DAUX1 : $00
    DAUX2 : $00
    TIMER1 : $00
    ADDCOR : $00
    CASFLG : $00


Hier gibt es eine kleine Besonderheit: Nach dem Formatieren sendet eine 1050 einen Block von 128 Byte Daten an den Rechner. Angeblich soll dieser Block genauere Informationen über eventuelle defekte Sektoren beinhalten, dies ist aber offenbar vom Hersteller nie wirklich implementiert worden. Dieser Datenblock wird dann im Speicher ab Adresse $4000 abgelegt.

Wann man was wo ablegt oder ablegen kann, muß man natürlich selber wissen, oder natürlich das Programm, welches man verwendet.

Ach ja, der Formatierbefehl bei einer 1050 in der SIO ist ein echtes "low level format". Die magnetische Aufzeichnung des Datenträgers wird neu erzeugt. Und das ist alles, was der Befehl tut. Mit dem Formatier- befehl aus dem DOS heraus hat er nur soviel zu tun, als daß er ein Teil dessen ist, was das DOS beim Formatieren tut. Nach dem "low level" Formatieren bringt ein DOS üblicherweise Bootsektoren, eine Sektor- belegungstabelle und ein Inhaltsverzeichnis auf der Disk unter.

Viele Grüße

Erhard

von Mathy » So 7. Sep 2008, 16:35
Hallo Leute

Die letzten drei Byte des Percom-Blocks erhalten manchmal interessante Info's. Manchmal kann man daraus erkennen, welche Hardware benutzt wird.

Tschüß

Mathy

von FlorianD » So 7. Sep 2008, 23:38
Hallo Erhard,

das war jetzt wirklich erschöpfend beschrieben! Da sind einige Infos drin, die man im Technikhandbuch und auch in anderen Werken leider vergeblich sucht.

Vielen Dank schonmal!

Viele Grüße,
Florian

von Mathy » Mo 8. Sep 2008, 00:10
Hallo Leute

Gibt das SIO2USB einen Percom-Block her? Und wenn ja, was ist in den letzten 3 Bytes?

Tschüß

Mathy

Formatieren und der PERCOM Block

von Erhard » Mo 8. Sep 2008, 15:30
Hi Mathy,

ist ja nicht so, als hätte ich noch nie einen Artikel über dieses
Thema fürs Magazin geschrieben ....

Bei dem SIO2USB schau ich mal nach.
Kommt dann per PM, falls ich Deine Adresse habe.

Viele Grüße

Erhard

von Mathy » Mo 8. Sep 2008, 17:18
Hallo Erhard

Kannst'e auch hier sagen. Die drei Bytes kann ja jeder finden der ein SIO2USB hat.

Hmm, Artikel?? Da muss ich noch mal nachschauen. Kann ich mich nicht erinnern? Hast Du eine Ahnung wann das ungefähr war? Ich bin schon sein Magazin 22 oder so Mitglied. Das sind vielle (Sonder)Magazine zum durchforsten. Und aus irgendeinem Grund, findet man immer eine ganze Menge interessante Artikel bevor man den Artikel findet den man sucht. Wenn man den gesuchten Artikel überhaupt noch findet (oder sich dran erinnert das man im sucht).

Tschüß

Mathy

von Erhard » Mo 8. Sep 2008, 21:24
Hi Mathy,

Und aus irgendeinem Grund, findet man immer eine ganze Menge interessante Artikel bevor man den Artikel findet den man sucht. Wenn man den gesuchten Artikel überhaupt noch findet ...


Das geht mir absolut genau so.

Mir fehlt da ein laufend aktualisierter durchsuchbarer alphabetisch sortierter Index aller Artikel(überschriften) mit Author und Hinweis auf das entsprechende Magazin.

Oder es müßte eine Datenbanksuche über alle Artikelinhalte geben.

Viele Grüße

von Bernd » Mo 8. Sep 2008, 22:41
Hallöchen,

wer suchet, der findet -> das Inhaltsverzeichnis aller Abbuc Ausgaben.....
Kuckste hier

Ich hoffe ich konnte Helfen,
Bernd

von Mathy » Mo 8. Sep 2008, 23:55
Hallo Bernd

Wenn ich darin "percom" oder "block" eingebe, findet er entweder keine Artikel oder nicht den Richtigen.

Schade.

Tschüß

Mathy

von FlorianD » Mo 8. Sep 2008, 23:57
@Mathy: das SIO2USB kann "PercomBlock" lesen und schreiben, u.z. Bytes 1-9 (TR SR SH SL DS FM BH BL OL)

von Mathy » Di 9. Sep 2008, 00:22
Hallo Florian

Mich würden vorallem die Bytes 10-12 interessieren.

Tschüß

Mathy

von FlorianD » Di 9. Sep 2008, 09:03
Die Bytes 10-12 des PERCOM Blocks des SIO2USB werden laut Spec nicht benutzt.

von Mathy » Di 9. Sep 2008, 23:45
Hallo Florian

Danke für's nachschauen.

Hatte ich mir fast schon gedacht das da nichts drin ist.

Tschüß

Mathy

von Dietrich » So 21. Sep 2008, 10:34
Dazu hätte ich auch ein paar Fragen an die Experten:

1) Gibt es Laufwerke, die die Percom-Kommandos nicht kennen und mit Kommando 33 ein anderes Format als Single (720 SD-Sektoren) erzeugen?

2) Gibt es Laufwerke, die zwar das Percom-Get-Kommando kennen, aber nicht das Percom-Put-Kommando? (wäre denkbar, wenn das Laufwerk nur ein Format kennt bzw. das Laufwerk ein ATR ist)

3) Gibt es Laufwerke, die sich zwar über den Percom-Block + Kommando 33 in Medium formatieren lassen, aber nicht mit dem Kommando 34?

4) Welchen Fehler bekommt man, wenn ein Laufwerk beim Percom-Put-Kommando den Percom-Block nicht mag (weil es das gewünschte Format nicht unterstützt)?
- Error 139, weil der Percom-Block falsch ist
- Error 144, weil es das Kommando nicht ausführen kann

5) Welche Laufwerke reagieren allergisch, wenn man ihnen ein Percom-Put ohne voriges Percom-Get schickt (d.h. Überschreiben der Bytes 1, 8-11 im Percom-Block mit irgendwelchen Werten)?

Ich meine hier nicht nur die Atari-Laufwerke, sondern auch Fremdlaufwerke (INDUS, RANA, TOMS, Blackbox, MIO usw.) und Emulatoren.

Gruß Dietrich (der sich das schon immer gefragt hat)
1, 2