2018年7月6日金曜日

FLEXシステムの作成方法(その3)・・・6800FLEXの場合

FLEXシステムの作成方法(その3)・・・6800FLEXの場合


6月27日に6809FLEXシステムの作成方法を説明しましたので、今回は6800用FLEXシステムの作成方法を説明します。

今更、誰が6800FLEXなんか使うんだという声もあるとは思いますが、マイコン初期の頃にVTL, TinyBasic, GAMEⅢ, TL1などのアマチュア的な言語に夢中になった思い出がある方もおられると思います。私もそうでした。
それらの言語を動かすためには、やはり、OSがあると何かと便利です。
(ディスクに保存しておいて起動して走らせるだけなら、WindowsパソコンにMOT形式で保存しておいて、MonitorのLoad, Saveコマンドで済むわけですが...)

それはそれとして、6800でもFLEXを動かしてみたいという、技術的な興味もあって6800FLEXを作成してみました。

6809の場合と同様に、SWTPCemu中の6800フォルダにあるDSKファイルからFLEX2.SYSを取り出して、それを元にFLEX2.CORを作ります。FLEX2.SYSは色々なDSKファイル中にありますが、Flex2-01.DSK中のものを使用することにします。このDSK中にはFLEX.CORやFLEX.SYSもありますが、これらは古いもののようですので使用せずにFLEX2.SYSから作ることにします。

具体的な手順

(以下のすべての数値は16進数表記です。)
 (1)FLEX.CORを得る
画像1 ディレクトリ

FLEX2-01.DSKをバイナリエディタで開き、アドレス410からのディレクトリを見ると、FLEX2.SYSはセクタのトラック、セクタ番号が01,0A~04,04の18セクタであることが分かります。

アドレスでは1300~2BFFですので、これをコピーして取り出してFLEX2.SYS名で保存します。



画像2 FLEX2.SYSの先頭部







画像3 FLEX2.SYSの最後尾




このFLEX2.SYSの最後尾を見ると、最後の3セクタが独立しているように見えます。
アドレス2900からの2セクタがDriver.bin、2B00からのセクタがI/Oのベクターです。

この3セクタを除いて282FFまでを取り出して保存したものがFLEX2.CORとなります。













(2)driver.bin, io.binを用意する
MicrosoftのOneDriveに必要なdriver.txtとio.txtを上げておきますので、それをダウンロードして、同梱の6800AsmWin.exeでアセンブルするとdriver.binとio.binが得られます。
6809FLEXとは異なり、このdriver.bin中にI/O関係のアドレスを書きます。
driver.txtを見ていただくと分かるように、BE80から始まるDriverのベクターの後ろ、アドレスBEA3に相当する個所からF000(INCH), F002(OUTCH), BEAFの位置にF838(MONITOR)を書き込んでおきます。
(実は、これだけではだめで、上書き用の io.txtも必要です。)


(3)BINファイルをパケット形式に変換する
得られたBINファイルをパケット形式に変換します。その方法は前回述べた通りで、空のDSKファイル(BLANK.DSK)を用意して、それをFlexDrvWin.exeのドライブにセットし、そこにbinファイルをドラッグ&ドロップするだけです。これで自動的にパケット形式に変換され、セクタ先頭にもセクタ情報が付加されます。

(3-1)driver.binを変換する
画像4 driver.bin と io.bin
FlexDrvWin.exeのStart Adrのボックス中の値を0xBE80にセットしてからdriver.binをドラッグ&ドロップします。実行アドレスは0x0000のままで良いので「はい」と答えるとdriver.binが指定したアドレスからのパケット形式で保存されます。
保存したBlank.binをバイナリエディタで開くと、アドレス2000からの2セクタに保存されていますので、これをコピーして取り出し、driver_dsk.bin名で保存します。

(3-2)io.binを変換する
6809の場合のconsole.binとは異なり、6800ではI/O関係のベクターはここではなく、driver.binの中に書いてありますので、これで十分なはずですが、このio.binは起動時の最後に読み込まれてdriver.bin中の値にセットされたメモリ上の該当箇所を更に上書きするためのもののようです。
(これが分からなくて、ずいぶん手間取りました。)
FlexDrvWin.exeに入れるときに、Start Adrを0xAD09に、Exec Adrを0xAD00にセットします。
この1セクタ分をコピーして取り出し、io_dsk.bin名で保存します。


