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

マイコン独立大作戦
CRT/VGAIF+KEYIF+SDCARDIFボードの製作

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
WindowsパソコンにUSB接続して使う現行方式はそれなりに便利ではありますが、ときとしてWindows
のしがらみから開放されて、小さいながらも独立した一個のパソコンとして機能したいと思うこともあります。
昔はそれが普通のことだったのですが、安価なCRTディスプレイが生産中止となって久しい今日ではそれ
は叶わぬことと諦めていたのですが…。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[総合第97回]


●増設RAMのテスト

ROM/RAM/RTCボードの旧基板での増設RAMテストは「ROM/RAM/RTCボードの製作」[第28回]で行なっています。
同ページをあらためて読んでみましたところ、ログが違っていることに気が付きましたので、正しいログと差し換えました。
同ページでははじめに628128のテストをして、次に628512のテストをしています。
たまたま現在は新ROM/RAM/RTCボードに、増設RAMとして628512を実装していますので、先に628512のテストをすることにしました。

テストは同ページのときと同じで、USB接続版ND80Z3.5にROM/RAM/RTCボードを接続する形で行ないました。
このところのND80Z3.5システムROMはあれこれテストをしている過程で複数のバージョンができてしまいました。
今テストに使っているバージョンにはE9A0〜のバンクRAMアクセスプログラムが組み込まれていないことがわかりました。
上記テストをした時点のROMに差し替えればよいのですが、いちいちそれをするのも面倒なことなので、そこで使ったテストプログラムram512t2.binにバンクRAMR/Wプログラムの設定を加えてram512t3.binをつくりました。

ram512t3のプログラムリスト(アセンブルリスト)です。

2017/10/1  16:29  ram512t3.txt
END=8689
              ;;;628512 test
              ;17/9/4
              ;
                ORG $8600
              ;
                REENT=$1033
                BKWR=$E9A0
                BKRD=$E9A9
              ;
8600 C31B86     JP WRTEST
              ;
8603 D39C     BKWRT:OUT (9C),A;$E9A0
8605 EB         EX DE,HL
8606 71         LD (HL),C
8607 EB         EX DE,HL
8608 AF         XOR A;don't use JP! see assemble list
8609 D39C       OUT (9C),A
860B C9         RET
860C D39C     BKRDT:OUT (9C),A;$E9A9
860E 4E         LD C,(HL)
860F AF         XOR A
8610 D39C       OUT (9C),A
8612 C9         RET
8613 D39C     BKMVT:OUT (9C),A;$E9B0
8615 EDB0       LDIR
8617 AF         XOR A
8618 D39C       OUT (9C),A
861A C9         RET;end=$E9B8
              ;
861B 210386   WRTEST:LD HL,BKWRT
861E 11A0E9     LD DE,BKWR
8621 011800     LD BC,$0018;=24bytes
8624 EDB0       LDIR
8626 06FF       LD B,FF
8628 CD4586   WRTEST1:CALL WRSB
862B 78         LD A,B
862C D610       SUB 10
862E 47         LD B,A
862F FEFF       CP FF
8631 C22886     JP NZ,WRTEST1
              ;
8634 06FF     RDTEST:LD B,FF
8636 CD6186   RDTEST1:CALL RDSB
8639 78         LD A,B
863A D610       SUB 10
863C 47         LD B,A
863D FEFF       CP FF
863F C23686     JP NZ,RDTEST1
8642 C33310     JP REENT
              ;
8645 110000   WRSB:LD DE,$0000
8648 78       WRSB1:LD A,B
8649 4F         LD C,A
864A CDA0E9     CALL BKWR
864D 13         INC DE
864E 78         LD A,B
864F 4B         LD C,E
8650 CDA0E9     CALL BKWR
8653 13         INC DE
8654 7A         LD A,D
8655 FE80       CP 80
8657 C8         RET Z
8658 78         LD A,B
8659 4A         LD C,D
865A CDA0E9     CALL BKWR
865D 13         INC DE
865E C34886     JP WRSB1
              ;
8661 210000   RDSB:LD HL,$0000
8664 78       RDSB1:LD A,B
8665 CDA9E9     CALL BKRD
8668 79         LD A,C
8669 B8         CP B
866A C28986     JP NZ,ERR
866D 23         INC HL
866E 78         LD A,B
866F CDA9E9     CALL BKRD
8672 79         LD A,C
8673 BD         CP L
8674 C28986     JP NZ,ERR
8677 23         INC HL
8678 7C         LD A,H
8679 FE80       CP 80
867B C8         RET Z
867C 78         LD A,B
867D CDA9E9     CALL BKRD
8680 79         LD A,C
8681 BC         CP H
8682 C28986     JP NZ,ERR
8685 23         INC HL
8686 C36486     JP RDSB1
8689 00       ERR:NOP;break point set
              ;
