HN 日本語サマリー

← 一覧へ戻る
プログラミング

Casio FX-870P エミュレータ

Casio FX-870P Emulator (github.com)

5 pointsby austinallegro0 コメント

要約

Casio FX-870P(VX-4としても販売)ポケットコンピュータ用のブラウザベースエミュレータがTypeScriptとVue 3で開発されました。このエミュレータは、1986年製のプログラマブル電卓の機能をウェブプラットフォームに移植したもので、CPU、メモリ、ディスプレイ、キーボード、シリアルポート、フロッピーディスクドライブなどのハードウェアコンポーネントをエミュレートします。また、BASICプログラムの編集やデバッグ機能も備えています。

全文翻訳

FX-870P エミュレータ Casio FX-870P(VX-4としても販売)ポケットコンピュータ用のブラウザベースエミュレータで、TypeScriptとVue 3で書かれています。 FX-870Pは、921 kHzで動作する日立HD61700 CPU、96×64ピクセルのLCD、83キーキーボード、シリアルポート、オプションのMD-120フロッピーディスクドライブを備えた1986年のプログラマブル電卓でした。このエミュレータは、オリジナルのDelphiリファレンス実装をウェブプラットフォームに完全に移植したものです。 クレジット オリジナルのエミュレータはPISIで入手可能であり、このサイトで入手可能な素晴らしいエミュレータスイートのオリジナルの作者にクレジットが与えられています。この実装は、そのエミュレータの背後にあるコードをインターネット上のより広いオーディエンスに提供することを純粋に目的として設計されています。 Mark Wickensによって実装されたこのバージョンは、ソースコードがGitHubでホストされており、試したい場合はここにホストされています。 エミュレートされたハードウェアコンポーネントの詳細 CPU 日立 HD61700, 921 kHz メモリ 18ビットアドレス空間: ROM0 (6 KB, 16ビットワード), ROM1 (128 KB × 2バンク), RAM (64 KB) ディスプレイ HD44352A01 LCDコントローラ — 96×64ピクセル + 5つのステータスインジケータ キーボード 83キーマトリクス (9ブロック, 16 KO列) シリアル XON/XOFFフロー制御付きUART ストレージ Origin Private File System (OPFS) 経由のMD-120フロッピーディスク 機能 レスポンシブな電卓フェイス — 複数の解像度のフェイスプレート画像で、あらゆる画面サイズにフィットするようにスケーリングされます フルキーボードマッピング — PCキーボードから直接入力でき、CAPSとシフトシンボルの処理が自動で行われます プログラムライブラリ — ツールバーから直接ロードできる、キュレーションされたサンプルBASICプログラムのコレクションが組み込まれています RS-232Cシリアル — XON/XOFFフロー制御を使用して、エミュレートされたCOM0経由でBASICプログラムをロードおよび保存します フロッピーディスク — Origin Private File System (OPFS) 経由のMD-120ディスクエミュレーション 文字セットテーブル — すべての256文字ビットマップを表示するインタラクティブな16x16の16進グリッド(ROMフォントから) DEFCHR$ピクセルエディタ — 任意の文字をクリックすると、ドラッグしてペイントできる5x8ピクセルエディタが開き、ワンクリックでコピーできるBASICのDEFCHR$コマンドを生成します ターボモード — 計算負荷の高いBASICプログラムのために、CPUを約50倍速で実行します フルスクリーンモード — ツールバーとパネルを非表示にして電卓をフルスクリーンで使用できます(モバイルで便利です) ファームウェアトグル — FX-870P(日本語)とVX-4(英語)のROMモードを切り替えます CPUデバッガ — ライブレジスタ、フラグ、逆アセンブリビュー BASICリスティングパネル — RAMに保存されているすべてのBASICプログラム(P0–P9)のデトークナイズされたライブリスティング。タブナビゲーション、シンタックスハイライト、ライブ/フリーズ切り替え付き BASICエディタ — シンタックスハイライト、直接RAM書き込み、行の追加/削除/編集、リッチテキストクリップボードでのプログラム全体のエクスポート/インポートを備えた、インプレース編集 コミュニケーションパネル — UARTレジスタの状態、シリアルバイトストリーム、診断機能 実行前提条件 Node.js 22 LTS ROMファイルは public/roms/ に配置(含まれていません) 開発サーバー npm install ./start.sh # http://localhost:3007/fx870p-emulator/ で起動します ./stop.sh # サーバーを停止します またはnpmを直接使用します: npm run dev # フォアグラウンド、Ctrl-Cで停止 本番ビルド npm run build # dist/ に出力します npm run preview # ビルドされたアプリをプレビューします アプリは、開発モードと本番モードの両方で /fx870p-emulator/ のベースパスの下で提供されます。 プロジェクト構造 src/ emulator/ cpu.ts HD61700 CPUコア — リセット、フェッチ/デコード/実行ループ exec.ts 命令ハンドラ (~2100行) decoder.ts 256エントリの命令ディスパッチテーブル def.ts CPU状態、メモリマップ、srcRead/dstWrite disassemble.ts ランタイム逆アセンブラ(DebugPanelで使用) lcd.ts HD44352A01 LCDコントローラ → Canvas ImageData keyboard.ts 83キーマトリクス — keydown + マウスイベント port.ts I/OポートとUARTステートマシン comm.ts RS-232C TX/RXキュー、XON/XOFF、SAVE basic-tokens.ts 共有キーワードテーブル(PREFIX4–7)とRAMレイアウト定数 detokenize.ts BASICデトークナイザー — RAMからトークナイズされたプログラムを読み取ります tokenize.ts BASICトークナイザー — ソーステキストをFX-870Pトークンバイトに変換します ram-edit.ts RAMエディタ — ファイルテーブル管理でトークナイズされたプログラムをRAMに書き込みます casio-ascii.ts Casio ASCII ↔ Unicode文字マッピング emulator.ts メインrAFループ、ROMロード、状態永続化 remote-log.ts デバッグログ(開発専用) trace.ts 命令ごとのJSONLトレースレコーダー components/ EmulatorView.vue トップレベルオーケストレータ + パネルレイアウト LcdCanvas.vue Canvas LCDレンダラー KeyboardOverlay.vue フェイス画像の上にクリック可能なキーヒット領域 CommPanel.vue シリアル通信パネル + ツールバーボタン DebugPanel.vue CPUデバッガ(レジスタ、フラグ、逆アセンブリ) BasicListPanel.vue BASICプログラムリスト/エディタパネル(デトークナイズビュー、インプレース編集、インポート/エクスポート) CharsetPopup.vue 文字セットテーブル + DEFCHR$ピクセルエディタ LibraryPopup.vue プログラムライブラリポップアップ(ブラウズ + サンプルプログラムをロード) AboutPopup.vue アバウトダイアログ(ABOUT.mdをレンダリング) editor/ BasicEditor.vue 再利用可能なCodeMirror 6エディタコンポーネント(シングル/マルチラインモード) cm-basic-lang.ts CodeMirror StreamLanguage定義(FX-870P BASIC用) cm-basic-theme.ts パネルUIに合わせたCodeMirrorダークテーマ basic-highlight.ts リスティング表示とリッチテキストクリップボードエクスポート用のシンタックスハイライター public/ ABOUT.md ユーザー向けドキュメント(アバウトポップアップでレンダリング) basic/ サンプルBASICプログラム (.bas) images/ face.png 電卓フェイスプレート(標準) face-large.png 電卓フェイスプレート(大) face-huge.png 電卓フェイスプレート(特大) keys.png キーオーバーレイリファレンス casio-logo.svg Casioロゴ(アバウトポップアップのウォーターマークとして使用) roms/ ROMおよび文字セットバイナリ(リポジトリには含まれていません) tests/ emu-harness.ts ヘッドレスエミュレータブート + キー入力ヘルパー sin90.test.ts SIN(90)回帰テスト tokenize.test.ts BASICトークナイザーテスト(キーワード、ラウンドトリップ、エッジケース) tools/ dis.ts スタンドアロン逆アセンブラ(npm run dis) compare-traces.mjs Delphi vs TypeScriptトレース比較 charset-dump.ts 文字セットマークダウンを生成(docs/charset.md) charset-table.ts 文字セットHTMLテーブルを生成(docs/charset-table.html) compiler/ Casio JIS BASIC → HD61700マシンコードコンパイラ(README内) emu-debugger/ ヘッドレスデバッガライブラリ + CLI(README内) リファレンス/ ドキュメント 説明 reference/fx870p-rom-annotations.md 注釈付きROMアドレスラベルとコールフローノート reference/fx870p-roms.md 完全なROM逆アセンブリ [reference/FX-870P_VX-4 Manual.html](docs/FX-870P_VX-4 Manual.html) オリジナルのユーザーマニュアル(HTML) docs/CasioVX-4-Manual-Peter-Rost.pdf Peter RostによるVX-4マニュアル(PDF) docs/FX-870P emulator.pdf Delphiエミュレータドキュメント(PDF) docs/basic-detokenizer.md BASICデトークナイザーリファレンス — トークンテーブル、メモリレイアウト、行フォーマット docs/basic-editor.md BASICエディタユーザーガイド — 編集、インポート/エクスポート、制限事項 docs/plan.md ウェブポート実装計画とコンポーネントマッピング reference/fx870_es/ オリジナルのDelphi 5ソース(リファレンスのみ) テスト エミュレータには、Node.jsでエミュレータをブートし、キー入力を注入し、CPUを実行し、LCD出力を検証するvitest搭載のヘッドレステストスイートがあります。 すべてのテストを実行 npm test 単一のテストファイルを実行 npx vitest run tests/sin90.test.ts テストを実行