マイコン独立大作戦
CRT/VGAIF+KEYIF+SDCARDIFボードの製作
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
WindowsパソコンにUSB接続して使う現行方式はそれなりに便利ではありますが、ときとしてWindows
のしがらみから開放されて、小さいながらも独立した一個のパソコンとして機能したいと思うこともあります。
昔はそれが普通のことだったのですが、安価なCRTディスプレイが生産中止となって久しい今日ではそれ
は叶わぬことと諦めていたのですが…。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[総合第97回]
●増設RAMのテスト
ROM/RAM/RTCボードの旧基板での増設RAMテストは「ROM/RAM/RTCボードの製作」[第28回]で行なっています。
同ページをあらためて読んでみましたところ、ログが違っていることに気が付きましたので、正しいログと差し換えました。
同ページでははじめに628128のテストをして、次に628512のテストをしています。
たまたま現在は新ROM/RAM/RTCボードに、増設RAMとして628512を実装していますので、先に628512のテストをすることにしました。
テストは同ページのときと同じで、USB接続版ND80Z3.5にROM/RAM/RTCボードを接続する形で行ないました。
このところのND80Z3.5システムROMはあれこれテストをしている過程で複数のバージョンができてしまいました。
今テストに使っているバージョンにはE9A0〜のバンクRAMアクセスプログラムが組み込まれていないことがわかりました。
上記テストをした時点のROMに差し替えればよいのですが、いちいちそれをするのも面倒なことなので、そこで使ったテストプログラムram512t2.binにバンクRAMR/Wプログラムの設定を加えてram512t3.binをつくりました。
ram512t3のプログラムリスト(アセンブルリスト)です。
2017/10/1 16:29 ram512t3.txt END=8689 ;;;628512 test ;17/9/4 ; ORG $8600 ; REENT=$1033 BKWR=$E9A0 BKRD=$E9A9 ; 8600 C31B86 JP WRTEST ; 8603 D39C BKWRT:OUT (9C),A;$E9A0 8605 EB EX DE,HL 8606 71 LD (HL),C 8607 EB EX DE,HL 8608 AF XOR A;don't use JP! see assemble list 8609 D39C OUT (9C),A 860B C9 RET 860C D39C BKRDT:OUT (9C),A;$E9A9 860E 4E LD C,(HL) 860F AF XOR A 8610 D39C OUT (9C),A 8612 C9 RET 8613 D39C BKMVT:OUT (9C),A;$E9B0 8615 EDB0 LDIR 8617 AF XOR A 8618 D39C OUT (9C),A 861A C9 RET;end=$E9B8 ; 861B 210386 WRTEST:LD HL,BKWRT 861E 11A0E9 LD DE,BKWR 8621 011800 LD BC,$0018;=24bytes 8624 EDB0 LDIR 8626 06FF LD B,FF 8628 CD4586 WRTEST1:CALL WRSB 862B 78 LD A,B 862C D610 SUB 10 862E 47 LD B,A 862F FEFF CP FF 8631 C22886 JP NZ,WRTEST1 ; 8634 06FF RDTEST:LD B,FF 8636 CD6186 RDTEST1:CALL RDSB 8639 78 LD A,B 863A D610 SUB 10 863C 47 LD B,A 863D FEFF CP FF 863F C23686 JP NZ,RDTEST1 8642 C33310 JP REENT ; 8645 110000 WRSB:LD DE,$0000 8648 78 WRSB1:LD A,B 8649 4F LD C,A 864A CDA0E9 CALL BKWR 864D 13 INC DE 864E 78 LD A,B 864F 4B LD C,E 8650 CDA0E9 CALL BKWR 8653 13 INC DE 8654 7A LD A,D 8655 FE80 CP 80 8657 C8 RET Z 8658 78 LD A,B 8659 4A LD C,D 865A CDA0E9 CALL BKWR 865D 13 INC DE 865E C34886 JP WRSB1 ; 8661 210000 RDSB:LD HL,$0000 8664 78 RDSB1:LD A,B 8665 CDA9E9 CALL BKRD 8668 79 LD A,C 8669 B8 CP B 866A C28986 JP NZ,ERR 866D 23 INC HL 866E 78 LD A,B 866F CDA9E9 CALL BKRD 8672 79 LD A,C 8673 BD CP L 8674 C28986 JP NZ,ERR 8677 23 INC HL 8678 7C LD A,H 8679 FE80 CP 80 867B C8 RET Z 867C 78 LD A,B 867D CDA9E9 CALL BKRD 8680 79 LD A,C 8681 BC CP H 8682 C28986 JP NZ,ERR 8685 23 INC HL 8686 C36486 JP RDSB1 8689 00 ERR:NOP;break point set ; BKMVT =8613 BKRD =E9A9 BKRDT =860C BKWR =E9A0 BKWRT =8603 ERR =8689 RDSB =8661 RDSB1 =8664 RDTEST =8634 RDTEST1 =8636 REENT =1033 WRSB =8645 WRSB1 =8648 WRTEST =861B WRTEST1 =8628 |
下はram512t3.binを実行したときのログです。
logfile nd80zlog\10011631.txt open ND80ZVに接続しました 0001 0000 - z 1000 00C3 - *** nd80z3 basic **** ndwr2h.bin loaded,from E23F to E535 >/ld ram512t3.bin,8600 loading RAM512T3.BIN ...008a(138)bytes loaded,from 8600 to 8689 >bp 8689 >jp 8600 >/ld bkmvt3.bin,8500 loading BKMVT3.BIN ...0011(17)bytes loaded,from 8500 to 8510 >jp 8500 >dm 8200,83ff 8200 00 70 EF 03 70 EF 06 70-EF 09 70 EF 0C 70 EF 0F .p..p..p..p..p.. 8210 70 EF 12 70 EF 15 70 EF-18 70 EF 1B 70 EF 1E 70 p..p..p..p..p..p 8220 EF 21 70 EF 24 70 EF 27-70 EF 2A 70 EF 2D 70 EF .!p.$p.'p.*p.-p. 8230 30 70 EF 33 70 EF 36 70-EF 39 70 EF 3C 70 EF 3F 0p.3p.6p.9p.<p.? 8240 70 EF 42 70 EF 45 70 EF-48 70 EF 4B 70 EF 4E 70 p.Bp.Ep.Hp.Kp.Np 8250 EF 51 70 EF 54 70 EF 57-70 EF 5A 70 EF 5D 70 EF .Qp.Tp.Wp.Zp.]p. 8260 60 70 EF 63 70 EF 66 70-EF 69 70 EF 6C 70 EF 6F `p.cp.fp.ip.lp.o 8270 70 EF 72 70 EF 75 70 EF-78 70 EF 7B 70 EF 7E 70 p.rp.up.xp.{p.~p 8280 EF 81 70 EF 84 70 EF 87-70 EF 8A 70 EF 8D 70 EF ..p..p..p..p..p. 8290 90 70 EF 93 70 EF 96 70-EF 99 70 EF 9C 70 EF 9F .p..p..p..p..p.. 82A0 70 EF A2 70 EF A5 70 EF-A8 70 EF AB 70 EF AE 70 p.「p.・p.ィp.ォp.ョp 82B0 EF B1 70 EF B4 70 EF B7-70 EF BA 70 EF BD 70 EF .アp.エp.キp.コp.スp. 82C0 C0 70 EF C3 70 EF C6 70-EF C9 70 EF CC 70 EF CF タp.テp.ニp.ノp.フp.マ 82D0 70 EF D2 70 EF D5 70 EF-D8 70 EF DB 70 EF DE 70 p.メp.ユp.リp.ロp.゙p 82E0 EF E1 70 EF E4 70 EF E7-70 EF EA 70 EF ED 70 EF ..p..p..p..p..p. 82F0 F0 70 EF F3 70 EF F6 70-EF F9 70 EF FC 70 EF FF .p..p..p..p..p.. 8300 71 EF 02 71 EF 05 71 EF-08 71 EF 0B 71 EF 0E 71 q..q..q..q..q..q 8310 EF 11 71 EF 14 71 EF 17-71 EF 1A 71 EF 1D 71 EF ..q..q..q..q..q. 8320 20 71 EF 23 71 EF 26 71-EF 29 71 EF 2C 71 EF 2F q.#q.&q.)q.,q./ 8330 71 EF 32 71 EF 35 71 EF-38 71 EF 3B 71 EF 3E 71 q.2q.5q.8q.;q.>q 8340 EF 41 71 EF 44 71 EF 47-71 EF 4A 71 EF 4D 71 EF .Aq.Dq.Gq.Jq.Mq. 8350 50 71 EF 53 71 EF 56 71-EF 59 71 EF 5C 71 EF 5F Pq.Sq.Vq.Yq.\q._ 8360 71 EF 62 71 EF 65 71 EF-68 71 EF 6B 71 EF 6E 71 q.bq.eq.hq.kq.nq 8370 EF 71 71 EF 74 71 EF 77-71 EF 7A 71 EF 7D 71 EF .qq.tq.wq.zq.}q. 8380 80 71 EF 83 71 EF 86 71-EF 89 71 EF 8C 71 EF 8F .q..q..q..q..q.. 8390 71 EF 92 71 EF 95 71 EF-98 71 EF 9B 71 EF 9E 71 q..q..q..q..q..q 83A0 EF A1 71 EF A4 71 EF A7-71 EF AA 71 EF AD 71 EF .。q.、q.ァq.ェq.ュq. 83B0 B0 71 EF B3 71 EF B6 71-EF B9 71 EF BC 71 EF BF ーq.ウq.カq.ケq.シq.ソ 83C0 71 EF C2 71 EF C5 71 EF-C8 71 EF CB 71 EF CE 71 q.ツq.ナq.ネq.ヒq.ホq 83D0 EF D1 71 EF D4 71 EF D7-71 EF DA 71 EF DD 71 EF .ムq.ヤq.ラq.レq.ンq. 83E0 E0 71 EF E3 71 EF E6 71-EF E9 71 EF EC 71 EF EF .q..q..q..q..q.. 83F0 71 EF F2 71 EF F5 71 EF-F8 71 EF FB 71 EF FE 71 q..q..q..q..q..q > |
ERR:(アドレス8689)にブレークポイントを設定して8600番地から実行しましたが、ブレークせずに終了しましたので、エラーは発生しなかったことになります。
念のため以前のテストのときと同じように、てきとうなバンクRAMの内容(512バイト)を8200〜83FFに読み出して中身を確認してみました。
見たところ、整然とテストデータが書き込まれているようです。
しかしプログラムにバグがあって、エラーが発生してもERR:にジャンプしない、という可能性もあります。
そこでわざとエラーを発生させてみることにしました。
>cm 8200 8200 00-12 8201 70-34 8202 EF-56 8203 03-78 8204 70- >cm 8500 8500 21- 8501 00- 8502 70-82 8503 11- 8504 00- 8505 82-70 8506 01- >jp 8500 >bp 8689 >jp 8634 A F B C D E H L A'F' B'C' D'E' H'L' PC SP IX IY I SZ H PNC 1202 EF12 F007 7000 0000 0000 0000 0000 8689 F7FC 0000 0000 FF 00000010 >/exit 0000 00C3 - リモート接続を終了しました logfile closed at Sun Oct 01 16:47:52 2017 |
8200〜8203を書き換えました。
8500〜のbkmvt3.binはデフォルトの設定値では増設RAMのバンクEFの7000〜71FFを8200〜83FFにコピーするプログラムです。
bkmvt3のアセンブルリストです。
2017/9/3 18:31 bkmvt3.txt END=8510 ;;; BANK RAM MOVE(READ) TEST ; 17/9/1 9/2 9/3 ; ORG $8500;for test ; BKMV=$E9B0 REENT=$1033 ; 8500 210070 MVTEST:LD HL,$7000 8503 110082 LD DE,$8200 8506 010002 LD BC,$0200 8509 3EEF LD A,EF 850B CDB0E9 CALL BKMV 850E C33310 JP REENT ; BKMV =E9B0 MVTEST =8500 REENT =1033 |
そのコピー元とコピー先を入れ替えて実行しました(以下はさきほどのログ参照)。
そのあと8659にブレークポイントを設定して、READチェック(アドレス8634)から実行したところ、期待した通りエラーブレークしました。
READチェックでデータが不一致の場合にはエラーブレークすることが確かめられましたので、最初に行なったram512t3.binでブレークしなかったのは増設RAM(628512)のリードライトでエラーが発生しなかったからだ、ということが確認できました。
ああ、そうでした。
忘れていました。
「ROM/RAM/RTCボードの製作」[第32回]で「痛恨のミス」をしてしまったために、ROM/RAM/RTCボードを作り直すハメになってしまったのでした。
ND80Z3.5の拡張用10pinコネクタにはMEMR、MEMWではなくてただのRD、WRしか出ていないことをうっかり忘れてしまっていたために、ボード上の82C55に対してOUT命令を実行すると増設RAMの内容が書き換えられてしまったのでした。
作り直したROM/RAM/RTC基板ではRD、WRにMREQ信号を抱き合わせにしましたので、もうそのようなことは発生しないはずなのですが、そこは肝心のところなので、きちんとテストしておかなければいけません。
まずは8600にLDしたテストプログラムを実行し、そのあとBASICプログラムを実行してND80Z3.5上の82C55に繰り返しデータを出力しました。
それから今度は8634のREADテストを実行しました。
logfile nd80zlog\10011712.txt open ND80ZVに接続しました 0001 0000 - z 1000 00C3 - *** nd80z3 basic **** ndwr2h.bin loaded,from E23F to E535 >/load iotest.txt 5'I/O テスト 10 PRINT "I/OTEST START"; 20 OUT $83,$80 30 OUT $87,$80 40 OUT $8B,$80 50 OUT $8F,$80 60 A%=1 70 FOR N%=0 TO 7 80 OUT $80,A% 90 OUT $81,A% 100 OUT $82,A% 110 OUT $84,A% 120 OUT $85,A% 130 OUT $86,A% 140 OUT $88,A% 150 OUT $89,A% 160 OUT $8A,A% 170 OUT $8C,A% 180 OUT $8D,A% 190 OUT $8E,A% 200 A%=A%*2 210 FOR A=0 TO 3000:NEXT A 220 NEXT N% 230 GOTO 60 data end >h. TEXT 8004-817B ヘンスウ DFFB-DFFF >bp 8689 >jp 8600 >r. I/OTEST START break in 210 >bp 8689 >jp 8634 >/exit 0000 00C3 - リモート接続を終了しました logfile closed at Sun Oct 01 17:17:17 2017 |
エラーブレークすることなく実行終了しました。
今回のROM/RAM/RTCボードは旧基板のようなトラブルは発生しないことが確認できました。
CRT/VGAIF+KEYIF+SDCARDIFボードの製作[総合第97回]
2017.10.3upload
前へ
次へ
ホームページトップへ戻る