; by: David Nugent via ECPROG echo

;

; works VERY reliably under all the protected mode environments I've

; tried (namely DV and PC-MOS). Haven't tried VM386 or NX386 yet, but

; I'm hopeful.... ;-)

 
 
BIOS_POST  equ    0472H        ; POST (warm boot) flag

 
 
        xor BX,BX               ; AL=1 for warm boot, 0 for cold

        mov ES,BX
        cmp AL,1
        jnz @NcB
        mov AX,1234H            ; Avoid POST

@NcB:
        mov ES:[BIOS_POST],AX   ; Install flag

 
        cli                     ; Reboot

        xor AX,AX
        mov DS,AX
        mov ES,AX
        mov SS,AX
        mov SP,AX
@cP:
        in AL,64H               ; Wait on AT keyboard controller

        test AL,2
        jne @cP
 
        xor AL,AL               ; Try reset lines

        out 64H,AL
        iodelay
        mov AL,0FEh
        out 64H,AL
        iodelay
        mov AX,0002H            ; Jump to reset vector

        push AX                 ; via IRET

        mov AX,0F000H
        push AX
        mov AX,0FFF0H
        push AX
        iret


syntax highlighted by Code2HTML, v. 0.9.1