2017.9.18
前へ
次へ
ホームページトップへ戻る

マイコン独立大作戦
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

前へ
次へ
ホームページトップへ戻る