AVRとZ80でCP/Mの改良の更なる改良の検討です。 http://star.gmobb.jp/koji/data/AKICPM_HALT.JPG !別の方法を試す I/OにWAITを入れる正攻法の方式では、タイミングが間に合わないのでやや複雑なゲートが必要になりCPLDを使いました。できればこれを無くせないかと考えていたのですが、すごいアイデアを考え付く人がいるものです。[T_colonさんのTweet|https://twitter.com/T_colon/status/463225176868401152]。HALTとRESETを使う方法です。実際に[PSoC4|http://japan.cypress.com/products/psoc-4]でCP/Mを動かしていらっしゃいます。 私が製作したAKI-80のCP/Mマシン(AVRとZ80でCP/Mの改良)ならちょっとの変更で試すことができるのでやってみました。但しHALTからの復帰にRESETを使うとIFFが初期化されてしまい割り込みに影響するのでNMIでやることにしました。NMIならRETN命令で復帰すればIFFが保存されINT割り込みに影響を与えません。CP/Mだけなら関係ないですが本物のZ80を使うからにはINT割り込みは残しておきたいですからね。 [回路図|http://star.gmobb.jp/koji/data/AKICPM_HALT_CIR.png] {{ref AKI80CPM_HALT20140531.zip,部品を減らす工夫,ソフトウェアのダウンロード}} 問題なく動きましたが、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|http://www.cypress.com/?rID=92146]って異常に安くないですか。 !!関連リンク 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秒) {{comment}}