思い出の40年前のPCで、ビジュアルノベルを動かす
Z80——1976年にZilog社が開発した伝説的な8ビットCPU。 クロック3.58MHz、64KB RAM。画像解像度はせいぜい384×256ドット程度。 現代のスマートフォンと比べれば、約100万倍以上の性能差があります。
VN Studio は、この究極の制約環境でもビジュアルノベルを動かすことを目指しています。 しかも Unity 版と同じスクリプトから。
WPF エディタで書いたスクリプトが、Unity でも Z80 でも動く。
それが VN Studio の「Write Once, Play Anywhere」です。
ScriptCompiler — .scn → .VNB バイトコード変換
Z80 CPU はテキストベースのスクリプトを直接解釈するには遅すぎます。
そこで、WPF Editor に搭載された ScriptCompiler が、
VNScript(.scn)をコンパクトなバイトコード(.VNB)に変換します。
# VNScript (テキスト)
bg school
しるふぁ "おはよう"
wait_input
# ↓ ScriptCompiler が変換
# VNB (バイトコード)
03 73 63 68 6F 6F 6C 00 # BG "school\0"
01 ... UTF-8 text ... 00 # SAY (ヌル終端)
02 # WAIT_INPUT
FF # END
VM Opcodes
Z80 ランタイムの仮想マシンが解釈するオペコードは最小限に抑えて設計を進めています:
0x00NOP — 何もしない0x01SAY — 文字列表示 + 入力待ち0x02WAIT_INPUT — キー入力待ち(カーソル点滅)0x03BG — 画像読み込みと表示0x06JUMP — スクリプトジャンプ0xFFEND — プログラム終了
VRAM と画像表示 — フォーマット変換
Z80アセンブラを駆使し、VDPコマンドをうまく活用しながら、VRAM にピクセルデータを書き込むことで、高速な画像表示を実現します。
元画像(PNG/JPEG)は、WPF Editor 側で以下のような変換を経て Z80環境で表示可能な形式になります:
- リサイズ — 384 × 256 ドットに変換
- (Floyd-Steinberg ディザリングなど) — Z80 環境の 16色/256色に減色
- 出力 — 1ピクセル1バイトの生データ
ディザリングなどのこだわりをもったアルゴリズムにより、限られた色数でも元画像の魅力を損なわないように。
美咲フォント — UTF-8 日本語表示
Z80 環境で日本語を表示するために、美咲フォント(8×8 ビットマップフォント)を採用したい。 Unicode ベースのこのフォントを最適化し、漢字VRAMのないZ80環境でも windowsの日本語テキストをそのまま表示可能なUTF-8 デコーダを新規開発しました。
// UTF-8 デコード処理(Z80 C 実装の概要)
// 1バイト文字: 0xxxxxxx → ASCII
// 2バイト文字: 110xxxxx 10xxxxxx → ラテン拡張
// 3バイト文字: 1110xxxx 10xxxxxx 10xxxxxx → 日本語
デコードされた Unicode コードポイントから美咲フォントのグリフを検索し、 VRAM 上にピクセル単位で描画します。
バンク切り替え
Z80 の 64KB メモリ空間では、フォントデータだけで大きな領域を消費します。 そこで 16KB×4つのバンク切り替えにより、最大4MBのメモリ空間を確保。 フォントデータを独立したメモリセグメントに配置しています。
- Segment 0 — プログラムコード + スタック
- Segment 1 — フォントインデックス
- Segment 2-3 — フォントグリフデータ
まとめ — 制約の中で輝く創造性
Z80 版の開発は、VN Studio の哲学——「制約が創造性を解放する」—— を体現するとともに、「私が昔あこがれた、Z80でのゲーム作りを今ここで」を実現するプロジェクトです。
16色/256色、64KB メモリ、3.58MHz の CPU。 これらの制約を乗り越え、ぜひあなたのクリエイティビティを解き放ちましょう。
そして何より——40年前のハードウェアで、最新のツールで書かれた物語が動く。 その事実そのものが、あらゆる未来の可能性を証明しています。