AVRとZ80でCP/Mの改良

CP/Mの改良ではありません。「AVRとZ80でCP/M」の改良の話です。

AKI-80が販売終了?


ふと秋月さんのオンライン通販ページを見てみたら、AKI-80が無い(2012年11月現在。スーパーAKIは販売中)。CPUはまだ在庫があるようですが、さすがにもう再販しないでしょう。TMPZ84C015は、周辺が素直に一通り(SIO,PIO,CTC)内蔵されているところがよかったんですが。数年前に1個買ってあったので、ちょっと動かしてみたくなりました。ROMは面倒なので、AVRとZ80でCP/Mと同じ方法で動かすことにしました。

AVRとZ80でCP/Mではとにかく動かすことだけ考えた端折った回路なので高クロックには対応できず、試したところ6MHzまででした(ファームを少し変更するとどうにか8MHzでも動く)。AKI-80の最高クロックは12MHzですが、とりあえず10MHzで動かすことを目標に改良を試みました。

高クロックに対応できなかった原因の考察と改善策

私は測定器はオシロスコープしか持っていないので正確には確認できておらず推測ですが、Z80がAVRの仮想I/Oからの入力(AVRのデータポートが出力状態)をした直後、AVRはデータポートを入力に戻すわけですが、それが間に合わず、次の命令フェッチでAVRのデータポートの値をOPコードとして読み込んで誤動作しているようです。

ならばM1を取り込んで、仮想I/Oアクセスの直後にもう一発WAITが入るようにしたのがこの回路(A4を仮想I/Oと実装I/Oの切り分けにしている例)。これなら、ポートを入力に戻した後にWAITを開放するので、いくらクロックが上がっても問題ないはず。でもだいぶごちゃごちゃしてきたのでここはCPLDに置き換えることにしました。ついでにRD、WRのトライステートや、I/OのCSのデコードなど一切合財入れてしまいました。

回路図(CPLD版)

AVRとZ80でCP/MではSDカードを入れないで起動すると、AVR内のEEPROM(2kB)の内容をRAMにロードしてZ80をリセットする仕組みになっていましたが、AKI-80が32kBのROMを搭載する設計になっているので、32kBのシリアルEEPROMを外付けして同等にしました。なので起動優先順位は、SDカード、外付けEEPROM、AVR内EEPROMです。

組み立て

拡大 拡大 拡大
拡大 拡大
拡大
AKI-80と同じサイズに基板をカットし、最近流行?のスタッキング基板になるようにコネクタを配置しました。秋月さんはCPLD XC9536XL-10VQG44C が長らく在庫切れ。仕方なくPLCCタイプを千石さんで購入しました。ソケットも買っておいたのですが、やたらスペースをとるので使うのをやめ直配線にしました。

AKI-80本体にも少しだけ改造が必要です。ROMとRAMを使わないので、RAMを無効にするためパターンを一箇所だけカットします。やり方は、古典電脳物語(Office Tetsuさん)のページに詳しく書かれています。
AKI-80の改造方法 (戻し方も書いてあるので安心)

AKI-80のバスコネクタには2つほど空きピンがあるので、ひとつをAVRからのCPUクロック出力に、もうひとつをCPLDから外付けI/O一個用のCS出力に割り当てています。なので上に載せるCPU基板はAKI-80でなくてもZ80互換なCPUなら何でも載せられ、しかもI/Oデバイス1個を載せるだけならプルアップ抵抗とパスコンだけで済むようになっています。[未検証]

ソフトウェア

シリアルEEPROMを追加した分の変更以外はほとんどAVRとZ80でCP/Mと同じです。シリアルEEPROMのアクセスモジュールは、がた老さんのI2CミニLCDドライバモジュールを基に改造して作りました。シリアルEEPROMへの書き込み手段を2つ提供しています。

  • PCからダウンロード(sepromw.exe)
    • AVRのPB7をLレベルにして起動した場合は書込みモードとなり、PCの書込みツールの制御下でHEXファイルをダウンロードできます。PCツール(Win32 コマンドライン)はChaNさんのAVRの書込みツールを基に改造して作りました。sepromw.iniファイルに予めCOMポートNo.を設定しておくことができます。
  • Z80上のRAMからロード(EROMW.COM)
    • 書込指示専用のI/Oポートを新設しています。RAMの2000番地から1kB単位で32kBまで任意のサイズの内容を書込むことができます。例えば、CP/M上で0番地スタートのプログラムを作成してHEXファイルを生成し、DDTで2000番地からにずらしてRAMに配置します。この状態で書込み用のI/Oポートを叩くと、後はAVRが全部やってくれます。CP/M上での書き込みソフト(EROMW.COM)を作りました。これにより、端末こそ使いますがソフト作成からROM焼きまでセルフでできます。

