トランジスタでCPUをつくろう!
トランジスタで8080をつくってしまおうというまさにびっくり仰天、狂気のプロジェクトです!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
見事にできましたら、もちろんTK−80モニタを乗せて、それからBASIC、CP/Mを走らせましょう!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
[第277回]
●MMU回路(4)動作テスト(その2)全メモリ範囲を対象にしたテストプログラム(前回の続き)
前回は時間がなくて途中で終ってしまいました。
今回は前回RAMに書き込んだプログラムを実行しますが、その前にもう少し補足しておきたいと思います。
RAMに書き込んだプログラムについては途中をはしょった形の説明で終ってしまいました。
BASICプログラムを使ってRAMには命令コードが正しく書き込まれたはずで、それもBASICプログラムで確認をしています。
BASICプログラムで命令コードをRAMに書き込んだあと、同じくBASICプログラムでRAMから命令コードを読み出してそれをアドレスとともに表示しています。
前回の画面で右側のBASIC実行画面(MS−DOSプロンプト(コマンドプロンプト)画面)でその結果が表示されています。
ただ表示データが多いので若いアドレスの表示はスクロールして消えてしまっています。
ND80Z3.5のZB3BASICはそんなときのためにログ機能が備わっています(手前味噌ですが、とても便利で役に立ちます)。
下が前回のMS−DOSプロンプト画面のログです。
logfile nd80zlog\12100752.txt open
ND80ZVに接続しました
0001 0000 - z
1000 00C3 -
*** nd80z3 basic ****
>/load mc4t9d.txt
10 'mycpu4 test
20 'memory write
30 OUT $83,$80
40 OUT $83,3
50 A%=0,B%=$00:GOSUB 290:'LD A,0
60 C%=$10:'address=n0
70 D%=$61:'ADD A,n
80 E%=0
90 A%=1,B%=$CF:GOSUB 290:'JMP F
100 A%=$0F,B%=$10:GOSUB 290:'JMP $10
110 A%=2,B%=$80:GOSUB 290:'OUT A
120 A%=3,B%=$F0:GOSUB 290:'HLT
130 '
140 FOR E%=1 TO $0F
150 A%=C%
160 B%=D%
170 GOSUB 290:'A%=x0 ADD A,n
180 A%=A%+1
190 B%=$CF:GOSUB 290:'A%=x1 JMP xF
200 C%=C%+$10
210 B%=C%
220 A%=A%+$0E
230 GOSUB 290:'A%=nF JMP(H=n+1,L=0)
240 D%=D%+1
250 NEXT E%
260 A%=$FF,B%=$02:GOSUB 290:'JMP 02
270 STOP
280 '
290 OUT $80,A%
300 OUT $81,B%
310 OUT $83,1
320 OUT $83,0
330 RETURN
340 '
350 'memory read
360 OUT $83,$82
370 FOR A%=0 TO 3
380 GOSUB 490
390 NEXT A%
400 A%=$0F:GOSUB 490
410 '
420 FOR C%=$10 TO $F0 STEP $10
430 A%=C%:GOSUB 490
440 A%=A%+1:GOSUB 490
450 A%=A%+$0E:GOSUB 490
460 NEXT C%
470 STOP
480 '
490 OUT $80,A%
500 B%=IN($81)
510 PRINT HEX$(A%,2),HEX$(B%,2)
520 RETURN
data end
>r.
break in 270
>g.350
00 00
01 CF
02 80
03 F0
0F 10
10 61
11 CF
1F 20
20 62
21 CF
2F 30
30 63
31 CF
3F 40
40 64
41 CF
4F 50
50 65
51 CF
5F 60
60 66
61 CF
6F 70
70 67
71 CF
7F 80
80 68
81 CF
8F 90
90 69
91 CF
9F A0
A0 6A
A1 CF
AF B0
B0 6B
B1 CF
BF C0
C0 6C
C1 CF
CF D0
D0 6D
D1 CF
DF E0
E0 6E
E1 CF
EF F0
F0 6F
F1 CF
FF 02
break in 470
>ot 83,92
>ot 82,f4
>ot 83,08
>ot 83,09
>/exit
0000 00C3 -
リモート接続を終了しました
logfile closed at Thu Dec 10 08:19:27 2020
|
GOTO 350でRAMからデータを読み出してアドレスとともに表示します。
前回の説明の通りにデータ(命令コード)が書き込まれていることが確認できます。
データの確認ができたところでいよいよテストプログラムを実際に実行してみます。
下は前回のMS−DOSプロンプト画面のときの写真です。

前回のMS−DOSプロンプト画面では
OT 83,08
で終っていました。
82C55のアドレス83に08をOUTするとMYCPU4がリセット状態のまま静止します。
今回はその状態のときにすることがあります。
今まではマシンクロックごとにステップ動作をさせながらCPUの動作の確認をしてきました。
今回はプログラムの実行が終ったときにAレジスタの値を確認することでプログラムが正しく実行されたかどうかを確認することができます。
ですから今回はステップ動作ではなくてSLOWモードで実行することにします。
SLOWモードではクロックが約2Hzになります。
クロックがL、H、L、Hと変化する間に1命令が実行されますから、SLOWモードでは1命令が約1秒で実行されることになります。
実行の途中の過程を目で追えるていどの速度です。
クロックの設定はMEM/CLOCK回路基板のSP1のジャンパピンで行ないます。
ちょっと見にくいですが現在は左端のSTEPのところにジャンパピンがあります。

STEPモードと違ってリセット状態ではないときにSLOWモードに切り換えるとすぐにCPUが動き出してしまいます。
ですから前回のMS−DOSプロンプト画面の状態(OT 83,08を実行した状態)のときにSLOWモードに切り換えます。
下はリセット状態のときにSP1のジャンパピンをSLOWにセットしたときの写真です。

やっぱり小さくてよくわかりません。
SP1の部分を拡大表示しました。

これでもちょっと見にくいですが真ん中のSLOWのところにジャンパピンをセットしました。
これで準備完了です。
OT 83,09でリセットが解除されてCPUが実行を開始します。

実行途中の写真を何枚か撮りました。

アドレス1Fです。
ちょうどバンク切換えアドレスのところです。
データは20ですから次にバンク2のアドレス0へのJMPが実行されます。
アドレス61です。

大分進みました。
データはCFです。
JMP Fの命令コードです。
アドレス9Fです。

今回もちょうどバンク切換えアドレスのところです。
データはA0ですから次にバンクAのアドレス0へのJMPが実行されます。
アドレスD0です。

データは6Dです。
ADD A,Dの命令コードです。
アドレス02です。

最後のバンクFまで実行したあとバンク0のアドレス02に戻ってきました。
データは80です。
OUT Aの命令コードです。
Aレジスタは8になっています。
まだOUTポートには出力されていません。
アドレス03です。

データはF0です。
HLTの命令コードです。
OUTポートにも8が出力されています。
HLTの赤色LEDが点灯しています。
アドレスは03のままです。

HLTはこの状態でクロック0からクロック3が繰り返されるだけでこれ以後は先に進みません。
これで前回のプログラムが正しく実行されたことが確認されました。
トランジスタでCPUをつくろう![第277回]
2020.12.14upload
前へ
次へ
ホームページトップへ戻る