Autor Thema: FAT12  (Gelesen 4266 mal)

Kyoko12

  • Beiträge: 59
    • Profil anzeigen
Gespeichert
« am: 31. December 2004, 11:25 »
Hi leute.

Ich habe da mal ne frage: Wie bekomme ich FAT12 auf ne Floppy?

Unter windows formatiert er sie ja mit VFAT16! Wird das durch den Bootloadercode einfach zu nem anderen FAT?
Und wenn nein, wie bekomme ich FAT12 dann drauf? und wie FAT32?
Oder NTFS?

Danke im Vorraus und nen guten rutsch, Kyoko12.

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 31. December 2004, 11:53 »
Hi,

laut Microsoft Dokumentation wird FAT12 auf eine 1,44 MByte Floppy gespielt. Das hat _nur_ was mit der Cluster Zahl zu tun. Je nach Clusterzahl wird ein anderes FAT-Format verwendet. Diese Clusterzahl steht afaik im Bootsektor und ich glaube du kannst sie nicht ohne weiteres Manipulieren, um ein anderes FAT da raufzukriegen. Genaueres steht wohl in der Doku.

Auf jedenfall fällt mir kein Weg ein ein FAT16 oder FAT32 auf die Diskette zu spielen. Ein Grund ebenfalls nicht...

Mit NTFS geht es aber, auch wenns nicht schön ist und du nur noch 1 MByte freien Speicher hast: http://www.sysinternals.com/ntw2k/freeware/ntfsfloppy.shtml

PorkChicken
Dieser Text wird unter jedem Beitrag angezeigt.

BigOlly

  • Beiträge: 88
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 27. January 2005, 18:04 »
Also, hier mal ein Tip an alle die ein FAT12 (oder FAT16) auf eine Floppy bringen wollen ohne das Format-Programm von Windows oder DOS zu benutzen. (was eigentlich Unsinn ist, aber immerhin wurde das hier ja gefragt    )

Beispiel 1, FAT12 auf eine 1,44MB Diskette:
--------------------------------------------------

Zuerst erstellt man einen Bootsector der einer 1,44MB FAT12 Diskette entspricht (was ich hier nicht erkläre weil das ausführlich im Magazin und im TeeJay-Tutorial beschrieben ist).

Direkt hinter dem Bootsector (also in den zweiten 512 Byte) schreibt man die Bytes FF 0F F8 und setzt den Rest der Bytes auf 0x00 also z.b. so:

   db   0xff,0x0f,0xf8
   times 1024-($-$$)-2  db 0

Dannach erstellt man weitere 22 Sectoren die mit 0x00 gefüllt sind, also so:

   times 12288-($-$$)-2  db 0

(jaa, ich weiss, man kann auch das erste times auf 12288 setzen, aber so blickt man vielleicht besser durch)

Jetzt assembliert man das ganze und erhällt ein  12kByte großes Binärfile (1 Bootsector, 1 mit drei Bytes gefüllter Sector und 22 'leere' Sectoren) welches man einfach mit RawWrite auf eine Floppy schreiben kann.

Und schon habt Ihr eine "jungfräulich, frisch formatierte" FAT12-Diskette die auch unter DOS und Windows gelesen und beschrieben werden kann.

(ABER VORSICHT... die Daten auf der Diskette gehen natürlich verloren, klar!)


Beispiel 2, FAT16:
---------------------
Bei FAT16 ist es etwas komplizierter. Im Grunde sollte es genauso funktionieren, nur mit dem Unterschied das in den 2 Sector die Bytes

   db   0xff,0xf8,0xff,0xf8
   times 1024-($-$$)-2  db 0

geschrieben werden müssen und dannach wesentlich mehr leere Sectoren folgen als nur 8. (Die Anzahl ergibt sich aus der Größe des Datenträgers, wer auf Nummer Sicher gehen will schreibt einfach 288 leere Sectoren)
...und schon hat man ein FAT16 formatiertes Medium.

Aber es gibt eine Tücke...! So ziemlich alle FAT16-Medien (und das weiß kaum einer) sind Partitioniert! Jaaa, Ihr habt richtig gehört, auch LS120, Zip100, USB-Sticks and so on....
Ihr könnt also die erstellten Sectoren nicht einfach ab Sector 0 schreiben sondern müsst herausfinden auf welchem Sector die Partition beginnt und das Ganze ab diesem Sector schreiben!

Zweite Tücke: Ihr müsst den BPB im Bootsector Anpassen (insbesondere BPB_TotSec16, BPB_TotSec32 und BPB_HiddenSec), was auch wieder Arbeit macht.


FAZIT:
--------

Wer's wissen will weiß es jetzt (Wissen kann nie schaden), aber Leute, formatiert Eure Dieskette unter Windows oder DOS, dann habt Ihr ein sauberes FAT auf dem Datenträger, mir fällt kein wirklicher Grund ein das von Hand zu machen.


Wer es noch genauer wissen möchte, z.b. was diese ominösen Bytes in Sector 2 bedeuten, oder warum gerade 22 bzw. 288 leere Sectoren folgen kann mich gerne fragen. Wollte das hier nicht zu lang machen.


PS: an TeeJay, falls Du das liest:
Du hattest mal vor etlichen Zeiten in Deinem FAT12 Tutorial geschrieben das Du nicht wüsstest wozu genau der Eintrag "BPB_HiddenSec" gut wäre. Hat sich das erledigt und ist geklärt, oder soll ich das hier mal posten?
(will nicht erst das Ganze Forum durchsuchen um zu sehen ob das hier schonmal geklärt wurde)

