Blob


1 [bits 16]
2 [cpu 286]
5 NUM_SECTORS equ 16
7 section .boot exec write
8 global _start
9 extern _entry
10 _start:
11 mov byte [bootdrv], dl
13 ; reset boot drive
14 xor ah, ah
15 mov dl, byte [bootdrv]
16 int 0x13
17 jc error
19 .loop:
20 lea bp, [ldstr]
21 call puts
23 ; read sectors
24 stc
25 mov ah, 0x02
26 mov al, NUM_SECTORS
27 xor ch, ch
28 mov cl, 2
29 xor dh, dh
30 mov dl, byte [bootdrv]
31 mov bx, 0x1000
32 mov es, bx
33 xor bx, bx
34 int 0x13
35 jnc .ok
37 ; reset boot drive again
38 stc
39 xor ah, ah
40 mov dl, byte [bootdrv]
41 int 0x13
42 jnc error
44 dec byte [tries]
45 jnz .loop
46 jmp error
48 .ok:
49 push word [bootdrv]
50 mov ax, 0x1000
51 mov ds, ax
52 mov es, ax
53 jmp 0x1000:_entry
55 error:
56 lea bp, [errstr]
57 ; fallthrough
59 puts:
60 mov al, byte [bp]
61 inc bp
62 test al, al
63 jz .ret
65 mov ah, 0x0E
66 xor bx, bx
67 int 0x10
68 jmp puts
70 .ret:
71 ret
73 ldstr:
74 db "Loading kernel...", 13, 10, 0
76 errstr:
77 db "Error", 13, 10, 0
79 bootdrv:
80 db 0
82 tries:
83 db 5
85 times 510 - ($ - $$) db 0
86 dw 0xAA55