spacegamex64 - UEFI向けアセンブリで再現した「Zaxxon」
概要
spacegamex64 は、クラシックなアーケードタイトル「Zaxxon」を x86_64 プラットフォーム向けに UEFI アプリケーションとして再現した小さなプロジェクトです。コードは主に 64 ビットアセンブリ(ML64 用)で書かれており、生成物は EFI_APPLICATION サブシステムの BOOTX64.EFI。ビルド手順は README に記載の通り ml64.exe でアセンブルし、link.exe で /SUBSYSTEM:EFI_APPLICATION と /ENTRY:EFI_MAIN を指定してリンクします。GPLv3 ライセンスで公開されており、グラフィック資産やソースはリポジトリに含まれます。実行は UEFI 環境(実機または OVMF 等のエミュレータ)で行います。
リポジトリの統計情報
- スター数: 31
- フォーク数: 1
- ウォッチャー数: 31
- コミット数: 3
- ファイル数: 3
- メインの言語: Assembly
主な特徴
- UEFI アプリケーション(BOOTX64.EFI)として動作するアセンブリ製ゲーム。
- Microsoft Macro Assembler (ml64) と Visual C++ Linker を使用するビルドフロー。
- グラフィック資産を含むシンプルなディレクトリ構成。
- GPLv3 ライセンスでソースを公開。
技術的なポイント
本プロジェクトは「アセンブリで書かれた UEFI アプリケーション」を学ぶ教材として興味深い点が多くあります。UEFI プラットフォームでは通常の OS 環境と異なり、C ランタイムや標準ライブラリが存在しないため、エントリポイント(EFI_MAIN)やスタック操作、プロトコル呼び出しを低レベルで扱う必要があります。x86_64 の呼び出し規約(Microsoft x64 calling convention)に従い、引数の受け渡しやスタックのアライメントを厳密に扱う実装が求められます。リンク時に /SUBSYSTEM:EFI_APPLICATION を指定することで PE/COFF ヘッダが EFI アプリ用に整形され、/ENTRY:EFI_MAIN によりリンカが指定したラベルをプログラムの開始点として扱います。
グラフィックス面では、UEFI 環境で画面描画を行うには GOP(Graphics Output Protocol)などのファームウェア提供 API を利用するのが一般的です。本リポジトリは graphics ディレクトリを含むため、スプライトやタイルデータをバイナリで持ち、フレームバッファへ直接書き込む方式で描画している可能性が高いです。アセンブリ実装では、ピクセル描画ループやブリット処理を最適化することで処理負荷を抑え、限られた実行環境でのスムーズな描画を実現します。
ビルド手順はシンプルですが、Windows 上の開発環境を前提としており、ml64.exe と link.exe を使う点に注意が必要です。生成した BOOTX64.EFI を実行するには、UEFI 対応のファームウェアか OVMF のようなエミュレータが必要で、通常は FAT32 の EFI システムパーティションに EFI/BOOT/BOOTX64.EFI として配置するか、エミュレータの EFI ローダにマウントして起動します。加えて、UEFI アプリではメモリ確保やタイマ、入力(キーボード)処理もファームウェアプロトコル経由で行うため、これらの扱い方を学べる点も本プロジェクトの魅力です。
全体として、低レイヤーの x86_64 アセンブリ、PE/COFF フォーマット、UEFI の実行環境、そしてシンプルな 2D 描画処理といった複数の技術領域を横断して把握できる教材的リポジトリといえます。
プロジェクトの構成
主要なファイルとディレクトリ:
- README.md: file
- graphics: dir
- space.s: file
まとめ
UEFI と x86_64 アセンブリの学習に最適な、シンプルで実践的な再実装プロジェクト。