Fix LOG_X usage crashing the system
Each `LOG_X` call declared a rather huge variable on the stack, and using it to dump a whole structure often led to a page fault. Now the temporary variables are `static`, which is a bit wasteful on the kernel binary size, but easier to maintain. Additionally bootloader updated to load kernels bigger than 64K.
This commit is contained in:
+7
-5
@@ -10,7 +10,6 @@ mov sp, 0x7000
|
||||
FIRST_PARTITION_SECTOR equ 2048 ; TODO Read MBR.
|
||||
STAGE_BUFFER_SEGMENT equ 0x0900
|
||||
STAGE_BUFFER_OFFSET equ 0x0000
|
||||
KERNEL_BUFFER_SEGMENT equ 0x2000
|
||||
|
||||
jmp prepare_kernel
|
||||
|
||||
@@ -39,9 +38,10 @@ root_start: dw 0
|
||||
root_size: dw 0
|
||||
data_start: dw 0
|
||||
|
||||
kernel_filename: db 'KERNEL BIN'
|
||||
kernel_cluster: dw 0
|
||||
kernel_buffer_offset: dw 0
|
||||
kernel_filename: db 'KERNEL BIN'
|
||||
kernel_cluster: dw 0
|
||||
kernel_buffer_segment: dw 0x2000
|
||||
kernel_buffer_offset: dw 0
|
||||
|
||||
read_sectors:
|
||||
xor bx, bx
|
||||
@@ -192,7 +192,7 @@ load_kernel_cluster:
|
||||
add ax, [data_start]
|
||||
xor cx, cx
|
||||
mov cl, [bpb.sectors_per_cluster]
|
||||
mov bx, KERNEL_BUFFER_SEGMENT
|
||||
mov bx, [kernel_buffer_segment]
|
||||
mov es, bx
|
||||
mov di, [kernel_buffer_offset]
|
||||
call read_sectors
|
||||
@@ -201,6 +201,8 @@ load_kernel_cluster:
|
||||
shl ax, 9 ; * 512
|
||||
add ax, [kernel_buffer_offset]
|
||||
mov [kernel_buffer_offset], ax
|
||||
jnc find_next_kernel_cluster
|
||||
add word [kernel_buffer_segment], 0x1000
|
||||
|
||||
find_next_kernel_cluster:
|
||||
xor bx, bx
|
||||
|
||||
Reference in New Issue
Block a user