[WEB App] MSX Emulator v1 — ブラウザで動くMSXエミュレーター (Z80コア・VDP・SCC音源 実装)

[WEB App] MSX Emulator v1 — ブラウザで動くMSXエミュレーター (Z80コア・VDP・SCC音源 実装)

MSX1 / MegaROM / SCC Emulator

Z80 CPUコアのエミュレーションから始まり、TMS9918 VDP、PPI、スロット機構、各種MegaROMマッパー、PSGおよび波形メモリ音源(SCC)までをブラウザ完結で実装したMSXエミュレーター。

オープンソースのC-BIOSを標準搭載しているため、環境構築なしでそのままカートリッジROM(.rom / .bin)を読み込んで実行可能。音声処理には Web Audio API の AudioWorklet を採用し、重い描画処理下でも音飛びの少ない低遅延なリアルタイムサウンド合成を実現している。

MSX1 EMULATOR

Z80 EMULATOR PROJECT

スクリーンショット

マッパー手動選択・自動判別メニュー

MSX Emulator — マッパー切り替えメニュー

表示倍率・ウィンドウサイズの切り替え(Fit / 2x / 3x / 4x)

MSX Emulator — 表示倍率切り替え

動作確認:The Menace from Triton(プレイ画面)

The Menace from Triton — ステージ画面

ギャラクシーマップ画面

The Menace from Triton — ギャラクシーマップ

自機装備・アップグレード画面

The Menace from Triton — 装備アップグレード

動画(GIF)

MSX Emulator 起動・実行デモ MSX Emulator 起動・実行デモ

サンプルデータ

著作権フリーのC-BIOSは、「C-BIOS Association」様のサイトよりお借りしています。

フリーゲームROMはmsxdevさんのサイトからSantiago Ontañón (Brain Games)様作の「The Menace from Triton」をお借りしています。

特徴

  • 大容量MegaROMマッパー対応:
    Konami (8KB)、Konami SCC (8KB)、ASCII 8KB、ASCII 16KB、および 32KB Flat ROMに対応。ヘッダーおよびサイズからの自動判別機能を備え、ドロップダウンでの手動切り替えにも対応。

  • PSG / SCC波形メモリ音源リアルタイム合成:
    AY-3-8910 (PSG) の矩形波・ノイズ合成に加え、コナミの波形メモリ音源 (SCC) 5チャンネルの32バイト波形メモリのリアルタイム読み出し・ミックス処理に対応。

  • AudioWorklet による独立スレッド音声制御:
    Web Audio API の AudioWorkletProcessor を利用し、描画スレッドから独立した高優先度オーディオスレッドで波形を生成。音飛び・遅延を最小限に抑える。

  • 高精度VDP描画 & 0xD0 打ち切り再現:
    TMS9918 の Screen 1/2 モードおよびスプライト描画に対応。アトリビュートテーブルの 0xD0 (208) による走査打ち切り挙動を正確にエミュレート。

  • レスポンシブ & フルスクリーン対応:
    4:3 のアスペクト比を維持しつつ、ウィンドウ幅に合わせた自動拡大(Fit)および固定倍率(2x / 3x / 4x)の選択が可能。HTML5 Fullscreen API をサポート。

モジュール構成

モジュール名主要機能
Z80 CPU COREZ80A命令セット(全未定義命令・レジスタ・割り込みモード・遅延EI)
VDP (TMS9918)Screen 1/2 プレーン描画、スプライト 0xD0 打ち切り、VRAM アクセス制御
PPI & SLOTS8255 PPI によるプライマリスロット切り替え、キーボードマトリクス走査
MAPPER ENGINEKonami / Konami SCC / ASCII 8KB / ASCII 16KB / Flat メモリバンク制御
PSG AUDIOAY-3-8910 音源(3ch 矩形波 + 1ch ノイズ LFSR)合成
SCC AUDIO波形メモリ音源 (5ch 32byte Waveform RAM) 合成
AUDIO WORKLETメインスレッドとの MessagePort 通信、独立スレッド波形レンダリング
DISPLAY CANVASImageData ピクセルバッファ描画、4:3 レスポンシブ・倍率・フルスクリーン制御

使い方

1. アプリの起動

ページを開くと、組み込まれた C-BIOS が自動的に起動し、MSX 待ち受け画面が表示されます。

2. ROM ファイルの読み込み

下部UIの「Load ROM」ボタンをクリックするか、画面上へ直接 .rom または .bin ファイルをドラッグ&ドロップします。

3. マッパーの確認・切り替え

通常はヘッダー解析により「Mapper: Auto」で最適なマッパーが自動選定されます。特定の特異なタイトルの場合は、右下のドロップダウンメニューから手動でマッパー(Konami / Konami SCC / ASCII 8KB / ASCII 16KB / Flat)を指定できます。

4. 画面サイズ・フルスクリーンの変更

中央下のドロップダウンより「Fit」(画面幅最適化)または「2x / 3x / 4x」(ピクセル等倍指定)を選択できます。「Full Screen」ボタンで全画面表示に移行します。

キーボード操作

MSX キーPC キーボード
方向キー (Up/Down/Left/Right)カーソルキー (↑↓←→\uparrow \downarrow \leftarrow \rightarrow) / WASD
SPACE (ボタン1)スペースキー (Space) / Zキー
GRAPH (ボタン2)左Alt / Xキー
SELECTTabキー
STOP / ESCEscapeキー
RETURN / ENTEREnterキー

技術スタック

  • JavaScript (ES6+ / Modules) — エミュレーターコア・ロジック
  • Web Audio API (AudioWorklet) — リアルタイム波形合成・オーディオノード管理
  • HTML5 Canvas (2D Context / ImageData) — フレーム描画
  • Astro — Webアプリケーション基盤

更新履歴

  • [2026-09-24]: v1.1 タイミング精度・割り込み処理の改善。

    • 割り込みをレベルトリガ方式に変更(VDP の F フラグ × IE ビットを毎命令評価)。IE を無効にしている間の VBlank が消失していた問題を修正
    • EI 直後の1命令遅延が機能していなかった問題を修正
    • DD/FD CB 命令(SET/RES/BIT n,(IX+d) など)のサイクル二重加算を修正(46T → 23T)
    • LD A,(nn) / LD (nn),A のサイクル数を修正(16T → 13T)
    • EX (SP),IX / EX (SP),IY を実装(従来は HL と交換していた)
    • SCC レジスタのミラー領域(0x9890〜0x989F)に対応
    • Z80 コアの修正は、共有コアを使う他のシステムにも反映
  • [2026-09-15]: v1.0 初回公開。

    • Z80 CPU / TMS9918 VDP / PPI / C-BIOS 実装
    • 32KB フラット ROM および 大容量 MegaROM マッパー(Konami / Konami SCC / ASCII 8KB / ASCII 16KB)への対応
    • Web Audio API / AudioWorklet による PSG (AY-3-8910) および SCC 音源のリアルタイム波形合成
    • VDP スプライト 0xD0 打ち切り処理の修正
    • 4:3 アスペクト比固定レスポンシブ表示およびフルスクリーン表示対応

関連記事

Z80 EMULATOR PROJECT

6502 EMULATOR PROJECT