* RESET PROTECTION ROUTINE

* © 1992  DAVID 'BART' DUSTIN / KAOS PRODUCTIONS

RESETPROTECTION:
    MOVE.L    $4.W,A6                 ; Execbase into A6

    MOVE.L    #RESETLENGTH,D0         ; Size of reset code
    MOVEQ     #0,D1                   ; Use Public memory
    JSR       -198(A6)                ; Allocmem
    MOVE.L    D0,A1                   ; Insert address into A1
    MOVE.L    D0,A2                   ; Insert address into A2

    MOVEQ.L   #0,D0                   ; Clear D0

    LEA       RESET(PC),A0            ; Pointer to start of reset program
    MOVE.W    #RESETLENGTH-1,D0       ; Size of reset program
.RESETCOPYLOOP
    MOVE.B    (A0)+,(A1)+             ; Copy one byte at a time
    DBRA      D0,.RESETCOPYLOOP       ; Loop until all copied

    MOVE.L    A2,42(A6)               ; Insert address into ColdCapture

    MOVEQ.L   #0,D1                   ; Clear D1
    LEA       34(A6),A0               ; Start of vectors in ExecBase
    MOVE.W    #22,D0                  ; Number of vectors
.CHECKSUMLOOP
    ADD.W     (A0)+,D1                ; Add each vector to a running total
    DBF       D0,.CHECKSUMLOOP        ; Loop until copied
    NOT.W     D1                      ; Invert the value
    MOVE.W    D1,82(A6)               ; Insert the checksum into ExecBase

    MOVEQ     #0,D0                   ; Clear all CLI Error codes.
    RTS                               ; Return


***************************************************************************
RESET:
    MOVE.L    $4.W,A6                 ; We need pointer to ExecBase in A6
    LEA       RESET(PC),A0            ; Pointer to our reset program
    MOVE.L    A0,42(A6)               ; Insert the address into ColdCapture
LOCKLOOP:
    JMP       LOCKLOOP(PC)            ; Do infinite loop

RESETLENGTH   EQU   *-RESET           ; Calculate size of program