ソフトウェアのダウンロード(860)
AKI-80用ソフトウェアは変更なしで動きました。実行画面

CPLDの書込みについて

今回初めてCPLDを使いました。西田ラヂオさんのページに、FT232で書き込めるUSBプログラマーがUPされており、これを使わせていただきました。AE-UM232R等を持っている人はライター不要です。USB CPLD Programmer
拡大
FT232RQを使ったAE-UM232Rにピン互換なUSB変換器を自作してCPLDに書き込む

仕様のまとめ


ソースを見てもらえば分かるのですがまとめておきます。
今回はI/O内蔵のZ80互換CPUに対応するためI/Oアドレスを大幅に変更しています。(CP/Mのディスクイメージは作り直しになります) → CP/Mディスクイメージ作成手順メモ

起動 (シーク順序は上から)
デバイス 動作
SDカード カードの先頭128バイトをRAMの2000番地から配置し、0番地に2000番地へのジャンプコードを設定してZ80をリセット
外付EEPROM EEPROMの内容をRAMの0000番地から配置し、Z80をリセット
AVR内EEPROM EEPROMの内容をRAMの0000番地から配置し、Z80をリセット

AVR仮想I/Oポート (アドレスはヘッダーファイルで変更可能。I/OはAVRから見て)
名称 アドレス I/O 設定値の意味、動作
CON_STS 80 O シリアル入力ステータス。入力あり:FF、なし:0
CON_IN 81 O シリアル入力
CON_OUT 82 I シリアル出力
TRACK_SEL_L A0 I トラックNo.LOWセット
TRACK_SEL_H A1 I トラックNo.HIGHセット
SECTOR_SEL A2 I セクタNo.セット
ADR_L A4 I SDカードのデータ授受バッファ(128バイト)の先頭アドレスLOWセット
ADR_H A5 I SDカードのデータ授受バッファ(128バイト)の先頭アドレスHIGHセット
EXEC_DMA A6 I SDカードのR/W実行。1:リード、2:ライト
DMA_RS A7 O DMAの実行結果。0:OK、1:NG
ROM_SAVE A8 I 書込みサイズ(kB単位)を指定し、RAMの2000番地以降を外付けEEPROMに書込実行する。

I/Oマップ (CPLDの書き換えで変更可能)

あとがき

CPLDを使ったことでだいぶ部品が減りました。こちらをベースにTK-80のレプリカを作ったらもっとスマートなものができそうですね。誰か作ってみませんか。

[2014.05.31] さらに部品を減らす検討をしています。→ 部品を減らす工夫

拡大 拡大

関連リンク

CPLD
http://www.piclist.com/images/www/hobby_elec/cpld.htm
http://homepage3.nifty.com/ARTWEB/cpld1.htm
VHDL
http://www.picfun.com/vhdl00.html
http://www.arch.cs.kumamoto-u.ac.jp/project/kite/3days/explain/VHDL/vhdl_tutorial.html
マイコンPCB [PCB-ATMEGA128](ATmega64/128対応)
http://www.aitendo.com/product/2837
当サイト内
AVRとZ80でCP/M
AVRとZ80でTK-80
AVRビデオ端末の製作
2716用ROMライターの製作
mbed(ST Nucleo F401RE)版CP/Mエミュレータ
部品を減らす工夫
その他のAVR関連の製作
AVRパラレルライターの製作
AVR学習リモコンの製作
Mega64でLED GAME


  • TMPZ84C015販売してるよ - 名無しさん (2014年07月05日 15時48分06秒)
  • はい、秋月電子さんで保守用在庫限りで販売されています。AKI-80が販売終了になったのはCPUの在庫数が製造ロットを割ったためと推測しています。この回路はZ80互換なCPUに適用できるので、TMPZ84C015でなくても構いません。 - 管理人 (2014年07月05日 23時45分00秒)
  • 2017.1.末 AKI80基板在庫復活したようです 在庫クラスAAA - Z80 (2017年02月04日 22時35分42秒)
  • 基板単体だけと思ったら部品付きも復活してますね。 - 管理人 (2017年02月05日 03時05分35秒)
お名前: コメント:

トップ メニュー

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

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