標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第265回]
●前回の補足です
前回の終りのところで、参考までに、当社のZ80BASICボード(ZBKボード)でテストプログラムを実行したところの画面をお見せしました。
ちょいと時間がなかったものですから、お見せしただけで終わってしまいました。
それについて、説明したとしましても、今作業中の「つくるCPU」の基板とは直接関係はありませんから、そのまま終わってしまってもよいのかも知れませんが、まあ、どんなことでも全くの無駄ということはないとも思いますから、今回は余談としてちょいと説明をすることにいたします。
もう一度、前回お見せした画面です。
この画面は当社のBASIC制御ボードZB28Kをパラレルポート(プリンタポート)を使って、DOSVパソコンと接続してオンラインで制御している画面なのです。
Windows98まではプログラムで直接パラレルポートをアクセスできたのですが、WindowsXPになってからはアクセスが禁止されてしまいました(だんだんと融通がきかなくなって、不便になってきています)。
ですからZBKボードのシステムもXP用にはUSB接続で制御するのですが、私はXPもUSBも好きではありませんから、自分自身の作業ではXPなど使わないで、いまでもずっとWindows98を使っています。
あ。勿論、この記事も全部Windows98を使って作成して、そのままUPしています。
XPよりWindows98の方がうんと軽くて快適です。
やっぱりトシなのでしょうかねぇ。
使い慣れたものからなかなか離れられません。
この画面、DOSプロンプト(DOS窓)なのですが、これも使い慣れると離れられないのです。
さて、この画面、相手はZ80互換のKL5C8012CPUを搭載したZBKボードです。
そのCPUとパラレルポートを使って交信中の画面です。
白い文字は、こちらのプログラム(DOSプログラム)によって表示された文字です。
緑の文字は、ZBKボードから送られてきたものです。
画面中ほど、/LD C:\ASM80\TEST9Z.BIN,4100
というのは、Windowsのキーボードから、このままコマンドとして入力したものです。
ZBKシステム用のDOSプログラムがこのコマンドを受け、TEST9Z.BINファイルの中身をパラレルポートを通じてZBKボードに送出します。
ZBKボードは受け取ったデータをマシン語プログラムとして、ボード上のRAMの4100番地から格納します。
その次の、BP 4201ですが、今回は、これを説明したかったのです。
BPはブレークポイントを設定するコマンドです。
マシン語プログラムのアドレス4201でブレークせよ、というコマンドです。
次のJP 4100は、アドレス4100から実行せよ、というコマンドです。
これらのコマンドは、Windowsのキーボードから入力したものが、パラレルポートを通じてZBKボードにコマンドとして送られます。
その次の緑の表示は、ZBKボード上のCPU(Z80)が4100からのプログラムを実行して、さきほどのブレークポイントでブレークした結果をDOSVパソコンに、パラレルポートを通じて送ってきたデータです。
AFはAレジスタとフラグです。BC、DE、HLはそれぞれBCレジスタ、DEレジスタ、HLレジスタです。
Z80CPUですから8080にはないレジスタも表示されています。A’F’〜H’L’は「裏レジスタ」です。
IX、IY、Iも8080にはないレジスタです。
PCはプログラムカウンタ、SPはスタックポインタです。
その次の8ビットはフラグレジスタをビットで表現したものです。
ブレークポイントの4201について、プログラムリストを見てみましょう。
前回お見せしたTEST9の、その前後の部分です。
;RET
41E6 110000 LXI D,$0000
41E9 CD2742 CALL RC
41EC CD3142 CALL RNC
41EF CD3B42 CALL RZ
41F2 CD4542 CALL RNZ
41F5 CD4F42 CALL RP
41F8 CD5942 CALL RM
41FB CD6342 CALL RPE
41FE CD6D42 CALL RPO
;
; CHECK
4201 310060 LXI SP,ERBF
4204 210050 LXI H,STCK
4207 2B DCX H
4208 11F642 LXI D,TBL1END
420B 0680 MVI B,80
420D 1A LOOP0:LDAX D
4201番地はテストプログラムの実行が完了して、これから結果の値と比較データとの比較を開始する始めのアドレスなのです。
今回Z80にこのプログラムを実行させた目的は、その比較データのもとになる値として、ここまでの実行によってスタックに蓄えられた値を取得するためですから、ここ(4201)でブレークさせることにしたのです。
プログラムをこのようにブレークさせて途中で強制終了させることで、そのときのレジスタの値を知ることができます。
さきほどのDOS画面をもう一度見てみましょう。
PC(プログラムカウンタ)は4201になっています。
SP(スタックポインタ)は4F80になっていて、4FFFから4F80までにテスト結果が蓄積されていることがわかります。
フラグレジスタはFF(11111111)です。テストのため、全フラグがONになっていることを示しています。
レジスタ表示の次の、D.,4F80,4FFFもWindowsのキーボードから入力したコマンドです。DM(メモリダンプ)コマンドです。
このコマンドを受け取ったZBKボードは、RAMの4F80〜4FFFの値を、この画面で緑で表示されている通りの文字データの形で、パソコンに送信してきます。
Windows側のプログラムは、送られてきた文字データをただそのまま表示しているだけで、こちらからZBKボードの中を見にいったりしているわけではありません。
DOSプログラムとZBKボード側のプログラムがパラレルポートを介して交信することで、このようにプログラムを実行させたり、CPUの状態やRAMの値などを受け取ることができるのです。
私はZBKボードを使った通常の作業はWindows98上でパラレルポートを介して行いますが、このZBKボードのシステムはWindowsXP上でUSBを介して行うこともできるようになっています。
何をお話したいのか、おわかりになりますでしょうか?
「つくるCPU」もUSBを介して、データの送受信をすることができるのですよねぇ。
ということは、「プログラムさえ作れば」今回説明した程度のことは、「つくるCPU」にだって、同じようにさせることができるのですよ!
いや。今すぐに、ではありません、ですよ。
今は、もう、基板の作業で、手一杯の状態ですから、とてもそこまではできません。
でも、全ての作業が完了して、当面、何もすることがなくなってしまったら(そりゃ、いつのことじゃいな)、このあたりのプログラムも作ってみてもよいなぁ、と思っています。
以上、今回は余談でした。
●余談の続きがありました。ブレークポイントのお話です
ひとつ、忘れていました。
TK80もブレークポイントを設定することができます。
これはステップ動作と同じ仕組みで機能します。
前にTK80のステップ動作のところで説明しましたように、TK80では割り込みを利用しています。
割込みによるステップ動作を連続で自動継続して進める中で、アドレスの比較を行い、指定したアドレスになったところでブレークするという仕組みです。
1命令実行するごとに割込みが発生して、そのたびにモニタプログラムが実行されますから、ブレーク動作をさせないで普通にプログラムを実行させるのに比べて何十倍も時間がかかってしまいます。
ところで。
今回説明した、ZBKボードのブレーク動作は、割込みを利用していません。
ブレークポイントまでは普通にプログラムが実行されます。
割込みは使っていませんが、ブレークポイントまで来ると、突然「システムブレーク」して、システムルーチンに戻ってきます。
さきほどのDOS画面の通りです。
そんな器用なことが、どうするとできるのでしょうか?
Z80だから?
いえいえ。8080だってできるのです。
もちろん、「つくるCPU」だって、できます。
Z80(8080)のプログラムに詳しい方でしたら、わかりますよね。
ああ。また、脱線してしまいますけれど…。
2009.7.1upload
前へ
次へ
ホームページトップへ戻る