home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / snip9707.zip / REBOOT.ASM < prev    next >
Assembly Source File  |  1997-07-05  |  2KB  |  80 lines

  1. ;  +++Date last modified: 05-Jul-1997
  2.  
  3. ; by: David Nugent via FidoNet ECPROG echo
  4. ;
  5. ; works reliably under protected mode environments
  6. ;
  7. ; modified by Bob Stout
  8. ;
  9. ;  Requires MASM 5.1 or later or equivalent
  10. ;
  11. ;  Assemble with:       MASM /Mx /z ...
  12. ;                       TASM /jMASM /mx /z ...
  13. ;
  14.  
  15. %       .MODEL  memodel,C               ;Add model support via
  16.                                         ;command line macros, e.g.
  17.                                         ;MASM /Dmemodel=LARGE
  18.  
  19. BIOS_POST  equ    0472H         ; POST (warm boot) flag
  20.  
  21.         .CODE
  22. ;
  23. ; void reboot(int warm);        /* 0 => cold boot, else warm boot */
  24. ;
  25.  
  26.         PUBLIC  reboot
  27.  
  28. reboot  PROC      warm:WORD
  29.         xor BX,BX
  30.         mov ES,BX
  31.  
  32.         mov AX,warm             ; AL=1 for warm boot, 0 for cold
  33.         cmp AL,1
  34.         jnz @NcB
  35.         mov AX,1234H            ; Avoid POST
  36. @NcB:
  37.         mov ES:[BIOS_POST],AX   ; Install flag
  38.  
  39.         cli                     ; Reboot
  40.         xor AX,AX
  41.         mov DS,AX
  42.         mov ES,AX
  43.         mov SS,AX
  44.         mov SP,AX
  45. @cP:
  46.         in AL,64H               ; Wait on AT keyboard controller
  47.         test AL,2
  48.         jne @cP
  49.  
  50.         mov ah,0d               ; DOS function 0Dh: flush disk buffers
  51.         int 21                  ; (this will also flush most caches)
  52.  
  53.         xor AL,AL               ; Try reset lines
  54.         out 64H,AL
  55.         mov ax,0000
  56. @Dly1:
  57.         dec ax                  ; Delay loop:  wait for reset signal
  58.         cmp ax,0000
  59.         jnz @Dly1
  60.  
  61.         mov AL,0FEh
  62.         out 64H,AL
  63.         mov ax,0000
  64. @Dly2:
  65.         dec ax
  66.         cmp ax,0000
  67.         jnz @Dly2               ; Still going?  hardware reset failed
  68.  
  69.         mov AX,0002H            ; Jump to reset vector
  70.         push AX                 ; via IRET
  71.         mov AX,00000H
  72.         push AX
  73.         mov AX,0FFFFH
  74.         push AX
  75.         iret
  76.  
  77. reboot  ENDP    
  78.  
  79.         end
  80.