ワンボードマイコンをつくろう!(パソコンの原点はここから始まった)
TK80ソフトコンパチブル!8080、Z80マシン語からBASICまでこれ1台でこなせます
当記事は2009年11月から「TTLでCPUをつくろう!」というタイトルの もとにほとんど毎日連載をしてきたものを再編集したものです。 |
2011.7.5 前へ 次へ 目次へ戻る ホームページトップへ戻る |
☆またもやトラブル発生 ND80ZVの説明書作業も大詰めを迎えて、あと一息で販売開始というところまできて、最後の動作確認をしていましたら、おかしなところが出て来てしまいました。 |
[第98回]
●どうやら05C0でブレイクしているらしい
ディップスイッチをSTEP側にしている状態で、リモート接続プログラムを終了すると、ND80ZVの7セグメントLEDに必ず表示されてしまう05C0xxxxというのは、表示のされかたから考えてみますと、どうもステップ動作(ブレイク動作)の結果表示されたアドレスのようです。
すると、その05C0というアドレスはND80ZVのモニタROMのアドレス、ということになります。
ND80ZVのROMには3つの異なるモニタプログラムが入っています。
そのうちの1番目は、0000〜3FFFの範囲にある、TK80モニタプログラムです。
その次のアドレス0400〜07FFの範囲には、TK80モニタプログラムと同じだけれど、ワークエリアのアドレスだけが83xxではなくて、FFxxになっているモニタプログラムがあります。
そして0800〜0FFFの範囲には、ND80Zモニタプログラムがあります。
ND80ZVのリモート接続動作は、このND80Zモニタプログラムの機能として組み込まれています。
そしてND80Zモニタプログラムは、キーボードや7セグメントLEDに対するアクセスや、プログラム、データのSAVE、LOADのような基本的な動作は、0400〜07FFの”TK80モニタプログラム”のサブルーチンをCALLしています。
●05C0にあるモニタプログラムのルーチン
05C0は、0400〜07FFの範囲にありますから、0400〜に移植された”TK80モニタプログラム”のアドレスです。
その部分のプログラムリストです。
; ; SEGMENT CONVERT SUB ; 05C0 21F4FF SEGCG:LXI H,DISP 05C3 11F8FF LXI D,DIG 05C6 01E905 LXI B,SEGD 05C9 7E SEGCG2:MOV A,M 05CA 23 INX H 05CB E5 PUSH H 05CC F5 PUSH PSW 05CD E6F0 ANI F0 05CF 0F RRC 05D0 0F RRC 05D1 0F RRC 05D2 0F RRC 05D3 2600 MVI H,00 05D5 6F MOV L,A 05D6 09 DAD B 05D7 7E MOV A,M 05D8 12 STAX D 05D9 13 INX D 05DA F1 POP PSW 05DB E60F ANI 0F 05DD 2600 MVI H,00 05DF 6F MOV L,A 05E0 09 DAD B 05E1 7E MOV A,M 05E2 12 STAX D 05E3 E1 POP H 05E4 1C INR E 05E5 C2C905 JNZ SEGCG2 05E8 C9 RET |
; ; REGISTER RESTORE ; 05F9 2AE2FF RESRG:LHLD SSAVE 05FC F9 SPHL 05FD 2AE0FF LHLD PSAVE 0600 E5 PUSH H 0601 2AE4FF LHLD LSAVE 0604 E5 PUSH H 0605 2AEAFF LHLD FSAVE 0608 E5 PUSH H 0609 2AE8FF LHLD CSAVE 060C 4D MOV C,L 060D 44 MOV B,H 060E 2AE6FF LHLD ESAVE 0611 EB XCHG 0612 F1 POP PSW 0613 E1 POP H 0614 FB EI 0615 C9 RET |