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