úll (Irish for 🍎 and written as ull when referring to the code) is a family of Rust crates currently aimed at
emulating 8-bit machines, including the MOS 6502 and its offshoots. The primary focus at this stage of development is
the 6502-based Apple II systems, but it would be a long-term goal to also include Z80-based systems as well, all with a
cohesive API that shares common abstractions.
ull is a no_std base crate that hosts the shared primitives (Nibble, Byte, Word) plus the
Bus trait and sample buses.
ull65 is a no_std 6502/65C02 CPU core with pluggable buses and instruction sets. More info can be
found in the README.
Examples can be run using cargo run -p ull65 --example <name>.
hello_world.rscopies"Hello, World!"into zero-page RAM, halts onBRK, then inspects memory.cargo run -p ull65 --example hello_worldcustom_instruction_set.rsstarts from the MOS table, patches opcode$00, and stops once the custom handler advances the program counter.cargo run -p ull65 --example custom_instruction_setdma_loop.rsexercisesCpu::tickalongside a bus that keeps DMA bursts in sync with instruction timing.cargo run -p ull65 --example dma_loopapple1.rswires the core up to a minimal Apple I bus so you can boot WOZMON and interact over the terminal to run BASIC.cargo run -p ull65 --example apple1nestest.rsruns the well-known NES CPU validation ROM using a Ricoh 2A03-style instruction set with a minimal NES bus.cargo run -p ull65 --example nestest