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

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

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

[総合第19回]


●完全独立型FAT16DOSBASICの完成です!

大変長らくお待たせいたしました。
完全独立型FAT16DOSBASICの一応の完成です。
Windows互換のFAT16システムです。
ちょいと大げさですけれど、小さいながらもれっきとしたDOS(Disk Operation System)です。
本当はBASICだけではなくて、強力な機械語デバッグ機能もついていますけれど、中心的な言語はBASICですから、DOSBASICということになりますでしょう。
従来のZB3BASICをSDカード対応にして、そしてそして、なによりも強調しておきたいことは、完全にWindowsパソコンから独立して動作するシステムであるということです。

とりあえずND80Z3.5用のみ作成して動作テスト中です(ND80ZVも同じように動作します)。

[1][0][0][0][ADRS SET][RUN]でBASICシステムを起動します。
アドレス1000はBASICシステムのエントリアドレスです。

急いでソフトを作ってきましたから、これからまだ検証しながら仕上げていかなければいけませんが、実は10日ほど前にはできていたのです。

ROMの日付は2/17になっています。
早くお見せしたかったのですけれど、このところなかなか時間がなくて、落ち着いて説明を書くだけの余裕がありませんでした。

BASICシステムを起動する直前の写真です。

USBケーブルが外してあるところをよくご覧ください。
Windowsパソコンにはつながれておりません。
今や自由であります。
今までBASICはWindowsパソコンとUSBで接続した状態でしか動作できなかったのですが、これからはUSB接続なしで、晴れて独立マシンとして動作します。

BASICシステムが起動しました。


右下に a が表示されています([第14回]参照)。


いよいよこれからSDカードにアクセスします。
DISKオペレーションシステムの始まりです。

ディレクトリを表示するにはDIRコマンドを使います。
dir[Enter]と入力しました。
実際には英小文字で入力していますが、説明の見易さを考えて大文字で表記しました(以下の説明でも同様です)。

SDカードのディレクトリが読み込まれてファイル名が表示されました。
今までのUSB接続型ZB3BASICにはDIRコマンドはありませんでした。
独立型で新たに追加したコマンドです。

ファイル名は英数と一部の記号8字以内で拡張子は3字以内です。
拡張子としてTXT、BINが見えますが、システムとしては拡張子はただの符号としての意味しかありません。
あってもなくても構いません。
ただ一般的な約束事としてBINはバイナリファイル、TXTはテキストファイルを意味しますから、なるべくそれに従ったほうがよいでしょう。

バイナリファイルをロードするにはLDコマンドを使います。
LD VGATEST1.BIN,9000[Enter]と入力しました。

今までのUSB接続型ZB3BASICでは’/’付きの/LDコマンドでした。
USB接続型ではWindowsのシステムを利用するコマンドはシステムROM内のコマンドと区別するために’/’付きのコマンドにしています。
独立型では全てのコマンドがシステムROM内にありますから’/’はつけません。
VGA画面表示テストプログラムがアドレス9000からロードされました。
バイナリファイルのロードはロード開始アドレスをパラメータとして指定する必要があります。
そのファイルが機械語のプログラムの場合本来の正しいアドレスにロードしないと正しく実行されません。
データとして扱う場合にはRAM上でかつシステムのワークエリアではないところならばどこにロードしても構いませんし中身は変わりません。
念のためにロード後にDMコマンドでロードした内容を確認しています。
前回お見せしたプログラムと一部が異なっています。

JPコマンドで今ロードしたプログラムを実行してみます。

機械語のプログラムはロードした直後でなければ実行できないということはありません。
ファイルからロードしても、あるいはCMコマンドで直接書いても、それがRAMの中に残っている限り、いつでもJP命令で実行できます。
前回のプログラムは独立型システムなしの状態でテストするプログラムですからプログラムの終わりはモニタROMの先頭アドレスへのジャンプ命令(C30000)でした。
今回はBASICシステム上で機械語プログラムを実行しますから、プログラムの終わりはBASICのシステムリエントリアドレス1033番地へのジャンプ命令(C33310)になっています。

実行結果は今までのテストプログラムと同じように見えますが。

良く見ると上から16行目にプロンプトマークとカーソル(>■)が見えます。
また右下隅には’a’が表示されています。
さきほど15行目でJP 9000を実行して、画面のテスト表示が行なわれたあとBASICシステムに戻ったことがわかります。

このままでは続いてテストするのに不便ですからCLS(CLear Screen)コマンドを実行します。

スクリーンエディタは入力される行全体の文字を読み込みますから必要な文字以外はスペースで消去しておいてから{Enter]を入力します。

画面はクリアされたのですが。

ERR:9が表示されてしまいました。
ND80Z3.5付属のZB3BASIC操作説明書にはERR:9は

