move stuff to util file
This commit is contained in:
parent
d3ee58131e
commit
03faea6ca9
|
@ -1,6 +1,7 @@
|
||||||
#![feature(exclusive_range_pattern, let_chains)]
|
#![feature(exclusive_range_pattern, let_chains)]
|
||||||
|
|
||||||
mod processor;
|
mod processor;
|
||||||
|
mod util;
|
||||||
|
|
||||||
use clap::{ArgGroup, Parser};
|
use clap::{ArgGroup, Parser};
|
||||||
use minifb::{Window, WindowOptions};
|
use minifb::{Window, WindowOptions};
|
||||||
|
|
|
@ -5,7 +5,8 @@ use self::{
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
use crate::{
|
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,
|
FACTOR, HEIGHT, WIDTH,
|
||||||
};
|
};
|
||||||
use minifb::{Window, WindowOptions};
|
use minifb::{Window, WindowOptions};
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::processor::as_signed;
|
use crate::util::as_signed;
|
||||||
|
|
||||||
#[derive(Debug, PartialEq, Clone, Copy)]
|
#[derive(Debug, PartialEq, Clone, Copy)]
|
||||||
pub(super) enum DrawMode {
|
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 {
|
impl CPU {
|
||||||
pub(crate) fn and(&mut self, first: u8, second: u8) -> u8 {
|
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 {
|
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 {
|
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};
|
use std::ops::{BitAnd, BitOr};
|
||||||
|
|
||||||
impl CPU {
|
impl CPU {
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
use self::gpu::GPU;
|
use self::{gpu::GPU, memory::Memory};
|
||||||
use self::memory::Memory;
|
use crate::{
|
||||||
use crate::{processor::instructions::instructions::set, verbose_println};
|
util::{clear_bit, get_bit},
|
||||||
|
verbose_println,
|
||||||
|
};
|
||||||
use minifb::Window;
|
use minifb::Window;
|
||||||
use std::{mem::transmute, time::Duration};
|
use std::{mem::transmute, time::Duration};
|
||||||
|
|
||||||
|
@ -277,53 +279,3 @@ impl SplitRegister for u16 {
|
||||||
*self = (*self & !0xff00) | (val as u16) << 8;
|
*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::{
|
use crate::{
|
||||||
as_signed,
|
processor::{
|
||||||
instructions::instructions::{res, set},
|
instructions::instructions::{res, set},
|
||||||
Flags, Reg8, SplitRegister, CPU,
|
Flags, Reg8, SplitRegister, CPU,
|
||||||
|
},
|
||||||
|
util::as_signed,
|
||||||
};
|
};
|
||||||
|
|
||||||
impl CPU {
|
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