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

トランジスタで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

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