RetroQ is a paper with silk-imps which entered the Pizza 94 hill in January 1997 and was pushed off age 82 in August. RetroQ was published in Core Warrior issue 54.

;redcode-94
;name RetroQ
;author P.Kline
;assert CORESIZE == 8000
;strategy Retro Q^2 scan
;strategy silk-imps with retin-A - clear up those ugly spl's

spcsz    equ  (2000+381)
impsz    equ  (127*22)

;  RQ^2, like Anton's Probe only backward

QB EQU (start-350)
QS EQU (0-200)
QD EQU (0+100)

GAP EQU 8
REP EQU 15
datz     equ (start-200)         ; save one instruction

         dat    10*QS, 2*QS      ; can get 21 values from this table
table:   dat     4*QS, 1*QS      ; and can also use the initial value
         dat    23*QS, 3*QS      ; of fnd
qbomb:   dat    -GAP,GAP
qincr    dat    -GAP,2*GAP

         dat start+1,0           ; very important!
tab:     add.a  table  ,table    ; translate found location
slow:    add.ab @tab   ,fnd
fast:    add.b  *tab   ,@slow
which:   sne.i  datz   ,@fnd
         add.ab #QD    ,fnd
;break
         add.ba fnd    ,fnd
         spl    attack2          ; start primary bomber

attack1  add.b  fnd,fnd2         ; redundant bomber bombs left-to-right
bmb1     mov.i  qbomb  ,@fnd2
fnd2     mov.i  qbomb  ,@fnd-(GAP*REP)/2-GAP/2
         add    #2*GAP ,fnd2
bcnt     djn    -3     ,#REP
         spl   RetinB  ,<RetinB  ; start silk-imps
         jmz   RetinA  ,RetinA   ; if not already started
         dat 0,0

RetinA   spl   1,0
         mov.i -1,#0
         spl   1
b0       spl   @0,spcsz          ; two-level silk spawner
         mov   }b0,>b0
c0       spl   @0,impsz
         mov   }c0,>c0
         spl   c0,{c0            ; loop and split
         mov.i #2*spcsz,}-spcsz*1
         mov.i #2*spcsz,}-spcsz*1
         mov.i #2*impsz,}-impsz*1

start:   seq.i  QB+QS*0,QB+QS*0+QD
         jmp    which,}QS*13 ; qinc+GAP

         seq.i  QB+QS*1,QB+QS*1+QD
         jmp    fast,}QB+QS*1+QD/2
         seq.i  QB+QS*2,QB+QS*2+QD
         jmp    fast,{tab
         seq.i  QB+QS*3,QB+QS*3+QD
         jmp    fast,}tab

         seq.i  QB+QS*13,QB+QS*13+QD
         jmp    fast,{fast

         seq.i  QB+QS*4,QB+QS*4+QD
         jmp    >fast,}QB+QS*4+QD/2
         seq.i  QB+QS*5,QB+QS*5+QD
         jmp    slow,}QB+QS*5+QD/2
         seq.i  QB+QS*6,QB+QS*6+QD
         jmp    slow,{tab
         seq.i  QB+QS*7,QB+QS*7+QD
         jmp    slow,}tab

         seq.i  QB+QS*10,QB+QS*10+QD
         jmp    >fast,<tab
         seq.i  QB+QS*11,QB+QS*11+QD
         jmp    slow,<tab
         seq.i  QB+QS*12,QB+QS*12+QD
         djn.f  slow,tab

         seq.i  QB+QS*23,QB+QS*23+QD
         jmp    >fast,>tab
         seq.i  QB+QS*24,QB+QS*24+QD
         jmp    slow,>tab

         seq.i  QB+QS*17,QB+QS*17+QD
         jmp    slow,{fast

         seq.i  QB+QS*8,QB+QS*8+QD
         jmp    <fast,}QB+QS*8+QD/2
         seq.i  QB+QS*9,QB+QS*9+QD
         jmp    tab,}QB+QS*9+QD/2

         seq.i  QB+QS*15,QB+QS*15+QD
         jmp    tab,<tab
         seq.i  QB+QS*16,QB+QS*16+QD
         jmp    tab,{tab
         seq.i  QB+QS*20,QB+QS*20+QD
         djn.f  <fast,tab
         seq.i  QB+QS*21,QB+QS*21+QD
         jmp    tab,{fast
         seq.i  QB+QS*22,QB+QS*22+QD
         djn.f  tab,tab
         seq.i  QB+QS*27,QB+QS*27+QD
         jmp    <fast,>tab
         seq.i  QB+QS*28,QB+QS*28+QD
         jmp    tab,>tab

RetinB   spl   1,0
         mov.i -1,#0
         spl   1
         mov   <1,{1             ; make another copy and start him
         spl   4000+7,7          ;   safer than going back to RetinA
                                 ;   which might have been spl-bombed by now

d0       spl   @0,spcsz          ; two-level silk spawner
         mov   }d0,>d0
e0       spl   @0,impsz
         mov   }e0,>e0
         spl   e0,{e0            ; loop and split
         mov.i #2*spcsz,}-spcsz*1
         mov.i #2*spcsz,}-spcsz*1
         mov.i #2*impsz,}-impsz*1

attack2  mov    qbomb  ,*fnd     ; primary bomber
         mov.i  qbomb  ,@fnd     ; bombs left and right from found location
fnd:     mov.i  -GAP/2 ,@QB
         add    qincr  ,fnd
         djn    -4     ,bcnt
         spl   RetinA  ,<RetinA  ; start silk-imps
         jmz   RetinB  ,RetinB   ; if not already started
         end start