0322-Chip8-通过第二个测试
环境
- Time 2023-07-26
- Zig 0.11.0-dev.4191+1bf16b172
- SLD2 2.28.1
前言
说明
参考资料:
- https://en.wikipedia.org/wiki/CHIP-8
- https://austinmorlan.com/posts/chip8_emulator/
- https://rsj217.github.io/chip8-py/
- https://github.com/Timendus/chip8-test-suite
其中最后一个提供了测试的套件,实现的过程中,可以检测哪些指令有问题,帮助很大。
目标
第二个测试,只需要在第一个的基础上,新增一个 7XNN 指令即可。
main.zig
- 加载第二个测试 rom。
const std = @import("std");
const chip8 = @import("chip8.zig");
pub fn main() !void {
// const rom = @embedFile("roms/1-chip8-logo.ch8");
const rom = @embedFile("roms/2-ibm-logo.ch8");
var emulator = chip8.Emulator.new(rom);
emulator.run();
}
execute
cpu 文件中其它不相关代码已省略。
fn execute(self: *CPU, memory: *Memory) void {
const ins = &self.instruct;
var reg = &self.register;
switch (ins.code) {
0x0 => memory.clearScreen(),
0x1 => self.pc = ins.nnn,
0x6 => reg[ins.x] = ins.nn,
0x7 => reg[ins.x] +%= ins.nn,
0xA => self.index = ins.nnn,
0xD => self.draw(memory),
else => std.log.info("unknown opcode: 0x{X:0>4}", .{ins.opcode}),
}
}
启动
zig build run
效果

总结
实现了 7XNN 指令,通过了 Chip-8 测试 rom 的第二个。

浙公网安备 33010602011771号