はじめに
そもそも、令和の時代にAKI80で遊ぼうとする人は少数派ではないかとは思いますが、伝説ともいえるZ80CPUを学んでおいて損はないのではないかと思い、数年前にAKI80を購入しましたが、ROMライターを入手することができず積んだままでした。
しかし、最近気が向いてRP-ROMなるエミュレータを作ったので、ようやくAKI80を動かせる環境が整いました。せっかくなので、まずは組み込みの定番「Lチカ」からはじめてみることにします。Z80アセンブリで書いたプログラムをRP-ROMに転送し、LEDをチカチカさせるまでの手順を紹介します。
RP-ROMについてはこちらで紹介しています。
AKI80とは
- 秋月電子通商が販売していたZ80CPUボードキット
- Z80・RAM・ROM・I/Oポートが一体になったシンプルな構成
- 当時の学習用・趣味用として人気だったらしい
環境
- OS:Ubuntu24.04(wsl)
- アセンブラ:z80asm
手順
AKI80のPA1にLEDを接続します。
アセンブラのインストール
今回はUbuntu 24.04(WSL)を使用しました。インストールはaptで一発です。
sudo apt install z80asmソースファイルの作成
任意のディレクトリにアセンブリソースファイルを作成します。ここでは blink.asm という名前にします。
おすきなエディターで以下のコードを貼りつけます。
; AKI-80 Lチカ (10MHz)
; PIO ポートA bit1 (PA1) にLED接続
; PIO アドレス: 1CH=データ, 1DH=コントロール
ORG 0000H
RESET:
LD SP, 0FFFFH
; PIO ポートA 初期化(出力モード)
LD A, 0CFH ; モード3(ビット制御モード)
OUT (1DH), A ; コントロールポートへ
LD A, 00H ; 全ビット出力(0=出力)
OUT (1DH), A ; I/O方向レジスタへ
MAIN:
LD A, 02H ; LED ON
OUT (1CH), A
CALL DELAY
LD A, 00H ; LED OFF
OUT (1CH), A
CALL DELAY
JP MAIN
; ウェイト(10MHz、約2秒)
DELAY:
LD D, 06H
DOUT:
LD BC, 0FFFFH
DIN:
DEC BC
LD A, B
OR C
JR NZ, DIN
DEC D
JR NZ, DOUT
RETアセンブル
z80asmコマンドでアセンブルします。
z80asm blink.asm -o blink.bin成功すると blink.bin というバイナリファイルが生成されます。エラーが出た場合はソースの記述を見直してください。
blink.binをROMに書き込んでください。
動作確認
電源を投入すると、プログラムがアドレス0000Hから実行されます。正しく接続・転送できていれば、LEDが約2秒間隔でチカチカするはずです。
リセットをしてもうまく動かない場合は以下を確認してみてください。
- LEDの極性(アノード・カソード)が正しいか
- PIOのアドレスがAKI80の設定と一致しているか(デフォルトは1CH/1DH)
- RP-ROMの転送が正常に完了しているか(RP-ROMを使う場合)
おわりに
今回は、AKI80でZ80アセンブリを使ったLチカに挑戦しました。ROMライターの代わりにRP-ROMを活用することで、長年積んでいたAKI80をようやく動かすことができました。
Z80アセンブリは現代のプログラミング言語と比べると非常に低レベルですが、だからこそCPUの動作原理やI/Oポートの制御、タイミングの調整といったハードウェアの基礎を肌で感じることができます。DELAYルーチンのウェイト時間をクロック周波数から逆算して求めるような作業は、現代のマイコン開発ではなかなか経験できない貴重な体験です。
「令和にZ80」と聞くと時代錯誤に思えるかもしれませんが、基礎を丁寧に学ぶ素材としてZ80はいまでも十分に価値があります。シンプルな命令セットとわかりやすいアーキテクチャは、コンピュータの仕組みを深く理解したい人にとって最良の教材のひとつではないでしょうか。
次回は、スイッチ入力の読み取りやシリアル通信など、より実用的なプログラムにも挑戦してみたいと思います。RP-ROMのおかげで開発サイクルが格段に楽になったので、AKI80をもっと活用していきたいところです。