[BITS 16]
[ORG 0]
cld
mov ax,7C0h
mov ds,ax
mov ax,60h
mov es,ax
mov si,0
mov di,0
mov cx,512
rep movsb
push es
pop ds
jmp 60h:INIT
INIT:
mov ah,2h
int 16h
and al,8h
jnz ALT_ON
jmp ALT_OFF
ALT_ON:
mov ax,800h
mov es,ax
mov bx,0
mov dx,80h
mov cx,2
mov ax,203h
int 13h
jnc .OK
mov si,DISK_ERR
call MSG
jmp PAUSE
.OK:
jmp 800h:0
ALT_OFF:
mov si,1BEh
mov cx,4
.LOOP:
cmp byte [si],80h
je .OK
cmp byte [si],0
jne .ERR
add si,16
loop .LOOP
mov si,NOACTIVE
call MSG
jmp PAUSE
.ERR:
mov si,BADMPR
call MSG
jmp PAUSE
.OK:
mov ax,7C0h
mov es,ax
mov dx,word [si]
mov cx,word [si+2]
mov bx,0
mov ax,201h
int 13h
jnc .YEAH
mov si,DISK_ERR
call MSG
jmp PAUSE
.YEAH:
es cmp word [510],0AA55h
je .END
mov si,NO_0AA55h_MARK
call MSG
jmp PAUSE
.END:
push es
pop ds
jmp 0x7c0:0
RESET_FLAG:
mov si,0x1be
mov cx,4
.LOOP:
mov byte [si],0
add si,16
loop .LOOP
retn
MSG: ;display string routine
lodsb
cmp al,0
je .END
mov ah,0xe
mov bh,0
int 0x10
jmp MSG
.END:
retn
PAUSE:
mov ah,0
int 0x16
REBOOT: ;reboot the machine.
jmp 0xffff:0
NOACTIVE db 'NO ACTIVE PARTITION',0
BADMPR db 'INVALID MPR',0
DISK_ERR db 'DISK I/O ERROR',0
NO_0AA55h_MARK db 'NO 0AA55h SIGNATURE',0
times 446-($-$$) db 0