dmd_core/src/mouse.rs

96 lines
1.9 KiB
Rust

#![allow(clippy::unreadable_literal)]
use crate::bus::AccessCode;
use crate::bus::Device;
use crate::err::BusError;
use std::ops::Range;
use log::trace;
const START_ADDRESS: usize = 0x400000;
const END_ADDRESS: usize = 0x4000004;
const ADDRESS_RANGE: Range<usize> = START_ADDRESS..END_ADDRESS;
#[derive(Debug)]
pub struct Mouse {
pub x: u16,
pub y: u16,
}
impl Default for Mouse {
fn default() -> Self {
Mouse::new()
}
}
impl Mouse {
pub fn new() -> Mouse {
Mouse {
x: 0,
y: 0,
}
}
}
impl Device for Mouse {
fn address_range(&self) -> &Range<usize> {
&ADDRESS_RANGE
}
fn name(&self) -> &str {
"MOUSE"
}
fn is_read_only(&self) -> bool {
false
}
fn read_byte(&mut self, _address: usize, _access: AccessCode) -> Result<u8, BusError> {
unimplemented!()
}
fn read_half(&mut self, address: usize, _access: AccessCode) -> Result<u16, BusError> {
trace!("Mouse Read, address={:08x}", address);
match address - START_ADDRESS {
0 => Ok(self.y),
2 => Ok(self.x),
_ => Err(BusError::NoDevice(address)),
}
}
fn read_word(&mut self, _address: usize, _access: AccessCode) -> Result<u32, BusError> {
unimplemented!()
}
fn write_byte(
&mut self,
_address: usize,
_val: u8,
_access: AccessCode,
) -> Result<(), BusError> {
unimplemented!()
}
fn write_half(
&mut self,
_address: usize,
_val: u16,
_access: AccessCode,
) -> Result<(), BusError> {
unimplemented!()
}
fn write_word(
&mut self,
_address: usize,
_val: u32,
_access: AccessCode,
) -> Result<(), BusError> {
unimplemented!()
}
fn load(&mut self, _address: usize, _data: &[u8]) -> Result<(), BusError> {
unimplemented!()
}
}