部品を減らす工夫

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割り込みは残しておきたいですからね。

回路図

ソフトウェアのダウンロード(720)

問題なく動きましたが、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秒)
お名前: コメント:

トップ メニュー

This web page is described in Japanese, but you can read in English by translation site.

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