復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第320回]
●CPU内部クロックを外部クロックの倍にする
前回からの続きです。
Z8S180は、初期状態では外部から供給するクロック(または外付けするクリスタル)の周波数は内部で実際にCPUが使用する周波数の倍、ということになっています。
当初私はZ8S180が日立のHD64180のセカンドソースである、と認識しておりましたので、クロック周波数についてはそれ以上何も考えることはありませんでした。
しかしその後にあらためてZ8S180の英文MANUALを読んでみますと、現行のZ8S180はHD64180のセカンドソースを越えてZilog社が独自の改良を加えたバージョンアップ版であるらしいことがわかってきました(SL1960版を除く)。
その改良はCPUクロックにも加えられていました。
内蔵I/Oレジスタ1EHの説明によると、ビット7を1にすることで、内部クロックを外部クロックの倍にできる、と書いてあります([第318回])。
しかし実際にそのようにしてテストしてみましても、内部クロックは外部クロックの倍にはなりませんでした。
ただ外部クロックと同じ周波数になることは確認できました。
もともと内部周波数は外部周波数の1/2ということでしたから、それが外部周波数と同一になれば、確かに「2倍」のパフォーマンスではあります。
ですが、それにしては can double the internal clock speed from the speed of the external clock という表現はどうにも不適切に思えます。
その文章はどう読んでも「内部周波数は外部周波数の倍にできる」としか読めません。
「内部周波数を従来の倍にできる」というように理解するには無理があります。
さらには具体的な数値をあげて、
This feature only operates effectively with frequencies of 10−16MHz(20−32MHz internal).
とも書かれています。
こうなると疑心暗鬼でありまして、ひょっとして10MHzがかなりシビアな値であって、正確にその範囲にないと、「倍」にはなってくれないのではないか、などと疑ったりしました。
実はそのほかにも、もうひとつ気になる記述がありました。
Z8S180の端子機能の説明のところで、PHIについて下のように書かれています。
[出典]Zilog社 Z8S180 PRODUCT SPECIFICATION
ここには、The frequency of this output may be one−half,equal to,or twice the crystal or input clock frequency.
とはっきり書かれています。
one−half と equal to はわかりました。
するとあとひとつ、やっぱり twice というのが必ずあるはず、ということになります。
I/Oレジスタ1EH以外に、どこかにもうひとつ、CPUクロックに関係しているレジスタがあるのではなかろうか?
そう思ってMANUALをひっくり返して調べてみましたら。
やっとみつかりました。
こんなところに、書いてありました。
●I/Oレジスタ1FH
[出典]Zilog社 Z8S180 PRODUCT SPECIFICATION
内蔵I/Oレジスタ1FHのビット7を1にすると、内部クロックが外部クロックとイコールになる、のだそうです(この1FHもオリジナルのHD64180にはありません)。
それでやっと疑問は解消できましたけれど。
そういうことなら、レジスタ1EHとレジスタ1FHとを並べて説明するとか、ひとこと注記をつけて、関連するレジスタ、とかなんとかとしてほしいものでありますねえ。
ちなみに1FHの説明は引用しましたZ8S180 PRODUCT SPECIFICATIONの38ページにありまして、1EHの説明はそれよりもずっと後ろの52ページに書かれています。
うむむ。
CPU CONTROL REGISTERなんだから最初にしっかり読めよ、ということなのでありましょうか。
さて。
そういうことでありまして、どうやら内蔵レジスタ1EHと1FHのビット7をともに1にすれば、内部クロック周波数を外部入力クロック周波数の倍にすることができそうだ、ということがわかりました。
さっそく試してみることにいたします。
最初は前回と同じように、レジスタ1EHのビット7のみを1にして、内部クロックが外部クロックと同じになることを確認したうえで、次にレジスタ1FHのビット7も1にして、内部クロックが外部クロックの倍になることを確認してみます。
その確認は前述のPHI端子をオシロで見ることで簡単に確認できるのでありますが、せっかくですので82C55A−2からHLパルスを出力するプログラムを作って、それを実行してその出力波形をオシロで見てみることにいたします。
簡単なプログラムですから、実際にはパネルスイッチから16進数コードを直接入力して実行しましたが、その入力したプログラムにつきましては参考までに下にプログラムリストとしてお見せすることにいたします。
最初に実行したのはこちらのプログラムです。
2013/2/15 16:15 e80ck.txt END=901E ORG $9000 ; 9000 AF XOR A 9001 013200 LD BC,$0032 9004 ED79 OUT (C),A 9006 0E36 LD C,36 9008 ED79 OUT (C),A 900A 3EBF LD A,BF 900C 0E1E LD C,1E 900E ED79 OUT (C),A ; 9010 3E88 LD A,88 9012 D3FB OUT (FB),A 9014 3E02 LOOP:LD A,02 9016 D3FB OUT (FB),A 9018 3E03 LD A,03 901A D3FB OUT (FB),A 901C C31490 JP LOOP ; ;END LOOP =9014 |
2013/2/15 16:15 e80ck2.txt END=9024 ORG $9000 ; 9000 AF XOR A 9001 013200 LD BC,$0032 9004 ED79 OUT (C),A 9006 0E36 LD C,36 9008 ED79 OUT (C),A 900A 3EBF LD A,BF 900C 0E1E LD C,1E 900E ED79 OUT (C),A 9010 3E80 LD A,80 9012 0E1F LD C,1F 9014 ED79 OUT (C),A ; 9016 3E88 LD A,88 9018 D3FB OUT (FB),A 901A 3E02 LOOP:LD A,02 901C D3FB OUT (FB),A 901E 3E03 LD A,03 9020 D3FB OUT (FB),A 9022 C31A90 JP LOOP ; ;END LOOP =901A |