返回

文章详情

卡西欧 FX870P 模拟器

Hacker News2026年7月14日 22:47

一个基于浏览器的卡西欧 FX-870P (也称为 VX-4) 口袋计算机模拟器,使用 TypeScript 和 Vue 3 编写。FX-870P 是一款1986年发布的可编程计算器,搭载 Hitachi HD61700 CPU,运行频率为921 kHz,配有 96×64 像素的 LCD 显示屏、83 键键盘、串口,以及可选的 MD-120 软盘驱动器。这个模拟器是原始 Delphi 参考实现的完整移植到网络平台。致谢:原始模拟器可以在 PISI 上找到,并对该站点上出色的模拟器套件的原作者致以敬意。本实现旨在使该模拟器背后的代码更加普及于互联网。此版本模拟器由 Mark Wickens 实现,源代码托管在 GitHub 上,想要尝试可以访问这里。硬件模拟组件详细信息:CPU Hitachi 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 私有文件系统 (OPFS) 的 MD-120 软盘。特色:响应式计算器界面 — 可缩放以适应任何屏幕尺寸,带有多个分辨率的面板图像;完整的键盘映射 — 直接在 PC 键盘上输入,自动处理大小写和移位符号;程序库 — 内置精选示例 BASIC 程序集合,可直接从工具栏加载;RS-232C 串行 — 通过模拟的 COM0 使用 XON/XOFF 流控加载和保存 BASIC 程序;软盘 — 通过 Origin 私有文件系统 (OPFS) 的 MD-120 磁盘仿真;字符集表 — 交互式 16x16 十六进制网格,显示 ROM 字体中的所有 256 个字符位图;DEFCHR$ 像素编辑器 — 点击任意字符以打开一个可拖动绘制的 5x8 像素编辑器,它产生 BASIC DEFCHR$ 命令,并带有一键复制按钮;Turbo 模式 — 将 CPU 以约 50 倍速度运行以处理计算密集型 BASIC 程序;全屏模式 — 隐藏工具栏和面板,全屏使用计算器(在移动设备上很有用);固件切换 — 在 FX-870P (日文) 和 VX-4 (英文) ROM 模式之间切换;CPU 调试器 — 实时寄存器、标志和反汇编视图;BASIC 列表面板 — 实时去标记化显示所有存储在 RAM 中的 BASIC 程序 (P0–P9),支持选项卡式导航、语法高亮和实时/静态切换;BASIC 编辑器 — 在原地编辑 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/ emulators/ 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 + mouse 事件;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 卡西欧 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 用户功能说明。

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