;redcode ;name Binary Dingus ;author Philip Thorne ; ;strategy Fizmo's Redcoders Frenzy [Limited Value] Entry #1/1 ;strategy ;strategy Imp/Stone (plus safety wimp for r1 and if BW detected). ;strategy Calcs constants one, or if brain-wash detected, storing ;strategy them in pspace. Runs a wimp if BW detected for safety. ;strategy ;strategy It took too much space (&time) to calculate the constants ;strategy for both imp and stone so only the imp (written first) is ;strategy booted which is kind-of-back to front but the imp is huge ;strategy [71pt] so must be booted. ;strategy ;strategy Lessons learnt: ;strategy a) don't leave binary conversion to end ;strategy b) it's easier to manipulate code from ahead of it ;strategy in core (because the offsets are more stable). ; ;assert 1 ; (CORESIZE==55440) && (MAXCYCLES==100000) ISIZE EQU 0 ;10151 mTHREE EQU 0 mFOUR EQU 0 IDOFF EQU 0 ;Imp djn's offset IMP EQU 0 ;5 STONE EQU 0 IBOOT EQU -1 for 0 PIN 303 ;Split rounds with other entrant [my only entrant :-(] Hshake: stp.ab #-1, #-1 ldp.ab #-1, #0 seq.ab *-1, -1 dat 0, 0 rof ;P-Space ; -1: Handshake, reuse ; 1: StoneCodeOffset ; 2: ImpStep ; 3: StoneStep Pchk1: ldp.ab #1, }0 sne.i @1, <0 ; B==StoneCodeOffset spl @-1, }1 ; Split to stone code. Trust PS. mul.a #1, #0 ; 1,0 - 1,0 - 1,0 or ; 1,0 - 2,0 - 4,0 - 16, 0 mul.a -1, -1 mov.ab *-1, }1 add.ab #1, #1 mul.b -1, #1 jmp @-1, >1 ; Either +2 or +47 ;- dat $0, $0 ; FB ;Calc imp/stone steps for p-store ;Calc/store offset to stone launch code add.f #1, $1 mul.f #1, #1 ; 1,1 - 2,2 - 4,4 - 4,16 - 4,64 mul.b -1, -1 mul.ab *-1, *-1 mov.b {-1, @1 add.b $1, $1 ; 0,64 - 0,128 spl @0, 0 ; --> stone / wimp launch (+14) stp.b -1, #-1 ; TEMP store in -1 ;Calc/store imp-step ; 10151 == 2 5 5 7 29 + 1 == 2 2 2 3 3 3 47 - 1 add.f #1, 1 mul.f #1, #1 ; 2,2 - 4,4 - 3,4 - 12,4 nop {-1, 0 mul.ba *-1, *-1 mov.f {-1, #0 ; 12,4 - 12,48 - 12,576 mul.ab -1, -1 mul.ab *-1, *-1 mov.f {-1, 0 ; 12, 576 - 12,564 (need 2.3.3) sub.ab -1, -1 mov.b *-1, >1 add.ba #1, #1 ; 3,2 mul.ab -1, #0 ; -1,564 - -1,1692 -1,5076, -1,10152 mul.ab *-1, -1 add.b *-1, *-1 mov.b {-1, #0 ; -1, 10152 - -1,10151 nop <-1, >1 stp.b *-1, #1 ; Store imp-step ;Calc/store stone-step ; -3478 == 2 37 47 == (128 27) + (2 11) add.f #1, }1 add.f #1, 1 mul.ab #1, #1 ; 1,1 - 2-2 - 4-3 - 4,12 - 4,24 - 4,28 add.b -1, -1 add.ab *-1, *-1 mov.b {-1, 1 nop <0, #0 ; 0,28 - 0,27 ldp.ab #-1, #0 ; -1,0 - -1,128 - -1,3456 - 3483 mul.b *-1, -1 add.b {-1, @-1 mov.b {-1, #0 ; -1,3483 - -4,3483 - -4,3479 add.a {-1, -1 add.ab *-1, *-1 ; -1,-1 - -2,-1 mov.b {-1, #0 ; -1,3479 - -1,3478 nop <-1, {0 ; -1,0 - -2,0 - -2,-1 mov.ba <-1, }1 add.ab #1, #1 stp.ab #0, $-1 ; Store stone-step ;Relocate P-1 to P1 for BW protection ldp.a #-1, $1 stp.ab #0, #1 ;- ;At this point stone prep is underway and have imp-number for 0 ;Firebreak nop }1, }1 jmp 1, 0 dat 0, 0 dat 0, 0 rof ;Place imp-number's ;set ai.A iBegin: nop >1, >1 ldp.ab #1, $1 div.b -1, @1 sub.b *-1, 1 nop }1, #0 ; 1,0 1,128 1,42 1,39 ldp.a #1, @-1 ;set ji.A ldp.ab #1, #0 mod.b -1, }1 mul.ab #1, 1 ; 1,1 - 2,1 nop <0, #-1 ; 0,-1 - 0,15 - 0,30 - 0,29 nop }-1, }-1 ldp.ab *-1, >1 mov.b {-1, @1 sub.b -1, #0 ; B==ImpNumber nop <-1, 1 sub.ba *-1, $0 ;set imp.B ldp.ab #1, #0 mod.b -1, @1 add.f 1, 1 ldp.ab #1, $-1 ; Need A==2 B==28[+2] nop 0, 0 nop 0, 0 ;Boot & launch imp ;set j.A sj: add.ab #1, #1 ; 1,2 add.f -1, 1 ; add.f #1, #1 ; 2,3 - 4,6 - 4,12 add.b -1, -1 add.f *-1, $1 ; mul.a #0, 1 ; 4,13 set j ;set ib.A ib.B nop -1, #0 add.a *-1, @1 add.ba {-1, *1 div.ab #1, *0 ; 5,0 ;spl to 9 spl 1, #0 ; >1 mov.i -1, #0 mov.i -1, #0 mov.i -1, #0 ;boot 9, spl to 36, jmp ib: nop $1, -1, 0 for 7 dat 0, 0 rof ;--- ;### Stone section SSTEP EQU 0 ;-3478 SOFF EQU SSTEP DOFF EQU IDOFF BMB EQU 0 stone: spl #0, {-1 sm1: mov.i *1, }SOFF-1 ; sm2: mov.i BMB, @-1 add.b *-1, @-1 sd: djn.f @-1, <-1 ; Need A==2, Want B=-1/2 ;Place stone-consts Pchk2: mul.a #1, #0 ; for BW seq check. Shouldn't execute. Sbegin: add.a <-1, @0 ; -1,0 -1,-1 -1,-2 -1/2,-2 set sd.A sub.ab #1, }1 sub.ab #1, #-1 add.b -1, #-1 div.ab *-1, @-1 ; set sd.B mov.b *-1, 1 add.b #1, #0 ; 0,0 0,-5 0,-10 mov.ba -1, @-1 ; set sm2.A ldp.a #1, #-1 ; 1,-1 128,-1 mod.ab -1, }1 add.ab #1, #1 ; 1,1 2,1 2,3 add.b -1, #-1 ; -1,-1 -1,15 -1,18 -1,-18 mul.ab -1, -1 ldp.b {-1, #0 ; -1,0 -1,3478 mov.b {-1, #0 add.b *-1, <-1 ; set sm1.B ;Launch wimp [1st round or brainwashed] - entry is prev instruction Wbegin: mul.b @-1, #-1 jmn.b <-1, -1 nop }1, }1 sub.ab #1, @1 jmp *1, }1 wimp: jmp #1, >-1 div.ab -1, $1 mov.i *-1, $-1 jmp @-1, }0 for 9 dat 0, 0 rof ;Create bomb / Launch stone [no time/room to boot :-(] ; bmb is 48 behind Scont Scont: jmp *1, {1 ; Not so elegant. dat 1, 0 ; FB nop 1, 0 ldp.ab #1, }1 div.ab #1, $1 ; 1,1 2, 1 mul.ab #-1, #0 ; -1,0 -1,128 -1,64 -1,-64 -1,60 mul.a *-1, *-1 add.ab {-1, @-1 mov.ba <-1, }1 add.a #1, @1 mov.ab #0, @1 ldp.ab #1, @1 ; set bmb.B (STEP) nop.x #0, #0 ; B is pointer to bmb div.a {-1, @-1 ; This gives -1/3 ;Start it up mov.b @-1, }1 add.ab #1, #1 add.ab -1, #0 ; ptr to stone SPL add.ab *-1, {1 ;Stone pump spl @-1 spl -1, >1 jmp -1, >1 end Pchk1 end Hshake