[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社)のハードウェアをブラウザ上にエミュレート。
ZX Spectrum - Wikipedia
The ZX Spectrum is an 8-bit personal home computer released in the United Kingdom in 1982 by Sinclair Research.
en.wikipedia.orgULA独自の3分割スキャンライン構造を持つ画面描画(256×192+アトリビュートカラー/BRIGHT/FLASH)、AY-3-8910 PSG音源および1-bit PWMビーパー、Kempstonジョイスティック、ハーフロウキーボードマトリクス入力に対応。
AY-3-8910 - Wikipedia
The AY-3-8910 is a 3-channel programmable sound generator (PSG) designed by General Instrument.
en.wikipedia.org.sna および .z80 形式のスナップショットファイルを直接メモリへ注入することで、ROM著作権に依存せず即座にゲームを開始できるスナップショットファースト設計を採用。
ZX SPECTRUM EMULATOR
ZX Spectrum Emulator — ブラウザで動くZX Spectrumエミュレーター
Z80A 3.5MHz / ULA / AY-3-8910 + 1-bit Beeper — 48K/128Kモード対応
lain-lab.comZ80 EMULATOR PROJECT
Z80 EMULATOR PROJECT
フルスクラッチ JavaScript Z80 コアと、その上に構築されたレトロシステムエミュレーター群
lain-lab.comスタートメニューから起動
トップページのスタートメニューからも起動できます。
スクリーンショット
ZX Spectrum Emulator // 128K BASIC起動画面
ZX Spectrum Emulator // Athena (1987)
ZX Spectrum Emulator // The Addams Family (1992, Ocean, 128K)
動画(GIF)
BASIC起動 ➡ コード実行
ゲーム起動 // The Addams Family (Ocean, 128K)
Sample Data / CREDIT
ゲームデータは、「spectrum computing」のサイトで配布されてる
・Andrew P. Deakin (UK)
・Ivan Horn (UK)
・Jonathan Dunn (UK)
様作の、The Addams Familyをお借りしてます。
The Addams Family - Spectrum Computing
The Addams Family for ZX-Spectrum 128K (Ocean Software Ltd/UK, 1992) by Andrew P. Deakin, Ivan Horn, Jonathan Dunn
spectrumcomputing.co.uk・Andrew P. Deakin (UK)
・Ivan Horn (UK)
・Martin Galway (UK)
様作の、Athenaをお借りしてます。
Athena - Spectrum Computing
Athena for ZX-Spectrum 48K/128K (Imagine Software Ltd/UK, 1987) by Andrew P. Deakin, Ivan Horn, Martin Galway, Bob Wakelin
spectrumcomputing.co.uk特徴
-
スナップショット直接即時ロード:
.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 CORE | Z80A命令セット(16ビットI/Oバスデコード修正済、IM1/IM2割り込み対応) |
| ULA RENDERER | 256×192 3分割スキャンラインインターリーブドVRAMデコード、アトリビュート(INK/PAPER/BRIGHT/FLASH)描画 |
| AY-3-8910 PSG | 128K用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展開 |
| UI | Canvas描画、スナップショットドラッグ&ドロップ、スクリーンキーボード |
使い方
1. スナップショットのロード
- ページを開く
- 「📂 Load Snapshot」をクリック、または画面上に
.snaや.z80ファイルをドラッグ&ドロップ - 自動的にCPUレジスタとメモリ状態が展開され、ゲームが即座に開始
2. システムモードの切替(48K / 128K)
- 設定パネルから「48K Mode」または「128K Mode」を選択
- ROMイメージを読み込んでいる場合、実機のBASIC選択画面(128K Menu / 48K BASIC)が起動
キーボード操作
操作キーマッピング
| 機能 | PCキーボード | 実機対応キー |
|---|---|---|
| 移動(上 / 下 / 左 / 右) | W / S / A / D または 矢印キー | Kempston Up/Down/Left/Right(または 9/8/5/6) |
| メインボタン / Jump | Space / Z | Kempston Fire(または Symbol Shift / M) |
| Break / Stop | Esc | Caps 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)およびキーボードマトリクスの実装
- Z80コアの16ビットI/Oアドレスバグ修正(
技術記事
[JavaScript] 自作Z80コアでZX Spectrumエミュレーターを実装。16ビットI/Oバグの克服とULA・128Kバンク制御の全記録
Z80コアの16ビットI/Oアドレスバグを修正し、ZX Spectrum固有のULA描画インターリーブ・128Kメモリバンク切替・AY-3-8910+ビーパー合成を完走した開発記録。
lain-lab.com
[JavaScript] 自作Z80コアでColecoVisionエミュレーターを実装
BIOS HLEと実BIOSのデュアル構成によるColecoVisionエミュレーター実装記録。
lain-lab.com
[JavaScript] 自作Z80コアでSG-1000エミュレーターを実装
Z80コアとTMS9918Aの共有設計によるSG-1000実装記録。
lain-lab.com