INF: How to Reboot Your Machine Within a Pure C Application

ID Number: Q47634

5.00 5.10 6.00 6.00a 6.00ax 7.00

MS-DOS

Summary:

In Microsoft C versions 5.0, 5.1, 6.0, 6.0a, 6.0ax, and C/C++ version

7.0, you can do a complete reboot on an 8086-based machine by jumping

to the address F000:FFF0. This action also reboots many 80286 and

80386 machines. The address contains a jump instruction that leads to

the machine's initialization code. For this method to succeed, your

machine must be in real-mode operation.

To prevent a memory check (on IBM and many compatibles), you should

store the value 0x1234 in the memory location at 0040:0072.

The following functions reboot your system without a memory check. If

you want to allow the memory check to occur, you must remove the

single-line comment delimiters (//) from the lines involving "memchk".

//int far *memchk ;

void (far *reboot)( void ) = (void far *)0xf000fff0 ;

void main ( void )

{

// memchk = (int far *)0x00400072 ; /* Address of mem. check control */

// *memchk = 0x1234 ; /* Disable memory check */

(*reboot)() ; /* Reboot your machine */

}

Additional reference words: 5.00 5.10 6.00 6.00a 6.00ax 7.00