96 lines
1.9 KiB
Rust
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!()
|
|
}
|
|
}
|