Apple II のディスクフォーマット

1996年3月7日から3月18日にかけてNIFTY-ServeのFAPPLEの13番会議室で議論した内容です


454/454 PXF07216 出石宗久     GCR FORMATについて (13) 96/03/07 18:46 Macユーザーですが、教えていただきたいことがあります。 Macの800K(400K)ディスクの、GCR FORMATのエンコードの仕方とトラックフォー マットが知りたいのです。 なにせ古いことなんで、FMACPROではお答えがいただけませんでした。FAPPLEに ご存じの方がおられるのでは?というヒントで、こちらへ押しかけて参りまし た。 APPLE II を参考にMACのFORMATも作られたと思うので、APPLE IIのGCRではこう ですということでも参考になりますので、教えてください。 (1)MACの場合GCRに直すのに、6-8変換表を使います(文末に載せておきまし た)。まず、わからないのが、変換表を適用する前に、元のデータの8bitの列を どうやって6bitに切りわけるのかということです。自分で実験的に調べた結果、 「 6、8の最小公倍数24bit毎に処理されているらしい」、「 24bitをシフトレジ スタに入れてその出力の一部を入力側にfeedbackしているらしい」、ことまでは わかりました。 (2)APPLE IIの資料を自分で読んで見ようと思い、Lib1-9からTechNotes. UDSK.BXYをMacにダウンロードしましたが、ShrinkItで圧縮されて読めません。 Lib6-8 STM 0.881r.sit MAC Apple II Emulator Lib2-21 II+.SHK.EXE ][ アーカイバ(II+ ShrinkIt) この2つを使えばMacで読めるでしょうか? どこかのftpから直接TechNotesをテキスト形式で持ってこれるならそのほうが楽 なんですが。 (参考)6-8変換表for Macintosh (c言語形式) static unsigned char GCR6to8[ 64 ] = { 0x96, 0x97, 0x9A, 0x9B, 0x9D, 0x9E, 0x9F, 0xA6, //00-07 0xA7, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB2, 0xB3, //08-0F 0xB4, 0xB5, 0xB6, 0xB7, 0xB9, 0xBA, 0xBB, 0xBC, //10-17 0xBD, 0xBE, 0xBF, 0xCB, 0xCD, 0xCE, 0xCF, 0xD3, //18-1F 0xD6, 0xD7, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, //20-27 0xDF, 0xE5, 0xE6, 0xE7, 0xE9, 0xEA, 0xEB, 0xEC, //28-2F 0xED, 0xEE, 0xEF, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, //30-37 0xF7, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF }; //38-3F PXF07216 / 出石 宗久
456/457 MHA00053 A.Suzuki RE:GCR FORMATについて (13) 96/03/07 23:49 454へのコメント こんばんは。 > まず、わからないのが、変換表を適用する前に、元のデータの8bitの列を > どうやって6bitに切りわけるのかということです。 月刊マイコン別冊 APPLE Disk Operating System 入門(昭和58年)の186ページ に似たような図が出ています。 > 図2-1 > 95 96 97 9a 9b 9d 9e 9f a5 a6 a7 a9 aa ab ac ad ae af > b2 b3 b4 b5 b6 b7 b9 ba bb bc bd be bf ca cb cd ce cf > d2 d3 d4 d5 d6 d7 d9 da db dc dd de df e5 e6 e7 e9 ea > eb ec ed ee ef f2 f3 f4 f5 f6 f7 f9 fa fb fc fd fe ff > 図2-2 > 3バイトのデータはディスク上では4バイトになります。 > > |a7|a6|a5|a4|a3|a2|a1|a0| > > |b7|b6|b5|b4|b3|b2|b1|b0| > > |c7|c6|c5|c4|c3|c2|c1|c0| > > ↓ > > |a7|a6|a5|a4|a3|a2| > > |b7|b6|b5|b4|b3|b2| > > |c7|c6|c5|c4|c3|c2| > > |a1|a0|b1|b0|c1|c0| これで参考になるでしょうか? Apple II の時代にはこのニブルデータをいじく って遊んでた人が結構いたんではなかったかと思います。(コピープロテクトと 関係あり。^_^;)「D5 AA 96」というのが標準的なセクタ開始の目印です。いや ぁ、懐かしいですねぇ^_^ _ == |-|.Suzuki/MHA00053 ==
459/459 PXF07216 出石宗久     RE^2:GCR FORMATについて (13) 96/03/09 01:11 456へのコメント A.Suzukiさん、レスありがとう。 昭和58年はMac誕生前年ですから、これはAPPLE IIのFormatですね。 >>これで参考になるでしょうか? 大いに勇気づけられました(^_^)。Macでは以下のようではないかと推測してい ました。図2-2にたいへんよく似ています。ただし、これを24bitシフトレジスタ に入れてfeedbackをかけているようなので、解析できていない部分(??)がある のです。 |a7|a6|a5|a4|a3|a2|a1|a0| |b7|b6|b5|b4|b3|b2|b1|b0| |c7|c6|c5|c4|c3|c2|c1|c0| ↓ |a5|a4|a3|a2|a1|a0| |b5|b4|b3|b2|b1|b0| |??|??|a7|a6|b7|b6| |??|??|??|??|??|??| APPLE II ではこのようなfeedback処理(?)はされていないのでしょうか。 >>「D5 AA 96」というのが標準的なセクタ開始の目印です。 おお!これはMacでも同じコードのようです。FFが42個続いた後(これはセクタ 全体に00を書き込んだ時)、必ずこの3バイトが出現しています。 私が推定したMacのセクタformatは(まだ完全ではありませんが・・・) DE AA (FFが42個続く)D5 AA 96 TT NN SS D9 ?? DE AA (FFが6個続く) D5 AA AD NN(File Tagsの16バイト)(セクタデータ512バイト)->この後DE AAに 戻り繰り返す TT:トラック番号(0-79を6-8変換した値) NN:セクタ番号(0-11を6-8変換した値) SS:サイド番号(0の時は96、1の時はD6)  ??:なんらかのチェック用バイトか? というものです。APPLE II ではいかがでしょうか。 PXF07216 / 出石 宗久
461/461 MHA00053 A.Suzuki RE:RE^2:GCR FORMATについて (13) 96/03/09 22:12 459へのコメント > 私が推定したMacのセクタformatは(まだ完全ではありませんが・・・) > > DE AA (FFが42個続く)D5 AA 96 TT NN SS D9 ?? DE AA (FFが6個続く) D5 > AA AD NN(File Tagsの16バイト)(セクタデータ512バイト)->この後DE AAに > 戻り繰り返す Locksmith というコピープログラムのマニュアルを見てみたんですが、次のよう に書かれてありました。( DOS 3.3 (Apple II) の場合 ) ・セクタはアドレスフィールドとデータフィールドに分かれる。 ・各フィールドは header, information nibbles, trailer を持つ。 ・アドレスフィールドは D5 AA 96 という header に続いて4つの情報  (volume number, track number, sector number, checksum)が続く。  これらは double-nibble format になっている。(checksum はその前  の3つの排他的論理和。)最後は trailer の DE AA で終る。 ・アドレスフィールドとデータフィールドの間は self-sync nibbleで埋  められている。 ・データフィールドは header D5 AA AD ではじまり、342 のニブルが実  際のデータ(256バイトぶん)をあらわし、チェックサムの1ニブルの  あと、trailer DE AA で終る。 Apple II の5インチフロッピーは片面なので、面番号はないんだと思いますが あとはかなりよく似てますね。 _ == |-|.Suzuki/MHA00053 ==
471/471 PXF07216 出石宗久     RE^4:GCR FORMATについて (13) 96/03/18 18:37 461へのコメント A.Suzukiさん、こんにちわ。 最後の難問「8bitの列をどうやって6bitに切りわけるのか」がようやく解読でき ました。 この処理には、入力のa,b,cから2つの内部変数S'(8 ビット),I(16ビット)をま ず計算し、さらにExclusive OR を求めることが必要で 、 |a7|a6|a5|a4|a3|a2|a1|a0| |b7|b6|b5|b4|b3|b2|b1|b0| |c7|c6|c5|c4|c3|c2|c1|c0| ↓ ---------------------------------------------------------- 5 4 3 2 1 0 ---------------------------------------------------------- w a7^S'7 a6^S'6 b7^I7 b6^I6 c7^I15 c6^I14 x a5^S'5 a4^S'4 a3^S'3 a2^S'2 a1^S'1 a0^S'0 y b5^I5 b4^I4 b3^I3 b2^I2 b1^I1 b0^I0 z c5^I13 c4^I12 c3^I11 c2^I10 c1^I9 c0^I8 ---------------------------------------------------------- という複雑なしろものです。(詳しくお知りになりたい方は、FMACPRO MES 4 Programmer's Folder (10) の 505番目の発言をご覧下さい。) ともかくお陰さまで、MacのGCRデータから元データを復元できるようになりまし た。どうもありがとうございました。 PXF07216 / 出石 宗久

元へ戻る