Clean bootsect code up
diff --git a/src/bootsect/bootsect.asm b/src/bootsect/bootsect.asm
index 29a1b648..a9d58a5d 100644
--- a/src/bootsect/bootsect.asm
+++ b/src/bootsect/bootsect.asm
@@ -1,52 +1,52 @@
org 0x7C00
bits 16
-code_start:
+start:
+ cli
+ jmp 0x0000:.initialise_cs
+ .initialise_cs:
+ xor ax, ax
+ mov ds, ax
+ mov es, ax
+ mov fs, ax
+ mov gs, ax
+ mov ss, ax
+ mov sp, 0x7c00
+ sti
-cli
-jmp 0x0000:initialise_cs
-initialise_cs:
-xor ax, ax
-mov ds, ax
-mov es, ax
-mov fs, ax
-mov gs, ax
-mov ss, ax
-mov sp, 0x7c00
-sti
+ mov si, LoadingMsg
+ call simple_print
-mov si, LoadingMsg
-call simple_print
+ ; ****************** Load stage 2 ******************
-; ****************** Load stage 2 ******************
+ mov si, Stage2Msg
+ call simple_print
-mov si, Stage2Msg
-call simple_print
+ mov eax, 1
+ mov ebx, 0x7e00
+ mov ecx, 1
+ call read_sectors
-mov ax, 1
-mov ebx, 0x7e00
-mov cx, 1
-call read_sectors
+ jc err_reading_disk
-jc err_reading_disk
+ mov si, DoneMsg
+ call simple_print
-mov si, DoneMsg
-call simple_print
-
-jmp 0x7e00
+ jmp 0x7e00
err_reading_disk:
-mov si, ErrReadDiskMsg
-call simple_print
-jmp halt
+ mov si, ErrReadDiskMsg
+ call simple_print
+ jmp halt
err_enabling_a20:
-mov si, ErrEnableA20Msg
-call simple_print
+ mov si, ErrEnableA20Msg
+ call simple_print
+ jmp halt
halt:
-hlt
-jmp halt
+ hlt
+ jmp halt
; Data
@@ -70,44 +70,40 @@ dw 0xaa55
; ********************* Stage 2 *********************
-; Load stage 3
-
-mov ax, 2
-mov ebx, 0x8000
-mov cx, 62
-call read_sectors
-jc err_reading_disk
-
-; Enable A20
+stage2:
+ ; Load stage 3
+ mov eax, 2
+ mov ebx, 0x8000
+ mov ecx, 62
+ call read_sectors
+ jc err_reading_disk
-call enable_a20
-jc err_enabling_a20
+ ; Enable A20
+ call enable_a20
+ jc err_enabling_a20
-; Enter 32 bit pmode
+ ; Enter 32 bit pmode
+ lgdt [GDT] ; Load the GDT
-lgdt [GDT] ; Load the GDT
+ cli
-cli
+ mov eax, cr0
+ or al, 1
+ mov cr0, eax
-mov eax, cr0
-or eax, 00000001b
-mov cr0, eax
+ jmp 0x18:.pmode
+ bits 32
+ .pmode:
+ mov ax, 0x20
+ mov ds, ax
+ mov es, ax
+ mov fs, ax
+ mov gs, ax
+ mov ss, ax
-jmp 0x18:.pmode
+ jmp 0x8000
-bits 32
-.pmode:
-
-mov ax, 0x20
-mov ds, ax
-mov es, ax
-mov fs, ax
-mov gs, ax
-mov ss, ax
-
-jmp 0x8000
bits 16
-
%include 'a20_enabler.inc'
%include 'gdt.inc'
diff --git a/src/bootsect/disk.inc b/src/bootsect/disk.inc
index e685eba8..a8f429e3 100644
--- a/src/bootsect/disk.inc
+++ b/src/bootsect/disk.inc
@@ -1,5 +1,3 @@
-read_sector:
-
; ***********************************************
; Reads a disk sector with an LBA address
; ***********************************************
@@ -13,35 +11,35 @@ read_sector:
; OUT:
; Carry if error
-push eax
-push ebx
-push ecx
-push edx
-push esi
-push edi
-
-push es
-pop word [.target_segment]
-mov word [.target_offset], bx
-mov dword [.lba_address_low], eax
-
-xor esi, esi
-mov si, .da_struct
-mov ah, 0x42
-
-clc ; Clear carry for int 0x13 because some BIOSes may not clear it on success
-
-int 0x13 ; Call int 0x13
-
-.done:
-
-pop edi
-pop esi
-pop edx
-pop ecx
-pop ebx
-pop eax
-ret ; Exit routine
+read_sector:
+ push eax
+ push ebx
+ push ecx
+ push edx
+ push esi
+ push edi
+
+ push es
+ pop word [.target_segment]
+ mov word [.target_offset], bx
+ mov dword [.lba_address_low], eax
+
+ xor esi, esi
+ mov si, .da_struct
+ mov ah, 0x42
+
+ clc ; Clear carry for int 0x13 because some BIOSes may not clear it on success
+
+ int 0x13 ; Call int 0x13
+
+ .done:
+ pop edi
+ pop esi
+ pop edx
+ pop ecx
+ pop ebx
+ pop eax
+ ret ; Exit routine
align 4
.da_struct:
@@ -53,9 +51,6 @@ align 4
.lba_address_low dd 0
.lba_address_high dd 0
-
-read_sectors:
-
; ********************************************
; Reads multiple LBA addressed sectors
; ********************************************
@@ -65,58 +60,58 @@ read_sectors:
; DL = Drive number
; ES = Buffer segment
; EBX = Buffer offset
-; CX = Sectors count
+; ECX = Sectors count
; OUT:
; Carry if error
-push eax ; Save GPRs
-push ebx
-push ecx
-push edx
-push esi
-push edi
-
-.loop:
+read_sectors:
+ push eax ; Save GPRs
+ push ebx
+ push ecx
+ push edx
+ push esi
+ push edi
-push es
-push ebx
+ .loop:
+ push es
+ push ebx
-mov bx, 0x7000 ; Load in a temp buffer
-mov es, bx
-xor bx, bx
+ mov bx, 0x7000 ; Load in a temp buffer
+ mov es, bx
+ xor bx, bx
-call read_sector ; Read sector
+ call read_sector ; Read sector
-pop ebx
-pop es
+ pop ebx
+ pop es
-jc .done ; If carry exit with flag
+ jc .done ; If carry exit with flag
-push ds
+ push ds
-mov si, 0x7000
-mov ds, si
-mov edi, ebx
-xor esi, esi
+ mov si, 0x7000
+ mov ds, si
+ mov edi, ebx
+ xor esi, esi
-push ecx
-mov ecx, 512
-a32 o32 rep movsb
-pop ecx
+ push ecx
+ mov ecx, 512
+ a32 o32 rep movsb
+ pop ecx
-pop ds
+ pop ds
-inc eax ; Increment sector
-add ebx, 512 ; Add 512 to the buffer
+ inc eax ; Increment sector
+ add ebx, 512 ; Add 512 to the buffer
-loop .loop ; Loop!
+ loop .loop ; Loop!
-.done:
-pop edi
-pop esi
-pop edx
-pop ecx ; Restore GPRs
-pop ebx
-pop eax
-ret ; Exit routine
+ .done:
+ pop edi
+ pop esi
+ pop edx
+ pop ecx ; Restore GPRs
+ pop ebx
+ pop eax
+ ret ; Exit routine
diff --git a/src/bootsect/simple_print.inc b/src/bootsect/simple_print.inc
index add926af..fc40edf3 100644
--- a/src/bootsect/simple_print.inc
+++ b/src/bootsect/simple_print.inc
@@ -1,5 +1,3 @@
-simple_print:
-
; **************************************
; Prints a string using the BIOS
; **************************************
@@ -7,16 +5,17 @@ simple_print:
; IN:
; SI = points to a 0x00 terminated string
-push ax ; Save registers
-push si
-mov ah, 0x0E ; int 0x10, function 0x0E (print character)
-.loop:
+simple_print:
+ push ax ; Save registers
+ push si
+ mov ah, 0x0E ; int 0x10, function 0x0E (print character)
+ .loop:
lodsb ; Load character from string
test al, al ; Is is the 0x00 terminator?
jz .done ; If it is, exit routine
int 0x10 ; Call BIOS
jmp .loop ; Repeat!
-.done:
+ .done:
pop si ; Restore registers
pop ax
ret ; Exit routine
