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

マイコン独立大作戦
ROM/RAM/RTCボードの製作

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
WindowsパソコンにUSB接続して使う現行方式はそれなりに便利ではありますが、ときとしてWindows
のしがらみから開放されて、小さいながらも独立した一個のパソコンとして機能したいと思うこともあります。
独立大作戦の作戦その1はCRTインターフェースボードの製作です。
作戦その2はキーボードインターフェースです。
作戦その3は、SDカードインターフェースです。
作戦その4は、ROM/RAM/RTCボードです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第31回]


●増設ROM(27C4001)のテスト(2)

前回は2ヶ月以上も前にテストして確認していたことをすっかり忘れてしまい、また全く同じことをやってしまったことがわかって、それはもう、われながら情けない思いでありました。
しかし2ヶ月前のテストはND80Z3.5のシステムプログラムを27C1001にCOPYしたのでしたが、今回は27C4001ですから全く同じということでもありませぬ。
などど強弁してわれとわが身をいたわっております。

さて、気を取り直しまして、今回はその先のテストです。
2ヶ月前には、その先のテストはしておりません。
ですので今回が初めてです(多分)。
下が今回作りました27C4001のREADテストプログラムです。

2017/9/5  11:8  rom4mt1.txt
END=8619
              ;;;27c4001 test
              ;17/9/5
              ;
                ORG $8600
              ;
                REENT=$1033
                BKRD=$E9A9
              ;
8600 0610     RDTEST:LD B,10
8602 210000     LD HL,$0000
8605 78       RDTEST1:LD A,B
8606 CDA9E9     CALL BKRD
8609 79         LD A,C
860A 07         RLCA
860B B8         CP B
860C C21986     JP NZ,ERR
860F 78         LD A,B
8610 C610       ADD A,10
8612 CA3310     JP Z,REENT
8615 47         LD B,A
8616 C30586     JP RDTEST1
              ;
8619 00       ERR:NOP;break point set
              ;
BKRD         =E9A9  ERR          =8619  RDTEST       =8600  
RDTEST1      =8605  REENT        =1033  

ERR:のところはRAMのテストプログラムと同じく手抜きです。
アドレス8619にブレークポイントを設定してから実行します。
このようにすると、エラーが発生したことを知ると同時にそのときのレジスタの値からエラーの原因を推測することができます。

とても短いプログラムなのですが、何をやっているのかということになりますと、いまひとつよくわからないプログラムです。
今回テスト用に使用しました27C4001にはあらかじめROM WRITERで00000〜07FFFのアドレスにND80Z3.5用のシステムモニタプログラムを書き込んだことは前回、前々回に書きました。
27C4001は512KBのROMですから、アドレスとしては00000〜7FFFFの範囲の容量になります。
ROM/RAM/RTCボードはそれをバンク00〜バンクF0の16に分けてアクセスします。
各バンクは32KBのメモリサイズになります。
最初のバンクにはND80Z3.5のシステムプログラムがありますから、テストデータはその次のバンクから書き込みます。
本当はRAMのテストのときのように全メモリアドレスにベタにテストデータを書き込んでテストするとよかったのですが、ちょっとそこまでの準備ができていませんので、今回のテストは簡易なテストデータで行なうことにしました。
つまり各メモリバンクの先頭の1バイトだけにテストデータを書き込みました。

最初のバンクをバンク0としたときに、次のバンク1はアドレス08000〜0FFFFになります。
そこでその先頭アドレス08000にテストデータとして08を書き込みました。
次のバンク2はアドレス10000〜17FFFですから、アドレス10000にテストデータ10を書き込みました。
そのようにして、以下18、20、28…70、78までをそれぞれ各バンクの先頭アドレスに書き込みました。
上のテストプログラムはそのようにして作成した27C4001をROM/RAM/RTCボードに実装して、バンクを切り換えながら各バンクの先頭アドレスの値をチェックするものです。

ROMアクセスの場合バンク1はI/Oアドレス9Cに10をOUTしますが、テストデータは08です。
バンク2は20をOUTしますがテストデータは10です。
バンク3は30をOUTしますがテストデータは18です。
ちょっとややこしくて分かりづらいかもしれませんが、そういうことになっています。
下はテストプログラムを実行したときのログです。

>logfile nd80zlog\09051101.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 rom4mt1.bin,8600
loading ROM4MT1.BIN ...001a(26)bytes loaded,from 8600 to 8619
>bp 8619
>jp 8600
>/exit
0000 00C3 - 
リモート接続を終了しました
logfile closed at Tue Sep 05 11:10:34 2017

エラーブレークすることなく終りましたから、ROM/RAM/RTCボードに27C4001を実装しての読み出しテストは、簡易ですがとりあえず問題なくできた、と考えてよいと思います。

ROM/RAM/RTCボードの製作[第31回]
2017.9.21upload

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