標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
やっと(!)MYCPU80の改良型基板製作に着手しました!!
[第849回]
●タイマールーチンを作る(NOPのテスト)
このあたりで今までに作った回路の命令を利用して、タイマールーチンを作ります。
同時にNOP命令のテストを兼ねています。
タイマールーチンは2本のプログラム(サブルーチン)でできています。
1)2.5msタイマープログラム(NOP命令のテストプログラム)
0040 F5 PUSH PSW (8) 0041 3EF6 MVI A,F6 (6) 0043 3D DCR A (8) 0044 C24300 JNZ $0043 (12) or (8) 0047 00 NOP (4) 0048 00 NOP (4) 0049 00 NOP (4) 004A 00 NOP (4) 004B F1 POP PSW (8) 004C C9 RET (8) |
()の中の数字は各命令の実行クロック数です。
MYCPU80の命令クロックは0.5μsですから()内の数に0.5μsを掛けたものがその命令の実行時間になります。
NOP命令は何もしない命令ですが、このプログラムのように実行時間そのものが必要なときには重宝します。
PUSH PSW、POP PSWはAレジスタとフラグレジスタを退避するために使っています。
こうすることでAレジスタとフラグレジスタをこのサブルーチンの中だけで使うローカルなレジスタにすることができます。
F6は246です。
DCR AとJNZを246回繰り返し実行します。
このままでは不足する端数時間をNOPで補っています。
このプログラムの実行時間は下のように計算できます。
8+6+(8+12)×246−4+4+4+4+4+8+8=4962
4962×0.5=2481μs(2.481ms)
−4はJNZの最後の1回が8クロックになることの補正です。
2.5msに少し足りませんが、これはこのサブローチンをコールする上位のサブルーチン(下のプログラムリスト)を正確な0.5msサブルーチンにするための補正を考慮しているためです。
2)0.5秒タイマープログラム
0030 F5 PUSH PSW (8) 0031 3EC8 MVI A,C8 (6) 0033 CD4000 CALL $0040 (18+4962) 0036 3D DCR A (8) 0037 C23300 JNZ $0033 (12) or (8) 003A F1 POP PSW (8) 003B C9 RET (8) |
C8は200です。
CALLとDCRとJNZが200回繰り返し実行されます。
この部分の1回の実行時間は
18+4962+8+12=5000
5000×0.5=2500μs
ちょうど2.5msになります。
それを200回繰り返しますから2.5×200=500msです。
実はその前後にも命令があるため、わずかですがさらに実行時間がかかります。
8+6+8+8−4=26
26×0.5=13μs
−4はJNZの最後の1回が8クロックになることの補正です。
この程度の時間の差が問題になるようなことは滅多にありません。
今回のプログラムはタイマールーチンのひとつのサンプルです。
ふつうはもっとアバウトでよいような用途がほとんどだと思います。
●XCHG命令のテスト
下のリストがXCHG命令のテストプログラムです。
00000 310000 LXI SP,$0000 0003 215000 LXI H,$0050 0006 115100 LXI D,$0051 0009 010000 LXI B,$0000 000C 70 MOV M,B 000D EB XCHG 000E 70 MOV M,B 000F EB XCHG 0010 CD3000 CALL $0030 0013 34 INR M 0014 46 MOV B,M 0015 EB XCHG 0016 CD3000 CALL $0030 0019 35 DCR M 001A 4E MOV C,M 001B C30F00 JMP $000F |
このプログラムはXCHG命令のテストプログラムですが、同時にMOV MやINR M、DCR M命令のテストも兼ねています。
プログラムを実行するとHLレジスタは0050、DEレジスタは0051になり、B、Cレジスタは00になります。
1)0.5秒後にBレジスタが+1され、HLレジスタとDEレジスタの値が交換されます。
2)その次の0.5秒後にCレジスタが−1され、HLレジスタとDEレジスタの値が交換されます。
以後1)2)が交互に繰り返されます。
プログラムを実行中の写真です。
今回の組立作業範囲のテストはほかにもいくつかあるのですが、本日は時間がなくなってしまいました。
残りのテストについては次回以降に説明します。
TTLでCPUをつくろう![第849回]
2018.2.23upload
前へ
次へ
ホームページトップへ戻る