マイコン独立大作戦
CRT/VGAIF+KEYIF+SDCARDIFボードの製作
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
WindowsパソコンにUSB接続して使う現行方式はそれなりに便利ではありますが、ときとしてWindows
のしがらみから開放されて、小さいながらも独立した一個のパソコンとして機能したいと思うこともあります。
昔はそれが普通のことだったのですが、安価なCRTディスプレイが生産中止となって久しい今日ではそれ
は叶わぬことと諦めていたのですが…。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[総合第28回]
●TK−80モニタでSDカードを使ってみました
前回、迷いが吹っ切れてTK−80ほかの機能とSDカード制御プログラムを同居させることに落ち着いた結果としまして、TK−80モニタでもSDカードにアクセスできることになりました。
と言いましてもそこは7セグと16進キーしか使えないマシン語モニタですから、できることに限りがあります。
当然DIRやERASE、RENAMなどは無理があります。
結局のところTK−80モニタ、ND80Zモニタの場合、バイナリファイルのセーブ、ロードのみに限ってSDカードにアクセスすることができます。
おや、それって以前にもできたのでは?
ええ、確かに一度は[第24回]でご披露申し上げているのでありますけれど。
そのときはTK−80モニタは外してしまって、それからND80Zモニタも無理無理で圧縮して、そこにSDカードインターフェースプログラムを入れたのでした。
ですからそこで見ていただいたのはTK−80モニタではなくてND80Zモニタでの操作例だったのでした。
今回はそういうことではありません。
TK−80モニタもND80Zモニタも手を加えず、現行のシステムのままです。
というところを見ていただきます。
まずはそのための準備です。
こんなことはしなくてもよいのですけれど、まあ、座興のようなものです。
前回と同様に、現行のND80Z3.5システムにSDカードインターフェースプログラムを組み込んだROMを実装して、Windowsパソコンと接続して、ZB3BASICを起動しました。

前回FORMATしましたからSDカードにはZフォルダしかありません。
/LDコマンドでHDDからTK−80サンプルプログラムのOHAYO8.BINを読み込みました。
それをそのまま今度は0001.BINというファイル名でSDカードにセーブしました。
/LD、/SV、/LOAD、/SAVEはWindowsと接続した状態でWindowsのハードディスクに対してファイルのセーブ、ロードをするときのコマンドです。
SDカードに対してセーブ、ロードするときは”/”なしのLD、SV、LOAD、SAVEを使います。
もう一度DIRコマンドを使って、0001.BINがセーブされたことを確認しました。
準備作業はここまでです。
この作業はND80Z3.5でやらなくても、WindowsパソコンにSDカードリーダーライターなどを使ってSDカードを接続して、Windows上でコピーしても構いません。
ただこれは慣れの問題かもしれませんが、1つ2つのファイルをSDカードにセーブするのでしたら、ND80Z3.5を介して行なったほうが楽なように、私は思います。
あの「大容量記憶装置に接続しています…」とか「大容量記憶装置を安全に取り外すことができます」の表示にはもううんざりですので。
参考までに、今回サンプルとして使うプログラムのリストです。
2016/4/20 7:39 ohayo8.txt
END=8087
; OHAYO for NDZ
; 03/04/28 5/9
;10/6/1 for ND80Z3
;16/4/17 for nd8080
;
ORG $8000
LED1=$83F8;$FFF8
LED4=$83FB;$FFFB
START1=$0051;$080F
TM5M=$02DD
;
8000 CD5180 CALL CLR
;ASIATO disp
8003 217280 LXI H,ASIDT
8006 11F883 LXI D,LED1
; LXI B,$0008
8009 0E08 MVI C,08
800B CD5E80 ASIDP2:CALL TM1S
;? LDI
800E CD8280 CALL LDI;
; JPE ASIDP2
8011 C20B80 JNZ ASIDP2
8014 CD5E80 CALL TM1S
8017 CD5180 CALL CLR
801A CD5E80 CALL TM1S
;EYE close/open
801D 0603 MVI B,03
801F 211C1C LXI H,$1C1C
8022 113F3F LXI D,$3F3F
8025 22FB83 EYE:SHLD LED4
8028 CD6480 CALL TM025
;? LD (LED4),DE
802B EB XCHG;
802C 22FB83 SHLD LED4;
802F EB XCHG;
8030 CD6180 CALL TM05
;? DJNZ *EYE
8033 05 DCR B
8034 C22580 JNZ EYE
8037 CD5180 CALL CLR
;ohayo disp
803A 217A80 LXI H,OHAYODT
803D 11F883 LXI D,LED1
; LXI B,$0008
8040 0E08 MVI C,08;
8042 CD6180 OHYDP2:CALL TM05
;? LDI
8045 CD8280 CALL LDI;
; JPE OHYDP2
8048 C24280 JNZ OHYDP2;
804B CD5E80 CALL TM1S
804E C35100 JMP START1
;LED clear
8051 21F883 CLR:LXI H,LED1
8054 010008 LXI B,$0800
8057 71 CLR2:MOV M,C
8058 23 INX H
;? DJNZ *CLR2
8059 05 DCR B;
805A C25780 JNZ CLR2;
805D C9 RET
;1sec timer/0.5sec timer/0.25sec timer
805E CD6180 TM1S:CALL TM05
8061 CD6480 TM05:CALL TM025
8064 D5 TM025:PUSH D
8065 1E32 MVI E,32;=50
8067 D5 TM025_2:PUSH D
8068 CDDD02 CALL TM5M;4.684ms
806B D1 POP D
806C 1D DCR E
806D C26780 JNZ TM025_2
8070 D1 POP D
8071 C9 RET
;asiato data
8072 43 ASIDT:DB 43
8073 4C DB 4C
8074 43 DB 43
8075 4C DB 4C
8076 43 DB 43
8077 4C DB 4C
8078 43 DB 43
8079 4C DB 4C
;"ohayo---"
807A 3F OHAYODT:DB 3F;O
807B 76 DB 76;H
807C 77 DB 77;A
807D 6E DB 6E;y
807E 3F DB 3F;O
807F 40 DB 40;-
8080 40 DB,40;-
8081 40 DB 40;-
;
8082 7E LDI:MOV A,M
8083 12 STAX D
8084 23 INX H
8085 13 INX D
8086 0D DCR C
8087 C9 RET
;
ASIDP2 =800B ASIDT =8072 CLR =8051
CLR2 =8057 EYE =8025 LDI =8082
LED1 =83F8 LED4 =83FB OHAYODT =807A
OHYDP2 =8042 START1 =0051 TM025 =8064
TM025_2 =8067 TM05 =8061 TM1S =805E
TM5M =02DD
|
TK−80のテストだからということで、ND8080の付属プログラムから選びました。
ND80Z3.5にも同じ動作をするサンプルプログラムが付属していますけれど、それはZ80アセンブラで書かれています。
それに対して上のプログラムは8080アセンブラで書いたものです。
ND80Z3.5付属のサンプルプログラムはND80Zモニタでの動作を前提にしていますから、LEDの表示アドレスなどがTK−80モニタとは異なっています。
そういうことを含めて今回のサンプルプログラムはND80Z3.5がTK−80モニタモードでは完全にTK−80互換であることのよい見本にもなると思います。
なお、上のリストはもとはZ80アセンブラで書いたソースプログラムを自前のZ80→8080コンバータによって機械的に変換したものをもとにして、必要な部分をあとから手直ししたものです。
機械的にコンバートできないZ80固有の命令には?がついています。
それをどのように手直ししているのかなどというところも味わっていただければ、と思います。
さてそれではいよいよTK−80モードでの実行です。