Gruß BigOlly
====================================================
Zitat: "Es ist schwierig zu antworten, wenn man die Frage nicht versteht."
(würde mich ja mal interessieren ob jemand weiß woher dieser Satz stammt...)

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 27. January 2005, 18:30 »
Zitat
times 1024-($-$$)-2 db 0

füllst du damit das image nicht nur bis 1022 byte auf? das ist doch zu wenig oder?

@Signatur: Star Trek - Der Film glaub ich
Dieser Text wird unter jedem Beitrag angezeigt.

BigOlly

  • Beiträge: 88
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 27. January 2005, 18:33 »
Ohhh jaaa..... sorry, ich korregiere mich!


aus:

times 1024-($-$$)-2 db 0

muss

times 1024-($-$$) db 0

werden!!!

(bei allen anderen muss die "-2" natürlich auch weg!)



Ich bin ein Opfer von Copy und Paste...  :D
====================================================
Zitat: "Es ist schwierig zu antworten, wenn man die Frage nicht versteht."
(würde mich ja mal interessieren ob jemand weiß woher dieser Satz stammt...)

BigOlly

  • Beiträge: 88
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 27. January 2005, 18:45 »
HA! habs jetzt erst gelesen!

Du hast fast recht PorkChicken...
Aber es ist nicht StarTrek 1 sondern....   8)    naja, nen zweiten Versuch geb ich Dir noch    :lol:


Gruß BigOlly
====================================================
Zitat: "Es ist schwierig zu antworten, wenn man die Frage nicht versteht."
(würde mich ja mal interessieren ob jemand weiß woher dieser Satz stammt...)

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #6 am: 28. January 2005, 01:02 »
Ja erzähl mal was es mit den Hidden_Sec auf sich hat.
Ich weiß es bis heute nicht :)
----------------------
Redakteur bei LowLevel

BigOlly

  • Beiträge: 88
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 28. January 2005, 03:07 »
Also eigentlich ist es ganz einfach.
Ich schildere kurz wie ich drauf gekommen bin.

Nachdem ich den FloppyFAT12-Boocode entwickelt hatte hab ich begonnen FAT16-Bootcode zu basteln, damit ich auch von Zip und LS booten kann.
Dabei habe ich eine Zip100 genauer untersucht um z.b. herauszufinden vieviele Sectoren pro Cluster, wieviel Sectoren pro Track usw. vorhanden sind.
Dabei fand ich zu meinem "Entsetzen" heraus das alle mir unter die Finger gekommenen Zip100, Zip250, LS120, USB-Stick usw. wie Festplatten Partitioniert sind. (Ich erwähnte es schon). Nur halt mit einer großen, Mediumfüllenden Partition.
Und wie das bei Partitionen so üblich ist beginnt die Partition am Anfang des nächsten Tracks. (Der erste Track ist ja durch den MBR (mit Partiton-Table) schon "angerissen")

Bei einer Zip100 sieht das so aus:

- Bootsector
- 31 unbenutzte Sectoren (32 Sectoren pro Track)
- Start der Partition, also Bootsector (Cylinder0, Kopf1, Sector1)

Aber nun konnte ich die Nummern der Sectoren zum einlesen von FAT und  RootDir nicht mehr korrekt berechnen....   Der Bootsector war ja nicht mehr Sector 0 (wie bei FAT12 ohne Partition) sondern in diesem Fall Sector 33, die Fat lag nicht ab Sector 1 sondern ab Sector 34 und das RootDir lag nicht an Sector 1+(Anzahl-Sectoren-beider-FATs)....
(Das Problem potenziert sich noch wenn man an eine Fat16-Partition auf einer Festplatte denkt wo mehr als 1 Partition drauf ist...)

Also hab ich die Zip100 mit DOS bootfähig gemacht und geguckt wie der DOS-Bootcode das macht...
Und siehe da... der benutzte auch den Eintrag Hidden_Sec zur Berechnung...

Ein bisschen Recherche im Netz brachte dann die Lösung...

(Ich weiß, ich weiß, ich schweife aus... aber nun die Erklärung:)


In BpbHiddenSec steht die "Anzahl der Sectoren vor der Partition".

Das ist es schon!
Hidden ist da als Name natürlich Irre führend.
Aber immerhin, denke einfach ein FAT16-Bootcode auf der 2. Partition auf der Festplatte wird gebootet. Der Bootcode müsste erst den MBR einlesen und feststellen: 1. auf welcher Partition er selber liegt und 2. auf welchem Sector die Partition beginnt.  Und dann erst kann der Bootcode Fat, RootDir und Kernel einlesen...
(Ich weiß, das MBR-Programm sollte eigentlich einen Pointer auf den Partition-Table-Eintrag liefern...)

Kurz: Wer von Zip booten möchte muss bei der Berechnung der Sectoren immer den Wert in Hidden_Sec dazuaddieren und dann funktioniert es wie es soll.

(Ich hoffe ich war nicht zu ausschweifend...  :P  )
====================================================
Zitat: "Es ist schwierig zu antworten, wenn man die Frage nicht versteht."
(würde mich ja mal interessieren ob jemand weiß woher dieser Satz stammt...)

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #8 am: 28. January 2005, 12:39 »
Supi Erklärung :)

Jetzt macht der Eintrag auch Sinn!
----------------------
Redakteur bei LowLevel

 

Einloggen