2017.4.2
前へ
次へ
ホームページトップへ戻る

マイコン独立大作戦
CRT/VGAIF+KEYIF+SDCARDIFボードの製作

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
WindowsパソコンにUSB接続して使う現行方式はそれなりに便利ではありますが、ときとしてWindows
のしがらみから開放されて、小さいながらも独立した一個のパソコンとして機能したいと思うこともあります。
昔はそれが普通のことだったのですが、安価なCRTディスプレイが生産中止となって久しい今日ではそれ
は叶わぬことと諦めていたのですが…。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[総合第39回]


●ZB3DOS(CP/M互換DOS)にLDコマンドを

前回書きました通り、お蔭様で「マイコン独立化セット」はHPに販売開始の記事をUPした翌朝には初回ロット分が完売となりましたが、その後この土曜日、日曜日にもご注文のメールをいただき、当初予定しておりました2回目のロットもまだ発注手配が完了しないうちから、ほとんど完売になってしまいました。
もう感謝感謝感謝です。
2回目に続いて3回目の発注手配も大至急でしなければなりませんが、3回目のロットについてはちょっと時間がかかるパーツが不足しますので、急いで手配しますけれど、お届けするのが少し遅くなってしまいそうです。
その手配もさることながら、とにかく超特急でソフトの完成を急がなければなりません。
あと2週間のカウントダウンです。
もう2日過ぎてしまいましたから実質10日ぐらいです。

そんな中で、この2日間、頭をかきむしりながら苦闘しておりました。
勿論「マイコン独立化セット」のプログラムについてです。
とにかく大急ぎで作ってきたものですから、あちこちにやり残したところがあります。

ここ2日間悩んでおりました問題は独立型ZB3DOS(CP/M互換DOS)のZディレクトリについてです。
現行のUSB接続型のZB3DOS(CP/M互換DOS)ではZディレクトリにあるファイルはWindowsが管理しています。
仮想A〜DドライブもWindowsのハードディスクにあるのですが、こちらのほうはZB3DOS(CP/M互換DOS)が主体となって管理しています。
たとえばCOPYコマンドでA:からZ:にファイルをコピーする場合、A:のファイルを読むところはZB3DOS(CP/M互換DOS)のファイルLOADプログラムが行ないます。
そしてZディレクトリに書き込むところはWindows側のプログラムが全て行ないます。

独立型ZB3DOS(CP/M互換DOS)ではZディレクトリからA:〜D:ドライブへのファイルコピーについては、何とかがんばって作ったのですが、逆のA:〜D:からZディレクトリへのファイルコピーは結局どうしようもありませんでした。
やってやれないことはないかもしれませんが、もうプログラムを追加するだけのメモリスペースがありません。
CP/MのDOSプログラムでFAT16のファイルを新規作成する、というのは、やや無理筋のような感じです。

2日間あれこれ試行錯誤した結果、当面のところその機能は無理、という結論となりました。
でもなんとかしたい。
ということで急遽考えましたのが、独立型ZB3DOS(CP/M互換DOS)にLDコマンドを追加する、ということです。
CP/MにはLD(LOAD)の機能がないのですよね。
拡張子がCOMのファイルは0100からロード後にコマンドとして直ちに実行されます。
この機能はMSDOSにもそのまま受け継がれています。
そういえばMSDOSにもLD(LOAD)はありませんね。
DEBUGコマンドとしてファイルを読み込むことはできますが、指定したアドレスにファイルをロードする、という作業はユーザーがプログラムを組んで実現しなければならないようです。

それで、そのLDコマンドを新規に作りました。
そのココロは。
いかにもZB3BASIC的なのですが。
A:〜D:ドライブからZ:ドライブへのファイルコピーの代わりに、ちょっと弱いですけれどLDコマンドを使って、まず目的のファイルを0100〜にロードします。
このときロードエンドアドレスも表示します。
次にZB3コマンドで一旦ZB3DOS(CP/M互換DOS)を終了しZB3BASICに戻ります。
ここでSVコマンドで0100〜ロードエンドまでをルートディレクトリかZディレクトリに名前をつけて保存します。
ちょいと面倒ですけれど、将来のバージョンアップのときまで、この方法でなんとかしのいでいただきますようお願いいたします。
(いかにもマシン語ツール的で、マニアックでよいのでは、と強弁しております)

さっそく機能追加してテスト中の画面です。

ZB3DOS(CP/M互換DOS)でディレクトリ表示をしているところがスクロールして見えなくなってしまいました。
こんなときはログの機能が欲しくなります。
ログ機能と画面のページUP/DOWNは、今回は間に合いませんがなるべく早い機会に追加機能として作りたいと思っています。
画面の一番上のところで LD 0002.BIN と入力しています。
その結果0100〜017Fまでに0002.BINがロードされました。
ZB3DOS(CP/M互換DOS)では128バイト単位でファイルのセーブ、ロードが行なわれます。
LDコマンド実行後にZB3コマンドでZB3BASICモードに戻りました。
ZB3BASICではZB3DOS(CP/M互換DOS)でシステム/ユーザーエリアとして使う0000〜CBFFまでのRAMエリアのうち、0000〜7FFFは裏のRAMとしてシステムプログラムの裏に隠れます。
8000〜CBFFはBASICのユーザーエリアとして使いますが、何もしなければその範囲のRAMの中身はそのまま残っています。
そこで0100〜017Fの範囲のメモリ内容を0002T1.BINというファイル名でルートディレクトリにセーブしました。
ZB3BASICのSV、LDコマンドで0000〜7FFFの範囲のアドレスを指定すると裏のRAMに対して書き込み/読み出しされます。
そのあとDIRコマンドで確認しました。
念のためZB3BASICのLDコマンドで適当なアドレス(ここでは9000〜)にロードして、そのあとDMコマンドで中身を確認しました。
もとの0002.BINは3E FF〜C3 00 00までですが、ZB3DOS(CP/M互換DOS)では128バイト単位でファイルを扱いますから、ファイルサイズが128バイトになっています。

順序が逆ですけれど、スクロールして消えてしまった画面を再現するためにもう一度ZB3DOS(CP/M互換DOS)を起動しました。

デバッグ中ですのでちょっと変わったアドレスにエントリしています。

デバッグ中の様子です。


CRT/VGAIF+KEYIF+SDCARDIFボードの製作[総合第39回]
2017.4.2upload

前へ
次へ
ホームページトップへ戻る