2018年6月27日水曜日

ASSIST09に追加したLoad, Saveコマンドを改良しました

ASSIST09に追加したLoad, Saveコマンドは使いにくかった


5月26日のブログで公開したASSIST09の追加コマンドLoad, Saveですが、使用していると使い勝手が悪いところが目に付いてきましたので、改良しました。

使いにくい点は
(1)毎回、Windows側のslwin.exeを起動しなければならない。
(2)末尾が0でないアドレスからSaveし始めると、その値から16バイトずつ保存していくので、メモリのダンプ値と比較しにくい。

ということで、コマンドプロンプト画面でWindows側のソフトを起動すれば、その画面を閉じない限り、繰り返しLoad, Saveコマンドが使えるように改良しました。
また、アドレスが切りの良い値でSaveされるように一行目の保存バイト数を調整しました。


コマンド発行の様子



コマンドの使い方は全く同じです。











Windows側の様子





一度起動するだけで、連続してLoad, Saveコマンドが使えます。終了するにはQを入力して少し待ちます。








作成されたMOTファイル




Saveコマンドで保存されたMOTファイルの中身です。
2行目からは切りの良いアドレス値で保存されています。















残念な点...
ASSIST09側のプログラムもそれに合わせて若干の手直しをしましたので、モニタROMの焼き直しが必要となってしまいました。

ASSIST09側のプログラムとWindows側のプログラム(slwinr.exeと改名)をMicrosoftのOneDriveに上げておきます。

FLEXシステムの作成方法(その2)・・・より具体的に

FLEXシステムの作成方法 ・・・ より具体的に

以前の「FLEXシステムの作成方法」(2018/05/04公開)をより具体的に説明します。
フォルダFLEX6809中の100近いファイルのほとんどはFLEXの9.0や2.9等の以前のバージョンで、3.01とは若干構造が異なり、前回説明した手順がそのままでは適用できません。(9.0や2.9の構造は6800用のFLEX2と似ています。)
必要なバージョンV3.01はFLEXSSB.DSKの中だけにあります。
このDSK中にはFLEX.CORはありませんが、FLEX.SYSがFLEX.CORの後ろにDRIVER.BINとCONSOLE.BINをつなげた形になっているので、これらを取り除けばFLEX.CORが得られるわけです。得られたFLEX.CORにこのシステム用のDRIVER.BINとCONSOLE.BINをつなげればFLEX.SYSとなります。

具体的な手順

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

FLEXSSB.DSKをバイナリエディタで開き、アドレス410からのディレクトリを見ると、FLEX.SYSはセクタのトラック、セクタ番号が01,0A~01,21の18セクタであることが分かります。
アドレスでは2D00~44FFですので、これをコピーして取り出してFLEX.SYS名で保存します。






画像2 FLEX.SYSの先頭部


このFLEX.SYSの最後尾を見ると、最後の2セクタが独立しているように見えます。
アドレス4300のセクタがDRIVER.BIN、4400のセクタがCONSOLE.BINです。
(DRIVER.BINが簡単なのは他の部分に実体があるからです。)
この2セクタを除いて42FFまでを取り出して保存したものがFLEX.CORとなります。


画像3 FLEX.SYSの最後尾




























(2)Driver.bin, Console.binを用意する
まず前回のページで紹介しているGitHubへ行き、Cloneordownloadボタンを押し、DownloadZIPを選択すると、6809_6800_FLEX-master.zipがダウンロードできますので、これを展開します。
この中のDRIVER.TXTとCONSOLE.TXTを同梱の6809AsmWin.exeでアセンブルするとDRIVER.BINとCONSOLE.BINが得られます。

(3)binファイルをパケット形式に変換する
得られたBINファイルはそのままではDSKファイルに入れることはできません。
「シングルボードコンピュータとFLEXシステムの詳細」(2018年5月4日公開)で述べたように、FLEXシステムではベタのBINファイルは存在できませんので、パケット形式に変換します。その方法ですが、空のDSKファイル(BLANK.DSK)を用意して、それをFlexDrvWin.exeのドライブにセットし、そこにBINファイルをドラッグ&ドロップするだけです。これで自動的にパケット形式に変換され、セクタ先頭にもセクタ情報が付加されます。

(3-1)DRIVER.BINを変換する
画像4 DRIVER.BINとCONSOLE.BIN

FlexDrvWin.exeのファイル内容表示ボックスにDRIVER.BINをドラッグ&ドロップすると
先頭アドレスを聞いてきますので、「いいえ」で抜けて、バイナリファイルのStart Adrのボックス中の値を0xDE00にセットし、もう一度ドロップします。実行アドレスは0x0000のままで良いので「はい」と答えるとDRIBER.BINが指定したアドレスからのパケット形式で保存されます。
保存したBLANK.DSKをバイナリエディタで開くと、アドレス2000からの2セクタに保存されていますので、これをコピーして取り出し、DRIVER_DSK.BIN名で保存します。









(3-2)CONSOLE.BINを変換する

画像5 CONSOLE.BINを編集

方法は上と同様なのですが、注意すべき点があります。CONSOLE.TXTを見ると分かるように、前半はD3E5からのI/Oのベクタ値の並び、後半がD370からのI/Oプログラムの実体と分かれています。これをそのままFlexDrvWin.exeに放り込むと全体がD3E5からということになってしまいます。
(画像5の上部)





別々に処理して最後に合体させる手もありますが、そうサイズも大きくないので、手作業で修正することにして、そのまま、先頭アドレスを0xD3E5に、実行アドレスを0xCD00にセットしてCONSOLE.BINを放り込みます。
(実行アドレスを指定するのは、最後尾に16,CD,00を追加させるためです。)

そして次の2箇所を変更します。(画像5下部の2箇所の赤枠部)
・ベクター部分は18バイトなので、02,D3,E5の次の57を18に変更する。
・D3,70からの24バイトの後ろに、02,D3,70,3Fを挿入する。
この1セクタ分をコピーして取り出し、CONSOLE_DSK.BIN名で保存します。

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

画像6 FLEX.SYSの先頭部(左)と最後尾(右)
(5)セクタ情報を書き換える
これで全セクタが揃ったので、各セクタ先頭のセクタ情報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に書き換えます

画像7 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進数で) のように書き込む。

画像8 ディレクトリ


(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を入れておく必要があります。ASSIST09中のFLEXコマンドは、この2セクタを読んでC100からにセットして実行を移す機能を持っています。(このBootLoaderのオフセット05,06にFLEX.SYSの先頭セクタのTrk,Sct番号が書かれています。FLEXのLINKコマンドはSYSファイルを探して、その位置をここに書き込んでいます。これによって、SYSファイルがDSK上のどこにあっても正しくBootできるわけです。)

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

以上の作業に必要なBootLoaderの入ったBLANK.DSK、DRIVER_DSK.BINとCONSOLE_DSK.BINをMicrosoftのOneDriveにMakeFLEXというファイル名でアップしておきます。