Blob
1 [bits 16]2 [cpu 286]5 NUM_SECTORS equ 167 section .boot exec write8 global _start9 extern _entry10 _start:11 mov byte [bootdrv], dl13 ; reset boot drive14 xor ah, ah15 mov dl, byte [bootdrv]16 int 0x1317 jc error19 .loop:20 lea bp, [ldstr]21 call puts23 ; read sectors24 stc25 mov ah, 0x0226 mov al, NUM_SECTORS27 xor ch, ch28 mov cl, 229 xor dh, dh30 mov dl, byte [bootdrv]31 mov bx, 0x100032 mov es, bx33 xor bx, bx34 int 0x1335 jnc .ok37 ; reset boot drive again38 stc39 xor ah, ah40 mov dl, byte [bootdrv]41 int 0x1342 jnc error44 dec byte [tries]45 jnz .loop46 jmp error48 .ok:49 push word [bootdrv]50 mov ax, 0x100051 mov ds, ax52 mov es, ax53 jmp 0x1000:_entry55 error:56 lea bp, [errstr]57 ; fallthrough59 puts:60 mov al, byte [bp]61 inc bp62 test al, al63 jz .ret65 mov ah, 0x0E66 xor bx, bx67 int 0x1068 jmp puts70 .ret:71 ret73 ldstr:74 db "Loading kernel...", 13, 10, 076 errstr:77 db "Error", 13, 10, 079 bootdrv:80 db 082 tries:83 db 585 times 510 - ($ - $$) db 086 dw 0xAA55