マイコン独立大作戦
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
前へ
次へ
ホームページトップへ戻る