about summary refs log tree commit diff stats
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
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.
-rw-r--r--baremetal/boot.hex104
-rw-r--r--baremetal/ex2.hex2
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