home *** CD-ROM | disk | FTP | other *** search
- Date: Thu Feb 15 18:05:39 GMT 1990
- To: Info-IBMPC@WSMR-SIMTEL20.ARMY.MIL
- From: Mike O'Carroll <lena!mike@relay.EU.net>
- Subject: Reboot of PC
-
- The program below works in TurboC (or MS C). In some compilers, you
- have to fold the address to 20 bits, but here the segment and offset
- are separate.
-
- Mike O'Carroll, Microsystems Unit, University of Leeds, LS2 9JT, UK
- E-mail: @ukc.ac.uk:mike@ee.leeds.ac.uk
- UUCP: ...!mcsun!ukc!lena!mike or mike@lena.uucp
-
- ---cut-here---
-
- #define MAGIC 0 /* for cold restart */
- /* #define MAGIC 0x1234 /* for warm restart */
-
- #define BOOT_SEG 0xffffL
- #define BOOT_OFF 0x0000L
- #define BOOT_ADR ((BOOT_SEG << 16) | BOOT_OFF)
-
- #define DOS_SEG 0x0040L
- #define RESET_FLAG 0x0072L
- #define RESET_ADR ((DOS_SEG << 16) | RESET_FLAG)
-
- main()
- {
- void ((far *fp)()) = (void (far *)()) BOOT_ADR;
-
- *(int far *)RESET_ADR = MAGIC;
- (*fp)();
- return 0; /* never gets here, but keeps compiler happy */
- }
-