Chainlock v02a is a paper/imp with an embedded vortex launch which entered the KOTH.org 94 hill on 17th November 2004 and reached age 133 before being pushed off on 3rd February 2006. Chainlock also survived 76 challenges on the 94nop hill.

;redcode-94nop
;name Chainlock v02a
;author G.Labarga
;strategy Q4.5->paper/imp
;assert CORESIZE==8000
;strategy 1. First test version
;strategy 2. well optimized

zero    equ     qbomb
qtab3   equ     qbomb

qbomb   dat     >qoff           , >qc2
        dat 0,0
	dat 0,0

dest1 equ 6065
;dest2 equ 4450
dec equ 5905
trail equ 6876
bstep equ 5353	;-6

Plch:	spl 1,	<qb1
qtab2   spl 1,	<qb2
        spl 1,	<qb3

	spl @0,<dest1
	mov }-1,>-1
head:	spl #-1143,<dec
	mov bmb,@igo
	sub.f head,igo
igo:	djn.f imp-(8*1143),{trail
bmb:	dat {bstep,<1
imp:	mov.i #1,1143

for     4
        dat     0               , 0
rof
        dat     zero-1          , qa1
qtab1   dat     zero-1          , qa2

for     17
        dat     0               , 0
rof
for     14
        dat     0               , 0
rof
for     14
        dat     0               , 0
rof

;------- Q^4.5 ------
qc2     equ ((1+(qtab3-qptr)*qy)%CORESIZE)
qb1     equ ((1+(qtab2-1-qptr)*qy)%CORESIZE)
qb2     equ ((1+(qtab2-qptr)*qy)%CORESIZE)
qb3     equ ((1+(qtab2+1-qptr)*qy)%CORESIZE)
qa1     equ ((1+(qtab1-1-qptr)*qy)%CORESIZE)
qa2     equ ((1+(qtab1-qptr)*qy)%CORESIZE)
qz      equ 2108
qy      equ 243         ;qy*(qz-1)=1

;q0 mutation
qgo     sne     qptr+qz*qc2     , qptr+qz*qc2+qb2
        seq     <qtab3          , qptr+qz*(qc2-1)+qb2
        jmp     q0              , }q0
        sne     qptr+qz*qa2     , qptr+qz*qa2+qb2
        seq     <qtab1          , qptr+qz*(qa2-1)+qb2
        jmp     q0              , {q0
        sne     qptr+qz*qa1     , qptr+qz*qa1+qb2
        seq     <(qtab1-1)      , qptr+qz*(qa1-1)+qb2
        djn.a   q0              , {q0
                                        ;q1 mutation
        sne     qptr+qz*qb3     , qptr+qz*qb3+qb3
        seq     <(qtab2+1)      , qptr+qz*(qb3-1)+(qb3-1)
        jmp     q0              , }q1
        sne     qptr+qz*qb1     , qptr+qz*qb1+qb1
        seq     <(qtab2-1)      , qptr+qz*(qb1-1)+(qb1-1)
        jmp     q0              , {q1

        sne     qptr+qz*qb2     , qptr+qz*qb2+qb2
        seq     <qtab2          , qptr+qz*(qb2-1)+(qb2-1)
        jmp     q0
                                        ;qz mutation
        seq     >qptr           , qptr+qz+(qb2-1)
        jmp     q2              , <qptr
                                        ;q0 mutation
        seq     qptr+(qz+1)*(qc2-1),qptr+(qz+1)*(qc2-1)+(qb2-1)
        jmp     q0              , }q0
        seq     qptr+(qz+1)*(qa2-1),qptr+(qz+1)*(qa2-1)+(qb2-1)
        jmp     q0              , {q0
        seq     qptr+(qz+1)*(qa1-1),qptr+(qz+1)*(qa1-1)+(qb2-1)
        djn.a   q0              , {q0
        jmz.f   Plch           , qptr+(qz+1)*(qb2-1)+(qb2-1)

qoff    equ     -86
qstep   equ     -7
qtime   equ     19

q0      mul.b   *2              , qptr
q2      sne     {qtab1          , @qptr
q1      add.b   qtab2           , qptr
        mov     qtab3           , @qptr
qptr    mov     qbomb           , }qz
        sub     #qstep          , qptr
        djn     -3              , #qtime
        djn.f   Plch           , #0

end qgo