mirror of
https://github.com/gbowne1/ClassicOS.git
synced 2025-04-04 21:14:58 -07:00
23 lines
1.1 KiB
NASM
23 lines
1.1 KiB
NASM
; Define constants (adjust as needed)
|
|
boot_drive equ 0x00 ; Drive to load kernel from (usually 0 for primary)
|
|
kernel_sector equ 1 ; Sector containing the kernel (adjust for your kernel's location)
|
|
kernel_segments equ 4 ; Number of sectors to load (adjust for your kernel size)
|
|
kernel_load_address equ 0x1000 ; Memory address to load the kernel
|
|
|
|
void int_13h(unsigned int ah, unsigned int al, unsigned int dx, unsigned int ch, unsigned int cl, unsigned int bx);
|
|
|
|
void error_handler(const char *message)
|
|
; Main kernel loading code
|
|
mov bx, kernel_load_address ; Set load address
|
|
|
|
; Loop to load kernel sectors
|
|
mov cx, 0 ; Initialize counter
|
|
loop_load:
|
|
int_13h(0x02, kernel_segments, boot_drive * 256 + kernel_sector, ch, cl, bx) ; Read sectors
|
|
add bx, 512 * kernel_segments ; Update load address
|
|
inc cx ; Increment counter
|
|
cmp cx, kernel_segments ; Check if all sectors loaded
|
|
jne loop_load ; Jump back if not finished
|
|
|
|
; Success - kernel is now loaded into memory
|
|
ret ; Return to the main bootloader code |