MYCPU80でCP/Mを!
超巨大基板の8080互換HCMOS・CPUでCP/Mを走らせてしまおうという、なんとも狂気なプロジェクトです!
[第84回]
●/Sコマンドと/Lコマンド
今回はMYCPU80のリモートプログラムに/Sコマンドと/Lコマンドを組込みました。
/Sはバイナリデータファイルのセーブコマンドです。
/Lはバイテナリデータファイルのロードコマンドです。
いずれもND80ZV(ND80Z3.5)のリモートプログラムにある機能です。
画面上で左端4桁のアドレス表示部にデータセーブの開始アドレスを置き、右側4桁のデータ表示部に終了アドレスを置いて、
/S ファイルネーム[Enter]
と入力すると、指定したメモリアドレス範囲のデータが指定したファイルネームのバイナリファイルとしてハードディスクの今作業中のディレクトリ(フォルダ)に作成されます。
現在供給しておりますMYCPU80では、パソコンと接続してRS232C−USB変換でSAVE/LOADする機能は、16進数をASCIIコードに変換して文字データとして送受信します。
しかしZB3BASICやCP/M互換DOSでは大量のデータを扱うため、その方式では処理速度が遅くなり実用に適しません。
そこでMYCPU80用のZB3BASICおよびZB3DOS(CP/M互換DOS)ではバイナリデータをASCIIに変換することなくそのままバイナリコードのままで送受信します。
現在作成中のリモートプログラムはZB3BASICの一部ですので、/Sコマンドで作成されるデータファイルもバイナリファイルです。
バイナリファイルの拡張子は.BINとするのが一般的ですが、/Sで作成されるファイルはTK−80のSAVE/LOAD方式にしたがつてファイルの先頭にSAVE開始アドレスと終了アドレスを示す4バイトのデータが付加されます。
TK−80方式のバイナリファイルという意味で、ここでは.BTKという拡張子にしました。
プログラムとしては拡張子に制約はありませんし、拡張子をつけなくても支障はありません。
ちなみに標準的なMYCPU80用のSAVE/LOADファイルはTK−80方式のヘクサ(16進数)ファイルという意味で.HTKという拡張子を使っています。
下は/Sコマンドと/Lコマンドの実行画面です。
前回ブレーク操作に使ったテストプログラムをセーブします。
最初に8000〜8011の範囲を/Dコマンドで表示させて、メモリに正しく書き込まれていることを確認しました。
/Dコマンドは[第79回]で説明しました。
メモリダンプコマンドです。
コマンドは大文字でも小文字でもどちらでも構いません。
/Sコマンドも/Dコマンドと同じように、先に開始アドレスと終了アドレスをセットしてから/Sを入力しますが、上の例ではその前に/Dコマンドを使ったのでアドレス表示部に開始アドレスが表示されていて、データ表示部には終了アドレスが表示されていますから、それをそのまま利用して、いきなり
/S TEST.BTK[Enter]
と入力しました。
とても少ないデータですからセーブは瞬時に完了して、
save data 16(22) bytes
と表示されたあと、
8000 8011 −
と表示されて入力待ちになりました。
save dataの16は16進数表示で()の中は10進数です。
8000〜8011のデータは12H(18)バイトですが、その先頭に開始アドレスと終了アドレス情報の4バイトが付加されていますから合計16H(22)バイトになります。
次に今度は今セーブしたファイルをロードしてみます。
そのままロードしても正しくロードがおこなわれたかどうかわかりませんからデータの一部を書き換えておきます。
8000〜8006を00で書き換えました。
ここではたまたま8000 8011 と表示されていますが、/Lコマンドはファイルの先頭のアドレス情報を使ってロードしますから、アドレスを先に表示させておく必要はありません。
表示に関係なくいきなり/L ファイル名[Enter]と入力して構いません。
/L TEST.BTK[Enter]
と入力しました。
ロードが完了すると
load data 16(22) bytes
のようにロードバイト数が16進数と10進数で表示され、開始アドレスと終了アドレスが表示されて、入力待ちになります。
/Dコマンドで正しくロードされたことを確認しました。
下は上の画面のログです。
logfile mycpu80log\12182141.txt open mzbdos2n2 2014.11.30 by Chunichidenko MYCPU80に接続しました(9600bps) 0001 001C - 8000[ADRSSET] 8000 0021 - 8011/d[MEMORY DUMP] 8000 21 34 12 11 78 56 01 AB 90 79 83 3C 23 13 03 C3 !4..xV.ォ.y.<#..テ 8010 09 80 45 2A 14 14 14 14 14 14 14 14 14 14 14 14 ..E*............ 8000 8011 - /s test.btk [SAVE] test.btk save data 16(22) bytes 8000 8011 - 00[WR+] 8001 0034 - 00[WR+] 8002 0012 - 00[WR+] 8003 0011 - 00[WR+] 8004 0078 - 00[WR+] 8005 0056 - 00[WR+] 8006 0001 - 00[WR+] 8007 00AB - 8000[ADRSSET] 8000 0000 - 8011/d[MEMORY DUMP] 8000 00 00 00 00 00 00 00 AB 90 79 83 3C 23 13 03 C3 .......ォ.y.<#..テ 8010 09 80 45 2A 14 14 14 14 14 14 14 14 14 14 14 14 ..E*............ 8000 8011 - /l test.btk [LOAD] test.btk load data 16(22) bytes 8000 8011 - /d[MEMORY DUMP] 8000 21 34 12 11 78 56 01 AB 90 79 83 3C 23 13 03 C3 !4..xV.ォ.y.<#..テ 8010 09 80 45 2A 14 14 14 14 14 14 14 14 14 14 14 14 ..E*............ 8000 8011 - ^E 0000 00C3 - リモート接続を終了しました logfile closed at Thu Dec 18 21:44:29 2014 |