マイコン独立大作戦
CRT/VGAIF+KEYIF+SDCARDIFボードの製作
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
WindowsパソコンにUSB接続して使う現行方式はそれなりに便利ではありますが、ときとしてWindows
のしがらみから開放されて、小さいながらも独立した一個のパソコンとして機能したいと思うこともあります。
昔はそれが普通のことだったのですが、安価なCRTディスプレイが生産中止となって久しい今日ではそれ
は叶わぬことと諦めていたのですが…。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[総合第50回]
●CPMコマンド
あともう一点だけテストを残していますが、それ以外は独立版ZB3DOS(CP/M互換DOS)のテストを完了しました。
といってもとりあえずはND80Z3.5(ND80ZV)用についての話で、まだこれからND8080用について修正作業とテストをしなければなりません。
もうあとひとがんばりです。
とりあえずND80Z3.5(ND80ZV)用について独立版ZB3DOS(CP/M互換DOS)はなんとか完成できたと思いますので、本日は仕上げの作業を行ないました。
今まではZB3DOS(CP/M互換DOS)を起動するのに、まずロードコマンドでZB3DOSプログラムをロードして、次にJP E200と入力することで行なってきました。
USB接続版では、/CPMコマンドで起動しています。
そこで独立版でもCPMコマンドで起動するようにしました。
ZB3BASICのコマンド入力待ちのときに
CPM[Enter]
と入力することでZB3DOS(CP/M互換DOS)が起動します。
●カーソルを表示
USB接続版ではキー入力も画面表示もWindows側のプログラムで行なっていました。
しかし独立版では全部自前でやらなければなりません。
ZB3BASICではUSB接続版と同様に、キー入力待ちのときにカーソルマークを点滅するようにしました。
これは独立版のスクリーンエディタプログラムで行なっているのですが、ZB3DOS(CP/M互換DOS)はスクリーンエディタではありません。
ZB3BASICとは別にキー入力、表示を行なっていますので、スクリーンエディタのようなカーソル点滅はちょっと負担が大きいのでやれません。
しかし何も表示しないのも不便ですから、なんとか工夫してキー入力待ちのときにカーソルマークとして _ を表示するようにしました(上の写真参照)。
●ファンクション0Bのテスト
ファンクション0Bはコンソールステータスのチェックです。
コンソール入力(キーボード入力)をチェックして、キーが押されていたらAレジスタに00を、押されていなければFFを入れてリターンします。
このファンクション0Bとファンクション01(コンソール入力)がなかなかに大変でした。
当初私はこのあたりの機能について思い違いをしていたようです。
当初はキーが押されていればその間ずっとAレジスタに00を入れてリターンする、と思っていたのですが、どうやらそうではなくて、キーが押されたら、最初の1回だけは00リターンしますが、次からはキーが押されたままの間はずっとFFリターンになるようです。
これはしかしなかなかに難しい動作です。
そのように動作させるために半日以上かけてあれこれ試行錯誤をしました。
ファンクション0Bのテストは「ワンボードマイコンでCP/Mを」[第363回]で行なっています。
そこで使ったテストプログラムFNC0BT−3にまずいところがあることに気が付きました。
2013/4/7 15:1 fnc0bt-3.txt END=011B ; BDOS function0B test(fnc0bt) ;2012/5/29 8/24 ;13/4/7 ; ORG $0100 FCALL=$0005 ; 0100 1E2D LOOP0:LD E,2D 0102 0E02 LOOP:LD C,02 0104 CD0500 CALL FCALL 0107 0E0B LD C,0B 0109 CD0500 CALL FCALL 010C B7 OR A 010D CA0001 JP Z,LOOP0 0110 0E01 LD C,01 0112 CD0500 CALL FCALL 0115 FE1A CP 1A;Ctrl+Z 0117 C8 RET Z 0118 5F LD E,A 0119 C30201 JP LOOP ; FCALL =0005 LOOP =0102 LOOP0 =0100 |
このプログラムではキーを押すと、そのキーの文字が2回表示されてしまいます。
そのことに気が付かなかったのは、もともと上で書きましたように、キーが押されている間は連続して00リターンしてくるものと考えていたからだと思います。
そのところを直してFNC0BT−4にしました。
2017/4/14 20:24 fnc0bt-4.txt END=011A ; BDOS function0B test(fnc0bt) ;2012/5/29 8/24 ;13/4/7 ;17/4/14 ; ORG $0100 FCALL=$0005 ; 0100 1E2D LOOP0:LD E,2D 0102 0E02 LOOP:LD C,02 0104 CD0500 CALL FCALL 0107 0E0B LOOP2:LD C,0B 0109 CD0500 CALL FCALL 010C B7 OR A 010D CA0001 JP Z,LOOP0 0110 0E01 LD C,01 0112 CD0500 CALL FCALL 0115 FE1A CP 1A;Ctrl+Z 0117 C8 RET Z 0118 C30701 JP LOOP2 ; FCALL =0005 LOOP =0102 LOOP0 =0100 LOOP2 =0107 |
FNC0BT−4を実行してみます。
USB接続版に比べると画面表示がめちゃめちゃ速いです。
[h]を押してすぐに[Ctrl]+[P]を押したのですが、その間にこれだけ進んでしまいました。
この画面のようにキーを押すと(押し続けても)1回だけその文字が表示されます。
あとはキーを押し続けてもキー入力無しと同じ扱いになります。
一旦キーを離してもう一度キー入力すると、そこでまた1回だけ入力した文字が表示されます。
●RS232Cのテスト
CP/Mではファンクション03が紙テープリーダー入力でファンクション04は紙テープパンチャー出力でした。
しかしさすがに紙テープはちょっと…というわけで、ZB3DOS(CP/M互換DOS)ではファンクション03はRS232C入力、ファンクション04はRS232C出力に割り当てています。
この機能はUSB版と同じですがUSB版ではRS232Cもキー入力も画面表示も全てPIC18F14K50に対して行なっています。
独立版ではキーボード入力と画面表示についてはPIC18F14K50とは関係なく独自の回路で行ないますがRS232CについてはPIC18F14K50を介して行ないます。
そこのところの交通整理がうまくできているか気になりましたので、ZB3BASICについては先ごろテストを行ないました([第45回])。
ZB3DOS(CP/M互換DOS)についても念のためテストをしておくことにしました。
テストプログラムはFNC03T−2です。
FNC03T−2を使ったテストは「ワンボードマイコンでCP/Mを」[第205回]で行なっています。
それと同じことを独立版でも行なってみました。
[第45回]と同じように、相手側はWindowsパソコンとUSB接続したND80ZVを使って、そちらはZB3BASICのプログラムを実行しました。
こちらはUSB接続版のWindows画面(DOSプロンプト画面)です。
こちらは独立版の画面です。
CRT/VGAIF+KEYIF+SDCARDIFボードの製作[総合第50回]
2017.4.16upload
前へ
次へ
ホームページトップへ戻る