Skip to content

Latest commit

 

History

History
85 lines (55 loc) · 8.01 KB

File metadata and controls

85 lines (55 loc) · 8.01 KB

RetroTick

English | Français | 简体中文

クラシックな Windows・DOS プログラムをブラウザで直接実行。 OS エミュレーションではなく、x86 CPU エミュレーターと再実装された Windows/DOS API です。.exe をページにドラッグして試してみてください。

スクリーンショット

RetroTick は TypeScript のみでゼロから構築された x86/ARM CPU エミュレーターと Windows/DOS API 互換レイヤーです。OS 全体をエミュレートするのではなく、プロセッサをエミュレートし、OS API を直接再実装します。PE (Win32/WinCE)、NE (Win16)、MZ (DOS) バイナリを解析し、x86 および ARM 機械語を一命令ずつ実行し、Win32・Win16・DOS の API を部分的に提供し、クラシック Windows 時代の一部の .exe ファイルを実行して GUI をブラウザ上にレンダリングできます。

動作するプログラム

カテゴリ プログラム
ゲーム フリーセル、ソリティア、マインスイーパ、SkiFree、プリンス・オブ・ペルシャ (DOS)、仙剣奇侠伝 (DOS)、Moktar (DOS)
プログラム 電卓、時計、コマンドプロンプト、タスクマネージャー、サウンドレコーダー、メモ帳 (Win 3.1x)、QBasic、GLX Gears
スクリーンセーバー 3D 迷路 (OpenGL)、3D パイプ (OpenGL)、ライン アート、宇宙飛行、ベジエ曲線、フラワー ボックス、伝言板

ほとんどのプログラムにはレンダリングの不具合や未実装の機能があります。現在も開発中です。

技術的な中身

  • x86 CPU エミュレーター — x87 FPU、遅延フラグ評価、32 ビットプロテクトモード(フラットモデル)と 16 ビットリアルモード(segment:offset アドレッシング、IVT、PSP、A20 ゲート)
  • ARM CPU エミュレーター — Windows CE (WinCE) PE バイナリ向けの基本的な ARM 命令実行
  • PE/NE/MZ バイナリローダー — ヘッダー解析、セクションマッピング、インポート解決、リソース抽出;ベースリロケーションと競合検出付き PE DLL ローディング
  • Win32 API 互換レイヤー — kernel32、user32、gdi32、advapi32、comctl32、comdlg32、shell32、msvcrt、ntdll、opengl32、glu32、ddraw、dsound、ole32、oleaut32、winmm、imm32、uxtheme、winspool、ws2_32、version、psapi、shlwapi、iphlpapi、msacm32、secur32、setupapi、netapi32、mpr、msimg32 など
  • Win16 API 互換レイヤー — KERNEL、USER、GDI、SHELL、COMMDLG、COMMCTRL、MMSYSTEM、KEYBOARD、DDEML、LZEXPAND、SOUND、VER、SCONFIG、WIN87EM
  • WinCE API 互換レイヤー — COREDLL(Windows CE ARM バイナリ向けの kernel32/user32/gdi32 統合レイヤー)
  • DOS 割り込みエミュレーション — INT 21h ファイル/プロセス、INT 10h ビデオ BIOS、INT 08h/1Ch タイマー、INT 09h/16h キーボード、INT 1Ah リアルタイムクロック、INT 15h システムサービス、INT 33h マウス、INT 2Fh マルチプレクス、EMS (INT 67h) / XMS 拡張メモリ;DPMI/PMODE/W プロテクトモード DOS エクステンダーサポート
  • VGA エミュレーション — 14 種のビデオモード(テキスト、CGA、EGA、VGA、Mode 13h、Mode X)、CRTC/Sequencer/GC/ATC レジスタエミュレーション、256 色パレット、プレーナメモリ
  • Sound Blaster / OPL2 / GUS オーディオ — Sound Blaster 2.0 DSP(8 ビット DMA 再生)、OPL2 (YM3812) 9 チャンネル FM 合成、Gravis Ultrasound (GUS) エミュレーション、PC スピーカー矩形波、Intel 8237A DMA コントローラー、AudioWorklet リアルタイム出力
  • OpenGL 1.x → WebGL2 変換 — 完全な即時モードパイプラインを WebGL2 にマッピング、3D スクリーンセーバーを駆動
  • DirectDraw / DirectSound — DOS 時代の Windows ゲーム向け COM ベースのサーフェス・オーディオバッファ管理
  • ウィンドウマネージャー — マルチウィンドウ、Z オーダー、フォーカス、MDI(マルチドキュメントインターフェース)、タスクバー、メッセージディスパッチ、コモンダイアログ
  • GDI レンダリングエンジン — ビットマップ、ブラシ、ペン、リージョン、テキスト、DIB から Canvas へのマッピング
  • 仮想ファイルシステム — IndexedDB ベースの永続ストレージ

はじめに

npm install
npm run dev

http://localhost:5173 を開いて .exe ファイルをページにドロップ、または内蔵のサンプルランチャーから選択してください。

ビルド

npm run build     # プロダクションビルド → dist/

テスト

ヘッドレステストは、モック Canvas を使用して Node.js で実行ファイルを実行します:

timeout 2 npx tsx tests/test-<name>.mjs

詳細は tests/ をご覧ください。

コントリビュート

PR 歓迎です!主な目標はより多くの実行ファイルを正しく動作させることです。具体的には、不足している Win32/Win16 API スタブの実装、レンダリングの修正、GDI の忠実度向上です。ステップバイステップのワークフローは CLAUDE.md をご覧ください。

Claude Code などの AI コーディングツールを使ってコントリビュートすることを強くお勧めします。プロジェクトには詳細な CLAUDE.md が付属しており、Claude Code が自動的に読み込むため、x86 の内部構造や Win32 API を簡単にナビゲートできます。もちろん手作業でのコーディングも歓迎します。

ライセンス

本プロジェクトは CC0 1.0 Universal の下で公開されています。初期コードはすべて AI によって生成されました。帰属表示なしに、自由に使用・改変・配布できます。サードパーティの依存関係はそれぞれのライセンス(MIT)に従います。

免責事項

QEMU、DOSBox、Wine などのエミュレーターと同様に、RetroTick は公開されたインターフェース(x86 命令セット、Win32 API、PE/NE/MZ ファイル形式)を実装しており、プロプライエタリな実装から派生したコードは含まれていません。開発中に AI コーディングツールが使用され、互換性の問題を診断するためにテスト用実行ファイルのバイトを自律的に検査した可能性があります。開発者がデバッガーやヘキサエディターを使用するのと同様です。そのような分析は、プログラムがどの公開 API や x86 命令を使用しているかを明らかにするだけであり、プログラムのプロプライエタリなロジックを明らかにするものではありません。

本プロジェクトで実演されるサンプルプログラムは、1990 年代のクラシックな Windows ユーティリティやゲームであり、数十年にわたりインターネット上で広く流通してきたものです。相互運用性のデモンストレーションのみを目的として含まれています。権利者の方でプログラムの削除をご希望の場合は、issue を作成してください。

本プロジェクトに記載されているすべての製品名、商標、登録商標はそれぞれの所有者に帰属します。本プロジェクトはいかなる商標所有者とも関係がなく、承認や後援も受けていません。