[WEB App] JS Pac-Man Emulator — ブラウザで動くPac-Manエミュレーター (Z80コア・Namco WSG・ZIP ROMローダー)
JS Pac-Man Emulator
自作Z80 CPUコアをベースに、Namco Pac-Man(1980)のアーケード基板をブラウザ上にエミュレート。
Pac-Man - Wikipedia
Pac-Man is a 1980 maze action video game developed and published by Namco for arcades.
en.wikipedia.orgMAMEの tilelayout / spritelayout 構造体を解析して実装したビットプレーンデコード(planes:{0,4} — 同一バイト内の上位・下位4ビットが別プレーン)、カラーPROM 2段階ルックアップ、Namco WSG 3チャンネル波形合成サウンドに対応。
アーケードROMは著作権の問題で配布できないため、JSZipによるZIP drag-and-dropローダーを実装。MAMEのROMパックを直接ドロップして起動できる。
Namco WSG
The Namco WSG is a custom wavetable synthesizer used in every Namco arcade system from Pac-Man to System 1.
vgmrips.netゲームの起動方法
JS PAC-MAN EMULATOR
以下、リンクを開くと起動します。
JS Pac-Man Emulator — ブラウザで動くPac-Manエミュレーター
Z80A 3.072MHz / Namco WSG 3ch — ZIP ROMローダー対応
lain-lab.comスタートメニューから起動
トップページのスタートメニューからも起動できます。
Z80 EMULATOR PROJECT
Z80 EMULATOR PROJECT
フルスクラッチ JavaScript Z80 コアと、その上に構築されたレトロシステムエミュレーター群
lain-lab.comスクリーンショット
ZIP ROMローダー
タイトル画面
ゲームプレイ画面
特徴
-
ZIP drag-and-drop ROMローダー:
MAMEのROMパック(ZIP)を画面にドロップするか、クリックしてファイル選択するだけで起動。必須ROM(pacman.6e/6f/6h/6j・pacman.5e/5f/5m)の確認とエラー表示をUI上に表示。複数のファイル名パターン(MAMEロムセット・クローン・短縮名)に対応し、大文字小文字を無視して検索。 -
MAMEのtilelayout解析によるビットプレーンデコード:
planes:{0,4}— 同一バイトの下位4ビット・上位4ビットが別プレーンというPac-Man固有の構造を解析して実装。256タイル・64スプライトをデコード済みキャッシュとして保持し、毎フレームの描画コストを削減。 -
カラーPROM 2段階ルックアップ:
82s123.7f(32色RGBテーブル)と82s126.4a(256エントリパレット変換テーブル)による2段階カラーシステム。PROMs未搭載時はデフォルトパレットにフォールバック。 -
Namco WSG 3チャンネルサウンド:
ROM5m(256バイト)に格納された8種類の波形テーブルを使用したリアルタイム波形合成。ScriptProcessorNodeで3チャンネルを合成してWeb Audio APIから出力。 -
物理モニター回転への対応:
Pac-Man基板の物理モニターは90°CCW回転。VRAMアドレス変換・タイル180°回転描画・スプライト座標変換をすべて回転補正済みで実装。
使い方
1. ROMのロード
- ページを開く
- 黄色い点線ゾーンにMAMEのROMパック(
pacman.zip)をドロップ、またはクリックしてファイル選択 - 必須ROMが揃えば自動的にエミュレーターが起動
- 不足ROMがある場合はUIのログに赤でエラー表示
2. 必要なROMファイル
必須:
| ファイル | サイズ | 内容 |
|---|---|---|
| pacman.6e | 4096 bytes | CPU ROM (0x0000-0x0FFF) |
| pacman.6f | 4096 bytes | CPU ROM (0x1000-0x1FFF) |
| pacman.6h | 4096 bytes | CPU ROM (0x2000-0x2FFF) |
| pacman.6j | 4096 bytes | CPU ROM (0x3000-0x3FFF) |
| pacman.5e | 4096 bytes | グラフィックROM(タイル) |
| pacman.5f | 4096 bytes | グラフィックROM(スプライト) |
| pacman.5m | 256 bytes | サウンド波形ROM |
任意(カラーPROM):
| ファイル | サイズ | 内容 |
|---|---|---|
| 82s123.7f | 32 bytes | 32色RGBテーブル |
| 82s126.4a | 256 bytes | パレット変換テーブル |
キーボード操作
| 機能 | キー |
|---|---|
| コイン投入 | [5] |
| スタート(1P) | [1] |
| 移動 | W / A / S / D または 矢印キー |
モジュール構成
| モジュール名 | 主要機能 |
|---|---|
| Z80 CPU CORE | Z80A命令セット(IM1/IM2割り込み対応) |
| PACMAN SYSTEM | VRAM・スプライト座標・I/Oポートルーティング |
| TILE/SPRITE DECODER | MAMEのtilelayout解析によるビットプレーンデコード |
| COLOR PROM | 2段階カラーLUT(82s123.7f + 82s126.4a) |
| NAMCO WSG | 波形ROM(5m)ベースの3チャンネル波形合成 |
| ZIP LOADER | JSZipによるROMパック解析・展開 |
| UI | Canvas描画、ZIP drag-and-drop、ログ表示 |
技術スタック
- JavaScript (ES6+ / Modules) — Z80コア・Pac-Manシステム・サウンド
- HTML5 Canvas (2D Context / ImageData) — フレームバッファ描画
- Web Audio API (ScriptProcessorNode) — Namco WSG 3チャンネル合成
- JSZip — クライアントサイドZIP展開
- Astro — Webアプリケーション基盤
更新履歴
- [2026-09-18]: v1.0 初回公開。
- MAMEのtilelayout解析によるビットプレーンデコードの実装
- VRAMアドレス変換・タイル描画・スプライト座標系の実装
- カラーPROM(82s123.7f / 82s126.4a)2段階ルックアップの実装
- Namco WSG 3チャンネル波形合成サウンドの実装
- JSZipによるZIP drag-and-drop ROMローダーの実装
技術記事
[JavaScript] 自作Z80コアでPac-Manエミュレーターを実装。MAMEのビットプレーン解析からZIP ROMローダーまでの全記録
MAMEのtilelayout/spritelayout解析・VRAMアドレス変換・カラーPROM・Namco WSGサウンド・JSZip ROMローダー実装の全記録。
lain-lab.com
[JavaScript] 自作Z80コアでZX Spectrumエミュレーターを実装。48K/128K・AY-3-8910・Kempston対応の全記録
Z80コアの6台目。ZX Spectrum 48K/128K対応、AY-3-8910 PSGサウンド実装。
lain-lab.com
[JavaScript] 自作Z80コアでColecoVisionエミュレーターを実装
BIOS HLEと実BIOSのデュアル構成によるColecoVisionエミュレーター実装記録。
lain-lab.com