Z80でLチカ!
思ったより簡単に動いてくれました。手こずったのはICのGNDつなぎ忘れなどの凡ミスばかり。
Lチカプログラムはとてもシンプルです。
PIOAD: equ 0 PIOAC: equ 1 org 0 ; ; PIO初期設定 ld a,11001111b ;ビットモードで動作 out PIOAC,a ld a,00001111b ;出力4bit/入力4bit out PIOAC,a ; ; LEDチカチカ ld a,0 ld b,0 BLINK: inc a out PIOAD,a DELAY: inc b jp nz,DELAY jp BLINK
これでPIOのAポート最上位ビットにLEDを繋ぐと秒間5回くらいの速度でチカチカします。せっかくなので計算してみましょうか。
000C: 3C [ 4] BLINK: inc a 000D: D300 [15] out PIOAD,a 000F: 04 [ 4] DELAY: inc b 0010: C20F00 [14|14] jp nz,DELAY 0013: C30C00 [24] jp BLINK
Aレジスタが1回INCするのに15+14*256+10=3609クロック。この256倍が1回の明滅の周期で、923904クロック。これに1クロック=250nsをかけて秒に直すと、230976000/1000000000=0.230976秒。秒間約4.33回チカで体感に近いです。手持ちのテスターでLチカ部分の周波数を計ると…
バッチリですね!
今回、一番の壁はZ80PIOの扱いだと思ってたんですが、さすがファミリLSI。回路はCPUと直結、プログラムはたかだか4行の設定で何事もなく動いてくれました。次はRAMを組み込むのが順当でしょう。そこまでならギリギリ、ブレッドボードで組めそうです。
あ、Lチカの喜びで忘れてましたが、電源投入時の動作に難があったんでした。写真の回路ではリセットを何回かポチポチしないとCPUが動き始めないのです。さすがに無視できない問題なので、RAMに取り組む前に調査したいと思います。