From 1c77be68d75d8134bea72305057eb9ce523e9748 Mon Sep 17 00:00:00 2001 From: Kartik Agaram Date: Sun, 24 Jan 2021 12:23:16 -0800 Subject: 7558 Bochs is still broken, but before we can fix it we need to make some room in the boot sector. So we'll spend a few commits reorganizing things. --- baremetal/101screen.subx | 2 +- baremetal/boot.hex | 120 +++++++++++++++++++++++------------------------ baremetal/ex2.hex | 2 +- baremetal/ex2.subx | 2 +- 4 files changed, 63 insertions(+), 63 deletions(-) (limited to 'baremetal') diff --git a/baremetal/101screen.subx b/baremetal/101screen.subx index cac9593e..c2229a59 100644 --- a/baremetal/101screen.subx +++ b/baremetal/101screen.subx @@ -28,7 +28,7 @@ pixel-on-real-screen: # x: int, y: int, color: int c1/shift 4/subop/left %eax 0xa/imm8 03/add-> *(ebp+8) 0/r32/eax # eax += location of frame buffer - 03/add-> *0x7f28 0/r32/eax # unsafe + 03/add-> *0x7e28 0/r32/eax # unsafe # *eax = color 8b/-> *(ebp+0x10) 1/r32/ecx 88/byte<- *eax 1/r32/CL diff --git a/baremetal/boot.hex b/baremetal/boot.hex index 491e3718..b54aaa52 100644 --- a/baremetal/boot.hex +++ b/baremetal/boot.hex @@ -42,9 +42,9 @@ # 1c8 (address 7dc8) <== keyboard buffer # 1f8 (address 7df8) <== idt_descriptor # 1fe (address 7dfe) boot sector marker (2 bytes) -# offset 200 (address 7e00): interrupt descriptor table (256 bytes) -# offset 300 (address 7f00): video mode data (256 bytes) -# 328 (address 7f28) <== start of video RAM stored here +# offset 200 (address 7e00): video mode data (256 bytes) +# 228 (address 7e28) <== start of video RAM stored here +# offset 300 (address 7f00): interrupt descriptor table (256 bytes) # offset 400 (address 8000): keyboard mappings (2KB) # offset c00 (address 8800): bitmap font (2KB) # offset 1400 (address 9000): entrypoint for applications (don't forget to adjust survey_baremetal if this changes) @@ -145,7 +145,7 @@ b4 4f # ah <- 4f (VBE) b0 01 # al <- 01 (get video mode) b9 07 01 # cx <- 0x0107 (mode we requested) - bf 00 7f # di <- 0x7f00 (video mode info) [label] + bf 00 7e # di <- 0x7e00 (video mode info) [label] cd 10 # 6c: @@ -360,7 +360,7 @@ e9 fd ff # loop forever # 1f8: # idt_descriptor: ff 00 # idt_end - idt_start - 1 - 00 7e 00 00 # start = idt_start [label] + 00 7f 00 00 # start = idt_start [label] # 1fe: # final 2 bytes of boot sector @@ -369,7 +369,61 @@ e9 fd ff # loop forever ## sector 2 # loaded by load_disk, not automatically on boot -# offset 200 (address 0x7e00): interrupt descriptor table +# offset 200 (address 0x7e00): +# video mode info: + 00 00 # attributes + 00 # winA + 00 # winB +# 204 + 00 00 # granularity + 00 00 # winsize +# 208 + 00 00 # segmentA + 00 00 # segmentB +# 20c + 00 00 00 00 # realFctPtr (who knows) +# 210 + 00 00 # pitch + 00 00 # Xres +# 214 + 00 00 # Yres + 00 00 # Wchar Ychar +# 218 + 00 # planes + 00 # bpp + 00 # banks + 00 # memory_model +# 21c + 00 # bank_size + 00 # image_pages + 00 # reserved +# 21f + 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 +# 228 + 00 00 00 00 # physbase <== linear frame buffer + +# 22c +# 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 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + +# offset 300 (address 0x7f00): interrupt descriptor table # 32 entries * 8 bytes each = 256 bytes (0x100) # idt_start: @@ -423,60 +477,6 @@ e9 fd ff # loop forever 00 00 00 00 00 00 00 00 # idt_end: -# offset 300 (address 0x7f00): -# 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 - -# 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 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 - ## the rest of this file has data # offset 400 (address 0x8000): diff --git a/baremetal/ex2.hex b/baremetal/ex2.hex index 439a0e03..f3c12260 100644 --- a/baremetal/ex2.hex +++ b/baremetal/ex2.hex @@ -18,7 +18,7 @@ # ecx <- LFB 8b # copy *rm32 to r32 0d # 00/mod/indirect 001/r32/ecx 101/rm32/use-disp32 - 28 7f 00 00 # disp32 [label] + 28 7e 00 00 # disp32 [label] # eax <- LFB + 0xbffff (1024*768 - 1) 8d # copy-address rm32 to r32 diff --git a/baremetal/ex2.subx b/baremetal/ex2.subx index 57806e34..b1f42114 100644 --- a/baremetal/ex2.subx +++ b/baremetal/ex2.subx @@ -14,7 +14,7 @@ main: # ecx <- start of video memory - 8b/-> *0x7f28 1/r32/ecx + 8b/-> *0x7e28 1/r32/ecx # eax <- final pixel of video memory 8d/copy-address *(ecx + 0x0bffff) 0/r32/eax # 0xbffff = 1024*768 - 1 -- cgit 1.4.1-2-gfad0