電脳伝説さん(@vintagechips)のEMUZ80が出力するZ80 CPU制御信号をメザニンボードで組み替え、Z80と64kB RAMを動作させることができます。
RAMの制御信号とIOアクセスのWAIT信号をPICのCLC(Configurable Logic Cell)機能で作成しています。
電源が入るとPICはZ80を停止させ、ROMデータをRAMに転送します。データ転送完了後、バスの所有権をZ80に渡してリセットを解除します。
LH0080BとPIC18F47Q43の組み合わせで動作確認しています。
動作確認済みCPU
SGS Z8400B1 2.5MHz
SHARP LH0080 2.5MHz
SHARP LH0080B 6MHz
Zilog Z84C0010PEG 10MHz
このソースコードは電脳伝説さんのmain.cを元に改変してGPLライセンスに基づいて公開するものです。
https://github.com/satoshiokue/MEZ80RAM
MEZ80RAM専用プリント基板 - オレンジピコショップ
https://store.shopping.yahoo.co.jp/orangepicoshop/pico-a-062.html
https://github.com/satoshiokue/MEZ80RAM/blob/main/MEZ80RAM.pdf
EMUZ80で配布されているフォルダemuz80.X下のmain.cと置き換えて使用してください。
- emuz80_z80ram.c
クロック周波数を5.6MHz以下にする際はファームウェアの151-152行目を確認してください。
//while(!RA0); // /IORQ <5.6MHz
while(!RD7); // /WAIT >=5.6MHz
Z80がIOアドレスのデータリードを完了するタイミングに適した信号を選択してください。
両方のwhile文をコメントアウトすると16MHzまで動作するようです。
Memory
RAM 0x0000 - 0xFFFF 64kバイト
I/O
通信レジスタ 0x00
制御レジスタ 0x01
EMUZ80技術資料8ページにしたがってPICに適合するファイルを書き込んでください。
またはArduino UNOを用いてPICを書き込みます。
https://github.com/satoshiokue/Arduino-PIC-Programmer
PIC18F47Q43 SuperMEZ80_xMHz_Q43.hex
PIC18F47Q83 SuperMEZ80_xMHz_Q8x.hex
PIC18F47Q84 SuperMEZ80_xMHz_Q8x.hex
インテルHEXデータを配列データ化して配列rom[]に格納すると0x0000に転送されZ80で実行できます。 ROMデータは最大32kBまで転送できますが、現行のファームウェアは8kバイト(0x0000-0x1FFF)転送しています。
思い入れのあるCPUを動かすことのできるシンプルで美しいEMUZ80を開発された電脳伝説さんに感謝いたします。
そしてEMUZ80の世界を発展させている開発者の皆さんから刺激を受けてZ80Bを6MHzノーウェイトで動かすところまで来られました。
EUMZ80はZ80CPUとPIC18F47Q43のDIP40ピンIC2つで構成されるシンプルなコンピュータです。
電脳伝説 - EMUZ80が完成
https://vintagechips.wordpress.com/2022/03/05/emuz80_reference
EMUZ80専用プリント基板 - オレンジピコショップ
https://store.shopping.yahoo.co.jp/orangepicoshop/pico-a-051.html
Version 0.2 2023/4/19
起動時にFirmwareの対象基板(MEZ80RAM)とクロック周波数を表示
初期化中にZ80の/RFSHと衝突していたGPIO RD6の設定を入力に変更