やまどり
AKI80でLチカ

AKI80でLチカ

秋月電子で売られていたAKI80でLチカをしました。アセンブラのインストールからまとめています。

はじめに

そもそも、令和の時代にAKI80で遊ぼうとする人は少数派ではないかとは思いますが、伝説ともいえるZ80CPUを学んでおいて損はないのではないかと思い、数年前にAKI80を購入しましたが、ROMライターを入手することができず積んだままでした。

しかし、最近気が向いてRP-ROMなるエミュレータを作ったので、ようやくAKI80を動かせる環境が整いました。せっかくなので、まずは組み込みの定番「Lチカ」からはじめてみることにします。Z80アセンブリで書いたプログラムをRP-ROMに転送し、LEDをチカチカさせるまでの手順を紹介します。

RP-ROMについてはこちらで紹介しています。

https://www.yamadori.app/blog/rp-rom/

AKI80とは

  • 秋月電子通商が販売していたZ80CPUボードキット
  • Z80・RAM・ROM・I/Oポートが一体になったシンプルな構成
  • 当時の学習用・趣味用として人気だったらしい

環境

  • OS:Ubuntu24.04(wsl)
  • アセンブラ:z80asm

手順

AKI80のPA1にLEDを接続します。

アセンブラのインストール

今回はUbuntu 24.04(WSL)を使用しました。インストールはaptで一発です。

bash
sudo apt install z80asm

ソースファイルの作成

任意のディレクトリにアセンブリソースファイルを作成します。ここでは blink.asm という名前にします。

おすきなエディターで以下のコードを貼りつけます。

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コマンドでアセンブルします。

bash
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をもっと活用していきたいところです。