8080マイコンをつくろう!(TK−80完全復活!)
なんと8080です!
もちろん、BASICからCP/Mまで、できます!
36年の時を経ていまよみがえる8080CPUマイコン組立キット!
なんたってはるか昔の生産中止品を集めて作る組立キットです。
生産前から堂々予告です。
入手できなくなったら即生産終了!売り切れ御免!
[第14回]
●ND8080のチャタリングタイマーを補正しました
[第12回]で書きましたようにTK−80はメモリアクセスに1クロックのウェイトをかけていたために、カタログ通りの命令クロックで計算したよりも2割くらい実行速度が遅くなっていました。
ND8080はTK−80と同じ18.432MHzのクリスタルを使っていますが、メモリアクセスにウェイトはかけていませんから、カタログ値通りの速度でプログラムが実行されます。
もっとも厳密に言えば、数msに1回、LEDのダイナミック表示のためのDMA(direct memory access)によって、ほんのわずかですがCPUにウェイトがかかりますから、その分だけ実行時間は遅れますが、通常それは無視できるほどの遅れです。
しかしメモリアクセスのたびに1クロックのウェイトがかかるのと、かからないのとでは実行時間に大きな差が生じます。
[第12回]で計算しましたように、TK−80のチャタリングタイマープログラムをそのままウェイトがかかっていないND8080で実行すると、下のリストのように大きく違ってきてしまいます。
; ;CHATTERING TIMER ; ;D1=4.5112ms ;D2=9.0176ms ;D3=27.0176ms ORG $02DD 02DD 1624 D1:MVI D,24;=36 ck=7 (7+202*36+10)/2.048=7289/2.048=3559.082microsec 02DF 1E0C D1_2:MVI E,0C;=12 ck=7 7+15*12+15=202 02E1 1D D1_3:DCR E; ck=5 02E2 C2E102 JNZ D1_3; ck=10 02E5 15 DCR D; ck=5 02E6 C2DF02 JNZ D1_2; ck=10 02E9 C9 RET; ck=10 02EA 1648 D2:MVI D,48;=72 (7+10+202*72+10)/2.048=14571/2.048=7114.746microsec 02EC C3DF02 JMP D1_2 02EF 16D8 D3:MVI D,D8;=216 (7+10+202*216+10)/2.048=43659/2.048=21317.871microsec 02F1 C3DF02 JMP D1_2 |
これではオリジナルのタイマーに対して数値が違いすぎますので、それに近い数字になるようにD1_2の値を補正しました。
; ;CHATTERING TIMER ; ;D1=4.5112ms ;D2=9.0176ms ;D3=27.0176ms ; ORG $02DD 02DD 1624 D1:MVI D,24;=36 ck=7 (7+266*36+10)/2.048=9593/2.048=4684.08microsec 02DF 1E10 D1_2:MVI E,10;=16 ck=7 7+15*16+15=266 02E1 1D D1_3:DCR E; ck=5 02E2 C2E102 JNZ D1_3; ck=10 02E5 15 DCR D; ck=5 02E6 C2DF02 JNZ D1_2; ck=10 02E9 C9 RET; ck=10 02EA 1648 D2:MVI D,48;=72 (7+266*72+10+10)/2.048=19179/2.048=9364.75microsec 02EC C3DF02 JMP D1_2 02EF 16D8 D3:MVI D,D8;=216 (7+266*216+20)/2.048=57483/2.048=28067.87microsec 02F1 C3DF02 JMP D1_2 ;;; |
それでもまだ少し違いはありますが、プログラムの形を残したまま補正しようとすると、この程度にしかなりません。
このくらいなら、まあまあだと思います。
8080マイコンをつくろう![第14回]
2016.4.2upload
前へ
次へ
ホームページトップへ戻る