PC-8001用 SDカード、8k SRAM、RTCボード(2) 稼働確認

PC-8001

PC-8001用にSDカード、8kSRAM、RTCを載せた欲張り(w)ボードをALLPCBさんに頼んでいたものが届きましたので稼働確認しました。
128kBメモリーボードとの連携確認はまだですが、SDカードと8kSRAMでSD-DOSが動き、RTCで時刻取得もできました。

プリント基板到着

9月下旬にALLPCBさんの無料基板作成クーポン第二弾で、PC-8001 SD/SRAM/RTCボードを注文してみまして、爆速で基板作成したもらったものの10/1の国慶節期間にちょうどあたってしまい1週間DHLのピックアップ待ちとなっちゃったというちょっとしたイベントがありつつ無事とどきました。

さすがDHLで、10/8 金曜日に深センからピックアップ、翌日には成田到着して日本の業者へ引き渡し。土日はわたしの地域ではDHLの配達をしてないので月曜朝には到着というスピードでした。速い!!!です。

プリント基板は5枚で頼みましたが、今回も6枚届きました。ありがたや。

部品実装とSRAM/SD動作確認・・・SD動かずw

まずはICソケットとかトランジスタ、FET、秋月電子SDカードモジュールなどなど部品をはんだ付けしてみます。平日の夜に実施したので時間制限がありましたが2時間ほどでほぼ部品のはんだ付け終了しました。部品番号を回路図などと照らし合わせながらボチボチとはんだ付けしました。

GitHub - kuninet/PC-8001-SD-8kRAM
Contribute to kuninet/PC-8001-SD-8kRAM development by creating an account on GitHub.

写真はとってませんが、以前失敗したPC-8001の拡張CPUバスとつなぐ端子の -12Vと隣の端子の短絡などがないかテスターで何度も計測したり、部品なしでPC-8001とフラットケーブルでつないで5VとGNDがちゃんと来ているか確認したりしてから部品を搭載しました。ちなみに今回部品は、ロジックICについては74HCまたは74HCTシリーズを使います。SRAMとRTCをCR2032の電池でバックアップする関係もありまして…
PPI(8255)は電池バックアップしないのでCMOS型じゃなくてもOKです。CMOS型のほうが電気食わなくていいかもですけど。

で、PC-8001に基板をつないで、まずはSRAMが稼働しているかPC-8001の機械語モニタのSコマンドで確認。空きROMエリアにちゃんと配置できているみたいです。

GitHub - chiqlappe/SD-DOS: PC-8001用 SD-DOS(要 専用microSDドライブ)
PC-8001用 SD-DOS(要 専用microSDドライブ). Contribute to chiqlappe/SD-DOS development by creating an account on GitHub.

つづいて、githubで ちくらっぺさんが公開されているSD-DOSのwav音声をパソコンで再生して、PC-8001のカセットインターフェース経由でSRAM領域へロードしてリセットを実施。SD-DOSが無事稼働することを確認しました。

ただし、SD-DOSのmountコマンドを実行するとハングします。何かが足りないようです。平日でしたので、ここでいったん確認中断。

MicroSDカードモジュールのJ1短絡で SD読めた!

何かやってないことがあるなと思ったのですが….
今回搭載した秋月電子MicroSDモジュールですが、リンク先のページにある資料をみていただくと分かるとおり、5Vを供給して3.3Vを出すレギュレーター搭載型ではあります。
で、SDカードモジュール基板上のJ1はんだジャンパを短絡しないとレギュレーターが発動しない仕組みでした。デフォルトではレギュレーターは外部コントロールできるようになってます。

microSDカードスロット レベルシフタ付きブレークアウト基板キット: ケーブル・コネクター 秋月電子通商-電子部品・ネット通販
電子部品,通販,販売,半導体,IC,LED,マイコン,電子工作microSDカードスロット レベルシフタ付きブレークアウト基板キット秋月電子通商 電子部品通信販売

どうりで、SDカードモジュールに搭載されているパワーランプLEDが光ってなかったなと思い、SDカードモジュール基板上のJ1はんだジャンパを短絡してSD-DOSに再挑戦。

