[WEB App] Commodore 64 Emulator — ブラウザで動くC64エミュレーター (MOS 6510・VIC-II・reSID WASM・.D64/.PRG対応)

[WEB App] Commodore 64 Emulator — ブラウザで動くC64エミュレーター (MOS 6510・VIC-II・reSID WASM・.D64/.PRG対応)

Commodore 64 Emulator

自作MOS 6502 CPUコアを拡張したMOS 6510コアをベースに、世界で最も売れた8ビットコンピューター Commodore 64 (C64) のハードウェアをブラウザ上にエミュレート。

PAL / NTSC のラスタタイミングを再現する VIC-II 描画エンジン、バッドライン(Bad Line)やスプライト取得時に発生するCPUサイクル奪取(DMA Steal)、$0001 オンチップI/Oポートによるメモリバンク切り替えを精密に再現。

さらに、2基の CIA (MOS 6526) タイマーとキーボードマトリクス制御、WebAssembly化された reSID と AudioWorklet によるジッターレスな高音質SID音源合成、KERNAL $FFD5 トラップによる .D64 ディスクイメージおよび .PRG ファイルの高速ロード機能を搭載しています。

エミュレーターの起動方法

JS COMMODORE 64 EMULATOR

以下、リンクを開くと起動します。

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

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

Commodore 64 Emulator — スタートメニュー

6502 EMULATOR PROJECT

使用ROM:Open ROMs

CommodoreのオリジナルROM(KERNAL / BASIC / 文字ROM)は今も著作権が生きているので使っていない。MEGA65プロジェクトが開発している互換ROM「Open ROMs」を使わせてもらった(LGPL-3.0、BASICの一部はMIT)。

スクリーンショット & 動作確認作品

C64の代表的な商用ソフトウェアおよびデモシーン作品での動作検証を行いました。

BASIC Startup & System Test

C64標準のBASIC v2環境。BASIC ROM、KERNAL ROM、CHARGEN ROMのメモリマッピングとRAMの動的切替が正確に動作。

Commodore 64 Emulator // BASIC Startup Screen

Commercial Games (.D64 / .PRG)

VIC-IIのマルチカラースプライト合成、ラスタIRQによる背景スクロール、CIAタイマー割り込みが同期して作動。

itch.ioよりRGCD.DEV様の「TIGER CLAW(虎爪)」をお借りしています。

Commodore 64 Emulator // Gameplay Screen Commodore 64 Emulator // Gameplay Screen

動画

Commodore 64 Emulator // Gameplay Animation

itch.ioよりknifegrinder様の「Lester (C64)」をお借りしています。

C64エミュレーター // Lester C64エミュレーター // Lester

動画

C64エミュレーター // Lester(VIDEO)

特徴

  • ディスクイメージ & PRG ローダー:
    ドラッグ&ドロップまたは読み込みボタンから .D64 や .PRG ファイルを選択。KERNAL $FFD5 ルーチンのフック処理により、1541ドライブの低速読み込みをスキップしてメモリへ即座に展開・ロード。

  • 精密な VIC-II グラフィックエンジン:
    PAL (63 cycles/line, 312 lines) / NTSC (65 cycles/line, 263 lines) の周期切り替えに対応。バッドライン(テキスト/グラフィック読み込み)時の40サイクルDMAスチール、スプライト1枚あたり2サイクルのCPU停止処理をサイクル正確に再現。

  • 8枚のハードウェアスプライト & 特殊描画:
    スプライトの横縦拡大(X/Y Expand)、マルチカラーモード、スプライト優先度、背景/スプライト間衝突検出、ボーダー開け(vBorderフリップフロップ制御)に対応。

  • 双方向 CIA 1/2 (MOS 6526) エミュレーション:
    タイマーA/Bによるカスケードカウント、ICR(Interrupt Control Register)割り込み、8x8 キーボードマトリクス走査、ジョイスティックポート入力を実装。

  • reSID (WASM) + AudioWorklet リアルタイムサウンド再生:
    C++で記述された高品質SID音源エミュレーター reSID を WebAssembly 化。CPU実行サイクルと精密に同期させ、AudioWorklet の 60ms バッファリングで音切れのない再生を実現。

  • $0001 オンチップポートと動的メモリマッピング:
    MOS 6510 の Direction / Port レジスタ($0000/$0001)を再現。BASIC ROM、KERNAL ROM、Character ROM、I/O領域($D000-$DFFF)のリアルタイムバンキングに対応。

使い方

1. ディスク / プログラムの読み込みと実行

  1. エミュレーターページ(index.html)を開く
  2. コントロールパネルの 「Load File (.d64 / .prg)」 ボタンをクリックし、ローカルの .D64 または .PRG ファイルを選択(ドラッグ&ドロップにも対応)
  3. .PRG の場合はそのままアドレス先頭に配置され起動します。.D64 の場合はディスク解析が行われ、ディレクトリ一覧または最初のプログラムが自動的にロードされます

2. 対応フォーマット

拡張子 / 種類内容処理
.d64Commodore 1541 ディスクイメージBAM(Block Availability Map)およびディレクトリセクタを解析し、プログラムを読み込み
.prgC64 実行可能バイナリ先頭2バイトのロードアドレス(通常 $0801)へ直接配置して高速実行

キーボード・操作方法

機能キー
C64 キーボード入力英数字・記号キー(C64マトリクスへ動的変換)
ジョイスティック Port 2矢印キー (Arrow Keys: Up / Down / Left / Right)
FIRE ボタン (Port 2)Space / Z キー
RUN / STOPEscape キー
PAL / NTSC 切替コントロールパネルの Model セレクトボックス

モジュール構成

モジュール名ファイル名主要機能
本体制御C64_2.jsCPU/VIC-II/CIA/SIDの同期駆動、KERNAL LOADフック、ブート処理
C64 BusC64Bus_5.js$0001ポートによるバンク切り替え、I/O領域($D000-$DFFF)マッピング
VIC-IIVic2_3.jsPAL/NTSCラスタ描画、表示モード、スプライト8枚、ラスタIRQ、DMAスチール
Dual CIACia_2.jsMOS 6526 (CIA1/2)。タイマーA/B、ICR割り込み、キーボードマトリクス
SID SoundC64Sid_2.js / sid-worklet_2.jsreSID WASM とのサイクル同期、AudioWorklet による遅延防止再生
D64 ParserD64.jsディスクイメージ解析、BAM/ディレクトリ走査、セクタチェーン抽出

技術スタック

  • JavaScript (ES6+ / Modules) — C64 System Bus, MOS 6510 CPU, VIC-II, Dual CIA, D64 Engine
  • WebAssembly (C++ / reSID) — MOS 6581/8580 SID 高精度波形合成
  • HTML5 Canvas (2D Context) — リアルタイム・ラスタ描画(PAL/NTSC)
  • Web Audio API (AudioWorklet) — サイクル同期 SID オーディオレンダリング
  • Astro — Webアプリケーション基盤

更新履歴

  • [2026-09-23]: v1.0 初回公開。
    • MOS 6510 CPU コアおよび $0000/$0001 オンチップポートの実装
    • VIC-II ラスタ描画エンジン(バッドラインDMA、スプライト8枚、ラスタIRQ、ボーダー開け)の実装
    • Dual CIA 6526 (タイマーA/B、割り込み、キーボードマトリクス、ジョイスティック) の実装
    • reSID WASM + AudioWorklet による高品質 SID 音源合成の実装
    • KERNAL $FFD5 トラップおよび .D64 / .PRG ファイルローダーの実装

関連プロジェクト

Z80 EMULATOR PROJECT

6502 EMULATOR PROJECT