von Erhard » Sa 6. Okt 2012, 13:00
Hallo Winfried,
Winfried_Fiedler hat geschrieben:meine Anfrage zum Formatieren ist noch aktuell. Eine Formatierung im Assembler ( Single und Medium ) ist jetzt kein Problem. Es klappt nicht in Double Density.
ok, denn mal los:
Als erstes brauchst Du natürlich eine Floppy, die grundsätzlich DD kann:
- 1050 mit Speedy
- 1050 mit Happy
- HDI
- XF551
- o.ä.
Dann mußt Du beachten, daß einige Laufwerke mehrere Größen in DD beherrschen. Die 1050 mit Speedy kann 180 KB, ende. Das HDI kann aber 180, 360, 720 und 1440 KB.
Entsprechend der gewünschten Größe des Zieldatenträgers muß als erstes ein PERCOM-Block zum Laufwerk gesendet und dann das Formatierkommando übertragen werden.
Um einen gültigen PERCOM-Block zu senden ist es am einfachsten, diesen von der Floppy zu lesen, ihn anzpassen und dann wieder zurückzuschicken.
Das sieht in Assembler wie folgt aus:
LDA #$31
STA $300
LDA #drive ;1-8
STA $301
LDA #$4E ;read PERCOM
STA $302
LDA #$40 ;read data
STA $303
LDA #< PERCOMBUFFER
STA $304
LDA #> PERCOMBUFFER
STA $305
LDA #$1 ;Timeout
STA $306
LDA #12
STA $308
LDA #0
STA $309
JMP $E459
Wenn die Adresse von PERCOMBUFFER $4000 lautet, dann sollte der PERCOM-Bock nach dem Einlesen bei eingelegter SD Disk ungefähr so aussehen:
4000: 28 01 00 12 00 00 00 80 FF 00 00 00
Hier eine kuze Erklärung der einzelnen Werte:
Byte 0: Anzahl der Tracks
Byte 1: Steprate (so lassen)
Byte 2+3: Anzahl der Sektoren pro Spur
Byte 4: Anzahl der Seiten -1
Byte 5: Aufzeichnungsart (FM oder MFM), SD=FM=0, alle anderen MFM=4
Byte 6+7: Anzahl der Bytes pro Sektor
Byte 8: Laufwerk online
Byte 9, 10, 11: reserviert
Um in der 1050 mit Speedy eine Disk in DD zu formatieren, muß der Block wie folgt geändert und wieder gesendet werden:
4000: 28 01 00 12 00 04 01 00 FF 00 00 00
LDA #$31
STA $300
LDA #drive ;1-8
STA $301
LDA #$4F ;wite PERCOM
STA $302
LDA #$80 ;write data
STA $303
LDA #< PERCOMBUFFER
STA $304
LDA #> PERCOMBUFFER
STA $305
LDA #$1 ;Timeout
STA $306
LDA #12 ;Anzahl der Bytes Lo
STA $308
LDA #0 ;Anzahl der Bytes Hi
STA $309
JMP $E459
Nach jedem SIO Kommando $303 prüfen. Wenn dort keine 1 steht, war die Operation nicht erfolgreich.
Nun das Formatierkommando:
LDA #$31
STA $300
LDA #drive ;1-8
STA $301
LDA #$21 ;wite PERCOM
STA $302
LDA #$40 ;read data
STA $303
LDA #< MAP_BUFFER
STA $304
LDA #> MAP_BUFFER
STA $305
LDA #$E0 ;Timeout
STA $306
LDA #128
STA $308
LDA #0
STA $309
JMP $E459
Wenn die Kommandos erfolgreich verlaufen sind, sollte die Disk in DD formatiert sein. Alle Sektoren enthalten nur Nullen, es ist kein Inahltsverzeichnis auf der Disk !!! Die Erstellung eines Dateisystems gehört nicht zum Low-Level-Formatieren.
Viele Grüße
Erhard