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

マイコン独立大作戦
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

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