Assemblerroutine zum formatieren der Disk


Assemblerroutine zum formatieren der Disk

von Winfried_Fiedler » Mo 30. Jul 2012, 22:13
Suche für private Zwecke ein Assemblerprogramm zum formatieren der Disketten. Es sollte die Schreibdichten für Single, Medium und Double möglich sein. In welchen Assembler ist egal. Ich habe einiges probiert, aber nur Teilerfolge. Für eine Info wäre ich sehr dankbar.
Im voraus schon mal besten Dank. Gruß wf

Re: Assemblerroutine zum formatieren der Disk

von tfhh » Di 31. Jul 2012, 09:05
Moin Winfried,

Winfried_Fiedler hat geschrieben:Suche für private Zwecke ein Assemblerprogramm zum formatieren der Disketten. Es sollte die Schreibdichten für Single, Medium und Double möglich sein. In welchen Assembler ist egal.

Was genau brauchst Du denn da bzw. unter welchen Voraussetzungen soll das ganze nachher laufen?

Wenn Dein Programm sowieso ein DOS voraussetzt, wäre es doch einfachsten, einfach über einen XIO Aufruf die Disks zu formatieren. Die dafür nötigen Kommandos sind im Profibuch (ich habe sie nicht im Kopf), für Double-Density funktioniert der "neue" Parameter sowohl unter myDOS, XDOS als auch dem Happy-DOS einwandfrei.

Wenn das Ganze auch funktionieren soll, wenn kein DOS geladen ist, dann mußt Du alles selbst machen, d.h. Format-Befehl per SIO, Bootsektor beschreiben, Directory und VTOC anlegen.

Ich denke, für beides lassen sich Code-Schnipsel finden, würde ich dann mal in meinen Fossilen wühlen :D

Gruß, Jürgen

Re: Assemblerroutine zum formatieren der Disk

von alers » Mi 15. Aug 2012, 13:51
Also für den BiBo müßte ich in den ,,Unweiten'' meiner Disketten noch was dazu haben, einmal fertige Module für die Variante mit dem BiBo-DOS, und natürlich auch für die Variante ohne geladenem DOS, sofern Du eine Speedy einsetzt (Nicht Mini-Speedy, nur da nicht, weil ich es nie mit ner Mini-Speedy getestet habe, könnte aber auch da klappen, mit ner normalen 1050 gehts aber nicht).
Auch die Variante für die ,,großen'' Floppy-Drives habe ich irgendwo noch, da ich seit Jahren nur noch mit ner XF arbeite. Sobald ich es gefunden habe (Kann ehrlich Wochen dauern, da jeder der mich kennt, weiß wie die Ordnung in meinen Disk-Sammlungen ist ;-) ) schick ich Dir ne PM.

Re: Assemblerroutine zum formatieren der Disk

von Jac » Sa 25. Aug 2012, 23:41
DOS 2.5:
http://www.atariarchives.org/mapping/appendix17.php
Formatting the disk by the XIO command is enhanced. The usual
method is XIO 254, #1,0,0,"D1:." This will format the disk, trying first
for dual density, and if the drive doesn't support it, formatting in
single (2.0) density. XIO 253, #1,0,0,"D1:" formats a disk with single
density only (a new option--P--has been added to the DOS menu to
format in single density as well). XIO 253, #1,34,0,"D1:" will format a
disk in dual density only.

Damit sollte das gehen:

ldx #$10
lda #254
sta $342,x
lda #<FILESPEC
sta $344,x
lda #>FILESPEC
sta $345,x
jsr CIOV


FILESPEC .byte "D1:",$9b

Assemblerroutine zum formatieren der Disk

von Erhard » Di 25. Sep 2012, 09:09
Hallo Winfried,

ist Deine Anfrage noch aktuell?

Viele Grüße

Erhard

Re: Assemblerroutine zum formatieren der Disk

von Winfried_Fiedler » Fr 5. Okt 2012, 21:56
Hallo Erhard

meine Anfrage zum Formatieren ist noch aktuell. Eine Formatierung im Assembler ( Single und Medium )

ist jetzt kein Problem. Es klappt nicht in Double Density.

Für eine Information darüber wäre ich sehr dankbar. ( Assembler-Routine )

Im voraus schon mal danke . Gruß w.fiedler :D

Assemblerroutine zum formatieren der Disk

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

Re: Assemblerroutine zum formatieren der Disk

von Winfried_Fiedler » Mo 8. Okt 2012, 10:44
Hallo Erhard,
vielen Dank für Deine perfekte Erklärung. Diese Routine funktioniert. Danke w.f

Assemblerroutine zum formatieren der Disk

von Erhard » Mo 8. Okt 2012, 14:16
Hi Winfried,

Winfried_Fiedler hat geschrieben:Diese Routine funktioniert


das überrascht mich ein wenig, hätte ich doch zumindest mit einem Tippfehler gerechnet ...

Viele Grüße

Erhard