マイコン独立大作戦
CRT/VGAIF+KEYIF+SDCARDIFボードの製作
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
WindowsパソコンにUSB接続して使う現行方式はそれなりに便利ではありますが、ときとしてWindows
のしがらみから開放されて、小さいながらも独立した一個のパソコンとして機能したいと思うこともあります。
昔はそれが普通のことだったのですが、安価なCRTディスプレイが生産中止となって久しい今日ではそれ
は叶わぬことと諦めていたのですが…。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[総合第99回]
●27C4001のテスト
27C4001のテストは「ROM/RAM/RTCボードの製作」[第31回]でしています。
そのときは旧ROM/RAM/RTCボードを使って、バンクROMアドレスに対しては各バンクの先頭1バイトのみにデータを書いて、それを読み出すという簡易型のテストでした。
今回はせっかく4M/1MROM WRITERを作りましたので、全メモリアドレスにテストデータをびっしり書き込んでテストすることにしました。
下が今回作った27C4001テストプログラム4mromt2のアセンブルリストです。
2017/9/29 8:32 4mromt2.txt END=9423 ;;; 4M WRITER ROM read test ; 17/9/28 9/29 ; ORG $9300 ; ADISP=$1015 DEDP=$1018 REENT=$1033 SPDP=$1039 HXDP2=$104B HXDP4=$104E CRLF2=$107B ; ;address C,H,L ; 9300 C30693 JP RTEST 9303 10 BKADRS:DB 10 9304 00 CSBF:DB 00 9305 00 DB 00 9306 110080 RTEST:LD DE,$8000 9309 3E10 LD A,10;***** 930B 320393 LD (BKADRS),A 930E D39C OUT (9C),A 9310 210000 LD HL,$0000 9313 220493 LD (CSBF),HL 9316 0E00 LD C,00 9318 210080 LD HL,$8000 931B 7C RTEST1:LD A,H 931C E67F AND 7F 931E 44 LD B,H 931F 67 LD H,A 9320 7E LD A,(HL) 9321 E5 PUSH HL 9322 D5 PUSH DE 9323 2A0493 LD HL,(CSBF) 9326 1600 LD D,00 9328 5F LD E,A 9329 19 ADD HL,DE 932A 220493 LD (CSBF),HL 932D D1 POP DE 932E E1 POP HL 932F 60 LD H,B 9330 B9 CP C 9331 41 LD B,C 9332 C4E493 CALL NZ,ERR 9335 1B DEC DE 9336 7A LD A,D 9337 B3 OR E 9338 C24B93 JP NZ,RTEST12 933B 3A0393 LD A,(BKADRS) 933E C610 ADD A,10 9340 CAB093 JP Z,END 9343 320393 LD (BKADRS),A 9346 D39C OUT (9C),A 9348 110080 LD DE,$8000 934B 23 RTEST12:INC HL 934C 7C LD A,H 934D B5 OR L 934E C25593 JP NZ,RTEST2 9351 CD1A94 CALL ASTDP 9354 0C INC C 9355 7C RTEST2:LD A,H 9356 E67F AND 7F 9358 44 LD B,H 9359 67 LD H,A 935A 7E LD A,(HL) 935B 60 LD H,B 935C BD CP L 935D 45 LD B,L 935E C4E493 CALL NZ,ERR 9361 1B DEC DE 9362 7A LD A,D 9363 B3 OR E 9364 C27793 JP NZ,RTEST22 9367 3A0393 LD A,(BKADRS) 936A C610 ADD A,10 936C CAB093 JP Z,END 936F 320393 LD (BKADRS),A 9372 D39C OUT (9C),A 9374 110080 LD DE,$8000 9377 23 RTEST22:INC HL 9378 7C LD A,H 9379 B5 OR L 937A C28193 JP NZ,RTEST3 937D CD1A94 CALL ASTDP 9380 0C INC C 9381 7C RTEST3:LD A,H 9382 E67F AND 7F 9384 44 LD B,H 9385 67 LD H,A 9386 7E LD A,(HL) 9387 60 LD H,B 9388 BC CP H 9389 44 LD B,H 938A C4E493 CALL NZ,ERR 938D 1B DEC DE 938E 7A LD A,D 938F B3 OR E 9390 C2A393 JP NZ,RTEST32 9393 3A0393 LD A,(BKADRS) 9396 C610 ADD A,10 9398 CAB093 JP Z,END 939B 320393 LD (BKADRS),A 939E D39C OUT (9C),A 93A0 110080 LD DE,$8000 93A3 23 RTEST32:INC HL 93A4 7C LD A,H 93A5 B5 OR L 93A6 C21B93 JP NZ,RTEST1 93A9 CD1A94 CALL ASTDP 93AC 0C INC C 93AD C31B93 JP RTEST1 93B0 AF END:XOR A 93B1 D39C OUT (9C),A 93B3 E5 PUSH HL 93B4 11DB93 LD DE,ENDT 93B7 3E0D LD A,0D 93B9 CD1810 CALL DEDP 93BC 61 LD H,C 93BD CD4B10 CALL HXDP2 93C0 E1 POP HL 93C1 CD4E10 CALL HXDP4 93C4 CD7B10 CALL CRLF2 93C7 11E093 LD DE,CST 93CA 3E0D LD A,0D 93CC CD1810 CALL DEDP 93CF 2A0493 LD HL,(CSBF) 93D2 CD4E10 CALL HXDP4 93D5 CD7B10 CALL CRLF2 93D8 C33310 JP REENT ; 93DB 45 ENDT:DB 45;E 93DC 4E DB 4E;N 93DD 44 DB 44;D 93DE 3D DB 3D;= 93DF 0D DB 0D ; 93E0 43 CST:DB 43;C 93E1 53 DB 53;S 93E2 3D DB 3D;= 93E3 0D DB 0D ; 93E4 E5 ERR:PUSH HL 93E5 D5 PUSH DE 93E6 C5 PUSH BC 93E7 F5 PUSH AF 93E8 E5 PUSH HL 93E9 AF XOR A 93EA D39C OUT (9C),A 93EC 61 LD H,C 93ED CD4B10 CALL HXDP2 93F0 E1 POP HL 93F1 CD4E10 CALL HXDP4 93F4 CD3910 CALL SPDP 93F7 60 LD H,B 93F8 CD4B10 CALL HXDP2 93FB 3E2D LD A,2D 93FD CD1510 CALL ADISP 9400 F1 POP AF 9401 67 LD H,A 9402 CD4B10 CALL HXDP2 9405 111594 LD DE,ERRT 9408 AF XOR A 9409 CD1810 CALL DEDP 940C C1 POP BC 940D D1 POP DE 940E E1 POP HL 940F 3A0393 ERR2:LD A,(BKADRS) 9412 D39C OUT (9C),A 9414 C9 RET ; 9415 20 ERRT:DB 20 9416 45 DB 45;E 9417 52 DB 52;R 9418 52 DB 52;R 9419 0D DB 0D ; 941A D39C ASTDP:OUT (9C),A 941C 3E2A LD A,2A 941E CD1510 CALL ADISP 9421 C30F94 JP ERR2 ; ADISP =1015 ASTDP =941A BKADRS =9303 CRLF2 =107B CSBF =9304 CST =93E0 DEDP =1018 END =93B0 ENDT =93DB ERR =93E4 ERR2 =940F ERRT =9415 HXDP2 =104B HXDP4 =104E REENT =1033 RTEST =9306 RTEST1 =931B RTEST12 =934B RTEST2 =9355 RTEST22 =9377 RTEST3 =9381 RTEST32 =93A3 SPDP =1039 |
テスト対象の27C4001にはND80Z3.5のシステムプログラムを書込済みのROMを使います。
システムプログラムはアドレス00000〜07FFF(バンク00)に書いてあります。
その後ろのアドレス08000(バンク10)〜7FFFF(バンクF0)にテストデータを追加書込みします。
書き込むテストデータは増設RAM628512のテストで使ったものと同じです。
ただし00000〜07FFF(バンク00)にはシステムプログラムが書かれていてテストデータではありませんから、テストは08000(バンク10)から行います。
増設RAMのテストではエラー処理のところがちょいと手抜きになっていましたが、今回はエラーが発生したら、そのアドレスとエラーデータを表示するようにしました。
またエラーなしで終了した場合に何も表示しないとちょっと不安になりますので、「ちゃんとチェックしたぞ!」というメッセージとして、64KB書き込みごとに*を表示するとともに、終了時に終了アドレスを表示するようにしました。
下は4mromt2.binを実行したときのログです。
logfile nd80zlog\10011543.txt open ND80ZVに接続しました 0001 0000 - z 1000 00C3 - *** nd80z3 basic **** ndwr2h.bin loaded,from E23F to E535 >/ld 4mromt2.bin,9300 loading 4MROMT2.BIN ...0124(292)bytes loaded,from 9300 to 9423 >jp 9300 *******END=07FFFF CS=5553 >/exit 0000 00C3 - リモート接続を終了しました logfile closed at Sun Oct 01 16:03:23 2017 |
エラー表示することなく終了しましたから、これでテストOKということなのですが、プログラムにバグがあって、エラーがあってもそれを検出できなくて終了してしまっているかもしれません。
そこでわざとエラーを発生させてみることにしました。
RAMのテストの場合にはRAMをわざと書き換えるという方法でテストすることができます。
ROMも同じようにわざと間違えたデータを書き込めばよいのですが、RAMのように簡単にはできません。
もう一度ROMを書き直さなければなりません。
そこで簡単な方法としてテストプログラムの側を書き直すことにしました。
下はそのようにしてテストしたときのログです。
>cm 9319 9319 00-01 931A 80- >jp 9300 008001 00-01 ERR 008002 02-80 ERR 008003 80-00 ERR 008004 00-04 ERR 008005 05-80 ERR 008006 80-00 ERR 008007 00-07 ERR 008008 08-80 ERR 008009 80-00 ERR 00800A 00-0A ERR 00800B 0B-80 ERR 00800C 80-00 ERR 00800D 00-0D ERR 00800E 0E-80 ERR 00800F 80-00 ERR 008010 00-10 ERR |
プログラムではテストデータとアドレスが一致するようにDEレジスタとHLレジスタにともに初期値として8000をセットして、それをカウントアップさせながら照合することでテストを行ないます。
HLに初期値として8000ではなくて8001をセットしてスタートした結果が上のログです。
当然全データが不一致になりますから最初から連続してエラーが表示されました。
これによってエラーチェックは正常に機能していることが確認できました。
CRT/VGAIF+KEYIF+SDCARDIFボードの製作[総合第99回]
2017.10.5upload
前へ
次へ
ホームページトップへ戻る