Thermite 1.0 is an incendiary bomber which entered the Pizza 94 hill in April 1995 and survived 802 challenges before being pushed off in October. Thermite 1.0 was published in Core Warrior issue 5.

;name Thermite 1.0
;author Robert Macrae
;strategy  Quick-scan -> incendiary bomber.
;assert CORESIZE == 8000

; Since I don't launch phosphorus, vulnerable to carpet bombers. May
; pay to put it at start? I should make better use of DJN stream
; (nascent). Either use <, or else start it somewhere which gets bombed
; by mov fairly quickly. What happens if I fall through early, due to
; DAT 1,1s? Should check this doesn't hurt...

SPC     equ 7700            ; (CORESIZE-MAXLENGTH-MINDISTANCE*2)
STP1     equ 81              ; (SPC / (RAM/2) / 2)
Lookat  equ look+237+8*(qscan-1)*STP1

; First scan at 237; last at -67?

traptr  dat     #0,     #trap
bite    jmp     @traptr,    0         ; Vampire bite.

; Lots of pointers to these, so keep them away from trap!

qscan   for     6
	sne.i   Lookat+0*STP1, Lookat+2*STP1
	seq.i   Lookat+4*STP1, Lookat+6*STP1
	mov.ab  #Lookat-bite-2*STP1, @bite

	jmn     test+1, bite   ; Save a few cycles

qscan   for     6
	sne.i   Lookat+48*STP1, Lookat+50*STP1
	seq.i   Lookat+52*STP1, Lookat+54*STP1
	mov.ab  #Lookat-bite+46*STP1, @bite

	jmn     test+1, bite   ; Save a few cycles

qscan   for     6
	sne.i   Lookat+1*STP1, Lookat+3*STP1
	seq.i   Lookat+5*STP1, Lookat+7*STP1
	mov.ab  #Lookat-bite-STP1, @bite

	jmn     test+1, bite   ; Save a few cycles

qscan   for     6   ; Should be 7 if I had space...
	sne.i   Lookat+49*STP1, Lookat+51*STP1
	seq.i   Lookat+53*STP1, Lookat+55*STP1
	mov.ab  #Lookat-bite+47*STP1, @bite

; Intention is to place points evenly through the target area.

test    jmz.b   blind,  bite            ; if no address stored, no hit.
	add     #STP1*2, bite            ; Smaller than pyramid, as fast.
	jmz.f   -1,     @bite           ; find nonzero element.

	mov     spb,    @bite           ; Quick pre-bomb...

	add     #49,    bite            ; aim 51 past the hit
attack  bite,   bite            ; bite(b) contains target-bite
loop    mov     bite,   @bite           ; (a) contains the bite addr.
	add.f   step,   bite
	djn     loop,   #24             ; 6 spacing => 72 cycles...

; Incendiary bomber based on Phosphorus 1.0 (from Torch).

bstp     equ    155       ; Mod 5, as too big for mod 4 to miss!
gap      equ    15        ; Gap between mov and spl.
offset   equ    130       ; Chosen with step and gap to give long bombing run.
count    equ    1500

spb      spl    #0,         <-gap+1    ; spl half of the incendiary
	 add    #bstp,      1
	 mov    spb,        @tgt-offset ; Gives longest run, given gap & step.
	 mov    mvb,        @-1
tgt      djn.f  -3,         >300       ; gets bombed with spl to start clear
	 mov    ccb,        >spb-1     ; Uses copied mvb for CC.
	 djn.f  -1,         <spb-18    ; Aids clear.
mvb      mov    gap,        >gap       ; mov half of the incendiary
ccb      dat    0,          10         ; Core Clear.

; Bit worried about having trap so close to my code...
trap    spl     0,      >-200         ; Lackadaisical attempt at gates.
	spl     -1,     >-200+2667    ; Each increments many times between
	jmp     -2,     >-200+2*2667  ; imp steps, but then the whole imp
				      ; moves! I only blow away rings...

step    dat     #6,     #-6           ; QS step size. Up from 5 for speed.

	end     look