AVRとZ80でCP/Mの改良の変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
CP/Mの改良ではありません。「AVRとZ80でCP/M」の改良の話です。
!AKI-80が販売終了?
http://star.gmobb.jp/koji/data/AKI_01.jpg

ふと[秋月さん|http://akizukidenshi.com/catalog/default.aspx]のオンライン通販ページを見てみたら、[AKI-80|http://akizukidenshi.com/catalog/c/cz80/]が無い(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の切り分けにしている例)|http://star.gmobb.jp/koji/data/AKI_CIR.png]。これなら、ポートを入力に戻した後にWAITを開放するので、いくらクロックが上がっても問題ないはず。でもだいぶごちゃごちゃしてきたのでここはCPLDに置き換えることにしました。ついでにRD、WRのトライステートや、I/OのCSのデコードなど一切合財入れてしまいました。

[回路図(CPLD版)|http://star.gmobb.jp/koji/data/AKI_CPLD_CIR.png]

AVRとZ80でCP/MではSDカードを入れないで起動すると、AVR内のEEPROM(2kB)の内容をRAMにロードしてZ80をリセットする仕組みになっていましたが、AKI-80が32kBのROMを搭載する設計になっているので、32kBのシリアルEEPROMを外付けして同等にしました。なので起動優先順位は、SDカード、外付けEEPROM、AVR内EEPROMです。
!組み立て
http://star.gmobb.jp/koji/data/AKI_02.jpg [拡大|http://star.gmobb.jp/koji/data/AKI_02L.JPG] http://star.gmobb.jp/koji/data/AKI_03.jpg [拡大|http://star.gmobb.jp/koji/data/AKI_03L.JPG]  http://star.gmobb.jp/koji/data/AKI_04.jpg [拡大|http://star.gmobb.jp/koji/data/AKI_04L.JPG]
http://star.gmobb.jp/koji/data/AKI_05.jpg [拡大|http://star.gmobb.jp/koji/data/AKI_05L.JPG] http://star.gmobb.jp/koji/data/AKI_06.jpg [拡大|http://star.gmobb.jp/koji/data/AKI_06L.JPG]
http://star.gmobb.jp/koji/data/AKI_08.jpg [拡大|http://star.gmobb.jp/koji/data/AKI_08L.JPG]
AKI-80と同じサイズに基板をカットし、最近流行?のスタッキング基板になるようにコネクタを配置しました。秋月さんはCPLD [XC9536XL-10VQG44C|http://akizukidenshi.com/catalog/g/gI-05564/] が長らく在庫切れ。仕方なくPLCCタイプを千石さんで購入しました。ソケットも買っておいたのですが、やたらスペースをとるので使うのをやめ直配線にしました。

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

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ドライバモジュール|http://gataro-avr-ken.cocolog-nifty.com/blog/2009/07/lcd-4761.html]を基に改造して作りました。シリアルEEPROMへの書き込み手段を2つ提供しています。
*PCからダウンロード(sepromw.exe)
**AVRのPB7をLレベルにして起動した場合は書込みモードとなり、PCの書込みツールの制御下でHEXファイルをダウンロードできます。PCツール(Win32 コマンドライン)は[ChaNさん|http://elm-chan.org/index_j.html]の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焼きまでセルフでできます。
{{ref AKICPM20121111.zip,AVRとZ80でCP/Mの改良,ソフトウェアのダウンロード}}
AKI-80用ソフトウェアは変更なしで動きました。[実行画面|http://star.gmobb.jp/koji/data/AKI_EVI.jpg]
!CPLDの書込みについて
今回初めてCPLDを使いました。[西田ラヂオさんのページ|http://tulip-house.ddo.jp/digital/index.html]に、FT232で書き込めるUSBプログラマーがUPされており、これを使わせていただきました。[AE-UM232R|http://akizukidenshi.com/catalog/g/gK-01977/]等を持っている人はライター不要です。[USB CPLD Programmer|http://tulip-house.ddo.jp/digital/PROG_CPLD/index.html]
http://star.gmobb.jp/koji/data/AKI_10.jpg [拡大|http://star.gmobb.jp/koji/data/AKI_10L.JPG]
FT232RQを使ったAE-UM232Rにピン互換なUSB変換器を自作してCPLDに書き込む
!仕様のまとめ
http://star.gmobb.jp/koji/data/AKI_DIAG.png
ソースを見てもらえば分かるのですがまとめておきます。
今回は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の書き換えで変更可能)
http://star.gmobb.jp/koji/data/AKI_IOmap.png
!あとがき
CPLDを使ったことでだいぶ部品が減りました。こちらをベースにTK-80のレプリカを作ったらもっとスマートなものができそうですね。誰か作ってみませんか。

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

http://star.gmobb.jp/koji/data/AKI_07.jpg [拡大|http://star.gmobb.jp/koji/data/AKI_07L.JPG] http://star.gmobb.jp/koji/data/AKI_09.jpg [拡大|http://star.gmobb.jp/koji/data/AKI_09L.JPG]
!!関連リンク
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エミュレータ|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秒)
{{comment}}