Make finishing touches before UEFI addition
As legacy BIOS isn't as straightforward to develop using a modern system, modern emulators/VMs and virtual machine firmware, it was decided to start work on an UEFI version of the Nightloader. This commit leaves the not-yet boot-capable, but as far as it's there already assembling and working legacy BIOS code behind for later work on this edition.
This commit is contained in:
parent
65db388f00
commit
7abe0539f9
|
@ -73,4 +73,3 @@ setup_drivers:
|
||||||
ret
|
ret
|
||||||
|
|
||||||
%include "drivers/pci/driver.asm"
|
%include "drivers/pci/driver.asm"
|
||||||
%include "drivers/acpi/driver.asm"
|
|
||||||
|
|
|
@ -18,7 +18,7 @@ stage_2_setup_entry:
|
||||||
cli
|
cli
|
||||||
|
|
||||||
mov ah, 0x00
|
mov ah, 0x00
|
||||||
mov al, 0x03 ;0x13
|
mov al, 0x03 ; 0x13 for graphics, 0x03 for text.
|
||||||
int 0x10
|
int 0x10
|
||||||
|
|
||||||
.check_a20:
|
.check_a20:
|
||||||
|
@ -51,19 +51,15 @@ stage_2_setup_entry:
|
||||||
%include "memory/a20.asm"
|
%include "memory/a20.asm"
|
||||||
%include "memory/gdt.asm"
|
%include "memory/gdt.asm"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bits 32
|
bits 32
|
||||||
stage2_true_entry:
|
stage2_protected_entry:
|
||||||
push ebp
|
|
||||||
mov ebp, esp
|
|
||||||
call setup_drivers
|
|
||||||
mov esp, ebp
|
|
||||||
pop ebp
|
|
||||||
|
|
||||||
cli
|
cli
|
||||||
hlt
|
hlt
|
||||||
|
|
||||||
|
.buffer:
|
||||||
|
dd 0
|
||||||
|
|
||||||
%include "utility/math.asm"
|
%include "utility/math.asm"
|
||||||
%include "utility/memory.asm"
|
%include "utility/memory.asm"
|
||||||
%include "utility/display.asm"
|
%include "utility/display.asm"
|
||||||
|
|
|
@ -286,7 +286,7 @@ bits 32
|
||||||
mov ebx, [esi + (64 - 8)]
|
mov ebx, [esi + (64 - 8)]
|
||||||
mov eax, [esi + (64 - 4)]
|
mov eax, [esi + (64 - 4)]
|
||||||
|
|
||||||
jmp dword stage2_true_entry
|
jmp dword stage2_protected_entry
|
||||||
|
|
||||||
align 16
|
align 16
|
||||||
.gdtr:
|
.gdtr:
|
||||||
|
|
|
@ -65,32 +65,31 @@ mem_equal:
|
||||||
mov [esi + (32 - 16)], edi
|
mov [esi + (32 - 16)], edi
|
||||||
|
|
||||||
.body:
|
.body:
|
||||||
mov edx, [ebp - 4] ; Block 1
|
|
||||||
mov edi, [ebp - 8] ; Block 2
|
|
||||||
xor eax, eax ; Current Byte Offset
|
xor eax, eax ; Current Byte Offset
|
||||||
|
|
||||||
.body.compare_loop:
|
.comparison_loop:
|
||||||
|
mov edx, [ebp - 4] ; Block 1
|
||||||
mov ebx, edx
|
mov ebx, edx
|
||||||
add ebx, eax
|
add ebx, eax
|
||||||
mov dl, [ebx]
|
mov dl, [ebx]
|
||||||
|
|
||||||
|
mov edi, [ebp - 8] ; Block 2
|
||||||
mov ebx, edi
|
mov ebx, edi
|
||||||
add ebx, eax
|
add ebx, eax
|
||||||
mov dh, [ebx]
|
mov dh, [ebx]
|
||||||
|
|
||||||
inc eax
|
inc eax
|
||||||
cmp dl, dh
|
cmp dl, dh
|
||||||
je .body.compare_loop.condition
|
je .length_condition
|
||||||
|
|
||||||
; On NOT equal
|
; On NOT equal
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
jmp .epilog
|
jmp .epilog
|
||||||
|
|
||||||
.body.compare_loop.condition:
|
.length_condition:
|
||||||
inc eax
|
inc eax
|
||||||
cmp eax, [ebp - 12]
|
cmp eax, [ebp - 12]
|
||||||
jb .body.compare_loop
|
jb .comparison_loop
|
||||||
mov eax, 1
|
mov eax, 1
|
||||||
|
|
||||||
.epilog:
|
.epilog:
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
qemu-system-i386 nightloader.bin -qmp unix:qmp.socket,server,nowait
|
qemu-system-x86_64 -m 512M -enable-kvm -d guest_errors nightloader.bin -qmp unix:qmp.socket,server,nowait
|
||||||
|
|
Loading…
Reference in New Issue