14个不稳定版本 (3个重大变更)
0.4.0 | 2024年3月3日 |
---|---|
0.3.1 | 2023年7月1日 |
0.3.0 | 2023年6月30日 |
0.2.0 | 2023年3月1日 |
0.1.7 | 2022年7月31日 |
#296 in 嵌入式开发
325KB
5.5K SLoC
MOS-Hardware
本包包含8位复古计算机(如Commodore 64、Commander X16、MEGA65等)的硬件寄存器表和支持函数。请查看examples
目录,了解如何使用Rust生成简单的演示效果。
目标
- 对CBM(受启发的)8位计算机上的Rust编程提供优秀支持
- 标记寄存器,用于表达性硬件编程
- 尽可能使用直观的位标志和类型检查
- 最小化资源影响
示例
读取和写入标记的硬件寄存器
use mos_hardware::{c64, vic2};
let old_border_color = c64::vic2().border_color.read();
unsafe {
c64::vic2().border_color.write(vic2::LIGHT_RED);
c64::sid().potentiometer_x.write(3); // compile error: read-only register
}
使用位标志安全地控制硬件
...例如,VIC-II芯片访问屏幕内存和字符集
use mos_hardware::{c64, vic2};
let bank = vic2::ScreenBank::AT_2C00.bits() | vic2::CharsetBank::AT_2000.bits();
unsafe {
c64::vic2().screen_and_charset_bank.write(bank);
}
方便的函数以执行特定于硬件的任务
...例如,使用C64的SID芯片的噪声生成随机数
use mos_hardware::c64::*;
clear_screen();
sid().start_random_generator();
let value = sid().random_byte();
入门指南
本项目需要rust-mos,并默认设置为构建C64。如果您不想编译LLVM,则有一个Docker镜像可用。如果您想开始使用mos-hardware
的新项目,有一个Github模板。
Docker和Visual Studio Code
最简单的方法是使用提供的Visual Studio Code的.devcontainer.json
配置文件。在启动VSC之前,您可能想编辑.devcontainer.json
以指向一个最近的、标记的mrkits/rust-mos
镜像。特别是,如果您在ARM架构上,例如Apple Silicon,请确保使用为linux/arm64
编译的镜像,因为Docker中模拟x86非常慢。
- 安装并启动Docker
- 使用“远程 - 容器”扩展配置Visual Studio Code
当被要求时,在“开发容器”中重新打开。cd mos-hardware code --install-extension ms-vscode-remote.remote-containers code .
- 在VSC终端中,使用以下命令进行构建:
cargo build --release --target mos-c64-none --example c64-plasma
- 在
target/
中找到二进制文件,并在模拟器中运行或传输到真实硬件。
故障排除
- 如果您遇到
cargo/home
的问题,强制使用较旧版本cargo update -p [email protected] --precise 0.5.5
状态
硬件寄存器目前不完整,库可能会发生重大变化。
- Commodore 64:
-
sid
-
vic2
-
cia
(部分) -
c64
内存映射(部分) - PSID文件支持SID音乐
- 随机数特性(
RngCore
)
-
- Commander X16
-
vera
-
via
(部分) -
cx16
内存映射(部分) - 支持函数
-
- MEGA65:
- 对vic3、vic4和其他硬件寄存器的部分支持。
- mega65-libc绑定
- 随机数特性(
RngCore
,SeedableRng
) - 28位地址空间迭代器
- 示例:
- 等离子体效果(c64,mega65)
- 光栅中断(c64)
- 精灵(c64)
- 平滑X滚动(c64)
- 游戏手柄读取(c64)
- 10print迷宫(c64)
- 内存迭代和FAT指针(mega65)
依赖项
~405–580KB
~12K SLoC