; Die von Commodore empfohlene Resetroutine
; Entnommen aus dem AMIGA ROM KERNEL, Hardware, Third Edition
; Addison Wesley

    INCLUDE "exec/types.i"
    INCLUDE "exec/libraries.i"

    csect   text
    xdef    _ColdReboot
    xref    _LVOSupervisor

REALEXECBASE    equ 4          ;Pointer Exec-Library
MAGIC_ROMEND    equ $01000000  ;Ende des Kickstart-ROM
MAGIC_OFFSET    equ -$14       ;Offset vom ROM-Ende zur
                               ;Kickstart-Größe
KICK_V36        equ 36         ;Ab Kickstart V36 stellt das
                               ;Betriebssystem eine eigene
                               ;Reset-Routine zur Verfügung
V36_ColdReboot  equ -726       ;Offset der Reset-Routine

_ColdReboot:
    move.l  REALEXECBASE,a6    ;Exec-Library-Pointer in A6
    cmp.w   #KICK_V36,LIB_VERSION(a6)
    blt.s   old_exec           ;Kickstartversion < 36
                               ;Der Reset muß selbst aus-
                               ;geführt werden
    jmp     V36_ColdReboot(a6) ;Sonst die Coldreboot-
                               ;Routine anspringen, aus der
                               ;wir niemals zurückkehren

old_exec:
    lea.l   GoAway(pc),a5      ;Die Adresse des Reset-Codes
    jsr     _LVOSupervisor(a6) ;Den Code ausführen
    ;Diesen Punkt erreichen wir nicht mehr

    CNOP    0,4                ;Auf Langwort ausrichten
GoAway:
    lea.l   MAGIC_ROMEND,a0    ;ROM-Ende
    sub.l   MAGIC_OFFSET(a0),a0;berechnen des PC
    move.l  4(a0),a0           ;PC beim Einsprung
    subq.l  #2,a0              ;Zeigt auf den zweiten Reset
    reset                      ;reset und jmp müssen ein
    jmp     (a0)               ;Langwort teilen

    END
