refactor away some casts

This commit is contained in:
Sam M W 2024-04-23 17:42:25 +01:00
parent 7579cd5d24
commit fe4422359d
1 changed files with 9 additions and 22 deletions

View File

@ -610,29 +610,18 @@ impl<M: Bus, V: Variant> CPU<M, V> {
} }
} }
fn set_flags_from_i8(status: &mut Status, value: i8) { const fn value_is_negative(value: u8) -> bool {
let is_zero = value == 0; value > 127
let is_negative = value < 0;
status.set_with_mask(
Status::PS_ZERO | Status::PS_NEGATIVE,
Status::new(StatusArgs {
zero: is_zero,
negative: is_negative,
..StatusArgs::none()
}),
);
} }
fn set_flags_from_u8(status: &mut Status, value: u8) { fn set_flags_from_u8(status: &mut Status, value: u8) {
let is_zero = value == 0; let is_zero = value == 0;
let is_negative = value > 127;
status.set_with_mask( status.set_with_mask(
Status::PS_ZERO | Status::PS_NEGATIVE, Status::PS_ZERO | Status::PS_NEGATIVE,
Status::new(StatusArgs { Status::new(StatusArgs {
zero: is_zero, zero: is_zero,
negative: is_negative, negative: Self::value_is_negative(value),
..StatusArgs::none() ..StatusArgs::none()
}), }),
); );
@ -650,7 +639,7 @@ impl<M: Bus, V: Variant> CPU<M, V> {
..StatusArgs::none() ..StatusArgs::none()
}), }),
); );
CPU::<M, V>::set_flags_from_i8(status, *p_val as i8); CPU::<M, V>::set_flags_from_u8(status, *p_val);
} }
fn shift_right_with_flags(p_val: &mut u8, status: &mut Status) { fn shift_right_with_flags(p_val: &mut u8, status: &mut Status) {
@ -664,7 +653,7 @@ impl<M: Bus, V: Variant> CPU<M, V> {
..StatusArgs::none() ..StatusArgs::none()
}), }),
); );
CPU::<M, V>::set_flags_from_i8(status, *p_val as i8); CPU::<M, V>::set_flags_from_u8(status, *p_val);
} }
fn rotate_left_with_flags(p_val: &mut u8, status: &mut Status) { fn rotate_left_with_flags(p_val: &mut u8, status: &mut Status) {
@ -680,7 +669,7 @@ impl<M: Bus, V: Variant> CPU<M, V> {
..StatusArgs::none() ..StatusArgs::none()
}), }),
); );
CPU::<M, V>::set_flags_from_i8(status, *p_val as i8); CPU::<M, V>::set_flags_from_u8(status, *p_val);
} }
fn rotate_right_with_flags(p_val: &mut u8, status: &mut Status) { fn rotate_right_with_flags(p_val: &mut u8, status: &mut Status) {
@ -696,7 +685,7 @@ impl<M: Bus, V: Variant> CPU<M, V> {
..StatusArgs::none() ..StatusArgs::none()
}), }),
); );
CPU::<M, V>::set_flags_from_i8(status, *p_val as i8); CPU::<M, V>::set_flags_from_u8(status, *p_val);
} }
fn set_u8_with_flags(mem: &mut u8, status: &mut Status, value: u8) { fn set_u8_with_flags(mem: &mut u8, status: &mut Status, value: u8) {
@ -917,13 +906,12 @@ impl<M: Bus, V: Variant> CPU<M, V> {
let value_new = val.wrapping_add(1); let value_new = val.wrapping_add(1);
*val = value_new; *val = value_new;
let is_negative = (value_new as i8) < 0;
let is_zero = value_new == 0; let is_zero = value_new == 0;
flags.set_with_mask( flags.set_with_mask(
Status::PS_NEGATIVE | Status::PS_ZERO, Status::PS_NEGATIVE | Status::PS_ZERO,
Status::new(StatusArgs { Status::new(StatusArgs {
negative: is_negative, negative: Self::value_is_negative(value_new),
zero: is_zero, zero: is_zero,
..StatusArgs::none() ..StatusArgs::none()
}), }),
@ -934,13 +922,12 @@ impl<M: Bus, V: Variant> CPU<M, V> {
let value_new = val.wrapping_sub(1); let value_new = val.wrapping_sub(1);
*val = value_new; *val = value_new;
let is_negative = (value_new as i8) < 0;
let is_zero = value_new == 0; let is_zero = value_new == 0;
flags.set_with_mask( flags.set_with_mask(
Status::PS_NEGATIVE | Status::PS_ZERO, Status::PS_NEGATIVE | Status::PS_ZERO,
Status::new(StatusArgs { Status::new(StatusArgs {
negative: is_negative, negative: Self::value_is_negative(value_new),
zero: is_zero, zero: is_zero,
..StatusArgs::none() ..StatusArgs::none()
}), }),