トランジスタで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
前へ
次へ
ホームページトップへ戻る