summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/devices.rs64
-rw-r--r--src/devices/input.rs8
-rw-r--r--src/devices/screen/draw_sprite.rs2
-rw-r--r--src/emulator.rs3
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,