部品を減らす工夫
AVRとZ80でCP/Mの改良の更なる改良の検討です。
別の方法を試す
I/OにWAITを入れる正攻法の方式では、タイミングが間に合わないのでやや複雑なゲートが必要になりCPLDを使いました。できればこれを無くせないかと考えていたのですが、すごいアイデアを考え付く人がいるものです。T_colonさんのTweet。HALTとRESETを使う方法です。実際にPSoC4でCP/Mを動かしていらっしゃいます。
私が製作したAKI-80のCP/Mマシン(AVRとZ80でCP/Mの改良)ならちょっとの変更で試すことができるのでやってみました。但しHALTからの復帰にRESETを使うとIFFが初期化されてしまい割り込みに影響するのでNMIでやることにしました。NMIならRETN命令で復帰すればIFFが保存されINT割り込みに影響を与えません。CP/Mだけなら関係ないですが本物のZ80を使うからにはINT割り込みは残しておきたいですからね。
ソフトウェアのダウンロード(754)
問題なく動きましたが、Z80側のコードが多くなるのでIPL(BOOT)が1セクタに収まりきらず2セクタ分になりました。この方式の良い点はゲートが不要になるだけでなくI/Oアドレスを消費しないところですかね。
詳細はソースを見ていただくとして処理は大体こんな感じ。
- Z80
- コマンドとデータをRAMに書き込む
- NMI割り込みベクタ(0066Hから2バイト分)をバックアップ
- 割り込みベクタにRETN命令を書き込む
- HALT命令実行
- バックアップを書き戻す
- RAMから結果を受け取る
- AVRマイコン
- HALT検出
- BUSREQ発行
- BUSAK検出
- RAMからコマンド、データを取得
- コマンド処理
- 結果をRAMに書き込む
- NMI発行
- BUSREQ解放
- HALT脱出(NMIの受理)を検出
- NMI解放
CPLDが不要になっちゃいました。ところでこのPSoC4って異常に安くないですか。
関連リンク
PSoC4 Prototyping Kit CY8CKIT-049-42XX
http://akizukidenshi.com/catalog/g/gM-08446/
http://itcorp24.cart.fc2.com/ca9/46/
マイコンPCB [PCB-ATMEGA128](ATmega64/128対応)
http://www.aitendo.com/product/2837
当サイト内
AVRとZ80でCP/Mの改良
CP/Mコーナー
- シンプルで良いですね〜!、昔のX68K用のZ80カードでHALT使ってありました〜 https://twitter.com/DragonBallEZ/status/461566441758535682 - kyo (2014年06月12日 19時57分11秒)
- 当時からこのテクは使われていたんですね。興味深い情報、ありがとうございます。 - 管理者 (2014年06月12日 22時52分30秒)
- 恐れ入ります。浅学で申し訳ないのですが、このページにある「9.HALT脱出(NMIの受理)を検出」については教えていただけないでしょうか。別の用途(趣味)でnmiの受理を外部回路で検出して、行いたい操作があるものでして。。。ご公開されているソースを見てもわかりませんでした。よろしくお願いします。 - のり (2025年10月30日 20時51分28秒)
- ここで行っていることは、Z80をHALTから脱出させるためAVRマイコンからNMIを発行しZ80のHALTピンを監視してHALTピンがインアクティブ(HIGH)になったことの検出をもってNMIを受理したと判断しています。これはHALTを使う前提なので、HALTを使わないでNMIの受理を外部回路で検出するのであれば検出用のIOポートを用意しNMIルーチンの始めでそのポートを立てればよいのではないでしょうか。 - 管理者 (2025年10月30日 23時36分03秒)
- ご返事ありがとうございます。勉強になります。haltを実行してz80が停止しているのを起こすために、nmiを入れられているのですね!データシートを読むとnmiを受け付けるとき、1回の空m1サイクルのあとpcをスタックにセーブするメモリへの書き込みが行われてから0066hに分岐すると読めるのですが、その空m1サイクルで外部回路をトリガーしたいというのがわたしの要望です。できるかどうかわたしにはまだ分かってはいないのですが、その時にメモリマップも切り替えたいと考えている次第です。自分でもよく考えてみます。ありがとうございます! - のり (2025年10月31日 01時39分36秒)
トップ メニュー
This web page is described in Japanese, but you can read in English by translation site.