マイコン独立大作戦
ROM/RAM/RTCボードの製作
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
WindowsパソコンにUSB接続して使う現行方式はそれなりに便利ではありますが、ときとしてWindows
のしがらみから開放されて、小さいながらも独立した一個のパソコンとして機能したいと思うこともあります。
独立大作戦の作戦その1はCRTインターフェースボードの製作です。
作戦その2はキーボードインターフェースです。
作戦その3は、SDカードインターフェースです。
作戦その4は、ROM/RAM/RTCボードです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第28回]
●増設RAMのテストプログラム
ソフトウェアがやっともう少しで終りそうなところまで出来てきました。
このあたりでハードウェアの最終的なテストをしておきたいと思います。
ROM/RAM/RTC基板は基板が出来てきたときに簡単なテストをしただけです。
RTCについてはDATE$,TIME$に組み込んで、その後も問題なく動いてくれていますから、大丈夫だと思います。
今回確認しておきたいと思ったのはRAMとROMについてです。
RAMは62256/628128/628512を搭載できるように設計してあります。
628128については実際にZB3DOS(CP/M互換DOS)を実行して問題なく動作しました。
ですので多分よいだろうとは思うのですが、ZB3DOSでは使わないその他のRAMエリアについても問題がないことを確認しておきたいと思います。
そのように考えて作った628128のテストプログラムです。
といってもそんなに大げさなものではありません。
ごく簡単なプログラムです。
2017/9/4 20:41 ram128t.txt END=866F ;;;628128 test ;17/9/4 ; ORG $8600 ; REENT=$1033 BKWR=$E9A0 BKRD=$E9A9 ; 8600 06FF LD B,FF 8602 CD2B86 CALL WRSB 8605 06EF LD B,EF 8607 CD2B86 CALL WRSB 860A 06DF LD B,DF 860C CD2B86 CALL WRSB 860F 06CF LD B,CF 8611 CD2B86 CALL WRSB ; 8614 06FF LD B,FF 8616 CD4786 CALL RDSB 8619 06EF LD B,EF 861B CD4786 CALL RDSB 861E 06DF LD B,DF 8620 CD4786 CALL RDSB 8623 06CF LD B,CF 8625 CD4786 CALL RDSB 8628 C33310 JP REENT ; 862B 110000 WRSB:LD DE,$0000 862E 78 WRSB1:LD A,B 862F 4F LD C,A 8630 CDA0E9 CALL BKWR 8633 13 INC DE 8634 78 LD A,B 8635 4B LD C,E 8636 CDA0E9 CALL BKWR 8639 13 INC DE 863A 7A LD A,D 863B FE80 CP 80 863D C8 RET Z 863E 78 LD A,B 863F 4A LD C,D 8640 CDA0E9 CALL BKWR 8643 13 INC DE 8644 C32E86 JP WRSB1 ; 8647 210000 RDSB:LD HL,$0000 864A 78 RDSB1:LD A,B 864B CDA9E9 CALL BKRD 864E 79 LD A,C 864F B8 CP B 8650 C26F86 JP NZ,ERR 8653 23 INC HL 8654 78 LD A,B 8655 CDA9E9 CALL BKRD 8658 79 LD A,C 8659 BD CP L 865A C26F86 JP NZ,ERR 865D 23 INC HL 865E 7C LD A,H 865F FE80 CP 80 8661 C8 RET Z 8662 78 LD A,B 8663 CDA9E9 CALL BKRD 8666 79 LD A,C 8667 BC CP H 8668 C26F86 JP NZ,ERR 866B 23 INC HL 866C C34A86 JP RDSB1 866F 00 ERR:NOP;break point set ; BKRD =E9A9 BKWR =E9A0 ERR =866F RDSB =8647 RDSB1 =864A REENT =1033 WRSB =862B WRSB1 =862E |
628128はFF、EF、DF、CFの4つのバンク(各32KB)に分けてアクセスします。
順に全メモリアドレスに値を書き込みます。
書いた後もう一度最初から今度は読み出して、先に書き込んだ値と一致するかどうかを確認するプログラムです。
最後のERR:のところは手抜きです。
アドレス866Fにブレークポイントを設定してから実行します。
このようにすると、エラーが発生したことを知ると同時にそのときのレジスタの値からエラーの原因を推測することができます。
ちょいとしたテクニックですが、こういったことが簡単にできるというところもND80Z3.5の便利なところです。
実行してみました。
>logfile nd80zlog\09042049.txt open ND80ZVに接続しました 0001 0000 - z 1000 00C3 - *** nd80z3 basic **** ndwr2h.bin loaded,from E23F to E535 >/ld nd3sd4l.bin,9000 loading ND3SD4L.BIN ...0d28(3368)bytes loaded,from 9000 to 9D27 >usr($903c) >/ld ram128t.bin,8600 loading RAM128T.BIN ...0070(112)bytes loaded,from 8600 to 866F >bp 866f >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 >/exit 0000 00C3 - リモート接続を終了しました logfile closed at Mon Sep 04 20:56:07 2017 |
エラーでブレークすることなく完了しましたから、問題はなかったはずですが、念のためにサンプルとして適当なメモリアドレス(EFバンクの7000〜71FF)を読み出して確認してみました。
bkmvt3.binは[第21回]で作ったbkmvt2.binのアドレスを変更したものです。
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 |
●628512のテスト
628512は512KBの容量があります。
62256の16倍、628128の4倍のメモリサイズです。
バンクFF、EF、DF…1F、0Fの16バンク(各32KB)にアクセスします。
628512用のテストプログラムは動作としては628128用のテストプログラムのバンクアクセスのところを拡張するだけですが、16回も同じようなルーチンを書くのも能の無い話ですから、そこのところは書き換えることにしました。
まずは628128のテストプログラムを変形します。
;;;628128 test ;17/9/4 ; ORG $8600 ; REENT=$1033 BKWR=$E9A0 BKRD=$E9A9 ; WRTEST:LD B,FF WRTEST1:CALL WRSB LD A,B SUB 10 LD B,A CP BF JP NZ,WRTEST1 ; RDTEST:LD B,FF RDTEST1:CALL RDSB LD A,B SUB 10 LD B,A CP BF JP NZ,RDTEST1 JP REENT ; WRSB:LD DE,$0000 WRSB1:LD A,B LD C,A CALL BKWR INC DE LD A,B LD C,E CALL BKWR INC DE LD A,D CP 80 RET Z LD A,B LD C,D CALL BKWR INC DE JP WRSB1 ; RDSB:LD HL,$0000 RDSB1:LD A,B CALL BKRD LD A,C CP B JP NZ,ERR INC HL LD A,B CALL BKRD LD A,C CP L JP NZ,ERR INC HL LD A,H CP 80 RET Z LD A,B CALL BKRD LD A,C CP H JP NZ,ERR INC HL JP RDSB1 ERR:NOP;break point set ; |
628128は4バンクだけだったので、そこのところは固定値としてFF、EF、DF、CFのように書きました。
そこを計算するように書き直しました。
書き換えたのはその部分だけです。
次にこのプログラムを元にして628512用のテストプログラムを作りました。
2017/9/4 21:10 ram512t2.txt END=8663 ;;;628512 test ;17/9/4 ; ORG $8600 ; REENT=$1033 BKWR=$E9A0 BKRD=$E9A9 ; 8600 06FF WRTEST:LD B,FF 8602 CD1F86 WRTEST1:CALL WRSB 8605 78 LD A,B 8606 D610 SUB 10 8608 47 LD B,A 8609 FEFF CP FF 860B C20286 JP NZ,WRTEST1 ; 860E 06FF RDTEST:LD B,FF 8610 CD3B86 RDTEST1:CALL RDSB 8613 78 LD A,B 8614 D610 SUB 10 8616 47 LD B,A 8617 FEFF CP FF 8619 C21086 JP NZ,RDTEST1 861C C33310 JP REENT ; 861F 110000 WRSB:LD DE,$0000 8622 78 WRSB1:LD A,B 8623 4F LD C,A 8624 CDA0E9 CALL BKWR 8627 13 INC DE 8628 78 LD A,B 8629 4B LD C,E 862A CDA0E9 CALL BKWR 862D 13 INC DE 862E 7A LD A,D 862F FE80 CP 80 8631 C8 RET Z 8632 78 LD A,B 8633 4A LD C,D 8634 CDA0E9 CALL BKWR 8637 13 INC DE 8638 C32286 JP WRSB1 ; 863B 210000 RDSB:LD HL,$0000 863E 78 RDSB1:LD A,B 863F CDA9E9 CALL BKRD 8642 79 LD A,C 8643 B8 CP B 8644 C26386 JP NZ,ERR 8647 23 INC HL 8648 78 LD A,B 8649 CDA9E9 CALL BKRD 864C 79 LD A,C 864D BD CP L 864E C26386 JP NZ,ERR 8651 23 INC HL 8652 7C LD A,H 8653 FE80 CP 80 8655 C8 RET Z 8656 78 LD A,B 8657 CDA9E9 CALL BKRD 865A 79 LD A,C 865B BC CP H 865C C26386 JP NZ,ERR 865F 23 INC HL 8660 C33E86 JP RDSB1 8663 00 ERR:NOP;break point set ; BKRD =E9A9 BKWR =E9A0 ERR =8663 RDSB =863B RDSB1 =863E RDTEST =860E RDTEST1 =8610 REENT =1033 WRSB =861F WRSB1 =8622 WRTEST =8600 WRTEST1 =8602 |
WRSB、RDSBは628128用と同じです。
実行してみました。
logfile nd80zlog\09042139.txt open ND80ZVに接続しました 0001 0000 - z 1000 00C3 - *** nd80z3 basic **** ndwr2h.bin loaded,from E23F to E535 >/ld ram512t2.bin,8600 loading RAM512T2.BIN ...0064(100)bytes loaded,from 8600 to 8663 >bp 8663 >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 >/exit 0000 00C3 - リモート接続を終了しました logfile closed at Mon Sep 04 21:41:11 2017 |
628512についてもエラーなく実行できました。
これにてRAMのテストは完了です。
実は。
全く問題なく完了したことですっかり安心してしまったのですが、思わぬ落とし穴があったのでした。
それについてはまた後日。
ROM/RAM/RTCボードの製作[第28回]
2017.9.18upload
前へ
次へ
ホームページトップへ戻る