HelloClyde/bbk9288-emulator

GitHub: HelloClyde/bbk9288-emulator

基于 QEMU 和 Epson S1C33L05 平台的步步高 9288 电子词典整机硬件模拟器,实现了 CPU、LCD、键盘矩阵、NAND 存储和音频通路的完整仿真。

Stars: 0 | Forks: 0

# 步步高 BBK 9288 QEMU 模拟器 这是基于 QEMU 11.0 和 [HelloClyde/bbk9288s-qemu](https://github.com/HelloClyde/bbk9288s-qemu) 实现的 BBK 9288 硬件模拟器。9288 和 9288S 使用相同的 Epson S1C33L05 平台,但整机形态并不相同:9288 是 `320 × 240` 横屏、53 键、无触摸屏; 9288S 则是 `160 × 240` 竖屏触摸机。原 9288S/Web 控制台说明保留在 [README-9288S.md](README-9288S.md)。 源码仓库不包含步步高原厂固件、系统文件或 NAND 镜像。运行前请自行准备 有权使用的 9288 V1.5 NAND;Windows 便携发布包也应将这些文件作为独立资产 提供,不写入 Git 历史。 ## 已实现 - 新 QEMU machine type:`bbk9288`,保留原 `bbk9288s` 兼容性。 - 320 × 240 LCDC、40 KiB IVRAM 及 1/2/4/8 bpp 调色板渲染。 - 9288 启动扩展窗口 `0x003A0000`,包括固件实测的初始化命令和就绪握手。 - S1C33L05 标准串行接口状态,启动所需的 TDBE 行为。 - Samsung 兼容 256 MiB NAND、2 KiB 页、64 字节 OOB、FTL 和 FAT16。 - NAND 按脏块增量回写,每 250 ms 同步一次;即使模拟器被强制结束,已经完成 的页编程和块擦除也不会等到正常退出才落盘。 - 从 NAND 中递归定位并加载 `kernel.bin`。 - V1.5 完整文件树:根目录 `kernel.bin`、`mp3`、`系统`,共 260 个文件、 156,310,685 字节。 - 8 行 × 7 列原机键盘矩阵:`0x00300F46` 行选通、K5/P0 七路列输入、 K6.4 唤醒和 Timer3 去抖中断。 - 按 V1.5 内核 `0x021994DC` 的矩阵转换表映射数字、字母、翻页、删除、 确定、功能键和四方向键。 - 16 位 Timer0/1 比较中断、四路 8 位定时器及 HSDMA 单次/连续/块传输。 - S1C33 的 `INT`、`RETD`、`BRK`、`MIRROR` 和 `MAC` 指令。 - VS1003 压缩音频数据通路;Windows 包通过 `ffplay.exe` 直接播放原固件 从 NAND 读取并送往解码器的声音。 - Windows SDL 桌面窗口、可点击的 53 键软键盘及一键启动脚本。 当前固件可进入 V1.5 词典桌面,显示词典、翻译、语法、阅读、作文等应用 图标。已实测软键盘“确定”可关闭系统提示,方向键可移动日历选中框。 NAND 是可写的,并在运行过程中增量保存。 ## 直接运行 源码构建完成后运行: .\run-bbk9288.ps1 -Nand .\runtime\nand-user.raw 如果使用 Windows 便携发布包,也可以直接双击: 启动BBK9288.cmd 源码目录启动方式默认在 `C:\msys64\ucrt64\bin` 查找 SDL2 和构建依赖。 便携包需要包含构建产物 `bbk9288.exe` 及其运行库。 启动后会同时出现 320 × 240 模拟器窗口和“BBK 9288 — 53 键软键盘”。 直接点击软键盘即可操作;电脑键盘上的数字、字母、Enter、Delete、 PageUp/PageDown 和方向键也会走同一套原机矩阵。软键盘的 `Shift` 是锁定键: 先点 `Shift`,再点一个字母或数字即可发送组合键。 启动器会优先使用同目录或 `PATH` 中的 `ffplay.exe` 播放声音,也可通过 `-AudioPlayer <路径>` 指定,或用 `-NoAudio` 禁用。`ffplay` 本身不随源码 仓库分发。 ## 构建 在 MSYS2 UCRT64 环境中: mkdir -p _build cd _build ../configure \ --target-list=s1c33-softmmu \ --without-default-features \ --enable-tcg \ --enable-vnc \ --enable-pixman \ --enable-sdl \ --disable-sdl-image \ --disable-werror \ --disable-docs \ --disable-tools ninja qemu-system-s1c33.exe 确认机型: .\_build\qemu-system-s1c33.exe -machine help 输出中应同时包含 `bbk9288` 和 `bbk9288s`。 ## 生成 9288 NAND `bbk9288s_nand_image.py` 现在允许安装到 FAT 根目录,并可先清空目标。以一份 已格式化的原始 NAND 为模板: python -m pip install -r .\requirements-bbk9288s.txt python .\scripts\bbk9288s_nand_image.py install ` .\template-nand.raw ` C:\path\to\system-tree ` --output .\runtime\nand-user.raw ` --flat .\runtime\nand-user.fat.img ` --target / ` --replace-target 脚本会重新生成 GBK 兼容的 FAT 短文件名,并核验 `/系统/数据/HZK_LIB.BIN`。 ## 启动探针 开发时可用短时探针查看 CPU、MMIO 和 LCD: python .\scripts\bbk9288_probe.py ` --nand .\runtime\nand-user.raw ` --seconds 8 输出帧位于 `_build\bbk9288-probe\probe.pgm`。 ## 回归测试 下面的测试会校验 CPU 新指令、V1.5 启动、LCD、键盘硬件路径、NAND 强制退出 恢复及二次启动;测试使用 NAND 副本,不修改传入的原镜像: .\scripts\test-bbk9288.ps1 ` -Nand .\runtime\nand-user.raw ` -AudioPlayer ## 代码结构 - `hw/s1c33/bbk9288s.c`:9288/9288S 板级设备、LCD、NAND、音频、定时器、 DMA 和输入模型。 - `target/s1c33/`:Epson S1C33 CPU 翻译、指令 helper 和反汇编。 - `scripts/bbk9288s_nand_image.py`:NAND FTL/FAT16 提取、安装与重新打包。 - `scripts/bbk9288-softkeyboard.ps1`:Windows 53 键软键盘。 - `scripts/bbk9288_probe.py`、`scripts/test-bbk9288.py`:短时探针和端到端 回归测试。 ## 资料依据 - 9288 原机 V1.2 使用说明书:规格页给出 320 × 240、53 键、256M Flash, 外观页确认横屏键盘机且没有触摸层。 - [Epson S1C33L05 Technical Manual](https://www.epson.jp/prod/semicon/pdf/id000446.pdf): CPU、40 KiB IVRAM、LCDC、NAND、串行接口及寄存器定义。 - [BBK 9288S QEMU 参考实现](https://github.com/HelloClyde/bbk9288s-qemu): S1C33 CPU、NAND FTL、定时器、DMA 和 LCDC 的基础模型。 ## 当前限制 - USB 和少量未被 9288 V1.5 固件当前路径使用的板级扩展寄存器仍是实验性模型。 - 音频已接通宿主播放,但仍由 `ffplay` 负责 MPEG 解码,不模拟 VS1003 内部 的音质、模拟输出和所有 SCI 扩展行为。 - 53 键矩阵按 V1.5 内核表实现;个别功能键在不同应用中的用途由固件上下文 决定,键帽文字采用 V1.2 使用说明书中的通用名称。 - 此项目是非官方逆向工程,与步步高、Epson 或 QEMU 项目没有隶属关系。 ## 许可证 模拟器源码沿用 QEMU 的许可证体系;整体按仓库根目录 `LICENSE`、`COPYING` 和各源文件中的许可证声明发布。请勿在 Issue、PR 或提交中上传无权再分发的 原厂固件、NAND 镜像、说明书或安装包。
标签:AI合规, Epson S1C33L05, QEMU, 内联执行, 客户端加密, 嵌入式系统, 底层开发, 步步高9288, 硬件模拟器, 身份验证强制, 逆向工具