summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Bridle <bridle.benjamin@gmail.com>2024-04-16 15:27:45 +1200
committerBen Bridle <bridle.benjamin@gmail.com>2024-04-16 15:29:12 +1200
commita07d1585deb41bc40777045ac36b1643d2574980 (patch)
treeca055ebf05d28d11d9eb06c726f91a39b77562ba
parentd8f0c1e96b79d5094b8f13f8d412763e18a2e6b8 (diff)
downloadbedrock-pc-a07d1585deb41bc40777045ac36b1643d2574980.zip
Fix memory, input, screen, and file devices
The memory device was never being allocated any memory, the input device wasn't scrolling correctly, the screen device was rendering sprites incorrectly, and the device ID of the file device had not been changed over from 0xA to 0x9.
-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,