#c64 #8-bit #llvm-mos #6502 #mega65

nightly no-std mos-hardware

8位复古计算机(如Commodore 64、MEGA65等)的硬件寄存器表和支持函数

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 嵌入式开发

MIT/Apache

325KB
5.5K SLoC

Rust 3.5K SLoC // 0.1% comments C 1.5K SLoC // 0.2% comments GNU Style Assembly 290 SLoC

Open in Dev Containers Crates.io docs.rs

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非常慢。

  1. 安装并启动Docker
  2. 使用“远程 - 容器”扩展配置Visual Studio Code
    cd mos-hardware
    code --install-extension ms-vscode-remote.remote-containers
    code .
    
    当被要求时,在“开发容器”中重新打开。
  3. 在VSC终端中,使用以下命令进行构建:
    cargo build --release --target mos-c64-none  --example c64-plasma
    
  4. 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绑定
    • 随机数特性(RngCoreSeedableRng
    • 28位地址空间迭代器
  • 示例:
    • 等离子体效果(c64,mega65)
    • 光栅中断(c64)
    • 精灵(c64)
    • 平滑X滚动(c64)
    • 游戏手柄读取(c64)
    • 10print迷宫(c64)
    • 内存迭代和FAT指针(mega65)

依赖项

~405–580KB
~12K SLoC