Re: exotische Disketten und dd

From: Joerg Wunsch <j(at)uriah.heep.sax.de>
Date: Mon, 17 Sep 2001 09:04:07 +0200

As Marc Santhoff wrote:

> Es sind DS/DD 80 Spur Scheiben,
> 16 Sektoren pro Spur
> 256 Bytes pro Sektor.

Damit funktioniert keine der vorgefertigten Density-Einstellungen,
da die alle von 512 Bytes pro Sektor ausgehen.

Mit fdcontrol unter FreeBSD kannst Du andere Densities einstellen.
Allerdings ist das Bedienerinterface des Kommandos schrecklich und
praktisch undokumentiert. Ich bin gerade dabei, daß in
FreeBSD-current alles komplett zu überarbeiten (Anlaß war der Aufbau
einer automatischen Formaterkennung). Dort geht dann sowas:

uriah # fdcontrol -F /dev/fd1.640
15,512,0xff,0x1b,80,500,2,0x54,1,0,+mfm
uriah # fdcontrol -s 16,256,,,,300 /dev/fd1.640
uriah # fdcontrol -F /dev/fd1.640
16,256,0xff,0x1b,80,300,2,0x54,1,0,+mfm

-F gibt die aktuelle Definition aus, wobei der Default für alle
Subdevices 1.2 MB ist bei einem 1.2 MB Laufwerk. Mit -s kann man
einzelne Teile der Definition verändern, in dem Fall also auf 16
Sektoren je 256 Bytes und 300 kbps.

Für Standardformate kann man natürlich auch Kurzbezeichnungen wählen:

uriah # fdcontrol -f 720 /dev/fd0.720
uriah # fdcontrol -F /dev/fd0.720
9,512,0xff,0x20,80,250,2,0x50,1,0,+mfm

> Das Kommando
>
> dd if=/dev/fd0(.640) of=file bs=256
>
> will nicht. Je nachdem, welches Device benutzt wird
> gibt es dies:
>
> fd0c: hard error reading fsbn 0 (ST0 40<abnrml> ST1 1<no_am> ST2 0 cyl 0 hd 0 sec 1)

Falsche Datenrate (500 kbps zum Lesen, Diskette ist aber DD, braucht
also 300 kbps). Folglich wird keine einzige Adreßmarke gefunden
(no_am).

> fd0c: hard error reading fsbn 0 (ST0 40<abnrml> ST1 4<sec_not_fnd> ST2 0 cyl 0 hd 0 sec 1)

Die Datenrate stimmt, aber der gewünschte Sektor ist nicht auf der
Spur (sec_not_fnd). Da es einen Sektor 1 immer geben sollte, liegt es
in diesem Falle daran, daß die Sektorgröße nicht stimmt. Deine
Leseanforderung war für einen Sektor mit 512 Bytes gebaut (C=0, H=0,
R=1, N=2), auf der Diskette findet sich aber keine Sektor-ID mit
diesen Werten (sondern nur eine mit C=0, H=0, R=1, N=1).

Wie gesagt, mit fdcontrol läßt sich das beheben, ich hatte jahrelang
sowas in meiner rc.local, um auf meine alten 800 KB CP/M-Floppies
(80 * 2 * 5 * 1024) zugreifen zu können:

# set 800 KB device of fd1 to 2*80*5*1024
echo "5
3
0xff
0x10
80
800
1
1
2
0x2e
1" | fdcontrol /dev/fd1.800 > /dev/null

Die Bedeutung der Felder erfährst Du (leider) nur in
<machine/ioctl_fd.h> bzw. jetzt <sys/fdcio.h>.

Du brauchst dann auch kein dd mehr, der CP/M-Emulator kann da auch
direkt drauf zugreifen. Falls Du Disketten hast, deren erste Spuren
vom eigentlichen Datenteil abweichend formatiert sind, /kannst/ Du
nichtmal mehr dd dafür nehmen, während der CP/M-Emulator bei passender
Definition der Floppy trotzdem funktionieren sollte (dieweil er
einfach niemals eine Leseanforderung an die abweichend formatierten
Spuren schickt).

Hier mein Alias für den CP/M-Filesystemkonverter zum Zugriff auf
obige 800 KB Floppies:

cpm800 (cpm -i -s 1 -b 2048 -m 192 -l 1024 -r 5 -t 160 -R 0 /dev/fd1.800)

-- 
cheers, J"org               .-.-.   --... ...--   -.. .  DL8DTL
http://www.sax.de/~joerg/                        NIC: JW11-RIPE
Never trust an operating system you don't have sources for. ;-)
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Mon 17 Sep 2001 - 09:27:28 CEST

search this site