Vgszero
SUZUKI PLAN - Video Game System Zero
Install / Use
/learn @suzukiplan/VgszeroREADME
Video Game System - Zero 
Language: Japanese, English

Video Game System - Zero (VGS-Zero) は RaspberryPi Zero 2W のベアメタル環境で動作するゲーム機です。
本リポジトリは、VGS-Zero の本体コード、配布イメージ、SDK、パソコン(Linux または macOS)で動作するエミュレータを提供します。
Table of Content
- VGS-Zero Feature ... スペック概要
- First Step Guide ... 導入ガイド(PC)
- How to Execute ... RaspberryPi Zero 2W での実行方法
- config.sys ... 動作設定ファイル
- game.pkg ... ゲーム実行形式ファイル
- Game Development Tools ... 開発ツール(SDK)一覧
- Programming Guide ... プログラム開発ガイド
- How to Sell Your Game ... セールス・ガイド
- Examples ... サンプル・プログラム一覧
- License ... ライセンス情報
VGS-Zero Feature
- CPU: Z80 16MHz (16,777,216Hz)
- Z80 アセンブリ言語でプログラミング可能(Programming Guideを参照)
- C言語 (SDCC) でもプログラミング可能(Programming Guideを参照)
- ゲーム実行形式ファイル(game.pkg)は最大 128 メガビット(100メガショック!)
- 最大 2MB (8kb × 256banks) のプログラムとデータ (※音声データを除く)
- RAM サイズ 16KB (PV16相当!)
- 拡張 RAM サイズ 2MB
- 拡張 RAM のバンク切り替え無しでの I/O に対応
- セーブ機能に対応
- 拡張 RAM セーブ機能に対応
- 128 個のユーザ定義 I/O を定義可能
- VDP; VGS-Video (映像処理)
- VRAM サイズ 16KB (TMS9918A 相当!)
- 解像度: 240x192 ピクセル (TMS9918A より少しだけ狭い!)
- 16 個の 16 色パレットに対応(32,768 色中 256 色を同時発色可能)
- 8x8 ピクセルのキャラクタパターンを最大 256 枚 (8KB) 定義可能
- BG, FG のネームテーブルサイズ: 32x32 (256x256 ピクセル)
- ハードウェアスクロール対応(BG, FG 各)
- 最大 256 枚のスプライトを表示可能(水平上限なし)
- BG, FG, スプライト にそれぞれ異なるキャラクタパターンを設定できる Direct Pattern Mapping 機能に対応(最大 768 枚のキャラクターパターンを同時に表示可能)
- BG, FG は最大 1024 パターンを表示できるモード に対応
- スプライトに複数のキャラクタパターンを並べて表示できるハードウェア機能(OAM Pattern Size)を提供
- スプライトの OAM 毎に異なるバンクを指定できるハードウェア機能(OAM Bank)を提供
- スプライトの座標系を 16bit にすることができる OAM16 を提供
- DMA (Direct Memory Access)
- HAGe (High-speed Accumulator for Game)
- BGM
- SE (効果音)
- 入力機器:
- USB ジョイパッド
- 8ボタン形式(カーソルキー、A/B、START/SELECT)のジョイパッドをサポート
- config.sys でボタン割当をカスタマイズ可能
- GPIO ジョイパッド
- RaspberryPi の GPIO に直接接続するジョイパッドをサポート
- USB ジョイパッド
First Step Guide
VGS-Zero のゲーム開発環境の推奨 OS は Ubuntu Desktop です。
より正確には、2013 年モデルの MacBook Air へ Ubuntu Desktop をインストールした環境 が 不自由なく快適にゲームの開発に専念できる環境のベースライン です。
VGS-Zero ならゲームを開発するのに強い PC は必須ではありません。
以下、何もインストールされていない Ubuntu Desktop で VGS-Zero の Hello, World! (Z80) を動かすまでの手順を案内します。
# ツールチェインのビルドに必要なミドルウェアをインストール
sudo apt update
sudo apt install build-essential libsdl2-dev libasound2 libasound2-dev
# VGS-Zeroのリポジトリをダウンロード
git clone https://github.com/suzukiplan/vgszero
# example/01_hello-asm のディレクトリへ移動
cd vgszero/example/01_hello-asm
# ビルド & 実行
make
上記の手順を実行すれば VGS-Zero の SDL2 版エミュレータで Hello, World! が起動します。

