about summary refs log tree commit diff stats
path: root/baremetal/boot.hex
diff options
context:
space:
mode:
authorKartik Agaram <vc@akkartik.com>2020-12-27 22:52:39 -0800
committerKartik Agaram <vc@akkartik.com>2020-12-27 22:54:54 -0800
commit57fd753a01ed167cddd9dbf4f8cd706e5f449e51 (patch)
tree93513be4d60165c08884a611f0c2ae826636148a /baremetal/boot.hex
parent4ffe861a452924b468d0b74ed5e29b7cc374555d (diff)
downloadmu-57fd753a01ed167cddd9dbf4f8cd706e5f449e51.tar.gz
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.
Diffstat (limited to 'baremetal/boot.hex')
-rw-r--r--baremetal/boot.hex104
1 files changed, 50 insertions, 54 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