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

Made with Slides.com