BKMVT        =8613  BKRD         =E9A9  BKRDT        =860C  
BKWR         =E9A0  BKWRT        =8603  ERR          =8689  
RDSB         =8661  RDSB1        =8664  RDTEST       =8634  
RDTEST1      =8636  REENT        =1033  WRSB         =8645  
WRSB1        =8648  WRTEST       =861B  WRTEST1      =8628  

下はram512t3.binを実行したときのログです。

logfile nd80zlog\10011631.txt open

ND80ZVに接続しました
0001 0000 - z
1000 00C3 - 
*** nd80z3 basic ****
ndwr2h.bin loaded,from E23F to E535
>/ld ram512t3.bin,8600
loading RAM512T3.BIN ...008a(138)bytes loaded,from 8600 to 8689
>bp 8689
>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
>

ERR:(アドレス8689)にブレークポイントを設定して8600番地から実行しましたが、ブレークせずに終了しましたので、エラーは発生しなかったことになります。
念のため以前のテストのときと同じように、てきとうなバンクRAMの内容(512バイト)を8200〜83FFに読み出して中身を確認してみました。
見たところ、整然とテストデータが書き込まれているようです。

しかしプログラムにバグがあって、エラーが発生してもERR:にジャンプしない、という可能性もあります。
そこでわざとエラーを発生させてみることにしました。

>cm 8200
8200 00-12
8201 70-34
8202 EF-56
8203 03-78
8204 70-
>cm 8500
8500 21-
8501 00-
8502 70-82
8503 11-
8504 00-
8505 82-70
8506 01-
>jp 8500
>bp 8689
>jp 8634

A F  B C  D E  H L  A'F' B'C' D'E' H'L'  PC   SP   IX   IY  I  SZ H PNC
1202 EF12 F007 7000 0000 0000 0000 0000 8689 F7FC 0000 0000 FF 00000010
>/exit
0000 00C3 - 
リモート接続を終了しました
logfile closed at Sun Oct 01 16:47:52 2017

8200〜8203を書き換えました。
8500〜のbkmvt3.binはデフォルトの設定値では増設RAMのバンクEFの7000〜71FFを8200〜83FFにコピーするプログラムです。

bkmvt3のアセンブルリストです。

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  

そのコピー元とコピー先を入れ替えて実行しました(以下はさきほどのログ参照)。
そのあと8659にブレークポイントを設定して、READチェック(アドレス8634)から実行したところ、期待した通りエラーブレークしました。
READチェックでデータが不一致の場合にはエラーブレークすることが確かめられましたので、最初に行なったram512t3.binでブレークしなかったのは増設RAM(628512)のリードライトでエラーが発生しなかったからだ、ということが確認できました。

ああ、そうでした。
忘れていました。
「ROM/RAM/RTCボードの製作」[第32回]で「痛恨のミス」をしてしまったために、ROM/RAM/RTCボードを作り直すハメになってしまったのでした。
ND80Z3.5の拡張用10pinコネクタにはMEMR、MEMWではなくてただのRD、WRしか出ていないことをうっかり忘れてしまっていたために、ボード上の82C55に対してOUT命令を実行すると増設RAMの内容が書き換えられてしまったのでした。
作り直したROM/RAM/RTC基板ではRD、WRにMREQ信号を抱き合わせにしましたので、もうそのようなことは発生しないはずなのですが、そこは肝心のところなので、きちんとテストしておかなければいけません。

まずは8600にLDしたテストプログラムを実行し、そのあとBASICプログラムを実行してND80Z3.5上の82C55に繰り返しデータを出力しました。
それから今度は8634のREADテストを実行しました。

logfile nd80zlog\10011712.txt open

ND80ZVに接続しました
0001 0000 - z
1000 00C3 - 
*** nd80z3 basic ****
ndwr2h.bin loaded,from E23F to E535
>/load iotest.txt
5'I/O テスト
    10 PRINT "I/OTEST START";
    20 OUT $83,$80
    30 OUT $87,$80
    40 OUT $8B,$80
    50 OUT $8F,$80
    60 A%=1
    70 FOR N%=0 TO 7
    80 OUT $80,A%
    90 OUT $81,A%
   100 OUT $82,A%
   110 OUT $84,A%
   120 OUT $85,A%
   130 OUT $86,A%
   140 OUT $88,A%
   150 OUT $89,A%
   160 OUT $8A,A%
   170 OUT $8C,A%
   180 OUT $8D,A%
   190 OUT $8E,A%
   200 A%=A%*2
   210 FOR A=0 TO 3000:NEXT A
   220 NEXT N%
   230 GOTO 60
data end
>h.
TEXT 8004-817B
ヘンスウ DFFB-DFFF
>bp 8689
>jp 8600
>r.
I/OTEST START

break in 210
>bp 8689
>jp 8634
>/exit
0000 00C3 - 
リモート接続を終了しました
logfile closed at Sun Oct 01 17:17:17 2017

エラーブレークすることなく実行終了しました。
今回のROM/RAM/RTCボードは旧基板のようなトラブルは発生しないことが確認できました。

CRT/VGAIF+KEYIF+SDCARDIFボードの製作[総合第97回]
2017.10.3upload

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