#gameboy #emulation #instructions #assembly #olympia #run #engine

no-std olympia_engine

Olympia是一个Gameboy模拟器和工具包,旨在以原生或Web Assembly应用的形式运行,目标是对周期计数进行精确模拟。olympia_engine是原生和wasm共用的核心。

5个不稳定版本

0.3.0 2020年5月10日
0.2.0 2019年12月24日
0.1.2 2019年12月22日
0.1.1 2019年12月22日
0.1.0 2019年12月13日

#303 in 模拟器


用于 3 crates

GPL-3.0-or-later

325KB
9K SLoC

Olympia Engine

引擎是Gameboy模拟的核心逻辑。它在一个no_std环境中工作,允许它在Web Assembly环境中使用。然而,它需要corealloc包。如果您在使用std环境,您可以将std功能包含在内,以使用如Display实现等有用的附加功能。

decoder包用于将二进制ROM转换为可以在模拟的Gameboy中执行的内部分布。

gameboy包包含实现Gameboy功能的逻辑。在编写本文时,这仅限于CPU。

顶层有各种模块,如instructionsregisters,定义了在整个模拟器中使用的类型。

模拟细节

指令在decoder包中解码。对于大多数指令,它们在decoder.rs中的表中查找。对于更复杂的指令,表中可以注册一个解码器。然后,将运行以解码指令。请注意,在解码时,如果指令有操作数,它将存储下一个字节(字节)的值,但在执行时将再次读取以允许更改,因此存储的值主要用于反汇编使用。

依赖项

~1.3–1.7MB
~32K SLoC