30个版本
0.11.6 | 2024年5月12日 |
---|---|
0.11.5 | 2024年3月4日 |
0.11.4 | 2024年1月21日 |
0.11.3 | 2023年11月15日 |
0.2.0 | 2018年11月13日 |
在游戏开发中排名第149
每月下载量70次
在rustygba中使用
165KB
2.5K SLoC
gba
Docs.rs 文档
此Crate旨在用于与GBA协同工作。
要为GBA构建,您需要使用build-std
,并且还需要激活compiler-builtins-weak-intrinsics
特性。
以下内容应位于您的.cargo/config.toml
中
[unstable]
build-std = ["core"]
build-std-features = ["compiler-builtins-weak-intrinsics"]
lib.rs
:
一个用于GBA开发的Crate。
如何使用此Crate创建自己的GBA项目
这将需要使用Nightly Rust。任何较新的Nightly版本都应该是可以的。
- 获取ARM Binutils:您需要在您的路径中安装ARM版本的GNU binutils,特别是链接器(
arm-none-eabi-ld
)。Linux用户可以使用软件包管理器。Mac和Windows用户可以使用ARM网站。 - 运行
rustup component add rust-src
:这将使rustup保留标准库源代码,这对于build-std
的正常工作至关重要。 - 创建一个
.cargo/config.toml
:您可能需要设置一个文件以提供所有正确的默认设置,以便基本的cargo build
和cargo run
能够“直接”工作。您可能想要以下内容。
[build]
target = "thumbv4t-none-eabi"
[unstable]
build-std = ["core"]
[target.thumbv4t-none-eabi]
runner = "mgba-qt"
rustflags = ["-Clink-arg=-Tlinker_scripts/mono_boot.ld"]
- 创建可执行文件:在此阶段,您可以创建一个
bin
或一个example
文件。每个可执行文件都需要使用#![no_std]
和#![no_main]
标记。它们还需要定义一个#[panic_handler]
,以及一个#[no_mangle] extern "C" fn main() -> ! {}
函数,这是汇编运行时在完全初始化系统后调用以启动Rust程序的地方。必须使用C ABI,因为Rust自己的ABI是不稳定的。
#![no_std]
#![no_main]
#[panic_handler]
fn panic_handler(_: &core::panic::PanicInfo) -> ! {
loop {}
}
#[no_mangle]
extern "C" fn main() -> ! {
loop {}
}
- 可选:使用
objcopy
和gbafix
:cargo build
将生成ELF文件,mGBA可以直接运行这些文件。如果您想在真实硬件上运行程序,您需要首先使用objcopy
将ELF文件中的原始二进制文件提取出来并创建自己的文件,然后使用gbafix
为文件添加适当的头信息。objcopy
是您已经安装的ARM binutils的一部分,其名称应为arm-none-eabi-objcopy
。您可以通过cargo获取gbafix
:cargo install gbafix
。
其他GBA相关库
此库提供了一个与GBA交互的API,它是安全的,但对可以更改的组件有最少的限制。如果您想要一个提供更强组件访问控制的API,那么 agb 库可能正是您所需要的。
安全性
对库的所有安全性考虑都假设您正在为目标 thumbv4t-none-eabi
或 armv4t-none-eabi
构建使用提供的链接器脚本,并在GBA上运行代码。虽然打破这些假设是可能的,但如果您这样做,此库提供的某些或所有代码可能变得不安全。