summaryrefslogtreecommitdiff
path: root/boot/mbr.asm
diff options
context:
space:
mode:
authorMichal Idziorek <m.i@gmx.at>2014-08-27 14:42:44 +0200
committerMichal Idziorek <m.i@gmx.at>2014-08-27 14:42:44 +0200
commit2d20d0d1f720e064b29aa3578aa33b5146a954e5 (patch)
treeca0adbc37cb1408ae74bb7ed525b462690baa73e /boot/mbr.asm
parent5e48d8259fb2857ad4441de77cbacddd50a21ec0 (diff)
cleanup boot directory
Diffstat (limited to 'boot/mbr.asm')
-rw-r--r--boot/mbr.asm93
1 files changed, 35 insertions, 58 deletions
diff --git a/boot/mbr.asm b/boot/mbr.asm
index 32f1a6f..2beac7b 100644
--- a/boot/mbr.asm
+++ b/boot/mbr.asm
@@ -6,12 +6,31 @@
;
; we have just been loaded by the BIOS and are in 16-bits real mode!
;
-; THIS IS THE CENTRAL FILE OF THE BOOTLOADER, after we finished we
-; are inside the C kernel!
+; THIS IS THE CENTRAL FILE OF THE BOOTLOADER,
+;
+; after we are through,
+; the following work has been accomplished (chronologically):
+;
+; * BOOT_DRIVE is set
+;
+; * 50 sectors of our kernel are loaded at KERNEL_OFFSET from floppy
+;
+; * memoru map is available at MEMMAP_OFFSET
+; (look at MEMMEP_SIZE_OFFSET for number of entries)
+;
+; * the vesa mode specified by VESA_MODE_SELECT is set up
+; (at VESA_MODES, and VESA_MODE_INFO additional info structs are available)
+;
+; * 32-bit protected mode was set up.
+;
+; * A20 gate is open
+;
+; * PICs are configured
+;
+; * we are inside the C kernel!
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;we want 16-bit instructions, before we switch to 32-bit protected mode.
;define origin of boot record in memory: 0x7c00
;this is where the BIOS per definition will put the first
@@ -19,42 +38,34 @@
;The Boot record is identified by the last 2 magic bytes: 0xaa55 (?)
[org 0x7c00]
-;define where we will load our kernel into memory
+;define where we will load our kernel into memory and some
+;other memory locations
KERNEL_OFFSET equ 0x1000
MEMMAP_SIZE_OFFSET equ 0x7c00+0x600
MEMMAP_OFFSET equ 0x7c00+0x400
VESA_MODES equ 0x8300
VESA_MODE_INFO equ 0x8400
VESA_MODE_SELECT equ 0x4114
-;VESA_MODE_SELECT equ 0x411A
+;we want 16-bit instructions, before we switch to 32-bit protected mode.
[bits 16]
jmp boot_16 ;start boot process
+;SOME Global Data, mainly strings
BOOT_DRIVE:
db 0xff
-
-;SOME Global Data, mainly strings
STR_VERSION:
db "v0.2~",0
VESA_CHECK:
db "vesa check.",0
-;STR_PROT:
-; db "32-bit PM",0
-;STR_LOADED:
-; db "loaded",0
-
;lets put our temporary GDT (Global Descriptor Table) here
%include "boot/GDT.asm"
;include 16-bit real mode routines (print_string, disk_load)
-%include "boot/common.asm"
-%include "boot/print16.asm"
-
-;include 32-bit Protected Mode routines (print_string_pm,print_hex_pm)
-;%include "boot/common_pm.asm"
+%include "boot/disk_load_16.asm"
+%include "boot/print_string_16.asm"
;include our routines for switching to 32-bit protected mode
%include "boot/pm.asm"
@@ -62,7 +73,7 @@ VESA_CHECK:
;pic mapping
%include "boot/pic.asm"
-;memory map
+;get memory map
%include "boot/memmap.asm"
;;;;;;;; BOOT 16-bit real ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -82,21 +93,12 @@ boot_16:
;remember BOOT_DRIVE (as was set by BIOS)
mov [BOOT_DRIVE],dl
- ;print FoolOS version info
-; mov bx, STR_VERSION
-; call print_string
-
- ;Load the KERNEL
+ ;Load the KERNEL (50 sectors starting at sector 2)
mov bx,KERNEL_OFFSET
mov dh, 50 ;50 sectors!
mov dl, [BOOT_DRIVE]
call disk_load
- ;print info message that kernel was loaded
-; mov bx, STR_LOADED
-; call print_string
-
-
;get memory map from bios before we enter 32 bit protected mode
mov ax,0 ; set target address in es:di (0:offset)
mov es,ax
@@ -104,7 +106,8 @@ boot_16:
call BiosGetMemoryMap ; this will also put the number of entries
; of the memory map at MEMMAP_SIZE_OFFSET
- ;get vesa modes!
+ ;VESA: also setup vesa stuff before entering 32 bit protected mode
+ ;VESA: get all available vesa modes!
mov ax,0 ; set target address in es:di (0:offset)
mov es,ax
mov di,VESA_MODES
@@ -119,7 +122,7 @@ boot_16:
vesa_ok:
;
- ;get info on mode of interest
+ ;VESA: get vesa info on mode of interest
mov ax,0 ; set target address in es:di (0:offset)
mov es,ax
mov di,VESA_MODE_INFO
@@ -134,7 +137,7 @@ boot_16:
jmp vesa_err2
vesa_ok2:
- ;finally switch to the mode of choice!
+ ;VESA: finally switch to the mode of choice!
mov ax,0x4f02 ;vesa function: Set Mode
mov bx,VESA_MODE_SELECT
int 0x10
@@ -148,11 +151,6 @@ boot_32_pm:
; we could do ALL This inside the kernel!!!!!! TODO
- ;print info message that we are in protected mode!
-; mov ecx,160
-; mov ebx,STR_PROT
-; call print_string_pm
-
;enable A20
;http://www.brokenthorn.com/Resources/OSDev9.html
;Method 3.1: Enables A20 through keyboard controller
@@ -162,32 +160,11 @@ boot_32_pm:
;pic setup
call pic_setup
- call KERNEL_OFFSET ;jump into our Kernel it
-
-;idt_descriptor:
-; dw idt_end-idt_start-1
-; dd KERNEL_OFFSET
-;;;; DEBUGGING STUFF
-;times 8 db '@'
-;dw interrupt
-;times 8 db '@'
-;dw interrupt2
-;times 8 db '@'
+ call KERNEL_OFFSET ;jump into our Kernel!
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
;so we get identified as MBR
times 510-($-$$) db 0
dw 0xaa55
-;interrupt descriptor table (hardcoded address of interrupts:)
-;idt_start:
-;times 33 db 0x50,0x7c,0x08,0x00,0x00,10001110b,0x0,0x0
-;db 0x59,0x7c,0x08,0x00,0x00,10001110b,0x0,0x0
-;times 253 db 0x50,0x7c,0x08,0x00,0x00,10001110b,0x0,0x0
-;idt_end:
-
-
-
-