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