move stuff to util file
This commit is contained in:
parent
d3ee58131e
commit
03faea6ca9
|
@ -1,6 +1,7 @@
|
|||
#![feature(exclusive_range_pattern, let_chains)]
|
||||
|
||||
mod processor;
|
||||
mod util;
|
||||
|
||||
use clap::{ArgGroup, Parser};
|
||||
use minifb::{Window, WindowOptions};
|
||||
|
|
|
@ -5,7 +5,8 @@ use self::{
|
|||
},
|
||||
};
|
||||
use crate::{
|
||||
processor::{clear_bit, get_bit, set_bit, set_or_clear_bit, SplitRegister, CPU},
|
||||
processor::{SplitRegister, CPU},
|
||||
util::{clear_bit, get_bit, set_bit, set_or_clear_bit},
|
||||
FACTOR, HEIGHT, WIDTH,
|
||||
};
|
||||
use minifb::{Window, WindowOptions};
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
use crate::processor::as_signed;
|
||||
use crate::util::as_signed;
|
||||
|
||||
#[derive(Debug, PartialEq, Clone, Copy)]
|
||||
pub(super) enum DrawMode {
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
use crate::processor::{get_bit, Direction, Flags, Reg8, SplitRegister, CPU};
|
||||
use crate::{
|
||||
processor::{get_bit, Direction, Flags, Reg8, SplitRegister, CPU},
|
||||
util::{clear_bit, set_bit},
|
||||
};
|
||||
|
||||
impl CPU {
|
||||
pub(crate) fn and(&mut self, first: u8, second: u8) -> u8 {
|
||||
|
@ -135,9 +138,9 @@ impl CPU {
|
|||
}
|
||||
|
||||
pub(crate) fn res(byte: u8, bit: u8) -> u8 {
|
||||
byte & !(1 << bit)
|
||||
clear_bit(byte, bit)
|
||||
}
|
||||
|
||||
pub(crate) fn set(byte: u8, bit: u8) -> u8 {
|
||||
byte | (1 << bit)
|
||||
set_bit(byte, bit)
|
||||
}
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
use crate::processor::{get_bit, get_rotation_carry, rotate, Direction, Flags, SplitRegister, CPU};
|
||||
use crate::{
|
||||
processor::{get_bit, Direction, Flags, SplitRegister, CPU},
|
||||
util::{get_rotation_carry, rotate},
|
||||
};
|
||||
use std::ops::{BitAnd, BitOr};
|
||||
|
||||
impl CPU {
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
use self::gpu::GPU;
|
||||
use self::memory::Memory;
|
||||
use crate::{processor::instructions::instructions::set, verbose_println};
|
||||
use self::{gpu::GPU, memory::Memory};
|
||||
use crate::{
|
||||
util::{clear_bit, get_bit},
|
||||
verbose_println,
|
||||
};
|
||||
use minifb::Window;
|
||||
use std::{mem::transmute, time::Duration};
|
||||
|
||||
|
@ -277,53 +279,3 @@ impl SplitRegister for u16 {
|
|||
*self = (*self & !0xff00) | (val as u16) << 8;
|
||||
}
|
||||
}
|
||||
|
||||
fn as_signed(unsigned: u8) -> i8 {
|
||||
unsafe {
|
||||
return transmute(unsigned);
|
||||
}
|
||||
}
|
||||
|
||||
fn get_bit(byte: u8, flag: u8) -> bool {
|
||||
let mask = 1 << flag;
|
||||
let got = byte & mask;
|
||||
return got > 0x0;
|
||||
}
|
||||
|
||||
fn set_or_clear_bit(byte: u8, flag: u8, condition: bool) -> u8 {
|
||||
if condition {
|
||||
set_bit(byte, flag)
|
||||
} else {
|
||||
clear_bit(byte, flag)
|
||||
}
|
||||
}
|
||||
|
||||
fn set_bit(byte: u8, flag: u8) -> u8 {
|
||||
byte | (1 << flag)
|
||||
}
|
||||
|
||||
fn clear_bit(byte: u8, flag: u8) -> u8 {
|
||||
byte & (!(1 << flag))
|
||||
}
|
||||
|
||||
fn rotate(byte: u8, direction: &Direction) -> (u8, bool) {
|
||||
match direction {
|
||||
Direction::Left => {
|
||||
let carry = get_bit(byte, 7);
|
||||
let r = byte << 1;
|
||||
return (r, carry);
|
||||
}
|
||||
Direction::Right => {
|
||||
let carry = get_bit(byte, 0);
|
||||
let r = byte >> 1;
|
||||
return (r, carry);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn get_rotation_carry(direction: &Direction) -> u8 {
|
||||
match direction {
|
||||
Direction::Left => 0b1,
|
||||
Direction::Right => 0b10000000,
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
use crate::processor::{
|
||||
as_signed,
|
||||
use crate::{
|
||||
processor::{
|
||||
instructions::instructions::{res, set},
|
||||
Flags, Reg8, SplitRegister, CPU,
|
||||
},
|
||||
util::as_signed,
|
||||
};
|
||||
|
||||
impl CPU {
|
||||
|
|
52
src/util.rs
Normal file
52
src/util.rs
Normal file
|
@ -0,0 +1,52 @@
|
|||
use crate::processor::Direction;
|
||||
use std::mem::transmute;
|
||||
|
||||
pub(crate) fn as_signed(unsigned: u8) -> i8 {
|
||||
unsafe {
|
||||
return transmute(unsigned);
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn get_bit(byte: u8, flag: u8) -> bool {
|
||||
let mask = 1 << flag;
|
||||
let got = byte & mask;
|
||||
return got > 0x0;
|
||||
}
|
||||
|
||||
pub(crate) fn set_or_clear_bit(byte: u8, flag: u8, condition: bool) -> u8 {
|
||||
if condition {
|
||||
set_bit(byte, flag)
|
||||
} else {
|
||||
clear_bit(byte, flag)
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn set_bit(byte: u8, flag: u8) -> u8 {
|
||||
byte | (1 << flag)
|
||||
}
|
||||
|
||||
pub(crate) fn clear_bit(byte: u8, flag: u8) -> u8 {
|
||||
byte & (!(1 << flag))
|
||||
}
|
||||
|
||||
pub(crate) fn rotate(byte: u8, direction: &Direction) -> (u8, bool) {
|
||||
match direction {
|
||||
Direction::Left => {
|
||||
let carry = get_bit(byte, 7);
|
||||
let r = byte << 1;
|
||||
return (r, carry);
|
||||
}
|
||||
Direction::Right => {
|
||||
let carry = get_bit(byte, 0);
|
||||
let r = byte >> 1;
|
||||
return (r, carry);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn get_rotation_carry(direction: &Direction) -> u8 {
|
||||
match direction {
|
||||
Direction::Left => 0b1,
|
||||
Direction::Right => 0b10000000,
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue