2013.2.15
前へ
次へ
ホームページトップへ戻る

復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります

[第319回]


●CLOCK−DOUBLERを試す

前回の終わりに書きましたCLOCK−DOUBLERなる機能について、そんな有難いものがあるのならぜひとも試してみたいと思いました。
ともかくZ8S180を20MHzで動かすことを考えた段階で、そのときにはこんな便利な機能があるとは夢にも思ってはいませんでしたから、新たに40MHzのセラミック発振子回路を増設してしまいました([第267回])。
そんな便利な機能が使えるのでしたら、40MHzの発振回路など無くても済んでしまいます。

ところが前回お見せしました内蔵I/Oレジスタ1EHのところの説明だけを読みますと、なんとなくもうひとつしっくりこないところがあります。
そもそもデフォルトの設定では外部から供給するクロックは内部クロックの2倍ということになっております(HD64180もそうでした)。
それなのに、その説明文を素直に読みますと、設定によって、内部クロックを外部クロックの倍にできる、というように読めてしまいます。
それってどこかおかしくありませんかあ。

なんだか知らないうちに、外部クロックは内部クロックの倍の周波数(言い方を変えますと、内部クロック周波数は外部クロックの1/2)というところがいつのまにかすっ飛んでしまって、いきなり内部クロック周波数は外部クロックの倍になってしまう、というように受け取られます。
そのあたりが、どうも納得できなくて、何かが1つ欠けているような気がいたしました。

その通りでありました。
そうするためには(内部クロックを外部クロックの倍にするためには)必要な手続きが、ひとつ飛んでいたことに、後で気がつくのでありますが、この時点ではまだそのことには気がついていませんでした。
ですのでこの時点では、1EHのビット7を1にしましても、期待に反して、内部クロックは外部クロックの倍にはなってくれませんでした。

しかし。
内部クロックが外部クロックと同じにはなってくれたようです。
つまり、この設定を有効にする前には、外部クロックが20MHzのときに内部クロックは10MHzでしたが、プログラムを実行して1EHのビット7を1にしましたら、内部クロックも外部クロックと同じ20MHzになりました。
実は[第316回]でお見せしました82C55A−2のRD端子とCS端子の入力信号の写真(下)



は、1EHレジスタをそのように設定して、外部クロックに水晶発振回路からの20MHzを入力してテストしたときのものだったのです。

下はそのように設定するプログラムをCMコマンドを使って16進数コードで直接入力したときの画像です。



16進数コードだけでは何をやっているのかわかりません、という方のために、下にニーモニックを付けて示しました。

8000 AF         XOR A
8001 013200     LD BC,$0032
8004 ED79       OUT (C),A
8006 0E36       LD C,36
8008 ED79       OUT (C),A
800A 3EBF       LD A,BF
800C 0E1E       LD C,1E
800E ED79       OUT (C),A
8010 DBF8  LOOP:IN A,(F8)
8012 C31080     JP LOOP

いやあ。
クロックが倍にはならなくても、20MHzを入力して、内部も20MHzで動いてくれれば、それだけでも大助かりです。

さっそくこの設定にして、前回の82C55A−2耐久テストプログラムを再度実行してみました。


さきほどのプログラムはひたすら82C55A−2をREADするだけの無限ループですから、止めるにはリセットするしかありません。
リセットすると初期状態、デフォルトの設定に戻ってしまいます。
ということで、さきほどのプログラムの終わりを直しました。
1EHレジスタの設定後は1033Hへジャンプします。
1033HはZB3BASICのエントリポイントです。

このように直したプログラムを実行してから、82C55A−2耐久テストプログラムをロードして、テストを開始しました。
今度はセラミック発振子回路ではなくて水晶発振回路からクロックを供給してのCPUクロック20MHzです。
さて。
どうなりますでしょうか?

下はそのテストの開始から終了までを記録したログファイルです。

logfile nd80zlog\02121522.txt open

ND80ZVに接続しました
0001 0000 - z
1000 00C3 - 
*** nd80z3 basic ****
>cm 8000
8000 AF-
8001 01-
8002 32-
8003 00-
8004 ED-
8005 79-
8006 0E-
8007 36-
8008 ED-
8009 79-
800A 3E-
800B BF-
800C 0E-
800D 1E-
800E ED-
800F 79-
8010 DB-c3
8011 F8-33
8012 C3-10
8013 10-
>jp 8000
>/ld e80iorwt.bin,8000
loading E80IORWT.BIN ...0071(113)bytes loaded,from 8000 to 8070
>new 8100
>10a=0
>15p."start",time$
>20usr($8000)
>30p.time$,a
>40a=a+1
>50if a%+b%=0 g.20
>60p."error",b%,a%
>.
    10 A=0
    15 PRINT "start",TIME$
    20 USR($8000)
    30 PRINT TIME$,A
    40 A=A+1
    50 IF A%+B%=0 GOTO 20
    60 PRINT "error",B%,A%
