BBK(步步高)A 系列电子词典是 2000 年代风靡中国校园的掌上设备。除了词典功能,它还内置了 6502 CPU,运行着大量由爱好者编写的游戏——从 RPG、策略到动作冒险,种类丰富。
这些游戏以 .gam 格式分发,运行在 159×96 像素的单色 LCD 屏幕上。如今通过 BBKEmu,你可以在现代设备上重温这些经典。
从 6502 CPU 到 LCD 显示,全栈 Rust 实现
基于 mos6502 crate 的精确 6502 指令集模拟,完整支持 Bank-switched 内存映射,忠实还原步步高词典硬件。
159×96 像素单色 LCD 帧缓冲区,支持 LCD 残影效果和横竖屏切换,还原经典绿色液晶屏视觉体验。
完整的 BBK 按键矩阵模拟,支持方向键、确认键、取消键等全部按键,带可配置的按键重复间隔。
可配置频率和时长的音频合成系统,还原步步高词典的蜂鸣器音效,支持游戏中的声音反馈。
支持 GameShark 格式作弊码、Save/Load State 存档功能,以及 SRAM 闪存模拟,让游戏体验更加灵活。
完整的 libretro 核心,支持 RetroPad 映射、核心选项(CPU/Timer 速率、LCD 方向)、Save State 等 RetroArch 生态功能。
152 款游戏,4 大分类,98% 通过测试
清晰的三层架构,平台无关的核心引擎
从 6502 CPU 到 LCD 帧缓冲区,全部用 Rust 从零实现
// Bank-switched memory bus
// BBK uses flash banking for ROM
pub struct MemoryBus {
flash: Vec<u8>, // 2 MiB flash
ram: [u8; 0x10000], // 64 KiB RAM
bank_regs: [u8; 8], // bank registers
}
impl MemoryBus {
pub fn read(&self, addr: u16) -> u8 {
match addr {
0x0000..=0x3FFF => {
// Banked ROM region
let bank = self.bank_regs[...];
self.flash[bank_offset + addr]
}
0x4000..=0x7FFF => self.ram[addr],
// ... hardware registers
}
}
}
// 159×96 monochrome LCD framebuffer
// with ghosting effect simulation
pub struct Lcd {
buffer: [bool; 159 * 96],
prev_buffer: [bool; 159 * 96],
contrast: u8,
}
impl Lcd {
pub fn set_pixel(&mut self,
x: usize, y: usize, on: bool
) {
if x < 159 && y < 96 {
self.buffer[y * 159 + x] = on;
}
}
pub fn render_rgb565(&self,
out: &mut [u8],
) {
// Green-tinted monochrome
// LCD ghosting via prev_buffer
}
}
几行命令,即刻体验
下载最新版本
从 Releases 页面下载对应平台的二进制文件
准备 ROM 文件
bbkemu game.gam -8 8.BIN -e E.BIN
或自动搜索 ROM
bbkemu game.gam
下载 libretro 核心
从 Releases 页面下载对应平台的核心文件
放置 ROM 文件
复制到 system/BBKEmu/A4980/ 目录
加载核心并启动
Load Core → BBKEmu → Load Content
克隆仓库
git clone https://github.com/jiangxincode/BBKEmu.git
编译 Standalone
cargo build -p bbkemu --release
或编译 RetroArch 核心
cargo build -p bbkemu-libretro --release