SDカードインターフェースは接続されていますがUSBケーブルは外してあります。
完全に独立しています。
[8][0][0][0][ADRSSET]と操作したところです。
ディップスイッチの部分を拡大してみました。

左端の1番がモード選択です。
上(ON)がND80Zモニタモードで下(OFF)がTK−80モニタモードです。
今はTK−80モードになっています。
ファイル名として[0][0][0][1]を入力しました。

アドレス部に8000、データ部に0001を表示した状態です。
SDカードに保存されているはずの0001.BINファイルを8000番地からロードするための操作です。
その状態で[I/O][6]とキー入力します。

[I/O]はND80Zモニタの機能ですが[I/O][6](SDカードロード)と[I/O][5](SDカードセーブ)に限ってTK−80モニタでも使えるようにしました。
その代わりにUSBを介してWindowsのハードディスクにファイルをセーブする[STORE]と[LOAD]の機能は外してあります。
まあ、SDカードにセーブ、ロードできれば、その機能は使う必要はありませんものね。
上の写真は[I/O][6]と入力したあとの状態です。
アドレス表示部にロード開始アドレス8000が表示され、データ部にはロード終了アドレスが表示されています。
SDカードからプログラムが正しくロードされました。
その状態で[RUN]キーを押しました。

コンピュータが目覚めて歩き出しました。
「OHAYO−−−」と表示してプログラム終了です。

今度はプログラムをセーブしてみます。

セーブするときにはプログラム(またはデータ)の先頭アドレスをアドレス表示部に、終わりのアドレスをデータ表示部に表示させます。
上の例では[8][0][0][0][ADRSSET][8][0][8][7]と操作しました。
その状態で[I/O][5]とキー操作します。

アドレス表示部に「Fn..」と表示されますから、ファイル名を入力します。
TK−80モニタ、ND80Zモニタで扱えるファイル名は4桁の16進数0000〜FFFFに限られます。
拡張子BINが自動で付加されます。
ロードするときも同じです(やはり拡張子BINが付加されますから4桁の16進数のファイル名でもBIN以外の拡張子のファイルは読み込めません)。
さきほどはファイル名として0001を使いましたから、今度は0002にしてみます。

[0][0][0][2]とキー操作しました。
そのあと[WRITE INC]を押すと、ファイルセーブが行なわれます。

セーブが完了すると開始アドレスと終了アドレスが表示されます。
うまくセーブできたか確認してみます。
WindowsパソコンとUSB接続してZB3BASICを起動します。
WindowsパソコンとUSB接続してZB3BASICを使う場合にはND80Zモニタモードにする必要があります。

ディップスイッチの部分を拡大しました。

1番が上になっていますから、ND80Zモードです。
ZB3BASICを起動しました。

DIRコマンドを実行して、0002.BINがセーブされていることを確認しました。
念のためLDコマンドでちゃんとロードできることも確かめました。
このプログラムはZB3BASICモードでは実行できませんから、その意味ではただのデータファイルです。
ここではTK−80モニタで実行したときと同じアドレスにロードしましたが、実行しないファイルの場合には別のアドレスにロードしても何の問題もありません。
参考までに別のアドレス、9000にロードしてみました。

今回は参考例としてND80Z3.5のTK−80モニタモードでテストをしてみましたが、ND80Z3.5(ND80ZV)のND80Zモードでも、もちろん同じように操作できます。
CRT/VGAIF+KEYIF+SDCARDIFボードの製作[総合第28回]
2017.3.14upload
前へ
次へ
ホームページトップへ戻る