[comp.sys.ibm.pc.misc] Reboot from software

corry@eniac.seas.upenn.edu (Chris Corry) (12/13/90)

Hi.

I'm writing a program that, under certain conditions, needs to reboot the
computer. I figured that this was a simple generation of interrupt 25 (hex 19).
However, everytime I try to use this mechanism (using geninterrupt or int86
from Turbo C) the computer hangs. Anyone have any ideas?  Please mail or post
and I'll summarize if there seems to be an interest (I can't belive that I'm
the only person who has run into this problem. Then again I'm probably doing
something stupid.)

THANXS!

Chris Corry
corry@eniac.seas.upenn.edu

v087mxgb@ubvmsd.cc.buffalo.edu (Shawn E Thompson) (12/13/90)

In article <34681@netnews.upenn.edu>, corry@eniac.seas.upenn.edu (Chris Corry) writes...

I think assy lang int (19, I think) will call the bootstrap,
maybe you could link to that ??? I've used it from DOS, works
well in batch files .


ST

Ralf.Brown@B.GP.CS.CMU.EDU (12/13/90)

In article <34681@netnews.upenn.edu>, corry@eniac.seas.upenn.edu (Chris Corry) wrote:
}I'm writing a program that, under certain conditions, needs to reboot the
}computer. I figured that this was a simple generation of interrupt 25 (hex 19).
}However, everytime I try to use this mechanism (using geninterrupt or int86
}from Turbo C) the computer hangs. Anyone have any ideas?  Please mail or post

From the interrupt list:

INT 19 - DISK BOOT
   causes reboot of disk system (no memory test performed, interrupt vectors
   preserved).	Because interrupt vectors are preserved, this interrupt usually
   causes a system hang if any TSRs have hooked vectors from 00h through 1Ch,
   particularly INT 08.

Notes:	to accomplish a warm boot equivalent to Ctrl-Alt-Del, store 1234h in
	  0040h:0072h and jump to FFFFh:0000h.	For a cold boot equivalent to
	  a reset, store 0000h at 0040h:0072h before jumping.
	VDISK.SYS hooks this interrupt to allow applications to find out how
	  much extended memory has been used by VDISKs (the three bytes at
	  offset 2Ch in the INT 19 handler's segment contain the linear address
	  of the first free extended memory).


--
UUCP: {ucbvax,harvard}!cs.cmu.edu!ralf -=- 412-268-3053 (school) -=- FAX: ask
ARPA: ralf@cs.cmu.edu  BIT: ralf%cs.cmu.edu@CMUCCVMA  FIDO: 1:129/3.1
Disclaimer?    |   I was gratified to be able to answer promptly, and I did.
What's that?   |   I said I didn't know.  --Mark Twain

jc58+@andrew.cmu.edu (Johnny J. Chin) (12/13/90)

Excerpts From Captions of msdos:
30-Nov-90  Rebooting (SUMMARY)            John Clinton Hall@wpi.WP (686)    
>In summary, to perform a system warm boot on the IBM, put the word 1234h in
>location 0040h:0072h and JMP to location 0FFFFh:0000h.  For example, the
>following Debug code performs a warm boot:
> 
>	MOV	AX,0040
>	MOV	DS,AX
>	MOV	AX,1234
>	MOV	[0072],AX
>	JMP	FFFF:0000
> 
>To cold boot the computer, just JMP 0FFFF:0000h.
>--
>The highest sounds are hardest to hear.  ## ## ## ##### ##  jhall@wpi.wpi.edu
>Going forward is a way to retreat.       ## ## ## ## ## ##  Worcester
>Great talent shows itself late in life.  ## ## ## ##### ##  Polytechnic
>Even a perfect program still has bugs.   ######## ##    ##  Institute

I hope that this little piece of assembly code will help you.
The call to INT 19h sometimes causes the system to hang, because it only
reloads the bootstrap.  If you have something memory resident at this point,
it will not get cleared and usually cause the system to hang.  The above piece
of assembly code does a reboot after clearing relocated interrupts (usually
changed by memory resident programs) and resetting memory.  Cold boot will
cause the computer to go through the system memory check that is performed
during the POST (power-on self-test); warm boot is a <ctrl-alt-del>.

     __________           Carnegie Mellon University             ___
    /          \                                            /   /    /_/ / /\/
   _/  /   /   / "Happy Computing ..."                   __/.  /__  / / / / /
  /     /     /     -- Computer Dr.
 /           /                          Internet: Johnny.J.Chin@andrew.cmu.edu
/  -------  /   4730 Centre Ave. #412   BITnet:   jc58@andrew
\__________/    Pittsburgh, PA  15213   UUCP:    ...!uunet!andrew.cmu.edu!jc58

valley@uchicago (Doug Dougherty) (12/14/90)

corry@eniac.seas.upenn.edu (Chris Corry) writes:

>Hi.

>I'm writing a program that, under certain conditions, needs to reboot the
>computer. I figured that this was a simple generation of interrupt 25 (hex 19).
>However, everytime I try to use this mechanism (using geninterrupt or int86
>from Turbo C) the computer hangs. Anyone have any ideas?  Please mail or post
>and I'll summarize if there seems to be an interest (I can't belive that I'm
>the only person who has run into this problem. Then again I'm probably doing
>something stupid.)

>THANXS!

>Chris Corry
>corry@eniac.seas.upenn.edu

This is becoming an FAQ.

	MOV AX,40
	MOV DS,AX
	MOV AX,1234
	MOV [72],AX
	JMP FFFF:0

raymond@purina.berkeley.edu (Raymond Chen) (12/14/90)

In article <valley.661107789@gsbsun> valley@uchicago (Doug Dougherty) writes:
>This is becoming an FAQ.

It already *is* an FAQ.  Question number 2.3.

|2.3)  How do I reboot my computer via software?
|
|    Although some people will suggest using interrupt 19h, that method has
|    its problems since it doesn't reset lots of things (e.g., the
|    interrupt vectors).  A more effective method is to store the magic
|    number 0x1234 into 0x40:0x0072 and then perform a long jump to
|    0xffff:0x0000.  The magic number suppresses the memory test.

Sometimes I really wonder if people read the FAQ at all...

stever@Octopus.COM (Steve Resnick ) (12/15/90)

In article <51045@eerie.acsu.Buffalo.EDU> v087mxgb@ubvmsd.cc.buffalo.edu writes:
>In article <34681@netnews.upenn.edu>, corry@eniac.seas.upenn.edu (Chris Corry) writes...
>
>I think assy lang int (19, I think) will call the bootstrap,
>maybe you could link to that ??? I've used it from DOS, works
>well in batch files .
>

On what machine with what OS, hardware & drivers? A LOT of BIOS extensions,
device drivers, and OE's (DESQview and Windows) intercept and functionally 
remove this service. INT 19H should really not be used, as it doesn't do
a lot of house-cleaning that a re-boot does. (Remember, int 19 just performs
a boot-strap load). This is already in the FAQ list (come on people, read the
FAQ first!) To do a cold boot, make a jump to FFFF:0, to do a warm boot
write a 1234H into address 0:472H then make a jump to FFFF:0, this will boot
the machine without running the POST. This is a much more bulletproof meathod.

Hope this helps ....
Steve



-- 
----------------------------------------------------------------------------
steve.resnick@f105.n143.z1.FIDONET.ORG - or - apple!camphq!105!steve.resnick
Flames, grammar errors, spelling errrors >/dev/nul
The Asylum OS/2 BBS - (408)263-8017 IFNA 1:143/105.0