Skip to content

Commit a6d69e9

Browse files
committed
Fix: Add support for segments in video mode ptr
The video mode pointer field in is `[segment, offset]` form. So we should not treat it as a pointer directly.
1 parent 6eb0abb commit a6d69e9

File tree

1 file changed

+6
-1
lines changed

1 file changed

+6
-1
lines changed

bios/stage-2/src/vesa.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,12 @@ impl<'a> VesaInfo<'a> {
9595
}
9696

9797
fn get_mode(&self, index: usize) -> Option<u16> {
98-
let video_mode_ptr = self.info_block.video_mode_ptr;
98+
let (segment, offset) = {
99+
let raw = self.info_block.video_mode_ptr;
100+
((raw >> 16) as u16, raw as u16)
101+
};
102+
let video_mode_ptr = ((segment as u32) << 4) + offset as u32;
103+
99104
let base_ptr = video_mode_ptr as *const u16;
100105
let ptr = unsafe { base_ptr.add(index) };
101106
let mode = unsafe { *ptr };

0 commit comments

Comments
 (0)