#仿真器 #汇编 #6502

bin+lib rusty_6502

一个 rusty 6502 仿真器

1 个不稳定版本

0.1.0-alpha2022年2月2日

#195 in 仿真器

自定义许可证

62KB
1.5K SLoC

Rusty6502

Crates.io 版本 文档 用 Rust 编写的 6502 仿真器。

为了理解 6502 架构和汇编而创建。您可以在这里看到进度,当所有指令都实现后,将出现更多示例。我的目标是实现所有指令,并创建一个可以与许多不同平台一起工作的混合平台。6502 汇编易于学习且有趣,计划中的混合平台可以帮助其他开发者了解 CPU 的工作原理。

虚拟控制台

此仓库有一个虚拟控制台,可以用来测试仿真器。您可以在这里找到它。

示例

//Create memory space
let mut mem = mem::MEM::new();

//Create CPU
let mut cpu = cpu::CPU::new(&|_| {
    //Optional debugger see [cpu::debugger](./src/cpu.rs#L50)
});

//Reset the CPU, with start point at 0x600
cpu.reset(600, &mut mem);

/*
    LDA #$01; Load accumulator with 01
*/
mem[600] = 0xA9;
mem[601] = 0x01;

let (cycles, ending_pc) = cpu.execute_continuous(&mut mem);
//Print A, X, and Y registers
println!("\nA: {:02x} X: {:02x} Y: {:02x}", cpu.A, cpu.X, cpu.Y);

//Print status flags
println!(
        "| NV-BDIZC |\n| {}{}{}{}{}{}{}{} |",
        cpu.status_flags.N,
        cpu.status_flags.V,
        cpu.status_flags.U,
        cpu.status_flags.B,
        cpu.status_flags.D,
        cpu.status_flags.I,
        cpu.status_flags.Z,
        cpu.status_flags.C
    );

//Print program counter and stack pointer
println!("PC: {} SP: {:02x}", cpu.PC, cpu.SP);
//Print processor status
println!("PS: {:02x}", cpu.status_flags.get_ps());

//Dump the memory for inspection, hex viewer is helpfull
File::create("mem.dump").unwrap().write_all(&mem.data).unwrap();

许可证

GPL-2.0 许可证

无运行时依赖