diff options
-rw-r--r-- | src/devices.rs | 64 | ||||
-rw-r--r-- | src/devices/input.rs | 8 | ||||
-rw-r--r-- | src/devices/screen/draw_sprite.rs | 2 | ||||
-rw-r--r-- | src/emulator.rs | 3 |
4 files changed, 40 insertions, 37 deletions
diff --git a/src/devices.rs b/src/devices.rs index e191746..b843aca 100644 --- a/src/devices.rs +++ b/src/devices.rs @@ -198,22 +198,22 @@ impl DeviceBus for StandardDevices { // 0x8E => todo!(), // 0x8F => todo!(), // File - 0xA0 => read_b!(self.file.entry.is_some()), - 0xA1 => read_b!(self.file.move_success), - 0xA2 => self.file.name_buffer.read_byte(), - 0xA3 => read_b!(self.file.entry_type()), - 0xA4 => self.file.read_byte(), - 0xA5 => self.file.read_byte(), - 0xA6 => self.file.read_child_name(), - 0xA7 => read_b!(self.file.child_type()), - 0xA8 => read_hh!(self.file.pointer()), - 0xA9 => read_hl!(self.file.pointer()), - 0xAA => read_lh!(self.file.pointer()), - 0xAB => read_ll!(self.file.pointer()), - 0xAC => read_hh!(self.file.length()), - 0xAD => read_hl!(self.file.length()), - 0xAE => read_lh!(self.file.length()), - 0xAF => read_ll!(self.file.length()), + 0x90 => read_b!(self.file.entry.is_some()), + 0x91 => read_b!(self.file.move_success), + 0x92 => self.file.name_buffer.read_byte(), + 0x93 => read_b!(self.file.entry_type()), + 0x94 => self.file.read_byte(), + 0x95 => self.file.read_byte(), + 0x96 => self.file.read_child_name(), + 0x97 => read_b!(self.file.child_type()), + 0x98 => read_hh!(self.file.pointer()), + 0x99 => read_hl!(self.file.pointer()), + 0x9A => read_lh!(self.file.pointer()), + 0x9B => read_ll!(self.file.pointer()), + 0x9C => read_hh!(self.file.length()), + 0x9D => read_hl!(self.file.length()), + 0x9E => read_lh!(self.file.length()), + 0x9F => read_ll!(self.file.length()), _ => unimplemented!("Reading from device port 0x{port:02x}"), } @@ -335,22 +335,22 @@ impl DeviceBus for StandardDevices { 0x86 => self.stream.write_stdout(val), 0x87 => self.stream.write_stdout(val), // File - 0xA0 => self.file.write_to_open_port(val), - 0xA1 => self.file.write_to_move_port(val), - 0xA2 => self.file.set_name_pointer(val), - 0xA3 => self.file.ascend_to_parent(), - 0xA4 => self.file.write_byte(val), - 0xA5 => self.file.write_byte(val), - 0xA6 => self.file.set_child_name_pointer(val), - 0xA7 => self.file.descend_to_child(), - 0xA8 => write_hh!(self.file.new_pointer), - 0xA9 => write_hl!(self.file.new_pointer), - 0xAA => write_lh!(self.file.new_pointer), - 0xAB => { write_ll!(self.file.new_pointer); self.file.commit_pointer() }, - 0xAC => write_hh!(self.file.new_length), - 0xAD => write_hl!(self.file.new_length), - 0xAE => write_lh!(self.file.new_length), - 0xAF => { write_ll!(self.file.new_length); self.file.commit_length() }, + 0x90 => self.file.write_to_open_port(val), + 0x91 => self.file.write_to_move_port(val), + 0x92 => self.file.set_name_pointer(val), + 0x93 => self.file.ascend_to_parent(), + 0x94 => self.file.write_byte(val), + 0x95 => self.file.write_byte(val), + 0x96 => self.file.set_child_name_pointer(val), + 0x97 => self.file.descend_to_child(), + 0x98 => write_hh!(self.file.new_pointer), + 0x99 => write_hl!(self.file.new_pointer), + 0x9A => write_lh!(self.file.new_pointer), + 0x9B => { write_ll!(self.file.new_pointer); self.file.commit_pointer() }, + 0x9C => write_hh!(self.file.new_length), + 0x9D => write_hl!(self.file.new_length), + 0x9E => write_lh!(self.file.new_length), + 0x9F => { write_ll!(self.file.new_length); self.file.commit_length() }, _ => unimplemented!("Writing to device port 0x{port:02x}"), }; diff --git a/src/devices/input.rs b/src/devices/input.rs index f23d902..a065531 100644 --- a/src/devices/input.rs +++ b/src/devices/input.rs @@ -99,12 +99,12 @@ impl InputDevice { pub fn on_scroll_horizontal(&mut self, delta: f64) { self.horizontal_scroll_delta += delta; - while self.horizontal_scroll_delta > 1.0 { + while self.horizontal_scroll_delta >= 1.0 { self.horizontal_scroll = self.horizontal_scroll.saturating_add(1); self.horizontal_scroll_delta -= 1.0; self.wake_flag = true; } - while self.horizontal_scroll_delta < -1.0 { + while self.horizontal_scroll_delta <= -1.0 { self.horizontal_scroll = self.horizontal_scroll.saturating_sub(1); self.horizontal_scroll_delta += 1.0; self.wake_flag = true; @@ -113,12 +113,12 @@ impl InputDevice { pub fn on_scroll_vertical(&mut self, delta: f64) { self.vertical_scroll_delta += delta; - while self.vertical_scroll_delta > 1.0 { + while self.vertical_scroll_delta >= 1.0 { self.vertical_scroll = self.vertical_scroll.saturating_add(1); self.vertical_scroll_delta -= 1.0; self.wake_flag = true; } - while self.vertical_scroll_delta < -1.0 { + while self.vertical_scroll_delta <= -1.0 { self.vertical_scroll = self.vertical_scroll.saturating_sub(1); self.vertical_scroll_delta += 1.0; self.wake_flag = true; diff --git a/src/devices/screen/draw_sprite.rs b/src/devices/screen/draw_sprite.rs index 9b0658c..5676335 100644 --- a/src/devices/screen/draw_sprite.rs +++ b/src/devices/screen/draw_sprite.rs @@ -19,7 +19,7 @@ impl ScreenDevice { pos.x = pos.x.wrapping_add(1); } pos.x = pos.x.wrapping_sub(8); - pos.y = pos.x.wrapping_add(1); + pos.y = pos.y.wrapping_add(1); } } } diff --git a/src/emulator.rs b/src/emulator.rs index 4fc1bc4..8649f26 100644 --- a/src/emulator.rs +++ b/src/emulator.rs @@ -29,7 +29,10 @@ impl BedrockEmulator { pub fn new(bytecode: &[u8]) -> Self { let mut vm = Processor::new(StandardDevices::new()); vm.dev.screen.resize(ScreenDimensions::new(256, 192)); + vm.dev.memory.page_limit = 256; + vm.dev.memory.expand_memory(); vm.load_program(bytecode); + Self { vm, initialising: true, |