[WEB App] ZX Spectrum Emulator — ブラウザで動くZX Spectrum 48K/128Kエミュレーター (Z80コア・ULA・AY-3-8910・1-bit Beeper)

[WEB App] ZX Spectrum Emulator — ブラウザで動くZX Spectrum 48K/128Kエミュレーター (Z80コア・ULA・AY-3-8910・1-bit Beeper)

ZX Spectrum Emulator

自作Z80 CPUコアをベースに、英国を代表する8ビットPC「ZX Spectrum」(1982年/1985年、Sinclair Research社)のハードウェアをブラウザ上にエミュレート。

ULA独自の3分割スキャンライン構造を持つ画面描画(256×192+アトリビュートカラー/BRIGHT/FLASH)、AY-3-8910 PSG音源および1-bit PWMビーパー、Kempstonジョイスティック、ハーフロウキーボードマトリクス入力に対応。

.sna および .z80 形式のスナップショットファイルを直接メモリへ注入することで、ROM著作権に依存せず即座にゲームを開始できるスナップショットファースト設計を採用。

ZX SPECTRUM EMULATOR

Z80 EMULATOR PROJECT

スタートメニューから起動

トップページのスタートメニューからも起動できます。

ZX Spectrum Emulator // 128K BASIC起動画面

スクリーンショット

ZX Spectrum Emulator // 128K BASIC起動画面

ZX Spectrum Emulator // 128K BASIC起動画面

ZX Spectrum Emulator // Athena (1987)

ZX Spectrum Emulator // 128K BASIC起動画面 ZX Spectrum Emulator // 128K BASIC起動画面

ZX Spectrum Emulator // The Addams Family (1992, Ocean, 128K)

ZX Spectrum Emulator // 128K BASIC起動画面 ZX Spectrum Emulator // 128K BASIC起動画面

動画(GIF)

BASIC起動 ➡ コード実行

ZX Spectrum Emulator // 128K BASIC起動 ➡ コード実行

ゲーム起動 // The Addams Family (Ocean, 128K)

ZX Spectrum Emulator // 128K BASIC起動 ➡ コード実行

Sample Data / CREDIT

ゲームデータは、「spectrum computing」のサイトで配布されてる

・Andrew P. Deakin (UK)
・Ivan Horn (UK)
・Jonathan Dunn (UK)

様作の、The Addams Familyをお借りしてます。

・Andrew P. Deakin (UK)
・Ivan Horn (UK)
・Martin Galway (UK)

様作の、Athenaをお借りしてます。

特徴

  • スナップショット直接即時ロード:
    .sna(48K/128K)および .z80 形式のスナップショットファイルをロードすることで、テープ読み込み待ちなしでメモリとCPUレジスタ状態を完全復元して即時起動。

  • Z80 16ビットI/Oアドレスの修正適用:
    IN/OUT 命令実行時に上位8ビット(A や BC レジスタ)をポートアドレスの上位バイトとして正しく結合するコア全6箇所の修正により、ハーフロウキーボードマトリクスや独自ポートの完全判定を実現。

  • 128K メモリバンキング & モード切替:
    ポート $7FFD への書き込みによる全128KB(8バンク)のRAM切替および16KB×2ページのROM切替を実装。48K/128K両モードのソフトに対応。

  • 双方向オーディオエンジン (AY-3-8910 + 1-bit PWM Beeper):
    128Kモデル搭載のAY-3-8910 PSG(3ch矩形波+ノイズ)と、ULAポート($FE)のビット4を直接トグルして出力するPWM制御の1-bit ビーパーの両系音源をリアルタイム合成してWeb Audio APIから出力。

  • Kempstonジョイスティック & ハーフロウキーボード:
    ポート $1F を使用する定番のKempstonジョイスティックと、キーボードマトリクス(8つのハーフロウに分散配置された40キー構造)をPCキーボードへ正確にマッピング。

モジュール構成

モジュール名主要機能
Z80 CPU COREZ80A命令セット(16ビットI/Oバスデコード修正済、IM1/IM2割り込み対応)
ULA RENDERER256×192 3分割スキャンラインインターリーブドVRAMデコード、アトリビュート(INK/PAPER/BRIGHT/FLASH)描画
AY-3-8910 PSG128K用3ch PSG音源、エンベロープジェネレーター、ノイズ発生器
BEEPER ENGINEポート $FE 経由の1-bit PWMパルスオーディオ合成
SPECTRUM SYSTEMポート $7FFD(128Kバンク切替)、$FE(Beeper/Border/Key)、$1F(Kempston)ルーティング
SNAPSHOT LOADER.sna / .z80 パラメータ解析、CPUレジスタ復元、RAMバンク/VRAM展開
UICanvas描画、スナップショットドラッグ&ドロップ、スクリーンキーボード

使い方

1. スナップショットのロード

  1. ページを開く
  2. 「📂 Load Snapshot」をクリック、または画面上に .sna や .z80 ファイルをドラッグ&ドロップ
  3. 自動的にCPUレジスタとメモリ状態が展開され、ゲームが即座に開始

2. システムモードの切替(48K / 128K)

  1. 設定パネルから「48K Mode」または「128K Mode」を選択
  2. ROMイメージを読み込んでいる場合、実機のBASIC選択画面(128K Menu / 48K BASIC)が起動

キーボード操作

操作キーマッピング

機能PCキーボード実機対応キー
移動(上 / 下 / 左 / 右)W / S / A / D または 矢印キーKempston Up/Down/Left/Right(または 9/8/5/6)
メインボタン / JumpSpace / ZKempston Fire(または Symbol Shift / M)
Break / StopEscCaps Shift + Space
Spectrum 鍵盤キー対応英数字キー0-9, A-Z

技術スタック

  • JavaScript (ES6+ / Modules) — Z80コア・ULA・AY-3-8910・システム層
  • HTML5 Canvas (2D Context / ImageData) — Spectrum独自インターリーブドVRAM描画
  • Web Audio API (AudioWorklet / ScriptProcessor) — AY-3-8910 + 1-bit Beeper合成
  • Astro — Webアプリケーション基盤

更新履歴

  • [2026-09-17]: v1.0 初回公開。
    • Z80コアの16ビットI/Oアドレスバグ修正(IN/OUT 全6箇所)
    • .sna / .z80 スナップショットローダーの実装
    • ULA描画エンジン(3分割VRAM構造、属性カラー、FLASHアニメーション)の実装
    • ポート $7FFD による128K RAM/ROM バンキングの実装
    • AY-3-8910 PSG および 1-bit PWM Beeper オーディオエンジンの実装
    • Kempstonジョイスティック(ポート $1F)およびキーボードマトリクスの実装

技術記事