部品を減らす工夫
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割り込みは残しておきたいですからね。
ソフトウェアのダウンロード(739)
問題なく動きましたが、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秒)
トップ メニュー
This web page is described in Japanese, but you can read in English by translation site.