(久々に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アダプタをつないでいます。
手前が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 件のコメント:
コメントを投稿