復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第312回]
●Z8S18020のウェイトサイクル
前回までのお話の流れからいたしますと、今回は当然IPL(Initial Program Loader)の説明に入らなければならないところなのでありますが。
やっぱり脱線してしまいます。
少し前になりますが、ND80ZVなどをご購入いただいた古くからのお客様からメールをいただきました。
[第306回]をお読みになって、
「CPUクロック20MHzのZ80でよく82C55が動いていますね。82C55は何を使っているのかわかりませんが、よく誤動作しないものだと感心しています」
というお便りでした。
え…と。
せっかく感心していただきましたのですが、それはちょいと誤解でありまして、ここしばらく書いておりますテスト作業はクロック20MHzではなくて10MHzでやっております。
おまけにしっかりとウェイトがかかってしまっておりますのです。
メールをいただいたので、そのことについて急遽書くことにしました、というわけではありません。
実は[第306回]のあたりを書きましたときに、ウェイトサイクルについても書かなければ、と思いつつ、いつものことですっかり忘れてしまっておりました。
メールをいただいてそのことを思い出しました。
で。
早いところ書いておきませんと、また忘れてしまいますので、今回は予定を変更して、ウェイトサイクルについて書くことにした次第です。
[第305回]でロードしましたMUSICプログラムには当初しっかりと悩まされてしまいました。
そのあたりのことにつきましては[第263回]のあたりに書いております。
そこでも書いておりますが、Z8S180はリセット後はメモリREAD、メモリWRITEとI/O READ、I/O WRITEの各マシンサイクル毎にそれぞれ3クロックのウェイトが挿入されます。
多くの命令では1マシンサイクルは3クロックですから、そこにさらに3クロックが追加されるということになりますと、CPUクロックが10MHzだったとしても、実際にはせいぜい半分の5MHz程度のパフォーマンスしかないということになります。
そういうことですから、誤動作せずに動いても何の不思議でもありません。
しかし、実際にそれがどの程度のパフォーマンスであるのか、ちょっと確認してみたいという気になりました。
せっかくMUSICプログラムがきっかけになったことでもありますから、このプログラムを利用してみることにいたしました。
MUSICプログラムのリストは[第263回]でお見せしました。
その中に1msecのタイマーサブルーチンがあります。
T1MSです。
命令の実行クロック数をもとにして、実行時間を計算してちょうど1msecになるようにしています。
そこで、このサブルーチンをCALLするごとに、82C55の出力をH、L交互に変化させるようにして、その出力をオシロで見てみました。
比較のために、同じ動作をするプログラムをND80ZV(ND80Z3.5)と、E80(仮称)ミニコンの両方で実行して、その結果を写真に撮りました。
まずはND80ZV(ND80Z3.5)です。
テストに使ったプログラムはこちらです。
2013/2/6 15:20 ndtime.txt END=801E ;;; music 09/10/9 10/10 10/12 10/15 ;;; ;;;MUSIC from MYCPU80 MUSIC ;10/6/4 6/5 6/15 for ND80Z3 CLK=6MHz ;7/20 9/24 ;13/2/6 time test ; ORG $8000 ; 8000 3EEF LOOP:LD A,EF ;sp out=H,DMAoff 8002 D398 OUT (98),A 8004 CD1180 CALL T1MS 8007 3ECF LD A,CF ;sp out=L,DMAoff 8009 D398 OUT (98),A 800B CD1180 CALL T1MS 800E C30080 JP LOOP ; 8011 F5 T1MS:PUSH AF ;CK=11....11+7+10+10+10=48/6(8microsec) 8012 3E5F LD A,5F ;=99 CK=7 8014 E5 T1MS2:PUSH HL;DUMMY CLK=11----------------- 8015 E5 PUSH HL;DUMMY CLK=11 | 8016 E1 POP HL;DUMMY CLK=10 |CK=60/6(10microsec) 8017 E1 POP HL;DUMMY CLK=10 | 8018 00 NOP ;CLK=4 | 8019 3D DEC A ;CK=4 |10x99=990microsec 801A C21480 JP NZ,T1MS2 ;CK=10--- 801D F1 POP AF ;CK=10 801E C9 RET ;CK=10 + CALL CK=10 ; ;END LOOP =8000 T1MS =8011 T1MS2 =8014 |
2013/2/6 15:20 e80time.txt END=8025 ;;; music 09/10/9 10/10 10/12 10/15 ;;; ;;;MUSIC from MYCPU80 MUSIC ;10/6/4 6/5 6/15 for ND80Z3 CLK=6MHz ;7/20 9/24 ;12/11/27 for E-80 clock? ;13/1/27 ;2/6 time test ; ORG $8000 ; 8000 310000 START:LD SP,$0000 8003 3E88 LD A,88;A=out,B=out,CH=in,CL=out 8005 D3FB OUT (FB),A 8007 3E03 LOOP:LD A,03 ;sp out=H (pc1=H) 8009 D3FB OUT (FB),A 800B CD1880 CALL T1MS 800E 3E02 LD A,02 ;sp out=L (pc1=L) 8010 D3FB OUT (FB),A 8012 CD1880 CALL T1MS 8015 C30780 JP LOOP ; 8018 F5 T1MS:PUSH AF ;CK=11....11+7+10+10+10=48/6(8microsec) 8019 3E5F LD A,5F ;=99 CK=7 801B E5 T1MS2:PUSH HL;DUMMY CLK=11----------------- 801C E5 PUSH HL;DUMMY CLK=11 | 801D E1 POP HL;DUMMY CLK=10 |CK=60/6(10microsec) 801E E1 POP HL;DUMMY CLK=10 | 801F 00 NOP ;CLK=4 | 8020 3D DEC A ;CK=4 |10x99=990microsec 8021 C21B80 JP NZ,T1MS2 ;CK=10--- 8024 F1 POP AF ;CK=10 8025 C9 RET ;CK=10 + CALL CK=10 ;END LOOP =8007 START =8000 T1MS =8018 T1MS2 =801B |
こちらがE−80(仮称)ミニコンでの実行結果です。
こちらのCPUクロックは10MHzですが、各命令のマシンサイクル毎に3クロックのウェイトが挿入されています。
クロック6MHzのときに1msecになるはずのところが、1.5msecかかってしまっています。
逆算するとこのときの実質クロックは4.5MHzということになります。
これはさすがに遅いです。
こういうことがわかってしまいますと、いくらなんでもこのままにして、はいおしまい、というわけにはいきませんでしょう。
果たしてノンウェイトにしたら、一体どのくらいのパフォーマンスになるのでありましょうか?
しかしそもそも、ノンウェイトでも誤動作せずに動いてくれるのでありましょうか?
さらにはクロックを20MHzにしてみたら、それでも動いてくれるものなのでありましょうか?
今回は時間がありません。
次回に続きます。
ワンボードマイコンでCP/Mを![第312回]
2013.2.8upload
前へ
次へ
ホームページトップへ戻る