3 个不稳定版本

0.1.0 2020年9月6日
0.0.2 2020年8月30日
0.0.1 2020年8月30日

#12 in #mmio

Zlib OR Apache-2.0 OR MIT

23KB
539

gba-types

GBA MMIO 结构体


lib.rs:

gba-types 包含与 GBA MMIO 寄存器交互的数据类型。

这里最重要的类型是由 bitstruct_newtype! 宏生成的

  • 它是一个封装原始无符号整数值的不透明结构体
  • 结构体中的每个 "字段" 都在整数数据内部位打包
  • 字段通常小于 8 位,但也可能大于 8 位,甚至正好是 8 位。
    • 单位字段是 bool。
    • 一些多位字段是范围缩小的整数。例如,Color 值具有 RGB 通道,但每个通道只有 5 位,因此允许的范围是 0 到 31。
    • 一些多位字段基本上是枚举,但为了提高 FFI 安全性,我们使用 "const_enum" 宏(见下文)而不是实际的 Rust enum 类型。
  • 每个字段都有一个获取器和设置器。许多 MMIO 位置不是所有字段都可读可写,但即使如此,每个结构体都有所有字段的获取器和设置器,以便尽可能容易地在内存中操作值。

此 crate 还包含一些被认为是 const_enum! 类型的辅助类型

  • 这是一个不透明值,它应该是关联的特定常量列表之一。
  • 与正常枚举一样,值的位模式并不重要,重要的是除字面数值以外的某些语义意义。
  • 与正常枚举不同,由于这是一个封装的整数,因此它更适合 FFI。如果非法的位模式 确实 以某种方式从寄存器中读取,则不会立即导致 UB。

仅限 Nightly 版本

  • 此 crate 利用 const_mut_refs Nightly 功能,允许设置器函数都是 const。这可能“ sooner rather than later”变得稳定,尤其是与其他 GBA 编程可能使用的 Nightly 功能相比。

无运行时依赖项