*** C-DOS Ver.0.70 for FM-7/8のためのBASE-09のディスク対応化キット *** Rev. 2 福井 利夫 * はじめに BASE-09はCarry lab.から市販されていたり、I/O誌の1984/4〜8月号(もしくは 活用研究)に掲載されていますが、そのままではカセットテープへのファイル 読み書きしか対応していません。 かつて、他機種(MZ-2000/MZ-80B/PC-8801)では、SuperBASEのディスク対応版 がC-DOSとして発売されていましたが、FM版は発売されませんでした。 C-DOSのFM版はCarry lab.のメーカから外部には販売されておらず、入手方法 がないわけですが、実際にはゲームプログラムから抜き出すことができます。 これは、BASE-09をこのC-DOSへ対応させるものです。 こちらで確認しているのは、FRONT LINE/WILD WESTERNのみです。 (他に、SPACE CRUISERから抜き出し可能と思われますし、PC-8801版では POLAR STAR III等にもC-DOSが入っていますのでFM版や他のゲームから抜き出 せる可能性はありますが、本プログラムはC-DOS内のエントリポイントを絶対 アドレス指定していますので、ずれていたら動作しません) Rev.2での改良点は、BASE-09のBIOS切り離しに成功し、FRONT LINE等に残って いるディレクトリエントリから予想できる、オリジナルC-DOSのBASE-09とほぼ 同じと思われる、プログラムコード=$3E00-$5AFF,ワーク=$5B00-$5BFF、 ソース$5C00〜を実現した点です。なお、実物はワークが$5A00-$5BFFの可能性 もあります。 もしも、BIOS削除に弊害が出たときのことを考えて、Rev.1のイメージも同梱 してあります。 * FM版C-DOSの説明 FM版C-DOSのメモリ構成は、$2000〜$2BFFがC-DOS本体(TRK0格納)、 $2C00〜$2FFFがBIOS(TRK1-SCT9以降に格納、TSモニタ相当)で、$3000-$31FFが ワークエリア、$3200〜$33FFがトランジェスト・コマンド用の空エリアで Z80版$E000-$E7FF(88版)もしくは$F000-$F7FF(MZ/X1版)相当、$3400〜$3CFFが ワークエリアで、Z80版$E800〜$EFFFもしくは$F800〜$FFFF相当、 $3D00〜$3DFFがFM独自のワークエリア、$3E00〜がZ80版$1500〜のフリーエリ ア相当という構成のようです。スタックポインタは$FC80です。 Z80版からから考えるとかなり変則的な印象ですが、BASIC ROMと共存動作が 考慮された結果のようです。また、FM-8のROMモードで起動してもBASE-09が使 用できます。 システムコールは、SWIがBIOSでZ80版TSモニタ RS28Hシステムコール相当、 SWI3がDOSのRST30Hシステムコール相当です。SWI2は未使用、FIRQはDOSやアプ リケーションが好きなように書き換えてBREAKを制御する仕様となっています。 SWIについては、BASE-09のBIOSと同じ仕様らしく、I/O掲載や活用研究の BASE-09の記事の記載が使用できますが、開発時期の違いによる差があるかも しれません。BASE-09のものを削除しても問題なく動作するため、互換性はか なり高いと思われます。 ファイルシステムは、88版C-DOSと互換性がなく、TRK:01/SCT:01から始まる ディレクトリエントリのオフセット+$14(サイズ),+$16(開始アドレス), +$18(実行アドレス)のエンディアンが逆になっていて、バイトオーダーが入れ 替わっています。しかし、問題となる違いはそれだけのようです。 FM版では88版等へアクセスすると、エラーを発生させてアクセスさせませんが、 88版C-DOSであれば、一時的に読み込むときに一時的にDUMPコマンドで書き換 えれば問題ないようです。正確に詳細を確認したわけではありませんが、ビッ トテーブル等は互換性があるようで、88版と互換性のあるC-DOSでセーブして、 バイトオーダーを入れ替えれば問題なさそうでした。 したがって、Z80版C-DOSとファイルを相互変換することは、特にツールがなく ても可能です。 使用方法はZ80版とほぼ同じですが、トランジェストコマンドが通常のファイル システムに1本化されており、オブジェクト種別番号が$01=OBJ、$02=TEXと同様 に、$03=CMDとなっているだけです。同名SAVE時はエラーとならず、 Are you sure ? と聞いてきて、上書き可能ですので、BASEからのテキスト セーブ等で上書きできるため、かなり改善されているといえます。 コマンドは、一部、DETAL -> DETAIL、COMMAND -> COM等変更がありますので、 C-DOSをDUMPして確認する必要があります。 * ディスク対応化きっとの使用方法の説明 本プログラムは、再アセンブルしない限り$3E00固定で、BASEはBIOS削除版が $3F00〜にあるものとして扱います。$3E00へジャンプすれば、BASEを書き換え て$3F00へジャンプします。 起動後、$3E03へジャンプした場合は、$3F03へジャンプしますので、ホットス タートできるので、BIOS削除版BASE本来のエントリアドレス$3F00/$3F03を意識 する必要はありません。 (Rev.1のBIOS付版では、それぞれ、$D100、$D200、$D103、$D203です。C-DOS オリジナル版が$3E00、$3E03だと予想されます) 使い方は、他機種版のC-DOSと同様に、ファイル名の最初が@の時に、フロッピ ーディスクへのロード/セーブを行います。ロード時にファイル名が@のみの時 はディレクトリを表示し、VERIFY時はフロッピーの場合は何も行いません。 セーブ時に同名のファイルが存在する場合は、Are you sure ?にYを答えると 上書きできますので、ファイルの消去を行う必要はありません。 (市販されていたMZ/PC版C-DOSと仕様が異なります) ファイル名の先頭に@がない場合は、本来のカセットに対する処理が行われま す。 制限事項 - ファイル名が8文字しかありません。@を含めますので、7文字しか指定でき ません。理由は、I/O 1984/6の説明通りの対応しか行っていないためです。 (なお、本誌の説明にミスがあり、ファイル名は0終端ではなく$20パティン グで8バイト固定で与えられます。改造する場合は注意してください) - エラー発生時には、DOSへ戻ってしまいます。 GO 3E03もしくはGO 3F03とすればBASE-09をホットスタートできます。 (Rev.1では、GO D103もしくはGO D203でした。ご丁寧にFIRQをC-DOS向けに 設定するので、BREAKもC-DOSコマンドプロンプトになってしまいます) * 使い方サンプル ]L,@ ... ディレクトリ表示 ]LC000,@DEBUG ... デバッガを$C000以降へロード E:L@ ... ディレクトリ表示 E:L@SRCFILE ... ソースファイルSRCFILEをロード 注意事項 - ファンクション定義にあるので明らかにFM版にも存在する、C-DOS版BASE の拡張コマンド、E:@ の任意C-DOSコマンド実行はありません。 - 8文字以上のファイルは、一度BASEを起動後、 G2000もしくはG2003としてC-DOSへ戻り、 LOAD "LONGNAME_SRCFN",5C00 GO 3E03 とすれば読み込みできます。 * ディスクイメージのファイル説明 - MON $3200-$330F,Exec $3200 ... MONコマンド、他機種でのTSモニタコマンドと同様の動作 (ディスクイメージではダミーファイル) - BASE $3E00-5AFF,Exec $3A00 (Rev.1では$D100-F1FF,Exec $D100) ... FD対応版のBASE-09 (ディスクイメージでは$3F00以降がダミーファイル) - DEBUG $C000-$CFFF,Exec $C000 ... 市販版BASE-09付属デバッガ (ディスクイメージではダミーファイル) - BASECAS $D200-$F1FF,Exec $D200 ... カセット版のBASE-09オリジナル (ディスクイメージではダミーファイル) - BASENBS $3F00-$5AFF,Exec $3F00 ... カセット版のBASE-09のBIOS削除版 (ディスクイメージではダミーファイル) - BASEDTX ... 本プログラム、つまり$3E00-3EFF部のソースリスト (開始アドレス変更した以外は、Rev.1と同じです) * ディスクイメージをそのままC-DOS FMへ改造する場合 以下のようにしてください。 T:00 S:$01 FRONT LINE/WILDWESTERNよりコピー T:00 S:$04-$10 FRONT LINE/WILDWESTERNよりコピー T:01 S:$09-$0C FRONT LINE/WILDWESTERNよりコピー T:01 S:$0D $3200-33FF FRONT LINE/WILDWESTERNの消去された ディレクトリ内のMONをコピー T:$33 S:$02の$3200-$33FFをコピーする。 - 新版Rev.2/BIOS削除版 T:03 S:$0C $C000-CFFF 市販版BASE-09付属のデバッガをそのままコピー (雑誌入力版BASE-09の場合は諦めてください) T:04 S:$0C $D200-F1FF ファイル名"BASECAS"は、BASE-09の$2000-$3FFF をそのままコピー T:06 S:$0C $3F00-5AFF ファイル名"BASENBS"は上までを作成した後、 パッチの当て方を参考にC-DOS上で作成します。 T:01 S:$0F $3E00-5AFF ファイル名"BASE"は、パッチを参考に、元のファ イル名"BASE"の$3E00-$3EFFと、BASENBSを組み合 わせて作成します。 注意事項 - BASENBS/BASEは作成する場合には、パッチをあてる必要がありますので、 BASECASまでを先に準備し、C-DOSを起動した後にパッチをあてて作成します。 - もちろん、BASENBS/BASEの+$0100以降は、BASECASと同様にバイナリデータ で書き込んで書き換えてもかまいませんが、アドレス計算等で面倒になるだ けの可能性が高いです。 - 旧版Rev.1の場合 T:01 S:$10 $D200-F1FF BASE-09の$2000-$3FFFをそのままコピー T:03 S:$10 $C000-CFFF 市販版BASE-09付属のデバッガをそのままコピー (雑誌入力版BASE-09の場合は諦めてください) T:04 S:$10 $D200-F1FF BASE-09の$2000-$3FFFをそのままコピー * ディスクイメージのBASEパッチのみを使用する場合 - 新版Rev.2/BIOS削除版 ファイル "BASE"の先頭部3E00-3EFFを使用し、$3F00以降へBASE-09を読み込ん で、さらにをパッチを当てて、$3E00-$5AFFをまとめてセーブしてください。 - 旧版Rev.1の場合 ファイル "BASE"の先頭部D100-D1FFを使用し、$D200以降へBASE-09を読み込ん で、$D100-$F1FFをまとめてセーブしてください。 * BIOS削除版BASE-09作成のためのパッチ C-DOSから、 LOAD "BASECAS",3F00 等として、BASE-09を読み込みます。 MONコマンドもしくは、$D200から起動するBASECASを起動して、以下のパッチ 当てます。D<アドレス4桁>コマンドでダンプして、スクリーンエディット可能 です。 まず、BIOSを切り離します。SWIベクタ書き換えをNOPで消去するだけで、オフ セット+$1C00以降のBIOSは消去できます。 $5392(+$1492) BF FF FA -> 12 12 12 $5421(+$1521) BF FF FA -> 12 12 12 続いて、$6000〜のワークエリアを$5B00〜へ移動させます。 $4057 20 -> 1B ($4055 30 8D 20 A5 X=EA(PC+$21FE/L60FE) $5266 0D -> 08 ($5264 30 8D 0D D3 X=EA(PC+$213B/L603B) $5381 0C -> 07 ($537F 30 8D 0C 7D X=EA(PC+$2100/L6000) $5411 0B -> 06 ($540F 30 8D 0B EA X=EA(PC+$2100/L6000) 続いて、同様に、$53F8 0C -> 07とするべきですが、更に$100節約するために、 少し変更して、 $53F6 30 8D 0C E6 (X=EA(PC+$21E0/L60E0) を、 $53F6 8E 32 00 12 (X=$3200 NOP) とします。$3200-$33FFは、C-DOSのトランジェスト・コマンド用の空アドレス らしく、MONコマンドが使っていて、ここを一時バッファとして使います。 他のC-DOSのワークの一部と重ねられそうですが、怖いのでコマンドエリアを 使っています。実際は$50バイト程度使用のようですが、BASE-09ではテキスト エリアまで、$120バイト以上使用可能になっていて、最大どこまで使うのかわ からないため、コマンドエリアの$200バイトを用意しています。 以上で、$6000-$61FFのワークエリアが、$5B00-$5BFFになるため、テキストア ドレス$5C00〜使用可能になりますので、更に以下のように書き換えてテキスト 開始アドレスを変更します。 $5402 43 00 -> 5C 00 書き換えた後に、G2000等でC-DOSへ戻り、 SAVE "BASENBS",3F00,5AFF,3F00 とすれば、BIOS削除版BASE "BASENBS"が作成できます。 更に、次のようにすれば、BASEKIT内のDISK Extentionを含むBASEを作成でき ます。 LOAD "BASE",3E00 LOAD "BASENBS",3F00 UNLOCK "BASE" DELETE "BASE" SAVE "BASE",3E00,5AFF,3E00 COM "BASE" オリジナルのC-DOS用BASE-09は、$3E00-$59FFもしくは$5AFFで、ディスク拡張 を含んでいると想像できますが、今回のパッチでほぼ同じ仕様が実現できます。 以上