[BITS 16] [ORG 0x7C00] start: ; Set up segments xor ax, ax mov ds, ax mov es, ax mov ss, ax mov sp, 0x7C00 ; Clear screen mov ah, 0x00 mov al, 0x03 int 0x10 ; Print startup messages mov si, msg_start call print_string mov si, msg_key call print_string mov si, msg_drm call print_string mov si, msg_kernel call print_string ; Load Stage 2 from disk ; We assume Stage 2 is at LBA 1, 7 sectors long, load to 0x7E00 mov dl, 0x80 ; Hardcode boot drive to 0x80 mov ah, 0x42 mov si, dap int 0x13 jc disk_error ; Jump to Stage 2 jmp 0x0000:0x7E00 disk_error: mov si, msg_err call print_string halt: hlt jmp halt ; --- Functions --- print_string: mov ah, 0x0E ; Teletype output .loop: lodsb or al, al jz .done int 0x10 jmp .loop .done: ret ; --- Data --- msg_start: db "Welcome to ArkOS Bootloader", 13, 10, 0 msg_key: db "Checking Hardware Secure Key... OK", 13, 10, 0 msg_drm: db "Loading DRM Module... OK", 13, 10, 0 msg_kernel: db "Loading Kernel & Launching OS...", 13, 10, 0 msg_err: db "Disk Error loading Stage 2!", 13, 10, 0 align 4 dap: db 0x10 ; size of DAP db 0 ; zero dw 7 ; number of sectors to read dw 0x7E00 ; offset dw 0x0000 ; segment dq 1 ; LBA 1 (Stage 2 starts at sector 1) times 510-($-$$) db 0 dw 0xAA55