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

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

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