2013/06/24

Z80でLチカ(厳密にはロジアナチカ)

随分前に検討して、そのままペンディングしていたZ80ボード作成にとりかかりました
(久々にROMライターを取り出してきたのは、そういうことなのでした)。

最近はマイコンが進歩していて、普通に工作するだけならPICなりAVRなりで充分すぎるのですが、
  • 子供の頃に、PC-8001mkIIを持っていたので、懐古趣味で。
  • バスが外に出ているマイコンをいじってみようと思ったから。
  • できればCP/Mが動くところまで頑張ってみたい
    (パワフルなプロセッサにLinux、というのはいい加減当たり前なので)
といった理由で、Z80で遊んで見ることにしました。

まずは、某所でZ80(LH5080A)を入手しました。実は以前にZ84C008を購入していたのですが、変換基板に載せるのが面倒なので、新規購入してみました。まあ200円なので、正直いいかな、という感じです。TSOPの方はいつか使います :-)

ブレッドボード上でROMライターで焼いたROMとLH5080Aをつないでみました。

単純に、A0-A14同士、D0-D7同士をつなぎ、Z80のMREQ#、RD#をROMのCE#、OE#につなぐだけです。

だけです、と言ってもそれだけでも23本もあって結構面倒な上に、Z80側の入力ピン(INT#、NMI#、RESET#、BUSREQ#、WAIT#)は、忘れずにプルアップしないといけません。Z80のピンには内蔵プルアップ抵抗などという便利なものはありません。クロックも、最近のマイコンは内蔵しているものも多いわけですが、LH5080Aにはやはりそんなサービスはないので外からクロックを与えます。

というわけで、こんな感じになりました。いきなり配線お化けになっています。
手前がLH5080A、奥がEEPROM(27C256)、Z80の横にあるのが秋月で買った1MHzのクロックオシレータです。電源は秋月のDIP化基板を経由して、5VのACアダプタをつないでいます。


最初のプログラムとして、こんなのをROMに焼いてみました。



Z80 ASSEMBLER - ZASM VER 1.6
  0000                 ORG 0H
                     
  0000                 START:
  0000  210800                    LD HL, DATA
  0003  7E                        LD A, (HL)
  0004  23                        INC HL
  0005  46                        LD B, (HL)
  0006  18F8                      JR START
  0008                 DATA:
  0008  34                        DB 34H
  0009  48                        DB 48H
  000A                 END

ロジアナで、D0-D7、A0-A3、CLK、M1#、MREQ#、RD#をサンプルしてみました。
一応、動いてはいるようです。


ちなみにロジアナは、ご存知オプティマイズさんのカメレオンUSBベースのロジアナです。
結構前に購入したのですが、健気に頑張ってくれています。


とまあ、こういうふうに結論だけ書くと簡単に見えますが、結構ハマりました。
最大のハマりポイントは、EEPROMライターがバグっていて、アドレスの上位8bit/下位8bitが逆になって書き込まれていたことです。
つまり、0000H 0001H 0002H... でなくて、0000H 0100H 0200H ... とプログラムが書き込まれていたのでした。最初のLD命令(0x21)は読めてしまうので、リセット直後に割り込んでいたりするのだろうか?などなど、色々悩んでしまいましたが、蓋を開けてみるとそういうことなのでした。
0001Hで0xFF (RST)を踏んでしまっているのに気づくまでは、中々解決出来ませんでした。

0 件のコメント: