#game #experience #managed #following #intended #try #style

nightly gba

一个用于“原始”风格的GBA开发的Crate。如果您想体验“托管”体验,请尝试使用agb Crate。

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

Download history 16/week @ 2024-04-27 15/week @ 2024-05-04 176/week @ 2024-05-11 55/week @ 2024-05-18 12/week @ 2024-05-25 25/week @ 2024-06-01 23/week @ 2024-06-08 40/week @ 2024-06-15 64/week @ 2024-06-22 103/week @ 2024-06-29 14/week @ 2024-07-06 30/week @ 2024-07-13 6/week @ 2024-07-20 49/week @ 2024-07-27 4/week @ 2024-08-03 2/week @ 2024-08-10

每月下载量70
rustygba中使用

Zlib OR Apache-2.0 OR MIT

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 buildcargo 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 {}
}
  • 可选:使用 objcopygbafix cargo build 将生成ELF文件,mGBA可以直接运行这些文件。如果您想在真实硬件上运行程序,您需要首先使用 objcopy 将ELF文件中的原始二进制文件提取出来并创建自己的文件,然后使用 gbafix 为文件添加适当的头信息。objcopy 是您已经安装的ARM binutils的一部分,其名称应为 arm-none-eabi-objcopy。您可以通过cargo获取 gbafixcargo install gbafix

此库提供了一个与GBA交互的API,它是安全的,但对可以更改的组件有最少的限制。如果您想要一个提供更强组件访问控制的API,那么 agb 库可能正是您所需要的。

安全性

对库的所有安全性考虑都假设您正在为目标 thumbv4t-none-eabiarmv4t-none-eabi 构建使用提供的链接器脚本,并在GBA上运行代码。虽然打破这些假设是可能的,但如果您这样做,此库提供的某些或所有代码可能变得不安全。

依赖关系