The Official Way to Software Reboot an Amiga - Bryce Nesbitt * Copyright 1988 Commodore-Amiga, Inc. * * Executables based on this information may be used in software * for Commodore Amiga computers. All other rights reserved. * This information is provided "as is"; no warranties are made. All * use is at your own risk. No liability or responsibility is assumed. A number of Amiga programmers have had the need to reboot the machine from within a program. Since no official guidelines have ever been published, programmers have used various creative methods. Unfortunately rebooting the machine is very tricky, and most attempts have been flawed. The RESET instruction, for example, unconfigures all memory; after RESET there is no place to run user code! Most reboot code will break whenever the memory or CPU configuration is changed. Other reset code will not work properly on the Amiga 1000. A special sequence of operations is required to work with all the possible memory and processor options available for the Amiga. What follows is the one-and-only official supported way to reboot an Amiga under software control. **************************************************************************** * * NAME * ColdReboot - reboot the Amiga * * SYNOPSIS * ColdReboot() * * void ColdReboot(void); * * FUNCTION * Reboot the machine. All external memory and peripherals will be * RESET, and the machine will start its power up diagnostics. * * The MagicResetCode must be used exactly as specified here. * The MagicResetCode must be longword aligned. Failure to * duplicate the code EXACTLY will result in improper operation * under certain system configurations. * * RESULT * This function never returns. * **************************************************************************** XDEF _ColdReboot XREF _LVOSupervisor _ColdReboot: move.l 4,a6 ;Get a pointer to ExecBase lea.l MagicResetCode(pc),a5 ;Location of code to RUN jsr _LVOSupervisor(a6) ;RUN code in Supervisor mode ;[NOTE: The jsr is required even though Supervisor never returns.] ;-------------- MagicResetCode ---------DO NOT CHANGE----------------------- CNOP 0,4 ;IMPORTANT! Longword align! Do not change! MagicResetCode: lea.l 2,a0 ;Point to JMP instruction at start of ROM RESET ;all RAM goes away now! jmp (a0) ;Rely on prefetch to execute this instruction ;---------------------------------------DO NOT CHANGE----------------------- END