3 个不稳定版本
0.1.0 | 2020年9月6日 |
---|---|
0.0.2 | 2020年8月30日 |
0.0.1 | 2020年8月30日 |
#12 in #mmio
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 功能相比。