SF16
の編集
http://oswiki.osask.jp/?SF16
[
トップ
] [
編集
|
差分
|
バックアップ
|
添付
|
リロード
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
(AT)BIOS
(AT)iomap
(AT)keyboard
(AT)memorymap
(DMAC)8237A
(FDC)765A
(PCI)class
(PCI)vendor
(PCI)vendor/1000
(PCMCIA)CIS
(PIC)8259A
(PIT)8254
(TOWNS)iomap
(TOWNS)memorymap
(serial)PC16550
.mjt
APM
ASKA
ATA
BackerOS
BayOS
BracketName
CardAdapter
CardBus
CompactFlash
DOMOO
DiskExplorer
ECC
FirstStep
FormattingRules
FrontPage
GO
GO/nask
GRUB
Help
IMGTOL
IPL
InterWiki
InterWikiName
InterWikiSandBox
K
KHBIOS
KHDOS
KONOX
KOZOS
Kernel
Kohのページ
M59
MenuBar
MiSt
Mona
Mono
Muleon
NOS
OSASK
PCI
PCIC
PCMCIA
PCカードATA
PHP
ProjectArcadia
PukiWiki
PukiWiki/1.4
PukiWiki/1.4/Manual
PukiWiki/1.4/Manual/Plugin
PukiWiki/1.4/Manual/Plugin/A-D
PukiWiki/1.4/Manual/Plugin/E-G
PukiWiki/1.4/Manual/Plugin/H-K
PukiWiki/1.4/Manual/Plugin/L-N
PukiWiki/1.4/Manual/Plugin/O-R
PukiWiki/1.4/Manual/Plugin/S-U
PukiWiki/1.4/Manual/Plugin/V-Z
RTL8139
RecentDeleted
SF16
SF32
SandBox
Sero
SitePolicy
TI
TOWNS
TOWNSのメモリカードスロット
VESA
VGA
VGA/text
Virtual8086_mode
WikiEngines
WikiName
WikiWikiWeb
Wisteria
X DOS
YukiWiki
Zakky
administration
algorithms
backup/Lights計画
bo
bochs
deskmanta
dsk
e-bios
ecural
formats
hardwares
henoheno
impressions
introduction
licenses
links
m0v3
maintenance
members
memcard
memcard/speed
microkernel
microkernel/log0
nkenkou
others
paging
pcctol
pcecho
pekon
populars
projects
qemu
segmentation
seiya
softwares
tyama501
名無しさん
* SF16のページ -メディアの総容量に関わらず、FAT12になるのを回避し、FAT16にしてしまう、[[K]]が提案したフォーマット。 --FAT12はFATの管理がややこしいが、FAT16はやさしい。 -FATの位置やルートディレクトリの位置とエントリ数などが固定されているために、ソフトウェアからは非常に扱いやすい。 -ディスクイメージをほんの少しいじるだけで、2GBまでのメディアに柔軟に対応可能。 -セクタがきれいにアラインされている。 --これによりメモリカードなどでは、''書き込み速度の向上や、寿命延長などの効果が期待できる。'' ---ただしSF16_40じゃないと効果がないだろうと思われる。 -特にSF16_40がよく使われる(32KBクラスタ)。 --他にSF16_08(4KBクラスタ)とSF16_01(0.5KBクラスタ)がある。 --もちろん20、10、04、02もあるが、そこまでサポートしなくてもSF16対応と名乗っていい。 -Windowsはフォーマットシグネチャを読まずに、容量だけでFAT16かFAT12を決め付ける仕様になっている。このせいで容量が小さいメディアを普通にSF16にすると、FAT12と誤認され正しくアクセスできない。これを回避するためにSF16仕様では、少ない容量メディアに対してのみ不良セクタが末尾にたくさんあるように見せかけることを許す。 --当然この場合でも空き容量は正しく表示される(総容量が最大容量になる)。 --imgtol0ではfコマンドでこの誤認回避のための処置を自動で行なうが(もちろん総容量が十分にあるときは行なわない)、これを抑制することも可能。 ---抑制するには、fコマンドではなくFコマンドを使う。 ---その場合、たぶんWindowsでは誤認して読み書きできなくなるので注意が必要。 --pcctol0ではfコマンドでこの誤認回避のための処置を自動で行なうが(もちろん総容量が十分にあるときは行なわない)、これを抑制することも可能。 ---抑制するには、fコマンドではなくeコマンドを使う。 ---その場合、たぶんWindowsでは誤認して読み書きできなくなるので注意が必要。 --SF16に正式対応したOSやツールでは、この処置がされていてもメディアの総容量は常に正しく認識される。 -サポートできる容量範囲: --星の数はおすすめ度数 --(Win対策しなくなる容量については、技術的な参考のために書いただけで、気にする必要はありません。) |フォーマット|クラスタサイズ|最大容量|Win対策しなくなる最低容量| |SF16_40 **|32KB|2GB|128.4MB| |SF16_20|16KB|1GB|64.4MB| |SF16_10|8KB|512MB|32.4MB| |SF16_08 *|4KB|256MB|16.4MB| |SF16_04|2KB|128MB|8.4MB| |SF16_02|1KB|64MB|4.4MB| |SF16_01 *|512B|32MB|2.4MB| *** フォーマット -SF16ではセクタ単位で考えるのではなく、すべてバイト単位で考える。したがって、セクタサイズが違ってもディスクイメージは同じになる。 --純粋なFAT16として見た場合、データは512バイトセクタのときのパラメータになっている。 |0000_0000 - 0000_004F|80B|ブートセクタのうちのSF16情報領域| |0000_0050 - 0000_01EF|416B|ブートセクタのうちのOS用開放領域| |0000_01F0 - 0000_01FF|16B|(ブートセクタのうちのKHBIOS用情報領域)| |0000_0200 - 0000_0203|4B|(Win95スキャンディスクバグ回避用領域)| |0000_0204 - 0000_5FFF|23.5KB|リザーブ領域のうちのOS用開放領域| |0000_6000 - 0000_7FFF|8KB|(リザーブ領域のうちのKHBIOS用情報領域)| |0000_8000 - 0002_7FFF|128KB|FAT| |0002_8000 - 0004_7FFF|128KB|FATのコピー| |0004_8000 - 0004_FFFF|32KB|ルートディレクトリ| |0005_0000 -||ファイル領域| -ブートセクタのうちのSF16情報領域: 000 jj jj jj jj jj jj jj jj jj jj jj 00 02 ## 40 00 010 02 00 04 xx xx F8 00 01 ?? ?? ?? ?? ?? ?? ?? ?? 020 xx xx xx xx ?? ?? 29 ?? ?? ?? ?? jj jj jj jj jj 030 jj jj jj jj jj jj 46 41 54 31 36 20 20 20 jj jj 040 53 46 31 36 xx xx 00 x0 xx xx xx xx 00 00 00 00 050 - これ以降は01F0まですべてjj - 1F0 kk kk kk kk kk kk kk kk kk kk kk kk kk kk jj jj --jjは自由なバイト。いかなる用途に使ってもよい。ただし000-04Fの範囲については、FAT16におけるシグネチャやボリュームネーム情報部分だったりするので、ツール等で破壊される恐れがある。 --??はFAT16でインストール先のメディアに併せてKHBIOS系のツールが書き換える可能性があるバイト。 --##はクラスタサイズ。 --kkはKHBIOS用のリザーブとしてもっともふさわしいところだが、まあ空きがなければないで、KHBIOS側でなんとかできる。余裕があったら空けておくのが吉。 --xxはパーティション容量を表わすバイト。 ---048-04B:ファイル領域の総クラスタ数 * ## + 0x280。 ---044-045:アクセス可能な最大クラスタ番号 + 1(つまりファイル領域の総クラスタ数 + 2)。 ---047のbit4-7:拡張フラグ(デフォルトは0000) ---020-023:048-04Bのコピー、もしくは、Windowsを騙すために0xffee * ## + 0x280。 ---013-014:もし022-023が0000なら、ここは020-021のコピー。そうでなければ、ここは0000。 --00B-00C:SF16では実際のセクタサイズに関係なく、常に0200に固定。 -Win95スキャンディスクバグ回避用領域: 0200 F8 FF FF FF -拡張フラグについて --bit4:FATが特殊形式だと1。特殊形式とは、FATのチェインが次のクラスタをさしている部分をfffeに置換しただけのものである。また第二FATはオールゼロ。 --bit5:全てのファイルが連続したクラスタに配置されているモードだと1。 //--bit6:既存ファイルのアロケートサイズ変更禁止がONだと1。 --bit6:リザーブ。 --bit7:リザーブ。 //---アロケートを0にすることももちろんできないので、ファイルの削除もできないことになる。 //--bit7:ディスクイメージ全体に対するライトプロテクトがONだと1。 --これらの拡張フラグについてはサポートしなくても良いが、できればチェックはして、理解できない状況であればエラーにするくらいの対応をしてもらえるとうれしい。 -(参考) --KHBIOS関連ツールで初期化した場合では「MBR+リザーブ」で64KBを確保し、パーティションサイズはすべて64KB単位で確保されるため、このSF16フォーマットを採用すると、ブートセクタ位置とファイル領域開始位置は64KBアライン、FAT開始位置とルートディレクトリ開始位置は32KBアラインされることになる。 *** SF16 のメリット -アラインに配慮されており、メモリカードの消去ブロックとの相性がよい。 -MOやCD-ROMなどセクタ長が異なる場合でも、ディスクイメージが同一になり、ファイルシステムドライバは単純化可能。 -ディスクイメージを少しいじるだけで容易に総容量を変更できる。 --たとえば128MB用のディスクイメージを1.5GBのパーティションに書き込むことができる。 -可変長部分が少ないのでFAT16をフルサポートするよりも楽。 -FAT16をサポートしていれば、SF16も読み書きできる。 --SF16しかサポートしないプログラムからは、FAT16は扱いきれない。 --だから2GB以下のデバイスは、みんなSF16になっちゃえばいいと思う。 ---HDDやメモリカード類はもちろんのこと、CD-ROM、FD、MO、ZIPなども。 *** SF16 のデメリット -FAT16のサブセットでしかないため、FAT16に存在する欠陥を全て引き継ぐ。 -FAT領域のサイズやルートディレクトリのサイズ、そしてたくさんのアライン用リザーブがあるため、容量的には効率がよくない。 --例えば1440KBのデバイスに対して、FAT16なら最大で1436KBをファイル領域に割り当てられるが、SF16だと1120KBしかファイル領域に割り当てられない(ディスク容量に関わらず常に320KBを管理領域に要する)。 *** SF16 のドライバの例 -(例えばリアルモード用の簡易なやつ、しかもクラスタサイズ32KB限定で、1GB以降にはアクセスしない簡易仕様) -4KB単位でデバイスを読み書きするような汎用的なドライバを作る --FDの場合はさらに下請けで1KB単位で読み書きするやつを作って、4KBで依頼された仕事を4回の呼び出しに単純分割してやるとかすると楽そうだな。 --こういう風にしておけばMOやCD-ROMなどでかいセクタのデバイスも同じように扱えて便利。 --SF16だけを前提にしているうちは、絶対にアクセスは4KB単位(というか本当は32KB)で、話はとても単純になる。 -そのドライバで最初の4KBをバッファに読み、次の部分を確認(ここでいう「最初」はHDDとかの場合はパーティションの最初という意味) --+0x40-+0x43の4バイトが 0x53 0x46 0x31 0x36 であることをチェック(シグネチャ:"SF16")。 --+0x0dの1バイトが0x40であることをチェック(SF16_40)。 --一致しなかったらこのフォーマットは分かりませんでしたエラーを出す。 -FATの部分のうちの最初の64KBを読み込む -ルートディレクトリ32KBも読み込む -後は0x8000以降のFATにアクセスしようとしたら、未サポートエラーにでもしておく --こうすればリアルモードでもかなり簡単にFATをたどれる。 --1GBしか読み書きできないが、これだけの手間でここまでできてしまうのは非常にらくだと思う。もうちょっとがんばりたくなったときに2GBに対応すればいい(それでもFATのバッファを2倍にしてFATをたどるときにちょっと頑張るだけでいい)。 -この例ではセクタサイズも32KB固定なので、クラスタ番号からセクタ番号等に変換するルーチンもものすごく単純 --ここを可変にするとそれだけですぐにSF16_01~SF16_40の全てに対応できることになる。 -ということで[[OSASK]]でのサポートもやろうとおもえばすぐできちゃう(OSASKは32bitなので、より一層楽) *** おまけ FAT16 vs FAT12 -FAT12はFAT16に対して以下の点で優れている --FAT用領域が25%削減できる。 -FAT12はFAT16に対して以下の点で劣っている --アクセスがめんどう。 --4096クラスタ以上が扱えない。 -[[K]]が簡易柔軟フォーマットの提案に際してFAT12を廃し、FAT16ベースのみにした理由 --4096クラスタ制限は可変長ディスクイメージの実現にはあまりに大きな障害。 --FAT12とFAT16のサポートをするくらいなら、FAT16のみにしてしまったほうが楽(判別する手間もなくなるし)。 --仮にちょうど4096クラスタの場合で、FAT16からFAT12に変更したとしても、容量は4KBしか得をしない。 ---SF16ではクラスタ位置のアラインなどが当然のように行われているため、4KBの差はただのリザーブ領域の増加を招くだけに過ぎない。 ---リザーブをわずか4KB増やすだけのために、FAT12とFAT16の判別と、FAT12の処理の複雑さを受け入れることは、合理的ではないと判断。 * 対応状況 *** 凡例 |◎|Win対策しないでも正しく認識 (もちろんWin対策してもOK)| |○|Win対策したものが正常動作| |△|Win対策したら動作しないが、クラスタサイズを小さくしてWin対策を回避すると正常動作| |×|何をやっても誤動作| *** OS |OS|ATA-HDD|PCカード|USB|備考| |Windows 95 OSR2.0|○|○|-|◎ではないことも確認済み| |Windows 98||○||◎ではないことも確認済み| |Windows 98SE||||| |Windows ME||||| |Windows XP||○|○|◎ではないことも確認済み| -PCカードというのは、PCカード接続のカードメモリ(PCカードATA系デバイス)。 -空欄は、試してないけどたぶんOK。 -ここにあがってない他のデバイスはためしてないけど多分駄目。 ----- -検証方法(他の方法でもよいが、確実な方法の例): >''[事前準備]'' --OSASKのおすすめ版をダウンロードして、 prompt>imgtol e osaimgat.bin fdimage0.bin 1440 --とやって、FDIMAGE0.BINという1440KBのファイルを用意しておく。 --128MB未満のメディアに対してDOSなどで(DOSプロンプトは不可)、pcctolのfコマンドでSF16_40.EIIを書き込む。これでメディアはSF16フォーマット(Win対策あり)になる。 prompt>pcctol f 20 sf16_40.eii (NOT DOS-PROMPT!!) >''[実験 (実験したいOS上でやる)]'' --実験したいOS上で、このメディアのプロパティをみて、総容量が1.99GBで、かつ空き容量がメディアの本当の容量程度になっていることを確認。 ---これで総容量が1.99GBではなく、正しく表示されていればそれはSF16完全対応OSだろう。 ---この時点で空き容量がおかしければ、以下を試すまでもなく認識失敗。 --このメディアに対して、実験したいOS上で、先ほどのFDIMAGE0.BINを書き込む。 >''[確認 (OSASK上でやる)]'' --そして今度はOSASKを起動し、このメディアをPCカード接続(もしくはATA接続)で、OSASKから認識させてみる。 --これで正しく認識できれば、先の書き込みテストはうまくいっていたことになる。書き込みテストでうまくいけば、読めるのは確実なので、テストする必要はない。 --OSASKを使わずに、試したいOS上で読み書きできればそれでOKなんじゃないかと思うかもしれないが、誤認したまま誤認した方法で読み書きできちゃったりすることもあるので、やはり書き込ませた内容を、確実にSF16を解釈できるOSで(たとえばOSASKで)、認識させてみる必要があるだろう。 >''[補足]'' --[実験]は該当OS上でやる必要があるが、[事前準備]と[確認]は違うPCの違うOS上でやってかまわない。 *** デジタルカメラ |メーカ|機種名|対応|備考| |Canon|[[PowerShot A200:http://web.canon.jp/Imaging/PSA200/index-j.html]]|○|◎ではないことも確認済み| |FUJIFILM|[[DS-20:http://www.fujifilm.co.jp/products/ds20/]]|○|| |KODAK|[[DC4800:http://wwwjp.kodak.com/JP/ja/digital/cameras/dc4800/index.shtml]]|○|クラスタサイズが小さいとだめらしい(sf16_01では×)| //|KODAK|[[DC4800:http://wwwjp.kodak.com/JP/ja/digital/cameras/dc4800/index.shtml]]|○|sf16_01では不可→◎でない?| |OLYMPUS|[[C-200ZOOM:http://olympus-imaging.jp/jp/imsg/LineUp/Digicamera/C200z/]]|×|| |RICOH|[[Caplio RR30:http://www.ricoh.co.jp/dc/product/rr30/]]|○|| |TOSHIBA|[[Allegretto M70:http://www.toshiba.co.jp/mobileav/camera/allegretto/products/m70/spec.htm]]|○|| *** PDAなど |メーカ|機種名|対応|備考| |SONY|[[PEG-N600C:http://www.sony.jp/products/Consumer/PEG/PEG-N600C/]]|△|| //-USBタイプアダプタ //|メーカ|機種名|対応| //|century|[[CMR-KING:http://www.century.co.jp/products/cmr_king.html]]|○ (SMのみ確認)| * こめんと欄 -FAT12ってそんなに扱いにくいかなあ? そりゃFAT16の方が楽ですけど。 -- [[I.Tak.]] SIZE(10){2003-10-06 (月) 10:31:38} -とりあえず僕の見解を「FAT12 vs FAT16」に書いておきました。 -- [[K]] SIZE(10){2003-10-06 (月) 11:54:20} -FAT12/FAT16のスレッショルドは4096クラスタじゃないですよ;-) -- [[揚げ足えな]] SIZE(10){2003-10-08 (水) 10:20:31} -000や001やff7以降が使えないから差し引いてね、っていう意味でしょうか。ええとそれなら分かっていて書いています。・・・いやその細かいことを書くのはどうかなと思って、あえて分かりやすい間違った数字を書きました。 -- [[K]] SIZE(10){2003-10-08 (水) 11:48:40} -[[OSASKスレPart6だすYO! :http://pc.2ch.net/test/read.cgi/os/1063448116/l50]]の309さんのレポートのおかげで、動作確認一覧が急速に充実しました。心からお礼申し上げます。SF16の育ての親といえるかもしれません。 -- [[K]] SIZE(10){2003-10-22 (水) 01:12:48} -Win95OSR2.0では、FDをSF16フォーマットした後、一度ドライブから取り出して、再度ドライブ入れて読み出せば、ちゃんと認識できる(もちろんWin対策は必要)。今までできないと思っていたのでとてもびっくり!。うれしい。ちょっとだけWIn95を見直した。 -- [[K]] SIZE(10){2003-12-28 (日) 15:21:14} -「 フォーマット」のところの拡張フラグについて追記。 -- [[K]] SIZE(10){2004-04-03 (土) 01:51:42} -%%SF16でWin2000が落ちる問題を確認しました。CFは16MB、SF16_40でのフォーマットです。開くとフリーズするのでプロンプトからすばやくフォーマットしたところ、ファイルシステムはFATと認識されていなかったようです。しかし、突然認識できなくなったので先日他のPCで読み込んだ影響かもしれません。OSASKで起動すると、普通に使えました。btcfでの起動も可能です。%%フォーマット後も問題が発生したので、どうやらSF16の問題ではなくカードの故障のようです。 -- ''Zakky'' SIZE(10){2004-10-03 (日) 14:50:24} #comment
タイムスタンプを変更しない
* SF16のページ -メディアの総容量に関わらず、FAT12になるのを回避し、FAT16にしてしまう、[[K]]が提案したフォーマット。 --FAT12はFATの管理がややこしいが、FAT16はやさしい。 -FATの位置やルートディレクトリの位置とエントリ数などが固定されているために、ソフトウェアからは非常に扱いやすい。 -ディスクイメージをほんの少しいじるだけで、2GBまでのメディアに柔軟に対応可能。 -セクタがきれいにアラインされている。 --これによりメモリカードなどでは、''書き込み速度の向上や、寿命延長などの効果が期待できる。'' ---ただしSF16_40じゃないと効果がないだろうと思われる。 -特にSF16_40がよく使われる(32KBクラスタ)。 --他にSF16_08(4KBクラスタ)とSF16_01(0.5KBクラスタ)がある。 --もちろん20、10、04、02もあるが、そこまでサポートしなくてもSF16対応と名乗っていい。 -Windowsはフォーマットシグネチャを読まずに、容量だけでFAT16かFAT12を決め付ける仕様になっている。このせいで容量が小さいメディアを普通にSF16にすると、FAT12と誤認され正しくアクセスできない。これを回避するためにSF16仕様では、少ない容量メディアに対してのみ不良セクタが末尾にたくさんあるように見せかけることを許す。 --当然この場合でも空き容量は正しく表示される(総容量が最大容量になる)。 --imgtol0ではfコマンドでこの誤認回避のための処置を自動で行なうが(もちろん総容量が十分にあるときは行なわない)、これを抑制することも可能。 ---抑制するには、fコマンドではなくFコマンドを使う。 ---その場合、たぶんWindowsでは誤認して読み書きできなくなるので注意が必要。 --pcctol0ではfコマンドでこの誤認回避のための処置を自動で行なうが(もちろん総容量が十分にあるときは行なわない)、これを抑制することも可能。 ---抑制するには、fコマンドではなくeコマンドを使う。 ---その場合、たぶんWindowsでは誤認して読み書きできなくなるので注意が必要。 --SF16に正式対応したOSやツールでは、この処置がされていてもメディアの総容量は常に正しく認識される。 -サポートできる容量範囲: --星の数はおすすめ度数 --(Win対策しなくなる容量については、技術的な参考のために書いただけで、気にする必要はありません。) |フォーマット|クラスタサイズ|最大容量|Win対策しなくなる最低容量| |SF16_40 **|32KB|2GB|128.4MB| |SF16_20|16KB|1GB|64.4MB| |SF16_10|8KB|512MB|32.4MB| |SF16_08 *|4KB|256MB|16.4MB| |SF16_04|2KB|128MB|8.4MB| |SF16_02|1KB|64MB|4.4MB| |SF16_01 *|512B|32MB|2.4MB| *** フォーマット -SF16ではセクタ単位で考えるのではなく、すべてバイト単位で考える。したがって、セクタサイズが違ってもディスクイメージは同じになる。 --純粋なFAT16として見た場合、データは512バイトセクタのときのパラメータになっている。 |0000_0000 - 0000_004F|80B|ブートセクタのうちのSF16情報領域| |0000_0050 - 0000_01EF|416B|ブートセクタのうちのOS用開放領域| |0000_01F0 - 0000_01FF|16B|(ブートセクタのうちのKHBIOS用情報領域)| |0000_0200 - 0000_0203|4B|(Win95スキャンディスクバグ回避用領域)| |0000_0204 - 0000_5FFF|23.5KB|リザーブ領域のうちのOS用開放領域| |0000_6000 - 0000_7FFF|8KB|(リザーブ領域のうちのKHBIOS用情報領域)| |0000_8000 - 0002_7FFF|128KB|FAT| |0002_8000 - 0004_7FFF|128KB|FATのコピー| |0004_8000 - 0004_FFFF|32KB|ルートディレクトリ| |0005_0000 -||ファイル領域| -ブートセクタのうちのSF16情報領域: 000 jj jj jj jj jj jj jj jj jj jj jj 00 02 ## 40 00 010 02 00 04 xx xx F8 00 01 ?? ?? ?? ?? ?? ?? ?? ?? 020 xx xx xx xx ?? ?? 29 ?? ?? ?? ?? jj jj jj jj jj 030 jj jj jj jj jj jj 46 41 54 31 36 20 20 20 jj jj 040 53 46 31 36 xx xx 00 x0 xx xx xx xx 00 00 00 00 050 - これ以降は01F0まですべてjj - 1F0 kk kk kk kk kk kk kk kk kk kk kk kk kk kk jj jj --jjは自由なバイト。いかなる用途に使ってもよい。ただし000-04Fの範囲については、FAT16におけるシグネチャやボリュームネーム情報部分だったりするので、ツール等で破壊される恐れがある。 --??はFAT16でインストール先のメディアに併せてKHBIOS系のツールが書き換える可能性があるバイト。 --##はクラスタサイズ。 --kkはKHBIOS用のリザーブとしてもっともふさわしいところだが、まあ空きがなければないで、KHBIOS側でなんとかできる。余裕があったら空けておくのが吉。 --xxはパーティション容量を表わすバイト。 ---048-04B:ファイル領域の総クラスタ数 * ## + 0x280。 ---044-045:アクセス可能な最大クラスタ番号 + 1(つまりファイル領域の総クラスタ数 + 2)。 ---047のbit4-7:拡張フラグ(デフォルトは0000) ---020-023:048-04Bのコピー、もしくは、Windowsを騙すために0xffee * ## + 0x280。 ---013-014:もし022-023が0000なら、ここは020-021のコピー。そうでなければ、ここは0000。 --00B-00C:SF16では実際のセクタサイズに関係なく、常に0200に固定。 -Win95スキャンディスクバグ回避用領域: 0200 F8 FF FF FF -拡張フラグについて --bit4:FATが特殊形式だと1。特殊形式とは、FATのチェインが次のクラスタをさしている部分をfffeに置換しただけのものである。また第二FATはオールゼロ。 --bit5:全てのファイルが連続したクラスタに配置されているモードだと1。 //--bit6:既存ファイルのアロケートサイズ変更禁止がONだと1。 --bit6:リザーブ。 --bit7:リザーブ。 //---アロケートを0にすることももちろんできないので、ファイルの削除もできないことになる。 //--bit7:ディスクイメージ全体に対するライトプロテクトがONだと1。 --これらの拡張フラグについてはサポートしなくても良いが、できればチェックはして、理解できない状況であればエラーにするくらいの対応をしてもらえるとうれしい。 -(参考) --KHBIOS関連ツールで初期化した場合では「MBR+リザーブ」で64KBを確保し、パーティションサイズはすべて64KB単位で確保されるため、このSF16フォーマットを採用すると、ブートセクタ位置とファイル領域開始位置は64KBアライン、FAT開始位置とルートディレクトリ開始位置は32KBアラインされることになる。 *** SF16 のメリット -アラインに配慮されており、メモリカードの消去ブロックとの相性がよい。 -MOやCD-ROMなどセクタ長が異なる場合でも、ディスクイメージが同一になり、ファイルシステムドライバは単純化可能。 -ディスクイメージを少しいじるだけで容易に総容量を変更できる。 --たとえば128MB用のディスクイメージを1.5GBのパーティションに書き込むことができる。 -可変長部分が少ないのでFAT16をフルサポートするよりも楽。 -FAT16をサポートしていれば、SF16も読み書きできる。 --SF16しかサポートしないプログラムからは、FAT16は扱いきれない。 --だから2GB以下のデバイスは、みんなSF16になっちゃえばいいと思う。 ---HDDやメモリカード類はもちろんのこと、CD-ROM、FD、MO、ZIPなども。 *** SF16 のデメリット -FAT16のサブセットでしかないため、FAT16に存在する欠陥を全て引き継ぐ。 -FAT領域のサイズやルートディレクトリのサイズ、そしてたくさんのアライン用リザーブがあるため、容量的には効率がよくない。 --例えば1440KBのデバイスに対して、FAT16なら最大で1436KBをファイル領域に割り当てられるが、SF16だと1120KBしかファイル領域に割り当てられない(ディスク容量に関わらず常に320KBを管理領域に要する)。 *** SF16 のドライバの例 -(例えばリアルモード用の簡易なやつ、しかもクラスタサイズ32KB限定で、1GB以降にはアクセスしない簡易仕様) -4KB単位でデバイスを読み書きするような汎用的なドライバを作る --FDの場合はさらに下請けで1KB単位で読み書きするやつを作って、4KBで依頼された仕事を4回の呼び出しに単純分割してやるとかすると楽そうだな。 --こういう風にしておけばMOやCD-ROMなどでかいセクタのデバイスも同じように扱えて便利。 --SF16だけを前提にしているうちは、絶対にアクセスは4KB単位(というか本当は32KB)で、話はとても単純になる。 -そのドライバで最初の4KBをバッファに読み、次の部分を確認(ここでいう「最初」はHDDとかの場合はパーティションの最初という意味) --+0x40-+0x43の4バイトが 0x53 0x46 0x31 0x36 であることをチェック(シグネチャ:"SF16")。 --+0x0dの1バイトが0x40であることをチェック(SF16_40)。 --一致しなかったらこのフォーマットは分かりませんでしたエラーを出す。 -FATの部分のうちの最初の64KBを読み込む -ルートディレクトリ32KBも読み込む -後は0x8000以降のFATにアクセスしようとしたら、未サポートエラーにでもしておく --こうすればリアルモードでもかなり簡単にFATをたどれる。 --1GBしか読み書きできないが、これだけの手間でここまでできてしまうのは非常にらくだと思う。もうちょっとがんばりたくなったときに2GBに対応すればいい(それでもFATのバッファを2倍にしてFATをたどるときにちょっと頑張るだけでいい)。 -この例ではセクタサイズも32KB固定なので、クラスタ番号からセクタ番号等に変換するルーチンもものすごく単純 --ここを可変にするとそれだけですぐにSF16_01~SF16_40の全てに対応できることになる。 -ということで[[OSASK]]でのサポートもやろうとおもえばすぐできちゃう(OSASKは32bitなので、より一層楽) *** おまけ FAT16 vs FAT12 -FAT12はFAT16に対して以下の点で優れている --FAT用領域が25%削減できる。 -FAT12はFAT16に対して以下の点で劣っている --アクセスがめんどう。 --4096クラスタ以上が扱えない。 -[[K]]が簡易柔軟フォーマットの提案に際してFAT12を廃し、FAT16ベースのみにした理由 --4096クラスタ制限は可変長ディスクイメージの実現にはあまりに大きな障害。 --FAT12とFAT16のサポートをするくらいなら、FAT16のみにしてしまったほうが楽(判別する手間もなくなるし)。 --仮にちょうど4096クラスタの場合で、FAT16からFAT12に変更したとしても、容量は4KBしか得をしない。 ---SF16ではクラスタ位置のアラインなどが当然のように行われているため、4KBの差はただのリザーブ領域の増加を招くだけに過ぎない。 ---リザーブをわずか4KB増やすだけのために、FAT12とFAT16の判別と、FAT12の処理の複雑さを受け入れることは、合理的ではないと判断。 * 対応状況 *** 凡例 |◎|Win対策しないでも正しく認識 (もちろんWin対策してもOK)| |○|Win対策したものが正常動作| |△|Win対策したら動作しないが、クラスタサイズを小さくしてWin対策を回避すると正常動作| |×|何をやっても誤動作| *** OS |OS|ATA-HDD|PCカード|USB|備考| |Windows 95 OSR2.0|○|○|-|◎ではないことも確認済み| |Windows 98||○||◎ではないことも確認済み| |Windows 98SE||||| |Windows ME||||| |Windows XP||○|○|◎ではないことも確認済み| -PCカードというのは、PCカード接続のカードメモリ(PCカードATA系デバイス)。 -空欄は、試してないけどたぶんOK。 -ここにあがってない他のデバイスはためしてないけど多分駄目。 ----- -検証方法(他の方法でもよいが、確実な方法の例): >''[事前準備]'' --OSASKのおすすめ版をダウンロードして、 prompt>imgtol e osaimgat.bin fdimage0.bin 1440 --とやって、FDIMAGE0.BINという1440KBのファイルを用意しておく。 --128MB未満のメディアに対してDOSなどで(DOSプロンプトは不可)、pcctolのfコマンドでSF16_40.EIIを書き込む。これでメディアはSF16フォーマット(Win対策あり)になる。 prompt>pcctol f 20 sf16_40.eii (NOT DOS-PROMPT!!) >''[実験 (実験したいOS上でやる)]'' --実験したいOS上で、このメディアのプロパティをみて、総容量が1.99GBで、かつ空き容量がメディアの本当の容量程度になっていることを確認。 ---これで総容量が1.99GBではなく、正しく表示されていればそれはSF16完全対応OSだろう。 ---この時点で空き容量がおかしければ、以下を試すまでもなく認識失敗。 --このメディアに対して、実験したいOS上で、先ほどのFDIMAGE0.BINを書き込む。 >''[確認 (OSASK上でやる)]'' --そして今度はOSASKを起動し、このメディアをPCカード接続(もしくはATA接続)で、OSASKから認識させてみる。 --これで正しく認識できれば、先の書き込みテストはうまくいっていたことになる。書き込みテストでうまくいけば、読めるのは確実なので、テストする必要はない。 --OSASKを使わずに、試したいOS上で読み書きできればそれでOKなんじゃないかと思うかもしれないが、誤認したまま誤認した方法で読み書きできちゃったりすることもあるので、やはり書き込ませた内容を、確実にSF16を解釈できるOSで(たとえばOSASKで)、認識させてみる必要があるだろう。 >''[補足]'' --[実験]は該当OS上でやる必要があるが、[事前準備]と[確認]は違うPCの違うOS上でやってかまわない。 *** デジタルカメラ |メーカ|機種名|対応|備考| |Canon|[[PowerShot A200:http://web.canon.jp/Imaging/PSA200/index-j.html]]|○|◎ではないことも確認済み| |FUJIFILM|[[DS-20:http://www.fujifilm.co.jp/products/ds20/]]|○|| |KODAK|[[DC4800:http://wwwjp.kodak.com/JP/ja/digital/cameras/dc4800/index.shtml]]|○|クラスタサイズが小さいとだめらしい(sf16_01では×)| //|KODAK|[[DC4800:http://wwwjp.kodak.com/JP/ja/digital/cameras/dc4800/index.shtml]]|○|sf16_01では不可→◎でない?| |OLYMPUS|[[C-200ZOOM:http://olympus-imaging.jp/jp/imsg/LineUp/Digicamera/C200z/]]|×|| |RICOH|[[Caplio RR30:http://www.ricoh.co.jp/dc/product/rr30/]]|○|| |TOSHIBA|[[Allegretto M70:http://www.toshiba.co.jp/mobileav/camera/allegretto/products/m70/spec.htm]]|○|| *** PDAなど |メーカ|機種名|対応|備考| |SONY|[[PEG-N600C:http://www.sony.jp/products/Consumer/PEG/PEG-N600C/]]|△|| //-USBタイプアダプタ //|メーカ|機種名|対応| //|century|[[CMR-KING:http://www.century.co.jp/products/cmr_king.html]]|○ (SMのみ確認)| * こめんと欄 -FAT12ってそんなに扱いにくいかなあ? そりゃFAT16の方が楽ですけど。 -- [[I.Tak.]] SIZE(10){2003-10-06 (月) 10:31:38} -とりあえず僕の見解を「FAT12 vs FAT16」に書いておきました。 -- [[K]] SIZE(10){2003-10-06 (月) 11:54:20} -FAT12/FAT16のスレッショルドは4096クラスタじゃないですよ;-) -- [[揚げ足えな]] SIZE(10){2003-10-08 (水) 10:20:31} -000や001やff7以降が使えないから差し引いてね、っていう意味でしょうか。ええとそれなら分かっていて書いています。・・・いやその細かいことを書くのはどうかなと思って、あえて分かりやすい間違った数字を書きました。 -- [[K]] SIZE(10){2003-10-08 (水) 11:48:40} -[[OSASKスレPart6だすYO! :http://pc.2ch.net/test/read.cgi/os/1063448116/l50]]の309さんのレポートのおかげで、動作確認一覧が急速に充実しました。心からお礼申し上げます。SF16の育ての親といえるかもしれません。 -- [[K]] SIZE(10){2003-10-22 (水) 01:12:48} -Win95OSR2.0では、FDをSF16フォーマットした後、一度ドライブから取り出して、再度ドライブ入れて読み出せば、ちゃんと認識できる(もちろんWin対策は必要)。今までできないと思っていたのでとてもびっくり!。うれしい。ちょっとだけWIn95を見直した。 -- [[K]] SIZE(10){2003-12-28 (日) 15:21:14} -「 フォーマット」のところの拡張フラグについて追記。 -- [[K]] SIZE(10){2004-04-03 (土) 01:51:42} -%%SF16でWin2000が落ちる問題を確認しました。CFは16MB、SF16_40でのフォーマットです。開くとフリーズするのでプロンプトからすばやくフォーマットしたところ、ファイルシステムはFATと認識されていなかったようです。しかし、突然認識できなくなったので先日他のPCで読み込んだ影響かもしれません。OSASKで起動すると、普通に使えました。btcfでの起動も可能です。%%フォーマット後も問題が発生したので、どうやらSF16の問題ではなくカードの故障のようです。 -- ''Zakky'' SIZE(10){2004-10-03 (日) 14:50:24} #comment
テキスト整形のルールを表示する