(4)FLEX.CORにdriver_dsk.binとio_dsk.binをつなげる
新しいBLANK.DSKを用意し、FLEX2.CORを2000~35FFにコピーします。
その後ろの2セクタにdriver_dsk.binを、さらにその後ろの1セクタにio_dsk.binをコピーします。

(5)セクタ情報を書き換える

画像5 FLEX2.SYSの先頭部(左)と最後尾(右)
これで全セクタが揃ったので、各セクタ先頭のセクタ情報4バイトを整理します。
アドレス2000からの各セクタの先頭4バイトを、
01,02,00,01
01,03,00,02
      ...
01,19,00,18
00,00,00,19
に書き換えます。



(6)セクタ00,03のSIR(システムインフォメーションレコード)情報を書き換える
セクタ00,03(アドレス200)のオフセット1Dからの未使用領域開始セクタを01,1Aに、オフセット21からの残りセクタ数09,E0を09,C7に書き換えます


画像6 SIR情報




(7)セクタ00,05のディレクトリ情報を書き換える
セクタ00,05(アドレス400)のオフセット10からの24バイトをファイル名(8バイト)、拡張子(3バイト)、アトリビュート(1バイト,通常00)、未使用(1バイト,00)、スタートTrk,Sct(2バイト,01,01)、エンドTrk,Sct(2バイト,01,19)、サイズ(2バイト,00,19)、2バイト(00,00)、日付(3バイト,月,日,年を2進数で) のように書き込みます。

画像7 ディレクトリ


(8)最後に
以上でシステムディスクのベースが完成しました。あとは、SWTPCemuから必要なCMDファイルが入っているDSKファイルを探してFlexDrvWin.exeのドライブにセットして、システムディスクにコピーします。
例えば、COPY.CMDが入っているDSKがドライブ2に、コピーしたいCMDファイルが入っているDSKがドライブ1にセットされているとして、
  2.COPY (sp) 1 (sp) 0 (sp) .CMD (spはスペース)
でCMDファイルが全てドライブ0にコピーできます。
詳しくは、Documentationフォルダ中のTSCフォルダにあるドキュメントを参照してください。

(9)その他
・システムディスクの先頭2セクタ00,01と00,02にはBootLoaderを入れておく必要があります。6800用のモニター中のFLEXコマンド「X」は、この2セクタを読んでA100からにセットして実行を移す機能を持っています。(このBootLoaderのオフセット05,06にFLEX2.SYSの先頭セクタのTrk,Sct番号が書かれています。FLEXのLINKコマンドはSYSファイルを探して、その位置をここに書き込んでいます。これによって、SYSファイルがDSK上のどこにあっても正しくBootできるわけです。)

・AC07の値00を08に書き換えておくとBSキー時に削除文字が消えてくれますので、使い勝手が良くなります。このためにFLEX2.CORの先頭からのオフセット0F(アドレス200F)を08に変更します。

以上の作業に必要な、BootLoaderの入ったBLANK.DSK、driver.txt, io.txt, 6800AsmWin.exeをMicrosoftのOneDriveにMakeFLEX2というファイル名でアップしておきます。





2 件のコメント:

  1. こんにちは。先日MC6802コンピュータでFLEX2.0が起動するようになりました。

    ブートローダはTSCのドキュメント “6800 FLEX Adaptation Guide” の通りで動いたのですが、io.binとdisk.binはこちらのページの情報を参考に作ったところ初めて動作しました。ディスクイメージの作り方を含め詳しくご説明いただきありがとうございます。

    返信削除
    返信
    1. ryu10さま コメントありがとうございます。
      お役に立てたようで嬉しい限りです。
      FLEXはDOSとしての評価は低いですが、使いやすいので私は今でも使っています。使われる方が増えてFLEXが再評価されるようになると良いのですが。

      削除