VGS-Zero で扱えるグラフィックスの描画、効果音の作成、音楽の作曲などに必要なツールセットについては Game Development Tools の章で詳しくリストアップしています。
How to Execute
実機(RaspberryPi Zero 2W)でゲームを動かすための手順を記します。
Required Hardware
以下のハードウェアが必要です。
- RaspberryPi Zero 2W
- HDMI ケーブル (mini HDMI Type C → HDMI Type A)
- USB ジョイパッド(D-Pad+A/B+Start/Select)+ 変換アダプタ
- USB 電源
- micro SD カード
- 最大 20MB 程度の空き容量が必要です(ゲーム本体: 最大16MB、ファームウェア: 約4MB)
- テレビなど(以下の条件のもの)
- HDMI入力対応
- リフレッシュレート60Hz
- 解像度 480x384 ピクセル以上
- オーディオ出力対応
(Joypad)
VGS-Zero は、カーソル(D-PAD)、Aボタン、Bボタン、SELECTボタン、STARTボタンの8ボタン式 USB ジョイパッドによる入力のみサポートしています。

RaspberryPi Zero 2W に接続する USB ジョイパッドのボタン割当(key config)は、config.sys ファイルにより利用者が自由にカスタマイズできます。
PC(SDL2 版)のキー割当は次の通りです:
- D-Pad: カーソルキー
- A ボタン:
Xキー - B ボタン:
Zキー - START ボタン:
SPACEキー - SELECT ボタン:
ESCキー
プログラムからは 0xA0 ポートの入力 により入力状態を取得できます。
(Supported USB Joypad)
VGS-Zero での USB ジョイパッドのサポートリストを示します。
|製品名|サポート|補足事項|
|:-|:-:|:-|
|HXBE37823 (XINYUANSHUNTONG)|OK|完全に動作します|
|suily USBコントローラー NESゲーム用(有線)|OK|完全に動作します|
|Elecom JC-U3312シリーズ|OK|完全に動作します|
|HORI リアルアーケードPro V3SA (PS3用)|OK|完全に動作します|
|HORI グリップコントローラーアタッチメントセット for Nintendo Switch|△|十字キーが使用不可|
|ロジクール (ロジテック) F310|NG|接続不可|
|Kiwitata gamepad|NG|Circleが非サポート|
|Xbox 360 wired gamepad clone|NG|Circleが非サポート|
標準 HID 準拠のジョイパッド(ゲームコントローラー)であれば動作できる可能性が高いです。 パソコンでの利用に際して専用のデバイスドライバを必要とするものや、XInput対応のゲームコントローラー(比較的新しいゲームコントローラー)は、全く認識できなかったり、認識できても一部のキー入力が効かないものが多い傾向があるので非推奨です。 SUZUKIPLAN が主に使用している製品は Elecom JC-U3312 と HXBE37823 です。Elecom JC-U3312 は EOL (製造終了) の商品のため入手が難しいかもしれません。HXBE37823 は Aliexpress に 300 円前後の安価なものが沢山あり、Amazon でも購入可能です。(ただし、HXBE37823 は上下左右の移動をする時に斜め入力が入ってしまうものがあり、感度の品質面に難があるかもしれませんが、Battle Marine のように左右に移動方向を絞ったゲームであれば快適にプレイできます)
(GPIO Joypad)
RaspberryPi Zero 2W の GPIO に次のピンアサインで直接ボタンを接続することもできます。
| Button | GPIO | |:------:|:----:| | Up | 22 | | Down | 5 | | Left | 26 | | Right | 6 | | A | 24 | | B | 25 | | Start | 4 | | Select | 23 |
RaspberryPi Zero 2W Pin Map

