EXMC - メモリカードのクラスタサイズ変更 SRAM カードの IPL 領域を書き換えてクラスタサイズを変更します。 ■前口上 オアシスポケット3で使える外部記憶媒体は、実質的には SRAM のメ モリカードしかありません。ところがこれ、容量あたりの単価が高いと いうのもありますが、媒体そのものの記憶容量が 1MB だの 2MB だのと いった、最近のご時世からすると著しく小さいものがほとんどです。 そこで、ほんのわずかでもいいから記憶容量を絞りだすために、メモ リカードのパラメータを変更するツールを作ってみました。 ■動作環境 PCカードスロットを搭載した FMR 系の DOS 上で動作すると思われま す。ただし、テストはオアシスポケット3でしか行われておりません。 なお、対応しているメモリカードは 512byte/sector でフォーマット されているものだけですが、オアシスポケット3純正のフォーマッタを 含め多くのフォーマッタはこの形式でフォーマットするので、問題はな いでしょう。 ■使用法 Usage: exmc [] 1番目のオプションで指定したドライブに挿入されているメモリカー ドのクラスタサイズを2番目のオプションで指定した値に変更します。 この際、再フォーマットを実施しますので、メモリカードに記録されて いる情報はすべて消去されます。 クラスタサイズとしてとりうる値は、このツールの場合、以下のもの のみです。 512 1024 2048 4096 8192 16384 32768 3番目のオプションはルートディレクトリの最大エントリ数です。こ れは省略可能です。省略された時は 16 が指定されたものとみなします。 このツールで指定できる最大値は 960 ですが、パラメータの整合性の計 算結果によっては、ユーザが指定したよりも大きい値をメモリカードに 設定することがあります。 ■エラーレベル パラメータの変更に成功した場合、エラーレベルに0を返します。 何らかの理由で変更に失敗した場合、エラーレベルに1を返します。 ■パラメータに関する解説 クラスタサイズとは、メモリカードにおいて情報を管理する論理的な 最小単位です。つまり、例えばクラスタサイズが 1024byte であれば、 1バイトのファイルでもメモリカード上では 1024byte 消費してしまい ます。一方、クラスタサイズはメモリカードと本体とのデータの転送単 位でもあり、一定量のデータを動かす際には、クラスタサイズが大きい 方が転送回数が減少してアクセス速度の高速化が図れるといわれていま す。ただ、メモリカード自身のアクセス速度が十分速いため、クラスタ サイズの拡大によるメリットはほとんど検出できません。 なお、ファイルのサイズがクラスタサイズで割り切れない事により発 生する、実際には使われずに無駄となっている領域の事をクラスタギャ ップといいます。1ファイルあたりの平均クラスタギャップはクラスタ サイズの半分なので、メモリカード全体での推定無駄容量は、カードに 収容されているファイル数とクラスタサイズの積を2で割ったものとな ります。 これからわかるとおり、クラスタサイズを小さくすれば、ファイルの 個数が多ければ多いほど、カード全体としては記憶容量を節約できる可 能性が高いです。が、これはあくまでも平均的な値の場合です。個々の ファイルのサイズによっては、全く節約にならない可能性もあります。 ただ、クラスタサイズを小さくする事により、逆に必要とする記憶領域 が増えてしまう事はありません。 さて、メモリカードもフロッピーディスクやハードディスクと同じく、 ファイルそのものを収容する領域と、カード全体を管理する領域とに分 かれます。この管理領域は、カード全体の諸元が記録されている部分、 ファイルの名称やサイズを記録している部分、メモリカードのどこにフ ァイルの実体が記録されているかを管理している管理表、の3つの部分 に分かれます。 カード全体の諸元を記録している部分は、まさにこのツールで書き換 える部分です。サイズは減らせません。増やす事は可能ですが、その分 ファイルを記録できる容量が減ってしまうので、このツールでは固定サ イズとしています。 ファイルの名称などを記録している部分をルートディレクトリ領域と いいます。この部分は増減が可能であり、このツールでもオプションで 指定できるようになっています。もちろん、多くするとその分ファイル を記録できる容量が減ってしまいます。少なくすると、ファイルを格納 できる容量は増えますが、ルートディレクトリに置けるファイルそのも のの個数が減ってしまいます。ただ、サブディレクトリを設けてその中 にファイルを入れる事によりこの制限は回避できるので、あまり大きな 問題にはならないでしょう。 このツールでは、管理領域全体の容量がクラスタサイズで割り切れな いような値になった場合、ルートディレクトリ領域をユーザが指定した 値よりも拡張する方向で適切な値に変更します。 ちなみに、ルートディレクトリは、1ファイル分で 32byte 消費しま す。このツールが前提としているのは 512byte/sector なので、1セク タあたり16ファイルを保持できます。 ファイルの記録位置の管理表をFAT(file allocation table)と呼 びます。これはクラスタ毎にどのファイルが使っているかを記録してい ます。すなわち、クラスタ数が増えるとFATの領域も増えてしまうの です。クラスタサイズを大きくすればクラスタ数が減りますので、その 分FATの領域も減りますから、こうすることによりファイルを記録で きる領域を増やすことができます。ただ、上記のとおり、ファイル数が 多くなると無駄なクラスタギャップが増える可能性もありますが、ごく 少数の比較的大きなサイズのファイル(辞書ファイルや圧縮ファイル) を収納するだけ、というような場合には、クラスタサイズを拡大する事 が有効な場面もあるかもしれません。 FATに必要なデータ量は、ファイルを収容する領域のクラスタ数が 4085 以下は2クラスタで3バイト(12bit FAT)、4086 以上は1クラス タで2バイト(16bit FAT)となります。すなわち、12bit FAT のときは FATの領域は最大12セクタですが、16bit FAT の時のFAT領域は 最小値で16セクタとなります。 ■ソースに関して LSI C-86 Ver.3.30c に依存した作りになっております。一応、これの 試食版でコンパイルした実行ファイルが同梱されています。 ■著作権、再配布等 一応、著作権は主張させていただきます。以下、本プログラム、およ びドキュメントを総称して「本プログラム等」と表します。 ・本プログラム等の著作権は としき が有します。 ・本プログラム等を使用することにより、使用者の予期しない影響が あっても、作者はなんらの保証および補償をいたしません。 ・本プログラム等の転載、再配布、販売等は、事前に著作権者の許可 を求めなければ、自由にできます。 ^^^^^^^^^^^^ ただし、事前に許可を求められた場合は、原則として全てお断りい たします。なお、事後報告は歓迎いたします。 ^^^^^^^^^^ もちろん書籍、雑誌、CD−ROMへの収録も自由です。 なお、転載等を長期間継続するような場合でも、定期的な連絡・報 告などは不要です。また、1つのバージョンについて1ヶ所の転載 先に対し3回以上連絡があった場合、当該バージョンの転載中止を 要請することがあります。 ・著作者人格権の同一性保持権に基づき、本プログラム等の改変を自 由に行うことを許可します。というよりも、積極的な改変をお願い いたします。 ただし、改変した本プログラム等では、著作者人格権の氏名表示権 に基づき、原作者の著作権表示を消去することを要請します。 なお、差し支えなければ改変した部分をご連絡いただければ、次の バージョンからその改変内容を反映させていただきたいと思います。 ・転載等の際は、入手した本プログラム等のファイル構成に対し変更 を加えずに再配布してください。ただし、本プログラム等に改変を 加えた場合はこの限りではありません。 ・作者は、このプログラムに不備があっても、それを訂正する義務を 負いません。しかし、努力はするでしょうから連絡をお願いします。 ・仕様拡張に関する意見は、私の技術と体力と気力が許す範囲で対応 したいと思います。 ■謝辞 アーカイブ中の実行ファイルは、LSI C-86 Ver 3.30c 試食版でコンパ イルしたものです。LSI C-86 試食版を公開されたエル・エス・アイ ジ ャパン(株)に感謝申し上げます。 メモリカードの書き込みファンクションに関しては、くり(栗原 靖) さんのつくられた「ICMCユーティリティ icmuty.exe」のソースコー ドを参考にしました。また、IPL に関しては、清十郎(川原崎由夫)さ んのつくられた「DISKに関する資料」を参考にしました。どうもあ りがとうございました。 ■改版履歴 version 0.01 2005-08-25 ・とりあえず動く version 0.02 2005-09-15 ・オプションが足りなかったときに正しいエラーメッセージを表示 していなかったものを修正 (konnoさん、ありがとう)