9 マルチステートメント記述でコロン(:)が無いか、文法に合わない文がある。

と書いてあります。
はて?
こんなエラーが出るはずはないのだが?

ひょっとしたら。
そういうことか。
多分そういうことかと思って、さきほどのテストプログラムを一部手直ししました。

実は今回のテストプログラムは前回のテストプログラムよりも少し手抜きをしています。
前回のプログラムはHLレジスタの値がF800から開始してFFD0になるまで繰り返しVRAMにデータを書き込んでいます。
VRAMの終わりはFFCFです。
ところが今回のプログラムはそこのところをはしょってしまってHレジスタの値が00になったところで実行を終了しています。
つまり前回のプログラムはVRAMのちょうど全体(F800〜FFCF)に文字データを書くものでしたが、今回はそれを越えてF800〜FFFFに文字データを書き込むプログラムになっていました。
詳しく確認はしていませんが、おそらくそこが問題だったのでは、と考えました。

実は独立型BASICシステムプログラムは今までのUSB接続型システムプログラムをもとにして、必要な変更を行なったものなのですが、もとのシステムプログラムはVRAMなどというものを意識しないで作ったものでしたから、F800〜FFFFの中にもシステムのワークエリアが割り付けてありました。
それを移動する作業が結構大変でした。
それでVRAMとして直接使用するF800〜FFCFは全部移動したのですが(ひょっとするとまだ残っているかもしれません。それはこれからチェックしていくつもりです)、しかしFFD0〜FFFFはVRAMエリアの外ですから、そこにはシステムのワークエリアが残っている可能性があります。
システム以外のプログラムがシステムのワークエリアにデータを書き込んだりすると意味不明のトラブルが発生する可能性があります。

そういうことではないかと考えたので、手抜きのプログラムには手抜きの対策で、ということでHレジスタの値が00になるまで、というところをFFになるまで、に書き換えたのが、上のCMコマンドの内容です。
この変更によってVRAMのF800〜FEFFまでに文字コードを書いたところでプログラムは終了します。

JP 9000を実行します。


実行後の画面です。

画面下部アドレスFF00から後ろには何も書かれていません。

今度はどうでしょうか。
もう一度CLSコマンドを実行してみます。


今度はERR:は表示されませんでした。

考えは的中しました。
そういうことだったのでした。
一件落着です。

変更したプログラムをSDカードにセーブします。

バイナリデータ(機械語プログラム)のセーブにはSVコマンドを使います。
ファイル名とセーブする開始アドレスと終了アドレスをパラメータとして与えます。

DIRコマンドを実行しました。

VGATEST3.BINが追加されました。

修正前のVGATEST1.BINは削除しておきましょう。

ファイル削除コマントはDELETEが使えるとよかったのですが、DELETEはBASICプログラム行を削除するコマンドとして使ってしまっていますから、代わりにERASEを使います。

もう一度DIRコマンドを実行してみます。

VGATEST1.BINが削除されました。
一旦削除してしまったファイルはもとには戻せません。
ERASEは注意して使いましょう。

ここまでバイナリファイルについて説明してきました。
それとは別にBASICプログラムをロードするためのコマンドとしてLOADコマンドがあります。

LOADコマンドは特に必要がなければロード先アドレスは指定しません。
アドレスを指定しない場合にはBASICプログラムエリアの先頭アドレス8004番地からロードされます。
ロードしたBASICプログラムはLISTコマンドでリスト表示したり、RUNコマンドで実行したり、また行の書き換えなどを行なうことができます。

BASICプログラムをセーブするときはSAVEコマンドを使います。

ファイル名SQRTEST.TXTでSDカードにセーブしました。
SAVEコマンドではアドレスは不要です。
ファイル名だけを指定します。
拡張子としてTXT以外を使っても、テキストイメージでセーブされます。

DIRコマンドで確認してみました。

さきほど削除したVGATEST1.TXTのあったところにSQRTEST.TXTが表示されました。

さてこのようにしてSDカードにセーブしたファイルはWindowsのもとで読み出すことができます。
逆にWindowsでセーブしたファイルを独立型DOSシステムでロードすることもできます。
独立型DOSシステムではLDコマンドを使えばどんなファイルでも一応ロードできますが、Windowsでは読み込むためのアプリケーションが必要です(こういう場合にWindowsは実に不便です)。

上で使ったSDカードをSDカードインターフェースボードから外して、Windows7にセットしました。

独立型DOSシステムではWindowsと同じルール(FAT16)でSDカードにファイルを作成していますから、Windowsシステム互換です。
ただし独立型DOSシステムで作成したファイルには日付時間は記録されません。
日付時間が表示されているファイルはWindows上でSDカードにコピーしたファイルです。
中ほどにさきほど作成したSQRTEST.TXTがあります。

この通り、メモ帳で開くことができます。


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

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