1 个不稳定版本
0.1.0-alpha | 2022年2月2日 |
---|
#195 in 仿真器
62KB
1.5K SLoC
Rusty6502
为了理解 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();