1
0
mirror of https://github.com/mre/mos6502.git synced 2024-09-28 10:55:33 +00:00

Make changes suggested by Clippy and few more

This commit is contained in:
Andrey Kutejko 2019-10-06 23:23:38 +02:00
parent cb2658f3e3
commit cb8800689f
3 changed files with 36 additions and 35 deletions

View File

@ -73,21 +73,19 @@ impl Add<CheckedAddressDiff> for Address {
} }
impl Address { impl Address {
pub fn to_u16(&self) -> u16 { pub fn to_u16(self) -> u16 {
match *self { self.0
Address(address_) => address_,
}
} }
pub fn to_usize(&self) -> usize { pub fn to_usize(self) -> usize {
self.to_u16() as usize self.to_u16() as usize
} }
pub fn get_page_number(&self) -> u8 { pub fn get_page_number(self) -> u8 {
(self.to_u16() & 0xff00 >> 8) as u8 (self.to_u16() & 0xff00 >> 8) as u8
} }
pub fn get_offset(&self) -> u8 { pub fn get_offset(self) -> u8 {
(self.to_u16() & 0x00ff) as u8 (self.to_u16() & 0x00ff) as u8
} }
} }

View File

@ -49,17 +49,11 @@ pub const IRQ_INTERRUPT_VECTOR_HI: Address = Address(0xFFFF);
const MEMORY_SIZE: usize = (ADDR_HI_BARE - ADDR_LO_BARE) as usize + 1usize; const MEMORY_SIZE: usize = (ADDR_HI_BARE - ADDR_LO_BARE) as usize + 1usize;
// FIXME: Should this use indirection for `bytes`? // FIXME: Should this use indirection for `bytes`?
#[derive(Copy)] #[derive(Copy, Clone)]
pub struct Memory { pub struct Memory {
bytes: [u8; MEMORY_SIZE], bytes: [u8; MEMORY_SIZE],
} }
impl Clone for Memory {
fn clone(&self) -> Self {
*self
}
}
impl Memory { impl Memory {
pub fn new() -> Memory { pub fn new() -> Memory {
Memory { bytes: [0; MEMORY_SIZE] } Memory { bytes: [0; MEMORY_SIZE] }
@ -73,11 +67,8 @@ impl Memory {
&mut self.bytes[address.to_usize()] &mut self.bytes[address.to_usize()]
} }
pub fn get_slice(&self, Address(start): Address, AddressDiff(diff): AddressDiff) -> &[u8] { pub fn get_slice(&self, start: Address, diff: AddressDiff) -> &[u8] {
let start = start as usize; &self.bytes[start.to_usize()..(start + diff).to_usize()]
let diff = diff as usize;
let end = start + diff;
&self.bytes[start..end]
} }
// Sets the byte at the given address to the given value and returns the // Sets the byte at the given address to the given value and returns the
@ -88,20 +79,35 @@ impl Memory {
old_value old_value
} }
pub fn set_bytes(&mut self, Address(start): Address, values: &[u8]) { pub fn set_bytes(&mut self, start: Address, values: &[u8]) {
let start = start as usize; let start = start.to_usize();
// This panics if the range is invalid // This panics if the range is invalid
let end = start + values.len(); let end = start + values.len();
let slice = &mut self.bytes[start..end];
// JAM: Is this the best way to do this copy? self.bytes[start..end].copy_from_slice(values);
for (dest, src) in slice.iter_mut().zip(values.iter()) {
*dest = *src;
}
} }
pub fn is_stack_address(address: &Address) -> bool { pub fn is_stack_address(address: Address) -> bool {
STACK_ADDRESS_LO <= *address && *address <= STACK_ADDRESS_HI (STACK_ADDRESS_LO..=STACK_ADDRESS_HI).contains(&address)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_memory_set_bytes() {
let mut memory = Memory::new();
memory.set_bytes(Address(0x0100), &[1, 2, 3, 4, 5]);
assert_eq!(memory.get_slice(Address(0x00FF), AddressDiff(7)), &[0, 1, 2, 3, 4, 5, 0]);
}
#[test]
#[should_panic]
fn test_memory_overflow_panic() {
let mut memory = Memory::new();
memory.set_bytes(Address(0xFFFE), &[1, 2, 3]);
} }
} }

View File

@ -144,21 +144,18 @@ impl Status {
pub struct StackPointer(pub u8); pub struct StackPointer(pub u8);
impl StackPointer { impl StackPointer {
pub fn to_address(&self) -> Address { pub fn to_address(self) -> Address {
let StackPointer(sp) = *self; STACK_ADDRESS_LO + AddressDiff(i32::from(self.0))
STACK_ADDRESS_LO + AddressDiff(i32::from(sp))
} }
// JAM: FIXME: Should we prevent overflow here? What would a 6502 do? // JAM: FIXME: Should we prevent overflow here? What would a 6502 do?
pub fn decrement(&mut self) { pub fn decrement(&mut self) {
let StackPointer(val) = *self; self.0 -= 1;
*self = StackPointer(val - 1);
} }
pub fn increment(&mut self) { pub fn increment(&mut self) {
let StackPointer(val) = *self; self.0 += 1;
*self = StackPointer(val + 1);
} }
} }