1
0
mirror of https://github.com/mre/mos6502.git synced 2024-11-24 11:31:00 +00:00

fix the tests back up

This commit is contained in:
Sam M W 2023-04-03 07:31:49 +01:00
parent 12c901e8aa
commit 0708a1084c
4 changed files with 42 additions and 36 deletions

View File

@ -21,6 +21,7 @@ Source: [Wikipedia](https://en.wikipedia.org/wiki/MOS_Technology_6502)
```rust ```rust
use mos6502::memory::Bus; use mos6502::memory::Bus;
use mos6502::memory::Memory;
use mos6502::cpu; use mos6502::cpu;
fn main() { fn main() {
@ -50,7 +51,7 @@ fn main() {
0x4c, 0x10, 0x00, // Jump to .algo 0x4c, 0x10, 0x00, // Jump to .algo
]; ];
let mut cpu = cpu::CPU::new(); let mut cpu = cpu::CPU::new(Memory::new());
cpu.memory.set_bytes(0x00, &zero_page_data); cpu.memory.set_bytes(0x00, &zero_page_data);
cpu.memory.set_bytes(0x10, &program); cpu.memory.set_bytes(0x10, &program);

View File

@ -2,6 +2,7 @@ extern crate mos6502;
use mos6502::cpu; use mos6502::cpu;
use mos6502::memory::Bus; use mos6502::memory::Bus;
use mos6502::memory::Memory;
fn main() { fn main() {
println!("Enter two numbers (< 128) to know their GCD:"); println!("Enter two numbers (< 128) to know their GCD:");
@ -34,7 +35,7 @@ fn main() {
0x4c, 0x10, 0x00, // Jump to .algo 0x4c, 0x10, 0x00, // Jump to .algo
]; ];
let mut cpu = cpu::CPU::new(); let mut cpu = cpu::CPU::new(Memory::new());
cpu.memory.set_bytes(0x00, &zero_page_data); cpu.memory.set_bytes(0x00, &zero_page_data);
cpu.memory.set_bytes(0x10, &program); cpu.memory.set_bytes(0x10, &program);

View File

@ -30,10 +30,11 @@ extern crate mos6502;
#[cfg(not(test))] #[cfg(not(test))]
use mos6502::cpu; use mos6502::cpu;
use mos6502::memory::Bus; use mos6502::memory::Bus;
use mos6502::memory::Memory;
#[cfg(not(test))] #[cfg(not(test))]
fn main() { fn main() {
let mut cpu = cpu::CPU::new(); let mut cpu = cpu::CPU::new(Memory::new());
// "Load" a program // "Load" a program

View File

@ -949,7 +949,7 @@ mod tests {
#[test] #[test]
fn dont_panic_for_overflow() { fn dont_panic_for_overflow() {
let mut cpu = CPU::new(); let mut cpu = CPU::new(crate::memory::Memory::new());
cpu.add_with_carry(-128); cpu.add_with_carry(-128);
assert_eq!(cpu.registers.accumulator, -128); assert_eq!(cpu.registers.accumulator, -128);
cpu.add_with_carry(-128); cpu.add_with_carry(-128);
@ -963,7 +963,7 @@ mod tests {
#[cfg_attr(feature = "decimal_mode", test)] #[cfg_attr(feature = "decimal_mode", test)]
fn decimal_add_test() { fn decimal_add_test() {
let mut cpu = CPU::new(); let mut cpu = CPU::new(crate::memory::Memory::new());
cpu.registers.status.or(Status::PS_DECIMAL_MODE); cpu.registers.status.or(Status::PS_DECIMAL_MODE);
cpu.add_with_carry(0x09); cpu.add_with_carry(0x09);
@ -990,7 +990,7 @@ mod tests {
#[cfg_attr(feature = "decimal_mode", test)] #[cfg_attr(feature = "decimal_mode", test)]
fn decimal_subtract_test() { fn decimal_subtract_test() {
let mut cpu = CPU::new(); let mut cpu = CPU::new(crate::memory::Memory::new());
cpu.registers cpu.registers
.status .status
.or(Status::PS_DECIMAL_MODE | Status::PS_CARRY); .or(Status::PS_DECIMAL_MODE | Status::PS_CARRY);
@ -1012,7 +1012,7 @@ mod tests {
#[test] #[test]
fn add_with_carry_test() { fn add_with_carry_test() {
let mut cpu = CPU::new(); let mut cpu = CPU::new(crate::memory::Memory::new());
cpu.add_with_carry(1); cpu.add_with_carry(1);
assert_eq!(cpu.registers.accumulator, 1); assert_eq!(cpu.registers.accumulator, 1);
@ -1035,7 +1035,7 @@ mod tests {
assert!(!cpu.registers.status.contains(Status::PS_NEGATIVE)); assert!(!cpu.registers.status.contains(Status::PS_NEGATIVE));
assert!(!cpu.registers.status.contains(Status::PS_OVERFLOW)); assert!(!cpu.registers.status.contains(Status::PS_OVERFLOW));
let mut cpu = CPU::new(); let mut cpu = CPU::new(crate::memory::Memory::new());
cpu.add_with_carry(127); cpu.add_with_carry(127);
assert_eq!(cpu.registers.accumulator, 127); assert_eq!(cpu.registers.accumulator, 127);
@ -1066,7 +1066,7 @@ mod tests {
assert!(cpu.registers.status.contains(Status::PS_NEGATIVE)); assert!(cpu.registers.status.contains(Status::PS_NEGATIVE));
assert!(!cpu.registers.status.contains(Status::PS_OVERFLOW)); assert!(!cpu.registers.status.contains(Status::PS_OVERFLOW));
let mut cpu = CPU::new(); let mut cpu = CPU::new(crate::memory::Memory::new());
cpu.add_with_carry(127); cpu.add_with_carry(127);
assert_eq!(cpu.registers.accumulator, 127); assert_eq!(cpu.registers.accumulator, 127);
@ -1082,7 +1082,7 @@ mod tests {
assert!(cpu.registers.status.contains(Status::PS_NEGATIVE)); assert!(cpu.registers.status.contains(Status::PS_NEGATIVE));
assert!(cpu.registers.status.contains(Status::PS_OVERFLOW)); assert!(cpu.registers.status.contains(Status::PS_OVERFLOW));
let mut cpu = CPU::new(); let mut cpu = CPU::new(crate::memory::Memory::new());
cpu.registers.status.or(Status::PS_CARRY); cpu.registers.status.or(Status::PS_CARRY);
cpu.add_with_carry(-1); cpu.add_with_carry(-1);
assert_eq!(cpu.registers.accumulator, 0); assert_eq!(cpu.registers.accumulator, 0);
@ -1091,7 +1091,7 @@ mod tests {
#[test] #[test]
fn and_test() { fn and_test() {
let mut cpu = CPU::new(); let mut cpu = CPU::new(crate::memory::Memory::new());
cpu.registers.accumulator = 0; cpu.registers.accumulator = 0;
cpu.and(-1); cpu.and(-1);
@ -1120,7 +1120,7 @@ mod tests {
#[test] #[test]
fn subtract_with_carry_test() { fn subtract_with_carry_test() {
let mut cpu = CPU::new(); let mut cpu = CPU::new(crate::memory::Memory::new());
cpu.execute_instruction((Instruction::SEC, OpInput::UseImplied)); cpu.execute_instruction((Instruction::SEC, OpInput::UseImplied));
cpu.registers.accumulator = 0; cpu.registers.accumulator = 0;
@ -1180,7 +1180,7 @@ mod tests {
#[test] #[test]
fn decrement_memory_test() { fn decrement_memory_test() {
let mut cpu = CPU::new(); let mut cpu = CPU::new(crate::memory::Memory::new());
let addr: u16 = 0xA1B2; let addr: u16 = 0xA1B2;
cpu.memory.set_byte(addr, 5); cpu.memory.set_byte(addr, 5);
@ -1217,7 +1217,7 @@ mod tests {
#[test] #[test]
fn decrement_x_test() { fn decrement_x_test() {
let mut cpu = CPU::new(); let mut cpu = CPU::new(crate::memory::Memory::new());
cpu.registers.index_x = 0x80; cpu.registers.index_x = 0x80;
cpu.execute_instruction((Instruction::DEX, OpInput::UseImplied)); cpu.execute_instruction((Instruction::DEX, OpInput::UseImplied));
assert_eq!(cpu.registers.index_x, 127); assert_eq!(cpu.registers.index_x, 127);
@ -1227,7 +1227,7 @@ mod tests {
#[test] #[test]
fn decrement_y_test() { fn decrement_y_test() {
let mut cpu = CPU::new(); let mut cpu = CPU::new(crate::memory::Memory::new());
cpu.registers.index_y = 0x80; cpu.registers.index_y = 0x80;
cpu.execute_instruction((Instruction::DEY, OpInput::UseImplied)); cpu.execute_instruction((Instruction::DEY, OpInput::UseImplied));
assert_eq!(cpu.registers.index_y, 127); assert_eq!(cpu.registers.index_y, 127);
@ -1239,7 +1239,7 @@ mod tests {
fn logical_shift_right_test() { fn logical_shift_right_test() {
// Testing UseImplied version (which targets the accumulator) only, for now // Testing UseImplied version (which targets the accumulator) only, for now
let mut cpu = CPU::new(); let mut cpu = CPU::new(crate::memory::Memory::new());
cpu.execute_instruction((Instruction::LDA, OpInput::UseImmediate(0))); cpu.execute_instruction((Instruction::LDA, OpInput::UseImmediate(0)));
cpu.execute_instruction((Instruction::LSR, OpInput::UseImplied)); cpu.execute_instruction((Instruction::LSR, OpInput::UseImplied));
assert_eq!(cpu.registers.accumulator, 0); assert_eq!(cpu.registers.accumulator, 0);
@ -1275,7 +1275,7 @@ mod tests {
#[test] #[test]
fn dec_x_test() { fn dec_x_test() {
let mut cpu = CPU::new(); let mut cpu = CPU::new(crate::memory::Memory::new());
cpu.execute_instruction((Instruction::DEX, OpInput::UseImplied)); cpu.execute_instruction((Instruction::DEX, OpInput::UseImplied));
assert_eq!(cpu.registers.index_x, 0xff); assert_eq!(cpu.registers.index_x, 0xff);
@ -1320,7 +1320,7 @@ mod tests {
#[test] #[test]
fn jump_test() { fn jump_test() {
let mut cpu = CPU::new(); let mut cpu = CPU::new(crate::memory::Memory::new());
let addr: u16 = 0xA1B1; let addr: u16 = 0xA1B1;
cpu.jump(addr); cpu.jump(addr);
@ -1329,7 +1329,7 @@ mod tests {
#[test] #[test]
fn branch_if_carry_clear_test() { fn branch_if_carry_clear_test() {
let mut cpu = CPU::new(); let mut cpu = CPU::new(crate::memory::Memory::new());
cpu.execute_instruction((Instruction::SEC, OpInput::UseImplied)); cpu.execute_instruction((Instruction::SEC, OpInput::UseImplied));
cpu.branch_if_carry_clear(0xABCD); cpu.branch_if_carry_clear(0xABCD);
@ -1342,7 +1342,7 @@ mod tests {
#[test] #[test]
fn branch_if_carry_set_test() { fn branch_if_carry_set_test() {
let mut cpu = CPU::new(); let mut cpu = CPU::new(crate::memory::Memory::new());
cpu.execute_instruction((Instruction::CLC, OpInput::UseImplied)); cpu.execute_instruction((Instruction::CLC, OpInput::UseImplied));
cpu.branch_if_carry_set(0xABCD); cpu.branch_if_carry_set(0xABCD);
@ -1355,7 +1355,7 @@ mod tests {
#[test] #[test]
fn branch_if_equal_test() { fn branch_if_equal_test() {
let mut cpu = CPU::new(); let mut cpu = CPU::new(crate::memory::Memory::new());
cpu.branch_if_equal(0xABCD); cpu.branch_if_equal(0xABCD);
assert_eq!(cpu.registers.program_counter, (0)); assert_eq!(cpu.registers.program_counter, (0));
@ -1368,7 +1368,7 @@ mod tests {
#[test] #[test]
fn branch_if_minus_test() { fn branch_if_minus_test() {
{ {
let mut cpu = CPU::new(); let mut cpu = CPU::new(crate::memory::Memory::new());
let registers_before = cpu.registers; let registers_before = cpu.registers;
cpu.branch_if_minus(0xABCD); cpu.branch_if_minus(0xABCD);
@ -1377,7 +1377,7 @@ mod tests {
} }
{ {
let mut cpu = CPU::new(); let mut cpu = CPU::new(crate::memory::Memory::new());
cpu.registers.status.or(Status::PS_NEGATIVE); cpu.registers.status.or(Status::PS_NEGATIVE);
let registers_before = cpu.registers; let registers_before = cpu.registers;
@ -1390,7 +1390,7 @@ mod tests {
#[test] #[test]
fn branch_if_positive_test() { fn branch_if_positive_test() {
let mut cpu = CPU::new(); let mut cpu = CPU::new(crate::memory::Memory::new());
cpu.registers.status.insert(Status::PS_NEGATIVE); cpu.registers.status.insert(Status::PS_NEGATIVE);
cpu.branch_if_positive(0xABCD); cpu.branch_if_positive(0xABCD);
@ -1403,7 +1403,7 @@ mod tests {
#[test] #[test]
fn branch_if_overflow_clear_test() { fn branch_if_overflow_clear_test() {
let mut cpu = CPU::new(); let mut cpu = CPU::new(crate::memory::Memory::new());
cpu.registers.status.insert(Status::PS_OVERFLOW); cpu.registers.status.insert(Status::PS_OVERFLOW);
cpu.branch_if_overflow_clear(0xABCD); cpu.branch_if_overflow_clear(0xABCD);
@ -1416,7 +1416,7 @@ mod tests {
#[test] #[test]
fn branch_across_end_of_address_space() { fn branch_across_end_of_address_space() {
let mut cpu = CPU::new(); let mut cpu = CPU::new(crate::memory::Memory::new());
cpu.registers.program_counter = 0xffff; cpu.registers.program_counter = 0xffff;
cpu.registers.status.insert(Status::PS_OVERFLOW); cpu.registers.status.insert(Status::PS_OVERFLOW);
@ -1426,7 +1426,7 @@ mod tests {
#[test] #[test]
fn branch_if_overflow_set_test() { fn branch_if_overflow_set_test() {
let mut cpu = CPU::new(); let mut cpu = CPU::new(crate::memory::Memory::new());
cpu.branch_if_overflow_set(0xABCD); cpu.branch_if_overflow_set(0xABCD);
assert_eq!(cpu.registers.program_counter, (0)); assert_eq!(cpu.registers.program_counter, (0));
@ -1437,11 +1437,11 @@ mod tests {
} }
#[cfg(test)] #[cfg(test)]
fn compare_test_helper<F, M>(compare: &mut F, load_instruction: Instruction) fn compare_test_helper<F>(compare: &mut F, load_instruction: Instruction)
where where
F: FnMut(&mut CPU<M>, u8), F: FnMut(&mut CPU<crate::memory::Memory>, u8),
{ {
let mut cpu = CPU::new(); let mut cpu = CPU::new(crate::memory::Memory::new());
cpu.execute_instruction((load_instruction, OpInput::UseImmediate(127))); cpu.execute_instruction((load_instruction, OpInput::UseImmediate(127)));
@ -1489,7 +1489,7 @@ mod tests {
#[test] #[test]
fn compare_with_a_register_test() { fn compare_with_a_register_test() {
compare_test_helper( compare_test_helper(
&mut |cpu: &mut CPU, val: u8| { &mut |cpu: &mut CPU<crate::memory::Memory>, val: u8| {
cpu.compare_with_a_register(val); cpu.compare_with_a_register(val);
}, },
Instruction::LDA, Instruction::LDA,
@ -1499,7 +1499,7 @@ mod tests {
#[test] #[test]
fn compare_with_x_register_test() { fn compare_with_x_register_test() {
compare_test_helper( compare_test_helper(
&mut |cpu: &mut CPU, val: u8| { &mut |cpu: &mut CPU<crate::memory::Memory>, val: u8| {
cpu.compare_with_x_register(val); cpu.compare_with_x_register(val);
}, },
Instruction::LDX, Instruction::LDX,
@ -1509,7 +1509,7 @@ mod tests {
#[test] #[test]
fn compare_with_y_register_test() { fn compare_with_y_register_test() {
compare_test_helper( compare_test_helper(
&mut |cpu: &mut CPU, val: u8| { &mut |cpu: &mut CPU<crate::memory::Memory>, val: u8| {
cpu.compare_with_y_register(val); cpu.compare_with_y_register(val);
}, },
Instruction::LDY, Instruction::LDY,
@ -1518,7 +1518,8 @@ mod tests {
#[test] #[test]
fn exclusive_or_test() { fn exclusive_or_test() {
let mut cpu = CPU::new(); use crate::memory::Memory;
let mut cpu = CPU::new(Memory::new());
for a_before in range_inclusive(0u8, 255u8) { for a_before in range_inclusive(0u8, 255u8) {
for val in range_inclusive(0u8, 255u8) { for val in range_inclusive(0u8, 255u8) {
@ -1546,7 +1547,8 @@ mod tests {
#[test] #[test]
fn inclusive_or_test() { fn inclusive_or_test() {
let mut cpu = CPU::new(); use crate::memory::Memory;
let mut cpu = CPU::new(Memory::new());
for a_before in range_inclusive(0u8, 255u8) { for a_before in range_inclusive(0u8, 255u8) {
for val in range_inclusive(0u8, 255u8) { for val in range_inclusive(0u8, 255u8) {
@ -1574,7 +1576,8 @@ mod tests {
#[test] #[test]
fn stack_underflow() { fn stack_underflow() {
let mut cpu = CPU::new(); use crate::memory::Memory;
let mut cpu = CPU::new(Memory::new());
let _val: u8 = cpu.pull_from_stack(); let _val: u8 = cpu.pull_from_stack();
} }
} }