BUILD A CHIP-8 EMULATOR
FROM SCRATCH
@豆叮
目录
什么是模拟器?
什么是 CHIP 8?
标准的 CHIP 8 “硬件” 配置
CHIP 8 的运行方式
Q & A
什么是模拟器(Emulator)
模拟器本质上是以软件的形式模拟某种特定的计算机硬件设备
如果你不太清楚这个概念,看看下面这些软件你应该会很熟悉
街机模拟器(Winkawaks)
NES模拟器(VirtualNES)
是什么CHIP 8
CHIP 8 是上世纪 70 年代发明的一种机器语言,它有 35 种指令
我们要做的是实现 CHIP 8 模拟器,来执行 CHIP 8 指令
一些 CHIP8 指令编写的游戏
标准的 CHIP 8 模拟器“硬件”配置
标准的 CHIP 8 模拟器包含以下硬件
- 4KB 的内存
- 16个单字节的通用寄存器
- 1个双字节的地址寄存器
- 大小为16个双字节的栈
- 16个键盘按键
- 64 * 32 分辨率的单色屏幕
- 延迟计时器
- 声音计时器
标准的 CHIP 8 模拟器“硬件”配置
4KB 的内存(用来存东西:等待执行的指令、模拟器运行中的数据)
16个单字节的寄存器(也是用来存运行过程中的数据的)
1个双字节的地址寄存器(用来内存寻址)
包含16个双字节的调用栈(用来维护调用栈)
标准的 CHIP 8 硬件配置
16 个按键,用数值 0x0 ~ 0xF 来表示每一个按键(用来输入东西)
64 * 32 像素的单色屏幕(用来输出)
标准的 CHIP 8 硬件配置
延迟计时器(每个执行周期会递减,用于作一些定时控制)
声音计时器(每个执行周期会递减,大于零就会叫...)
CHIP 8 模拟器的运行方式
Chip 8 程序
(一堆 Chip8 指令)
载入
4KB 大小的内存
(从第 512 个位置开始装载,512 之前的位置是保留地址,
有其他用途)
从第 512 个字节
开始顺序执行
这些指令会去修改
屏幕中像素点的值
不断将屏幕缓冲区中的内容更新到屏幕上
我是 4KB 大小内存
怎么装载 CHIP 8 程序
使用 FileReader 的 readAsArrayBuffer 方法 来以二进制的格式读取文件
怎么执行指令
实现 CHIP 8 中的 35 个操作码,封装成 perform 函数
怎么执行指令
在每个 requestAnimationFrame 中,从内存中取出一条指令进行执行
怎么绘制屏幕内容
遍历 display 数组,1 表示显示该像素点亮,0表示不点亮
怎么让浏览器叫
怎么让浏览器发出声音
声音是一种波,两个关键特性
响度:声音的大小,由振幅决定,振幅越大声音越大
音调:声音的高低,由频率决定,频率越高声音越尖
AudioContext
源码
参考
Q & A
Build a chip8 emulator
By 小新
Build a chip8 emulator
- 628