MSXの普通の2DDイメージのDSKファイル(または、DSKファイルとDERファイル)をD88ファイルに変換するツールのソース

本題
・DSKファイル
または
・DSKファイルとDERファイル
を、D88ファイルに変換するツールです。
ただし、実行ファイルは配布しません。C言語とC#のソースだけ置いておきます。
DSKファイルだけだったら他のツールを使うほうが良いでしょう。これの需要があるのかどうかは不明です。

実行ファイル生成について
C言語のほうは、VC++でもBorland C++でもCygwinのgccでもLSI C-86試食版でも使えそうな気がします。ただし、一部の環境ではtypedefの部分を書き換える必要があります。
(追記:stricmpがエラーになる場合は、strcasecmp、strcmpi、_stricmpなど適切に書き換えて下さい。)
C#のほうは、.NET Frameworkのプログラムが動作するWindows環境であればコマンドプロンプトから
C:\Windows\Microsoft.NET\Framework\v3.5\csc.exe dsk2d88.cs
みたいなので実行ファイルを生成できるような気がしますが、”v3.5”の部分を変更する必要があったりするかもしれません。

コマンドライン
パラメータ無しで実行すれば大体わかるんじゃないかと思いますが、
dsk2d88.exe In.dsk In.der Out.d88 0xb0
な感じで。パラメータの4番目はエラーセクターのステータスのコードです。これだけは省略可能。
DERファイルの拡張子は”.der”で。D88ファイルの拡張子は”.d88”で。アルファベットを大文字にしても同じです。
DSKファイルは、”.der”や”.d88”でなければ何でもいいです。アルファベットを大文字にしても同じです。
DERファイルを使用しない場合は、存在しない適当なファイル名を指定して下さい。拡張子は”.der”で。アルファベットを大文字にしても同じです。

入出力ファイル仕様
DSKファイルはヘッダー無し、非圧縮、2DD、512バイト/セクター、 9セクター/トラック専用です。普通は512バイト×9セクター×160トラック=737280バイトですが、セクター数が18の倍数であれば受け入れるようにしているので、512バイト×9セクター×162トラックのイメージファイルにも対応できます。(1DDのDSKファイルを入力すると、「半分しかフォーマットされていない2DDで、セクターの中に記録されたメディアID等は1DD相当」のD88ファイルが出力されるかもしれません。2HDのフロッピーをサポートしたMSXも世の中には存在するそうですが、そのDSKファイルを入力すると、途中までのデータを使用して「164トラックまで存在する2DDで、セクターの中に記録されたメディアID等は2HD相当」のD88ファイルが出力されるかもしれません。)
DERファイルでエラーの存在するセクターは、D88ファイルでは「データCRCエラー」になります。コマンドラインパラメータの4番目を指定すると他のエラーにもできますが、その場合の動作は未確認です。
D88ファイルは上書き確認しません。エラー発生時には、生成途中だったD88ファイルを消すこともあります。

駄文1
RuMSXと同じ作者のDisk-Managerを使用して実フロッピーからイメージファイルを作成すると、
・リードエラーのセクターが無い場合:DSKファイルだけが生成される
・リードエラーのセクターがある場合:DSKファイルとDERファイルが生成される
という結果になるはずです。(Win9xを使っていた頃に試した結果です。USB接続のFDDや非9x系のOSや最新版のDisk-Managerでは試してません。)
DSKファイルは、論理セクターの内容を0番から順に並べただけのファイルで、普通のMSXの2DDディスクであれば512バイト×1440セクター=737280バイトになります。このファイルは多くのエミュレータでフロッピーディスクイメージとして使用できます。(Disk-Managerを使用する以外の方法でも作成できますが、拡張子がDSKではないかもしれません。また、拡張子がDSKでも全く異なる形式のファイルの可能性もあります。)
DERファイルは、20バイトのヘッダーの後ろに、1セクターあたり1ビットでエラーの有無が記録されています。(Disk-Managerを使用する以外の方法で作成できるかどうかは知りません。また、セキュリティ関連の分野で拡張子DERが使われることもあるようですが、ここでは無関係です。)RuMSXでは昔から対応、blueMSXでは2.8.2以降で対応しています。1ビットなのでエラーの種類を使い分けることはできません。RuMSXではCRCエラーになるようです。blueMSX2.8.2ではFDCの種類によってCRCエラーになったりother errorになったりするようですが、other errorになるのは不具合で、CRCエラーになるのがblueMSXの本来の動作かもしれません。
DERファイルは「コピープロテクトチェックを行っているソフト」を動かすのに役に立つことがあります。役に立たないこともあるかもしれません。

駄文2
私の手元には、「コピープロテクトチェック処理を解除してなくて、DERファイルが存在するイメージファイル」がいくつかあります。Disk-Managerでイメージ化しただけなので。
しかし、Common Source Code ProjectではDERファイルに対応していません。もし対応させたとしても、例えば「CRCエラーじゃなくてRECORD NOT FOUNDにしたいソフトもある」なんてことになったら面倒です。
一方、D88ファイルというのはMSXには馴染みの無かったファイルなので、その形式ではイメージ化してません。今からD88のためのイメージ化をやり直すのも色々面倒です。
DSKファイルだけであればVFIC(Virtual Floppy Image Converter)というツールでD88ファイルに変換できそうですが、エラー情報無しであれば、変換する必要は無いでしょう。
DERファイルの情報も含めて変換して、openMSXやfMSXSOで使えるようにするツールはそれぞれ存在するようです。しかし、D88ファイルに直接変換するツールは知りません。なので、とりあえず作ってみた物をここに置いておきます。ソースだけ。

駄文3
不具合修正・機能追加・仕様変更・醜いソースの改善・英文のつもりかもしれない箇所の表記修正などを行う人が現れるかどうかはわかりませんが、もしそういうのを配布する場合は、ハンドルネームと日付とかバージョン番号なんかが実行ファイルにも含まれるようにして、改変されていることを容易に判別できるようにすればいいんじゃないかなと思います。


C言語 dsk2d88.c


C# dsk2d88.cs

戻る


アクセス解析 SEO/SEO対策