From 57fd753a01ed167cddd9dbf4f8cd706e5f449e51 Mon Sep 17 00:00:00 2001 From: Kartik Agaram Date: Sun, 27 Dec 2020 22:52:39 -0800 Subject: 7433 - some major layout changes I'd missed that VBE call 0x4f01 (get video mode) can write up to 256 bytes. Unexpected areas were getting clobbered because I wasn't reserving enough space. --- baremetal/boot.hex | 104 ++++++++++++++++++++++++++--------------------------- baremetal/ex2.hex | 2 +- 2 files changed, 51 insertions(+), 55 deletions(-) diff --git a/baremetal/boot.hex b/baremetal/boot.hex index ff7a305a..cf5a11e8 100644 --- a/baremetal/boot.hex +++ b/baremetal/boot.hex @@ -107,7 +107,7 @@ b4 4f # ah <- 4f (VBE) b0 01 # al <- 01 (get video mode) b9 07 01 # cx <- 0x0107 (mode we requested) - bf 40 7d # di <- 0x7d40 (video mode info) + bf 00 7f # di <- 0x7f00 (video mode info) cd 10 # 4f: @@ -197,7 +197,7 @@ e9 fb ff # loop forever # load interrupt handlers 0f 01 1d # lidt 00/mod/indirect 011/subop 101/rm32/use-disp32 - 00 7f 00 00 # *idt_descriptor + f8 7d 00 00 # *idt_descriptor # enable keyboard IRQ b0 fd # al <- 0xfd # enable just IRQ1 @@ -255,51 +255,7 @@ e9 fb ff # loop forever # padding # 134: 00 00 00 00 00 00 00 00 00 00 00 00 - -# 140: -# video mode info: - 00 00 # attributes - 00 # winA - 00 # winB -# 144 - 00 00 # granularity - 00 00 # winsize -# 148 - 00 00 # segmentA - 00 00 # segmentB -# 14c - 00 00 00 00 # realFctPtr (who knows) -# 150 - 00 00 # pitch - 00 00 # Xres -# 154 - 00 00 # Yres - 00 00 # Wchar Ychar -# 158 - 00 # planes - 00 # bpp - 00 # banks - 00 # memory_model -# 15c - 00 # bank_size - 00 # image_pages - 00 # reserved -# 15f - 00 00 # red_mask red_position - 00 00 # green_mask green_position - 00 00 # blue_mask blue_position - 00 00 # rsv_mask rsv_position - 00 # directcolor_attributes -# 168 - 00 00 00 00 # physbase <== linear frame buffer - -# reserved -# 16c: - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - -# padding -# 180: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 @@ -307,8 +263,17 @@ e9 fb ff # loop forever 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 +# 1f8: +# idt_descriptor: + ff 00 # idt_end - idt_start - 1 + 00 7e 00 00 # start = idt_start + +# 1fe: # final 2 bytes of boot sector 55 aa @@ -367,14 +332,45 @@ e9 fb ff # loop forever # idt_end: # offset 300 (address 0x7f00): -# idt_descriptor: - ff 00 # idt_end - idt_start - 1 - 00 7e 00 00 # start = idt_start +# video mode info: + 00 00 # attributes + 00 # winA + 00 # winB +# 304 + 00 00 # granularity + 00 00 # winsize +# 308 + 00 00 # segmentA + 00 00 # segmentB +# 30c + 00 00 00 00 # realFctPtr (who knows) +# 310 + 00 00 # pitch + 00 00 # Xres +# 314 + 00 00 # Yres + 00 00 # Wchar Ychar +# 318 + 00 # planes + 00 # bpp + 00 # banks + 00 # memory_model +# 31c + 00 # bank_size + 00 # image_pages + 00 # reserved +# 31f + 00 00 # red_mask red_position + 00 00 # green_mask green_position + 00 00 # blue_mask blue_position + 00 00 # rsv_mask rsv_position + 00 # directcolor_attributes +# 328 + 00 00 00 00 # physbase <== linear frame buffer -# padding - 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +# 32c +# reserved for video mode info + 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 diff --git a/baremetal/ex2.hex b/baremetal/ex2.hex index a2f91106..73070e8e 100644 --- a/baremetal/ex2.hex +++ b/baremetal/ex2.hex @@ -15,7 +15,7 @@ # ecx <- LFB 8b # copy *rm32 to r32 0d # 00/mod/indirect 001/r32/ecx 101/rm32/use-disp32 - 68 7d 00 00 # disp32 + 28 7f 00 00 # disp32 # eax <- LFB + 0xbffff (1024*768 - 1) 8d # copy-address rm32 to r32 -- cgit 1.4.1-2-gfad0