部品を減らす工夫

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

    1. コマンドとデータをRAMに書き込む
    2. NMI割り込みベクタ(0066Hから2バイト分)をバックアップ
    3. 割り込みベクタにRETN命令を書き込む
    4. HALT命令実行
    5. バックアップを書き戻す
    6. RAMから結果を受け取る
AVRマイコン
    1. HALT検出
    2. BUSREQ発行
    3. BUSAK検出
    4. RAMからコマンド、データを取得
    5. コマンド処理
    6. 結果をRAMに書き込む
    7. NMI発行
    8. BUSREQ解放
    9. HALT脱出(NMIの受理)を検出
    10. 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.

  • このサイトはリンクフリーです。
  • コメント欄は改行せず一行で入れてください。
  • スパム判定ではじかれた場合は、その後に「書込みました」旨のみのコメント等何らかの書き込み成功していただけると早く対応できます。
  • 非日本語対応ブラウザからは書き込みできません。