IBM 5550の日本語DOSで使われるディスケット フォーマット

IBM マルチステーション5550 (以下、IBM 5550) の日本語DOSで使われるディスケットのフォーマットについて。

Image: IBM Japanese DOS 2DD diskette
画像はFile:IBM_Japanese_DOS_K3.30_floppy_disk.jpg - Wikimedia Commonsより。

フォーマットの種類

IBM 5550の日本語DOSはバージョン次第で次のフォーマットをサポートしていると推測する。

  K2.0 K2.1 - K2.5 K2.6 K2.7 - K3.2 K3.3 - K3.4
5.25インチ 320KB (2D、8セクタ)(*) v v v v v
5.25インチ 360KB (2D、9セクタ)(*) - v v v v
5.25インチ 640KB (2DD、8セクタ) v v v v v
5.25インチ 720KB (2DD、9セクタ) - v v v v
5.25インチ 1.2MB (2HC) - - v v v
3.5インチ 720KB (2DD) - - - v v
3.5インチ 1.44MB (2HD) - - - - v

5.25インチ2HCドライブは5.25インチ2DDディスケットを、3.5インチ2HDドライブは3.5インチ2DDディスケットを読み書きできるが、その逆はできない(上位互換)。2Dディスケットのサポートは IBM 5150 Personal Computer DOS (PC DOS) との互換性のために残されているが、相互にデータ交換できるかどうかは保証されていない。実際のところ、2DD/2HCドライブは2Dドライブよりトラック幅が狭いため、2DDまたは2HCドライブで2Dディスケットに書き込むと、そのディスケットは2Dドライブでの読み書きを保証できなくなる。

予約セクターのフォーマット

MS-DOSおよびPC DOSにおいて、ディスケットの最初のセクター(ヘッド#0、シリンダー#0、セクター#1)を「予約セクター」(IBM PCでは「ブートセクター」とも)と呼ぶ。IBM 5550の予約セクターはIBM PCのそれとは大きく異なる2種類のフォーマットが存在する。

5.25インチ2DDディスケット

ブランクディスクのイメージファイルをダウンロードする

このフォーマットは部分的にEBCDIC文字コードで記録されており、1980年発売のIBMディスプレイライター・システムに由来すると考えられる。次は予約セクターの16進ダンプで、右半分はダンプデータをEBCDICコードとみなして文字に変換した結果。

E5 D6 D3 F1 40 40 40 40 40 40 40 40 40 40 40 40  VOL1            
40 40 40 40 40 40 40 40 C9 C2 D4 F5 F5 F5 F0 40          IBM5550 
40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40                  
40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40                  
40 40 40 40 40 40 40 D4 40 40 40 F2 40 40 40 E6         M   2   W
40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40                  
40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40                  
40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40                  
C8 C4 D9 F1 40 D1 D7 C3 40 40 40 40 40 40 40 40  HDR1 JPC        
40 40 40 40 40 40 F0 F0 F5 F1 F2 E4 F0 F0 F0 F0        00512U0000
F1 F2 F7 F9 F1 F0 F8 E4 C2 40 40 C5 40 40 40 40  1279108UB  E    
40 40 40 40 40 F0 F0 F0 F0 40 40 40 40 40 40 40       0000       
40 40 F9 F9 F9 F9 F9 F9 40 C4 F7 F9 F1 F0 F8 40    999999 D79108 
40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 C9                  
C2 D4 F5 F5 F5 F0 40 40 40 40 40 40 40 40 40 40  IBM5550         
F0 F0 F0 F0 F2 40 40 40 40 40 40 40 40 40 40 40  00002           
D7 C9 C9 E3 40 D9 C3 C4 0C 00 80 00 40 40 40 40  PIIT RCD        
40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40                  
40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40                  
40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40                  
40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40                  
40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40                  
40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40                  
40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40                  
40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40                  
40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40                  
40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40                  
40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40                  
40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40                  
40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40                  
40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40                  
40 40 40 40 40 40 40 40 40 40 40 40 40 40 40 40                  

このうち、ブートに使われるデータの意味は次の通り。

Addr:
0Ah:     Sig (D7h)
18h-24h: Sig 12 bytes (C9 C2 D4 F5 F5 F5 F0 40 40 40 40 40) 'IBM5550     ' in EBCDIC
49h:     48h = 9 sectors / track, 40h = 8 sectors / track (0100 1000 or 0100 0000)
108:     (000Eh) -> Absolute sector index for loading boot table
10A:     SP - (0080h) -> DMA offset for data read

ブートテーブルが記録されている絶対セクター番号と、ディスケットから読んだブートテーブルの格納先が記録されている。ブートテーブルの内容はIPLの動作と密接な関係があり、フローが複雑なため、ここでは省略する。IBM PCと大きく異なるのは、IBM PCではDOSディスケットの予約セクターにブートローダーのプログラムが入っていることに対して、IBM 5550はIPLにブートローダーがあり、DOSディスケットのブートテーブルは読み込むOSのサイズやディスク上の位置、メモリーの格納先などをIPLに伝えるだけである。

予約セクターの次のセクター(ヘッド#0、シリンダー#0、セクター#2)以降はIBM PCと同じで、2つのFAT (File Allocation Table) の後にデータ領域が続く。生のDOSではFATの先頭に記録されているファイルディスクリプタさえ読めれば、ディスクのフォーマットを判別、認識することができるため、他機種のDOSでも支障なく読み書きできる。しかし、Windows 9x/NTでは予約セクターの第1バイトにジャンプ命令、第12バイト以降にBPB (BIOS Parameter Block) がないと正しいファイルシステムとして認識されないため、IBM 5550の2DDディスケットを読むことができない。

IPLを調べたところ、IBM 5550のハードディスクでも部分的にこのフォーマットの予約セクターが使われていると思われるが、FDISKに相当する区画管理プログラムが日本語DOSには存在せず、システムに別途添付されるディスクに収録されているらしい。そのプログラムを使ってみないことには詳細は分からない。

その他のディスケット

IBM 5550の5.25インチ2HCや3.5インチディスケットの予約セクターにはブート用のプログラムとBPBが記録されており、IBM PCのブートセクターに近いものになっている。このため、Windowsでも正常に認識される。ただし、プログラムはIPLに制御を返すことが前提となっており、IBM PCのブートローダーとは異なる。

EB 2A 90 49 42 4D 4A 20 33 2E 32 00 02 02 01 00 
02 70 00 A0 05 F9 03 00 09 00 02 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 80 3E EF 01 
01 74 06 B8 12 FF EB 04 90 B8 F0 01 CB 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 
0E 00 80 00 5E 00 00 00 40 05 00 00 00 00 55 AA 

inserted by FC2 system