※ GND の接続も必要です
GPIO 接続に関する詳細は こちらの記事 をご参照ください。
VGS-Zero 対応のジョイスティック・ジョイパッドは、企業(商業ハード)or 個人(同人ハード)に関係なく SUZUKIPLAN からのライセンス不要で自由に開発・販売していただくことが可能です。(ライセンスは不要ですがサポートもしないスタイルなので、販売に伴う消費者へのサポート対応等は販売元の責任で行ってください)
USB ジョイパッドよりも実装難度が高くなりますが次のメリットがあります。
- 互換性に関する問題が発生しない
- レスポンス速度が USB ジョイパッドよりも高速
VGS-Zero のゲームがプレイ可能なハードウェアを販売される場合、基本的には GPIO ジョイパッドで実装することを推奨します。
なお、USB と GPIO のジョイパッドの両方を接続している場合、USB ジョイパッドの入力が優先され、GPIO ジョイパッドの入力は行われません。
Launch Sequence
起動手順は次の通りです。
- FAT32 フォーマットされた SD カードを準備
- SD カードのルートディレクトリに ./image 以下のファイルをコピー
- game.pkg を起動対象のゲームに置き換える
- SD カードを RaspberryPi Zero 2W に挿入
- RaspberryPi Zero 2W に USB ジョイパッドを接続
- RaspberryPi Zero 2W とテレビを HDMI ケーブルで接続
- RaspberryPi Zero 2W に電源を接続して ON
config.sys
RaspberryPi Zero 2W に挿入する SD カードのルートディレクトリに config.sys ファイルを配置することで色々なカスタマイズができます。
Joypad Button Assign
#--------------------
# JoyPad settings
#--------------------
A BUTTON_1
B BUTTON_0
SELECT BUTTON_8
START BUTTON_9
UP AXIS_1 < 64
DOWN AXIS_1 > 192
LEFT AXIS_0 < 64
RIGHT AXIS_0 > 192
(凡例)
# ボタン設定
key_name △ BUTTON_{0-31}
# AXIS設定
key_name △ AXIS_{0-1} △ {<|>} △ {0-255}
key_name:
AAボタンBBボタンSTARTSTARTボタンSELECTSELECTボタンUP上カーソルDOWN下カーソルLEFT左カーソルRIGHT右カーソル
カーソルに BUTTON_ を割り当てたり、ボタンに AXIS_ を割り当てることもできます。
tools/joypad を用いれば、お手持ちの USB ジョイパッドのボタン内容をチェックできます。
game.pkg
game.pkg は VGS-Zero のゲーム実行形式ファイルで、ツールチェインの makepkg コマンド で生成することができます。
makepkg -o /path/to/output.pkg
-r /path/to/game.rom
[-b /path/to/bgm.dat]
[-s /path/to/se.dat]
なお、game.pkg の最大サイズは 16MB (128Mbits) です。
game.rom
game.rom は ROMバンクに読み込まれる 8KB 単位の ROM データセットで、ツールチェインの makerom コマンド で生成することができます。
usage: makerom output input1 input2 ... input256
- 8KB (64KBit) = 1 バンク
- game.rom には最大 256 バンク (16MBit) を格納可能
- 入力ファイルが 8KB を超える場合、自動的に複数バンクに分割された状態で game.rom に格納されます
- 入力ファイルが 8KB で割り切れない場合、パディングデータが自動的に挿入されます
- 入力ファイルの指定順序でバンク番号が決定します(最初に指定したファイルの先頭 8KB がバンク 0)
- VGS-Zero が起動するとバンク 0 から 3 が CPU Memory Map の ROM Bank 0 から 3 にロードされます
- バンク 0 は必ずプログラムコードでなければなりません
bgm.dat
bgm.dat は 1 曲以上の楽曲データが含まれたデータセットで、ツールチェインの makebgm コマンド で生成することができます。
楽曲データは次の 2 種類のデータ形式をサポートしています
- vgsmml コマンド でコンパイルされた VGS; Video Game Sound 形式の BGM データ
- VGM 形式 の BGM データ
プログラム(Z80)で 再生を指示 (0xE0) した BGM データの種別は VGS-Zero 本体が自動的
Related Skills
qqbot-channel
346.8kQQ 频道管理技能。查询频道列表、子频道、成员、发帖、公告、日程等操作。使用 qqbot_channel_api 工具代理 QQ 开放平台 HTTP 接口,自动处理 Token 鉴权。当用户需要查看频道、管理子频道、查询成员、发布帖子/公告/日程时使用。
docs-writer
100.1k`docs-writer` skill instructions As an expert technical writer and editor for the Gemini CLI project, you produce accurate, clear, and consistent documentation. When asked to write, edit, or revie
model-usage
346.8kUse CodexBar CLI local cost usage to summarize per-model usage for Codex or Claude, including the current (most recent) model or a full model breakdown. Trigger when asked for model-level usage/cost data from codexbar, or when you need a scriptable per-model summary from codexbar cost JSON.
Design
Campus Second-Hand Trading Platform \- General Design Document (v5.0 \- React Architecture \- Complete Final Version)1\. System Overall Design 1.1. Project Overview This project aims t