またSDをマウンAUTOEXECにあたるHELLO.CMTがロードできるところも確認。この時点ではYM2203ボード経由でつなぐRTCを叩きに行ったのでエラーになってますが、無事SDが読めたみたいです。

SDカードにいれてあったPC-8001のゲームなんかを動かしてみたりして、SRAMとSDカードの稼働を確認しました。tako2さんのNoonPatrolもSD-DOSがあればすぐにPC-8001実機で動きます。

RTCへ日時セットとHELLO.CMT書き換え

今回のプリント基板は、秋月電子製 RTCも稼働するように端子を出しています。バッテリーバックアップしたRTCが装備できるとPC-8801などのモダン(w)パソコンみたいに電源をOFFしても日時が保持されて素敵環境となります。PC-8001にもRTCは装備されてますが残念ながらバッテリーバックアップされていません。

本基板は、ちくらっぺ氏のRTCドライバが稼働するように配線しているのでそちらを使わせていただきます。

GitHub - chiqlappe/rtc: PC-8001用リアルタイムクロックドライバ
PC-8001用リアルタイムクロックドライバ. Contribute to chiqlappe/rtc development by creating an account on GitHub.

今回つかったRTCモジュールは秋月電子製の「32kHz出力シリアルRTC基板モジュール RT4543使用」というものです。シリアルメッセージでコントロールできて、DIP化モジュールになってて使いやすいものです。

32kHz出力シリアルRTC基板モジュール RT4543使用: 半導体 秋月電子通商-電子部品・ネット通販
電子部品,通販,販売,半導体,IC,LED,マイコン,電子工作32kHz出力シリアルRTC基板モジュール RT4543使用秋月電子通商 電子部品通信販売

RTCドライバをアセンブリしてCMTファイルを作る

ちくらっぺさんのRTCドライバはZ80アセンブラで記述されていて、記述形式はTools80の形式となってます。Tool80は、最近 公開再開されましたので、ありがたくダウンロードさせていただきます。

OUT of STANDARD [PC-8001]

Tools80はいろいろな機能があるソフトでWindows環境だと各種バッチファイルがありますのでそちらを使ってアセンブリするのが簡単です。今回はasmファイルをCMTファイル(カセットテープ形式ファイル)へアセンブリしたいので 「asm2cmt_Z80(pc80).bat」を使うとよさげ。バッチファイルをみると以下のコマンドで起動してるようです。

%javabin%java -jar tools80.jar -tgt=z80 -asz -debug %1

jar形式で提供されてるみたいなんで、Java環境があればどこでも動かせそうです。Windows以外の環境で使う場合は、上記コマンドをまねて起動してみてください。ちなみに、わたしはMac環境でRTC.asmをアセンブリしたところ無事RTC.CMTが生成されました。

できあがったCMT形式のファイルはMicroSDへCOPYしておくと、PC-8001実機でロードできます。

RTCへ日時をセット

ちくらっぺさんのRTCドライバですが、ソースやアセンブリした結果のアセンブリリストを読むと分かりますが、RTCへの書き込みと読み出しの2つのルーチンを装備しています。またアドレスは0EDCEh番地となってまして、普段は使ってない256バイト分のRS232Cバッファに配置するようになってます。

  EDCE                		ORG	RS232BUF
                      	
  EDCE  C320EE        		JP	READ_RTC	;
  EDD1  C3DBED        		JP	WRITE_RTC	;
                      	
  EDD4                	TMRDATA:			;日時情報をBCD形式でセットしてWRITE_RTCをコールすると登録される
  EDD4  000000        		DB	00H,00H,00H	;SEC,MIN,HOUR
  EDD7  00            		DB	00H		;WEEK
  EDD8  000000        		DB	00H,00H,00H	;DAY,MONTH,YEAR
                      	
                      	;-----------------------------
                      	;RTCに日時情報を登録する
                      	;-----------------------------
  EDDB                	WRITE_RTC:
  EDDB  CDC1EE        		CALL	INIT_RTC_WR	;
  EDDE  3E01          		LD	A,HI		;
  EDE0  CDA8EE        		CALL	RTC_SET_WR	;RTCをデータ入力状態にする

