mirror of
https://github.com/mre/mos6502.git
synced 2025-03-01 22:29:54 +00:00
Add tests for stack over- and underflow
This commit is contained in:
parent
ad40c72dfe
commit
34bbe55712
33
src/cpu.rs
33
src/cpu.rs
@ -37,6 +37,12 @@ pub struct CPU {
|
|||||||
pub memory: Memory,
|
pub memory: Memory,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Default for CPU {
|
||||||
|
fn default() -> Self {
|
||||||
|
Self::new()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl CPU {
|
impl CPU {
|
||||||
pub fn new() -> CPU {
|
pub fn new() -> CPU {
|
||||||
CPU {
|
CPU {
|
||||||
@ -554,7 +560,14 @@ impl CPU {
|
|||||||
|
|
||||||
let mask = Status::PS_CARRY | Status::PS_OVERFLOW;
|
let mask = Status::PS_CARRY | Status::PS_OVERFLOW;
|
||||||
|
|
||||||
self.registers.status.set_with_mask( mask, Status::new(StatusArgs { carry: did_carry, overflow: did_overflow, ..StatusArgs::none() }),);
|
self.registers.status.set_with_mask(
|
||||||
|
mask,
|
||||||
|
Status::new(StatusArgs {
|
||||||
|
carry: did_carry,
|
||||||
|
overflow: did_overflow,
|
||||||
|
..StatusArgs::none()
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
|
||||||
self.load_accumulator(result);
|
self.load_accumulator(result);
|
||||||
|
|
||||||
@ -618,10 +631,13 @@ impl CPU {
|
|||||||
|
|
||||||
self.registers.status.set_with_mask(
|
self.registers.status.set_with_mask(
|
||||||
mask,
|
mask,
|
||||||
Status::new(StatusArgs { carry: did_carry, overflow: did_overflow, ..StatusArgs::none() }),
|
Status::new(StatusArgs {
|
||||||
|
carry: did_carry,
|
||||||
|
overflow: did_overflow,
|
||||||
|
..StatusArgs::none()
|
||||||
|
}),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
self.load_accumulator(result);
|
self.load_accumulator(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -809,7 +825,10 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn decimal_subtract_test() {
|
fn decimal_subtract_test() {
|
||||||
let mut cpu = CPU::new();
|
let mut cpu = CPU::new();
|
||||||
cpu.registers.status.or(Status::PS_DECIMAL_MODE);
|
cpu.registers
|
||||||
|
.status
|
||||||
|
.or(Status::PS_DECIMAL_MODE | Status::PS_CARRY);
|
||||||
|
cpu.registers.accumulator = 0;
|
||||||
|
|
||||||
cpu.subtract_with_carry(0x48);
|
cpu.subtract_with_carry(0x48);
|
||||||
assert_eq!(cpu.registers.accumulator as u8, 0x52);
|
assert_eq!(cpu.registers.accumulator as u8, 0x52);
|
||||||
@ -1343,4 +1362,10 @@ mod tests {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn stack_underflow() {
|
||||||
|
let mut cpu = CPU::new();
|
||||||
|
let _val: u8 = cpu.pull_from_stack();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user