2025-06-07
Z80(コンピューター)とVDP(ビデオプロセッサ)とPPI(パラレルインターフェイス)による削ぎ落としたマシンを「MIX」と呼ぶことにします。

MSXには画面表示などのBIOS(API的なもの)が用意されていますが、I/Oポートを通じてVDPと直接お話することも許されているそうです。で、あれば、BIOSを一切使わないクリーンなコードで作れば、MIXでもMSXでも動くアプリができるはず。


できました!
no-bios.asmZMAでアセンブルし、生成された no-bios.rom を設定した NO-BIOS_JP.xml をopenMSXに登録し、-machine オプションに指定して、起動しています。(サンプルプログラムの使用フォントは IchigoJam-font CC BY IchigoJam!)

リセット時、アドレス0から動き始めるZ80くん。割り込み用発生時のジャンプ先を設定し、パラレルインターフェイス(PPI)を使って、64KBのメモリ空間を4分割した各ページを、ROMカセットに32KB、RAMに16KB割り当てて、ROMカセットの起動アドレスへジャンプ!

フォントパターンも自前で用意してもらうスタイルなので、NO-BIOSのZ80 ZMAニーモニックのソースコードは35行しかありません。

; NO-BIOS org 0x0000 ; 割り込み禁止 di ; I/O初期化 ; PPI 8255 (PortA: slot, PortB: in keyboard, PortC: out keyboard and caps) ld a, 0b1_00_0_0_0_1_0 ; PortA: out, PortB: in, PortC: out out [0xab], a ; パラレルポート8255(PPI)のモード設定 ; 各スロットのページ設定 (NO-BIOS/ROM1-1/ROM1-2/RAM) ld a, 0b11_01_01_00 ; P3=3, P2=1, P1=1, P0=0 out [0xa8], a ; パラレルポート ポートA で制御 ; スタックポインタ初期化 ld sp, 0xf380 ; 0xf380-0xffff の3200byteはシステム予約 ; タイマー割り込みの初期設定 H_TIMI = 0xfd9f ld hl, H_TIMI ld [hl], 0xc9 ; 何もせずリターン ; 割り込み許可 ei ; ROMの実行アドレスへジャンプ ld hl, [0x4002] push hl ret ; 割り込み処理 space 0x38 - $ jp H_TIMI

C-BIOSのようにMSX互換を目指すもよし、何か特殊なBIOSを持つZ80マシンにするもよし。
理想のパソコンづくりを楽しみましょう!


「no-bios on GitHub」

links
- MIX - 超軽量MSXエミュレーター with Z80.js

Tweet
クリエイティブ・コモンズ・ライセンス
本ブログの記事や写真は「Creative Commons — CC BY 4.0」の下に提供します。記事内で紹介するプログラムや作品は、それぞれに記載されたライセンスを参照ください。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / 「一日一創」画像 / RSS