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:
2026-08-25 21:15:16 +03:00
parent 63c1720e60
commit c58605b56d
2 changed files with 41 additions and 51 deletions
+7 -5
View File
@@ -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