This crate contains hardware register tables and support functions for
8-bit retro computers like the Commodore 64, MEGA65 and others.
Please check the examples/
directory to see how Rust can be
used generate demo effects.
The project requires rust-mos and is setup to build for C64 by default. A docker image of rust-mos is available if you do not fancy compiling LLVM.
Read and write to labelled hardware registers:
~~~ rust use mos_hardware::{c64,vic2};
let oldbordercolor = (c64::VIC).border_color.read(); (c64::VIC).bordercolor.write(c64::LIGHTRED);
(*c64::SID).potentiometer_x.write(3); // error: read-only register ~~~
Use bitflags to control hardware behaviour, e.g. where the VIC-II chip accesses screen memory and character sets:
~~~ rust let bank = vic2::ScreenBank::AT2C00.bits() | vic2::CharsetBank::AT2000.bits(); (*c64::VIC).screenandcharset_bank.write(bank); ~~~
Convenience functions to perform hardware-specific tasks, e.g. generate random numbers using noise from the C64's SID chip:
~~~ rust (*c64::SID).startrandomgenerator(); let random_number : u8 = rand8!(c64::SID); ~~~
The hardware registers are currently incomplete and the library may be subject to significant changes.
sid
vic2
(partially)cia
(partially)c64
(particlly)mega65
(scaffold only)