3 %define STAGE2START 0x7e00
4 %define STAGE2SECTORS (STAGE2SIZE + 511) / 512
14 ; Initialize the stack
15 ; It grows down, overwriting this code
16 ; I have no idea what this does exactly
24 mov ah, 0x0e ; TTY output
26 mov bl, 0x07 ; Color: Light grey on black background
31 ; Call print_al on all characters in si
32 ; si must be null terminated
34 mov cl, 0 ; Start with iteration 0 - equivalent of int i = 0
36 lodsb ; Load next characet of si into al
38 cmp al, 0 ; Null terminator?
39 je .print_str_exit ; If yes, we are done
67 ; Move cursor to 0, 0 on page 0
77 mov ah, 0x02 ; Read sectors
78 mov al, STAGE2SECTORS ; Stage 2 size in sectors
79 xor ch, ch ; Cylinder 0
80 mov cl, 2 ; Second sector, they start at 1
82 mov dl, 0x80 ; Hard Drive 1
83 mov bx, STAGE2START ; Memory address to load stage 2 into
86 jc stage2_error ; Carry flag is set if there was an error
88 cmp al, STAGE2SECTORS ; Have we read as many sectors as we requested?
91 jmp STAGE2START ; Hand over control to stage 2
93 hello db 'Welcome to loadnothing stage 1!', 13, 10, 0 ; \r\n\0
94 error db 'Error reading stage 2 from disk', 13, 10, 0 ; \r\n\0
96 times (446 - ($ - $$)) db 0x00