上記にアセンブリリストの一部を掲載ししました。ルーチンの先頭に READ_RTCとWRITE_RTCへのジャンプ命令が書いてありまして、その直後に日時書き込みで使う日時データバッファがあります。

呼び出しルーチンを書くのがめんどうだったので ^^) 日時データバッファにPC-8001のマシン語モニターで日時データを書き込みして、以下のN-BASICコマンドでCallして日時設定しました。

事前に日時書き込み用データを0EDD4h番地から機械語モニターのSコマンドで書き込んでおきます。たとえば2021/10/15(金)20:01:02 だったら….

MON
* SEDD4
EDD4 00-02 00-01 00-20 00-06
EDD8 00-15 00-10 00-21 00-
*

つづいてctrl+BでN-BASICに戻って、以下のダイレクトコマンドでRTC書き込みルーチンを呼び出します。

DEFUSR1=&hEDD1
A=USR1(0)

RTCの読み出しをSD-DOSの自動実行(HELLO.CMD)に仕込む

RTC ICに日時が設定できたら、SD-DOSのSDカードマウント時に自動実行されるHELLO.CMDにRTC読み出しを仕込んでおきたいと思います。まずは、N-BASICで以下のプログラムを作ります。

10 DEFUSR1=&HEDCE:A=USR1(0)

これをSAVEコマンドでSDカードへ保存します。もともとHELLO.CMTがSDカード上にある場合はリネームをお忘れなく。

SAVE "HELLO.CMT"

BASICプログラムだけだとマシン語のRTCドライバが入ってませんので、以下のコマンドでRCドライバもマージしてあげる必要があります。

MERGE "HELLO.CMT",&HEDCE,&HEEC9

ここまでできたら、PC-8001をリセットしてSD-DOSを起動し、mountコマンドを実行するとHELLO.CMTが動いてRTCから日時データを読み出してPC-8001の内蔵RTCへ設定してくれます。

TIME$やDATE$に現在の日時が設定されているはずです。確認してみてください。

今後の確認

本基板には、以前作ったPC-8001用128kB メモリーボードとの共存用ポートも装備してまして、そちらの確認が未済です。そちらが稼働すれば便利基板の全機能が確認できますので、引き続き確認していこうと思ってます。

コメント

  1. Takao Yanagisawa より:

    プリント基板を発注し、作ってみました。
    なのですが、PC-8001を起動してもVCC-ON信号がLOWにならずにRAMがENABLEになってくれなかったため、PC-8001の電源出力を5Vになるように調整したところ、VCC-ONはLOWになるようになりました。
    しかし、CMTからSD-DOSをロードするとプログラムが正しくロードされず、VCC-ONがバタついているようです。
    PC-8001の電源出力を5V以上に上げるのはためらっているのですが、何ボルトにすれば良いか何かアドバイスはあれば教えていただけますでしょうか。

    • kuninet より:

      Yanagisawaさん
      基板作成していただいてありがとうございます。
      わたしも 最初にちくらっぺさん基板を作った時に電圧でハマりました。

      現在 8k/SRAM/SDボード基板を繋いだ状態で、テスターで実測してみたところ5Vでした。
      PC-8001マザー+外部基板で5Vあたりになるように調整していただけると安定するのでは?と思ってます。あまり確たる情報でなくて、すいません。微妙に調節してみてください。

      • Takao Yanagisawa より:

        早速お返事ありがとうございます。
        試してみたいと思います。

        • kuninet より:

          もとになった基板をつくられた ちくらっぺさんも、電圧を上げないと安定しなかったみたいなんで、調節すると安定すると思いますです。
          やはり、ツェナーダイオードかなぁとか思ったりしてます。もともとはRD4.2が指定なんですが、4.3Vのものを私も使っていたりします。3.9Vとかのものに変えると 閾値が低くなるかな?と思ったりしてます。