>r.
start        15:27:43
15:32:34     0
15:37:26     1
15:42:18     2
15:47:10     3
15:52:02     4
15:56:54     5
16:01:46     6
16:06:38     7
16:11:30     8
16:16:22     9
16:21:14     10
16:26:06     11
16:30:58     12
16:35:49     13
16:40:41     14
16:45:33     15
16:50:25     16
16:55:17     17
17:00:09     18
17:05:01     19
17:09:53     20
17:14:45     21
17:19:37     22
17:24:29     23
17:29:21     24
17:34:13     25
17:39:05     26
17:43:56     27
17:48:48     28
17:53:40     29
17:58:32     30
18:03:24     31
18:08:16     32
18:13:08     33
18:18:00     34
18:22:52     35
18:27:44     36
18:32:36     37
18:37:28     38
18:42:20     39
18:47:11     40
18:52:03     41
18:56:55     42
19:01:47     43
19:06:39     44
19:11:31     45
19:16:23     46
19:21:15     47
19:26:07     48
19:30:59     49
19:35:51     50
19:40:43     51
19:45:35     52
19:50:26     53
19:55:18     54
20:00:10     55
20:05:02     56
20:09:54     57
20:14:46     58
20:19:38     59
20:24:30     60
20:29:22     61
20:34:14     62
20:39:06     63
20:43:58     64
20:48:50     65
20:53:41     66
20:58:33     67
21:03:25     68
21:08:17     69
21:13:09     70
21:18:01     71
21:22:53     72
21:27:45     73
21:32:37     74
21:37:29     75
21:42:21     76
21:47:13     77
21:52:05     78
21:56:57     79
22:01:48     80
22:06:40     81
22:11:32     82
22:16:24     83
22:21:16     84
22:26:08     85
22:31:00     86
22:35:52     87
22:40:44     88
22:45:36     89
22:50:28     90
22:55:20     91
23:00:12     92
23:05:03     93
23:09:55     94
23:14:47     95
23:19:39     96
23:24:31     97
23:29:23     98
23:34:15     99
23:39:07     100
23:43:59     101
23:48:51     102
23:53:43     103
23:58:35     104
00:03:27     105
00:08:18     106
00:13:10     107
00:18:02     108
00:22:54     109
00:27:46     110
00:32:38     111
00:37:30     112
00:42:22     113
00:47:14     114
00:52:06     115
00:56:58     116
01:01:50     117
01:06:42     118
01:11:34     119
01:16:25     120
01:21:17     121
01:26:09     122
01:31:01     123
01:35:53     124
01:40:45     125
01:45:37     126
01:50:29     127
01:55:21     128
02:00:13     129
02:05:05     130
02:09:57     131
02:14:49     132
02:19:40     133
02:24:32     134
02:29:24     135
02:34:16     136
02:39:08     137
02:44:00     138
02:48:52     139
02:53:44     140
02:58:36     141
03:03:28     142
03:08:20     143
03:13:12     144
03:18:04     145
03:22:55     146
03:27:47     147
03:32:39     148
03:37:31     149
03:42:23     150
03:47:15     151
03:52:07     152
03:56:59     153
04:01:51     154
04:06:43     155
04:11:35     156
04:16:27     157
04:21:19     158
04:26:11     159
04:31:02     160
04:35:54     161
04:40:46     162
04:45:38     163
04:50:30     164
04:55:22     165
05:00:14     166
05:05:06     167
05:09:58     168
05:14:50     169
05:19:42     170
05:24:34     171
05:29:26     172
05:34:17     173
05:39:09     174
05:44:01     175
05:48:53     176
05:53:45     177
05:58:37     178
06:03:29     179
06:08:21     180
06:13:13     181
06:18:05     182
06:22:57     183
06:27:49     184
06:32:41     185
06:37:32     186
06:42:24     187
06:47:16     188
06:52:08     189
06:57:00     190
07:01:52     191
07:06:44     192
07:11:36     193
07:16:28     194
07:21:20     195
07:26:12     196
07:31:04     197
07:35:56     198
07:40:48     199
07:45:39     200
07:50:31     201
07:55:23     202
08:00:15     203
08:05:07     204
08:09:59     205
08:14:51     206
08:19:43     207
08:24:35     208
08:29:27     209
08:34:19     210
08:39:11     211
08:44:03     212
08:48:54     213
08:53:46     214
08:58:38     215
09:03:30     216
09:08:22     217
09:13:14     218
09:18:06     219
09:22:58     220
09:27:50     221
09:32:42     222
09:37:34     223
09:42:26     224
09:47:18     225
09:52:09     226
09:57:01     227
10:01:53     228
10:06:45     229
10:11:37     230
10:16:29     231
10:21:21     232
10:26:13     233

break in 30
>
>
>0000 00C3 - 
リモート接続を終了しました
logfile closed at Wed Feb 13 10:31:11 2013


実行を開始したのは15:27:43です。
終了したのは翌日の10:26:13です。
カウンタの値は第1回目の終了時が0で最後が233ですから、この間に234回実行したことになります。
この間の時間を秒で求めてみます。
この間の実行時間は18:58:30ですから18×3600+58×60+30=68310秒
これを234で割ると
68310/234=291.923(秒)です。

前回計算によって求めた値が291.924でしたから。
おお。
なんと、ぴったりじゃありませんか。
前回はセラミック振動子の精度もなかなかのものだ、と書きましたが、さすがに水晶発振は桁が違います。
ダントツの精度ですねえ。
いやあ。
これはもう、二重丸の納得、です。

これで、CPUクロックを外部クロックと同じにできるというところまでは確認ができました。
それでは本当に、CPUクロックを外部クロックの倍にできるのか、ということなのですが。

毎度のことで、本日は時間がなくなってしまいました。
次回にて説明をいたします。

ワンボードマイコンでCP/Mを![第319回]
2013.2.15upload

前へ
次へ
ホームページトップへ戻る