goo blog サービス終了のお知らせ 

桂庵のブログ

鉄道模型を中心としています。特に自作DCC関連が多いです。

CP/Mを作ろう(1)

2024年01月14日 17時19分17秒 | CP/M
CP/Mを作っています。
CP/Mは古いOSです。個人で使用できる最初のコンピュータ用OSかも知れません。過去、2回CP/Mを作ろうと試みましたが、金欠や時間がなく断念していました。Z80CPUがいまだに販売しているのに気が付き、リベンジを果たすべく、作る事にしました。Z80CPUをW通商で2個購入しました。そのうち1個は基板から取り外した形跡があり、案の定、動作しませんでした。現在は2台目を作成中です。2台目用のZ80は丹青通商で購入しました。新品(とは言え30年以上前の製品)で問題なく動作しています。(使用しているZ80はZilogではなく、シャープおよび東芝製です)

AVR CP/Mで検索するとAVRを用いたCP/Mの作成例がかなりあります。PICで作成されている方もおられるようです。私はDCCでAVRを使用しているので、Z80 + AVR(ATmega164) + PC(Windows)でCP/Mを作成する事にしました。
機能分担としては
AVR:RAMの操作(書込み、読出し)、Z80(CP/M)のI/Oインターフェース。
PC:RAMデータの準備、AVR/Z80Reset等の制御、キーボード、コンソール表示、ディスク(ファイル)制御です。
PC上でCP/M用のディスク代わりのファイルを構成しています。SDもCP/Mのディスクとして使用しています。
PC-AVRのインターフェースはUSB-シリアルで構成しています。Z80(CP/M)-AVRのインターフェースは、IORQ信号によるWait(ハードで生成)およびAVRからのBUSREQで構成しています。
回路図です。

部品の購入は、Z80は丹青通商、その他は秋月電子です。AVR(ATmega164)とゲートIC、USB-シリアルは手持ちの部品を使用しています。
USB-シリアル:秋月製 FT232RL USBシリアル変換モジュール
SDカードI/F:秋月製 microSDカードスロット レベルシフタ付きブレークアウト基板キット
秋月電子は信越電気時代から通っていました。今では、ほとんどネット注文ですが、たまに、秋葉原のお店に見に行きます。

ブレッドボードで作成しました。
DIP ICの上にKiCad PCBレイアウトエディターで作成したピン番号を印刷し、両面テープで付けて配線しています。U10(74HC374)、U9(M68AF127B)は変換基板でDIP化し配線しています。

Z80とAVRのインターフェイスの波形を下に示します。コンソールイン時の波形でAVRからデータバスに1文字(8bit)のデータを出力し、Z80が読込む場合です。
1.Z80がIN命令を実行する。
I/Oアドレスで機能を切り替えています。例、コンソールインはアドレス4、コンソールアウトはアドレス5等
2.ハードがIORQの立下りをZ80クロックに同期してWAITを発生する
3.AVRはWAITがアクティブになった事を確認し、I/Oアドレスがコンソールインである事を認識する。ハードがWAITを保持するのでAVRはのんびり処理が出来ます。
4.AVRはデータバス(AVR PORTC)に1文字データを設定し、このポートを出力にする。
5.AVRはBUSRQをアクティブにする。
6.AVRがWAITを解除する。
7.AVRはBUSACK状態になるまで待つ。
8.BUSACK状態になれば、Z80 IN命令においてZ80がデータを読込みんだことになるので、AVRはデータバス(AVR PORTC)を入力とする。
9.AVRは、BUSRQを解除する。
他の処理も基本的には上記の順で制御しています。
上記の波形は1500円程度のロジックアナライザー / PulseViewで取っています。このロジックアナライザー / PulseViewは、自分のメインのパソコンでは動作せず、ノートブックでPulseView(Safe Mode)の状態でやっと波形が取れました。

WordStarが動作しています。下の写真はWordStarでCPM22.ASMを開いた状態です。
コンソール画面のカーソル色は白でなく薄い緑にしています。この方が見やすかったです。このコンソールはCP/M用に80列x24行で作成しています。

ハードがらみのミスや勘違いで苦労した点
1.AVR ATmega164はデフォルトでJTAGがオンでした。JTAG用ピンがあるPORTCをデータバスとしていたため、RAMの書込み、読出しで全くうまく行きませんでした。
2.同じくデータバス(PORTC)での事で、RAM読出しがうまく行きませんでした。これは、AVR IO PORTの同期化回路でデータがAVRクロック2~3ほど遅れるためで、NOPを2つ入れた後PINCとして読込んでいます。

参考とさせて頂いたサイト(ありがとうございます)
Z80 manual

AVRとCP/M

ロジックアナライザー


最新の画像もっと見る

2 コメント(10/1 コメント投稿終了予定)

コメント日が  古い順  |   新しい順
つくりました。 (JJ1OXS)
2025-08-13 18:02:13
無事動作しました。感動です。
返信する
Unknown (Unknown)
2025-08-14 18:56:04
桂庵です

え、---、作られたのですか、ブログ/ホームページには作成内容を入れたのですが、まさか、本当に作成する方がいるとは思いませんでした。ありがとうございました。
>JJ1OXS さんへ
>つくりました。... への返信
返信する

コメントを投稿

サービス終了に伴い、10月1日にコメント投稿機能を終了させていただく予定です。
ブログ作成者から承認されるまでコメントは反映されません。