Languages: 日本語 | English | 简体中文
设计构想:はむ(@Imaha486)
PS1 BIOS Video Ripper ZX是一款实验性的浏览器工具,用于备份您本人所拥有的初代PlayStation的512 KiB BIOS。PS1端程序读取BIOS,将数据编码为彩色单元并连续显示为视频画面。UVC采集设备把视频送入浏览器,浏览器完成解码、校验、合并,并保存为 ps1-bios.bin。所有处理均在浏览器本地完成,不会把BIOS上传到服务器。
请仅将本工具用于备份您本人所拥有设备的BIOS。
flowchart LR
PAD["PS1手柄<br/>按START开始传输"] -. 操作 .-> PS1["初代PlayStation<br/>运行专用程序"]
PS1 -->|"AV MULTI OUT<br/>复合视频"| UVC["UVC采集设备<br/>建议640×480 / 60 fps"]
UVC -->|USB| PC["PC / Mac"]
PC --> WEB["PS1 BIOS Video Ripper ZX<br/>通过HTTPS打开"]
WEB --> DEC["视频帧解码<br/>多数表决纠错 · CRC32 · LZSS"]
DEC --> BIOS["ps1-bios.bin<br/>512 KiB"]
- 在PS1上运行专用程序。
- 将PS1复合视频输出连接至UVC采集设备。
- 打开接收页面,选择摄像头并点击“启动摄像头”。
- 浏览器进入等待状态后,按下PS1手柄的START键。
- 等待所有数据块及完整BIOS通过CRC32校验。
- 保存
ps1-bios.bin。
程序从物理地址 0xBFC00000 读取524,288字节,并计算完整BIOS的CRC32。如果LZSS压缩能够减小数据量则发送压缩数据,否则发送原始数据。数据被拆分为多个视频帧;每帧重复显示。发送到最后一帧后会从头循环,因此先前遗漏的帧可以在后续循环中补齐。
画面包含48×34个数据单元:
- COLOR4: 4种颜色,每个单元2位
- COLOR8: 8种颜色,每个单元3位
接收器通过定位图案估计画面位置与形变,在每个单元周围进行多点采样,并自动判断COLOR4或COLOR8。
每帧由32字节头部和数据载荷组成,主要字段包括:
PS1V魔数- 协议版本
- 帧编号及其反码
- 总帧数
- 载荷长度和BIOS偏移
- 还原后的BIOS大小
- 完整BIOS的CRC32
- 当前帧CRC32
帧编号、反码、长度、偏移、协议、会话信息或CRC不一致时,该帧不会被采用。
浏览器结合JavaScript、Web Worker和WebAssembly解码器:
- 检测定位图案。
- 采样单元颜色。
- 自动识别COLOR4或COLOR8。
- 解码头部和载荷。
- 校验帧CRC32。
- 按帧编号保存有效数据。
- 合并全部载荷。
- 必要时进行LZSS解压。
- 校验完整BIOS的CRC32。
- 只有全部检查通过后才允许下载。
视频获取和快速初次判定在主线程进行,失败帧的重新搜索交给Web Worker。Worker数量根据逻辑CPU数自动选择,范围为1至8个,并为主线程保留一个核心。错误候选使用32个槽位。发送给Worker的图像缩小为320×240 RGB,并通过转移ArrayBuffer所有权避免大块复制。
CRC32用于发现错误,本身不负责修复。同一帧解码失败的多个独立观测会被保留。主路径最多保留最近8个样本,Worker恢复路径最多保留32个样本。样本达到3个后,对每个字节的每一位进行多数表决。修复结果只有再次通过CRC32才会被采用。多数表决负责纠错,CRC32负责确认纠错结果。
每个视频帧都带有独立CRC32。全部帧合并并完成LZSS解压后,还会校验完整512 KiB BIOS的CRC32。因此不完整或损坏的BIOS不会被当作成功结果下载。
PS1会循环发送全部帧。浏览器使用Map保存已通过校验的帧编号并快速跳过重复帧。后续循环只需补齐缺失帧,可从瞬时噪声或UVC丢帧中恢复。
接收器会学习成功的采样候选并用于后续帧。每个单元周围的多个样本通过投票决定颜色,以提高对采集设备色彩转换、轻微裁切和位置偏移的容忍度。
视频解码、LZSS解压、CRC校验和BIOS文件生成全部在浏览器内完成。诊断信息会显示主线程与Worker数量、正在工作的Worker、错误缓冲区、等待任务、独立样本数、帧率及错误类型。
只有同时满足以下条件才会提供下载:
- 已接收所有必需帧;
- 每个采用的帧均通过CRC32;
- LZSS解压结果恰好为524,288字节;
- 还原BIOS的CRC32与PS1端计算值一致。
- 摄像头API需要安全上下文,请使用HTTPS页面。
- 建议使用640×480、60 fps的UVC采集环境。
- 请先启动浏览器摄像头,再按PS1上的START。
- 不同UVC设备的颜色转换、延迟和丢帧特性可能不同。
