ワンボードマイコンをつくろう!(パソコンの原点はここから始まった)
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
|
