[kbd] Add keyboard.rs
This commit is contained in:
44
src/emu/keyboard.rs
Normal file
44
src/emu/keyboard.rs
Normal file
@@ -0,0 +1,44 @@
|
||||
use crate::emu::memory::{Memory, RamMemory};
|
||||
use crate::misc::result::EmulatorResult;
|
||||
|
||||
|
||||
pub struct Keyboard<'a>{
|
||||
dirty: bool,
|
||||
bitflags: u16,
|
||||
ram: &'a RamMemory
|
||||
}
|
||||
|
||||
impl<'a> Keyboard<'a>{
|
||||
pub fn new(ram:&'a RamMemory)->Keyboard<'a>{
|
||||
Keyboard {
|
||||
dirty: true,
|
||||
bitflags:0,
|
||||
ram
|
||||
}
|
||||
}
|
||||
|
||||
pub fn clear_keyboard(&mut self){
|
||||
log::debug!("Keyboard clear");
|
||||
self.bitflags = 0;
|
||||
self.dirty = true;
|
||||
}
|
||||
|
||||
pub fn key_down(&mut self,x:u8){
|
||||
self.bitflags |= 1<<x;
|
||||
log::debug!("Key Down, keyboard state {}",self.bitflags);
|
||||
self.dirty = true
|
||||
}
|
||||
pub fn key_up(&mut self,x:u8){
|
||||
self.bitflags &= !((1<<x) as u16);
|
||||
log::debug!("Key Up, keyboard state {}",self.bitflags);
|
||||
self.dirty = true
|
||||
}
|
||||
pub fn flush_keyboard(&mut self)->EmulatorResult<()>{
|
||||
if self.dirty {
|
||||
log::debug!("Flushing keyboard {}",self.bitflags);
|
||||
self.ram.try_set_u16(0, self.bitflags)?;
|
||||
self.dirty = false;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user