#chip8 #终端 #程序 #最小 #ROM #chip8模拟器 #deca

应用 termin-8

终端运行的CHIP-8模拟器

8个版本

0.1.7 2022年8月10日
0.1.6 2022年8月9日
0.1.5 2022年7月25日
0.1.4 2021年11月9日
0.0.1 2021年10月11日

#77 in 模拟器

MITLGPL-3.0-or-later

26KB
368

Termin-8

crates.io dependency status

终端运行的CHIP-8模拟器,且符合Octo规范。

deca提供支持,它支持CHIP-8、SUPER-CHIP(SCHIP)和XO-CHIP程序。

它还会自动调整其显示以适应您的终端(以牺牲广泛字体支持和XO-CHIP在最小尺寸的颜色为代价)。

安装

首先,安装Rust。然后,在您的终端

cargo install termin-8

用法

Termin-8应在Windows、Linux和macOS上工作。如果不工作,请提交问题

从互联网下载CHIP-8 ROM,如Chip8社区存档,或使用Octo制作自己的。

然后在您的终端中运行Termin-8

termin-8 ROM

有一些命令行选项

termin-8 --help

十六进制CHIP-8键盘通常映射到以下键盘键

1 2 3 4
q w e r
a s d f
z x c v

此外,箭头键绑定到WASD。

您可以按Esc键退出。

调试功能

Termin-8可以用作测试开发CHIP-8游戏,作为Octo(网页)和C-Octo(SDL)的替代品。然而,Termin-8还不能自行编译Octo代码。在全部终端工作流程中,使用C-Octo的octo-cli工具来编译您的代码。

当Termin-8运行时,按以下键进行进一步调试

  • i:中断执行并显示寄存器内容(或中断后继续执行)
  • o:单步(中断时)

终端要求

请注意,终端要求取决于您尝试运行的程序类型。

这里有一个表格,列出了运行CHIP-8程序时所需的终端大小和Unicode支持,以便获得XO-CHIP颜色支持等功能,这取决于您运行CHIP-8程序的分辨率和字体对Unicode区块元素的支持

CHIP-8分辨率Unicode版本最小终端大小像素大小XO-CHIP颜色
64x32 (低分辨率)
CHIP-8, SCHIP, XO-CHIP
1.0.0 128x32 ██
64x32
64x16
3.2 32x16
128x64 (高分辨率)
SCHIP, XO-CHIP
1.0.0 256x64 ██
128x64
128x32
3.2 64x32
CHIP-8分辨率Unicode版本最小终端大小像素大小XO-CHIP颜色
64x32 (低分辨率)
CHIP-8, SCHIP, XO-CHIP
1.0.0 128x32 ██
64x32
64x16
3.2 32x16
3.0 32x8
128x64 (高分辨率)
SCHIP, XO-CHIP
1.0.0 256x64 ██
128x64
128x32
3.2 64x32
3.0 64x16

注意事项

  • 在您的浏览器中,最小的像素块(▘)可能看起来是方形的,但您的等宽终端字体可能会有所不同。
  • 几乎所有字体都支持Unicode 1.0.0中的基本Unicode区块元素,这些元素用于较大的像素块(█, ▀ 和 ▄),但Unicode 3.0和3.2中最小块(如▘)的支持要少得多。例如,DejaVuFira Code字体支持它们。
  • 最小的像素块(如⠁)是Unicode盲文符号,它们不太常见。修改过的Nerd Fonts支持它们。

限制

  • 有些游戏可能无法正确检测按键。这是因为在终端中检测按键释放非常困难。Termin-8对按键持续时间进行了近似,但您的操作系统“按键重复”设置将影响它可以多频繁地轮询按键。
  • 当有声音时,您的终端的蜂鸣声会响,但XO-CHIP音乐不受支持(因为终端本身不能播放声音)。

配置文件

Termin-8将在用户主目录中寻找名为.octo.rc的文件,该文件可用于配置一些有用的设置。此文件也由C-Octo使用。

您还可以通过命令行选项-c提供配置文件。这可以用于为特定游戏设置一些选项——颜色,以匹配作者的视觉艺术,或“古怪”的行为,以便游戏正常运行。

该文件具有传统的.INI结构——空行或以#开头的行将被忽略,其余部分由用=分隔的键和值组成。有意义的键如下

  • core.tickrate:每60Hz帧要执行的CHIP-8指令数量。

  • core.max_rom:编译器在汇编ROM时允许的最大字节数。

  • core.font:以下之一{octo, vip, dream_6800, eti_660, schip, fish}用于选择内置的CHIP-8字体。

  • color.plane0, color.plane1, color.plane2, color.plane3:4个XO-CHIP“平面”颜色。

  • color.background:当没有播放声音时,绘制在CHIP-8显示背后的边框。

  • color.sound:播放声音时的交替边框颜色。

  • quirks.shift:如果为 1,则 vx <<= vyvx >>= vy 将在原地对 vx 进行修改并忽略 vy,类似于SCHIP。

  • quirks.loadstore:如果为 1,则 loadstore 不会在 i 上进行后增量,类似于SCHIP。

  • quirks.jump0:如果为 1,模拟SCHIP在HP-48上的一个错误行为:jump0的目标地址的高4位决定了使用的偏移寄存器(而不是始终使用 v0)。

  • quirks.logic:如果为 1,在 &=|=^= 之后清除 vf。在VIP上,这些指令会使 vf 处于未知状态。

  • quirks.clip:如果为 1,则不会将精灵绘制“绕过”显示的边缘。

  • quirks.vblank:如果为 1,则绘制精灵将阻塞,直到60Hz帧的结束,类似于VIP。

所有颜色均指定为六位十六进制RGB,如 996600。默认的quirks设置、调色板和其他选项与web-octo相同。

依赖项

~8-21MB
~251K SLoC