• Electric Head

    From Stephen Gunnell@21:1/5 to All on Sat Oct 29 20:31:50 2022
    While I am here and thinking about such things ...
    When Anton Marsden published Electric Head he changed many of the booting constants. This had had the effect that the version on Koenigstuhl performs extremely poorly against may of its contemporaries. I have plugged Electric head into my optimiser to
    try and re-create a good set of constants. This is one of the higher scoring results:

    ;redcode-94
    ;name Electric Head
    ;author Anton Marsden
    ;strategy P-Warrior which uses the P^2 switcher (see CW 58)
    ;strategy Try and restore constants .. Steve G.
    ;assert CORESIZE==8000

    ;--------------
    ;THE CORE CLEAR
    ;--------------

    gate1 EQU (bomb1-19)
    gate2 EQU (bomb1-18)
    bomb2 EQU (bomb1+22)
    cca EQU 4610

    dat 19 , 500 ; 1: 1/1
    dat -4040 , 4045 ; 2: 2/2
    bomb1 spl #bomb2-gate1 , 45 ;20: 5/4
    mov *gate1 , >gate1 ; 1: 1/1
    mov *bomb2+2, >gate2 ; 2: 2/2
    djn.f -1 , {gate2 ; 3: 3/3
    dat 1 , 45 ; 2: 2/2
    spl #-40 , 45 ; 3: 3/3

    ccb mov bomb1-1,@ccd
    mov {-1,<ccd
    add #23,ccd
    spl 1,bomb1+4
    mov <ccb+3,<ccd
    ccd mov {ccb+1,{cca
    mov <ccb+3,<ccd
    djn @ccd,#2
    div.f #0,ccd

    ;--------
    ;MINI HSA
    ;--------

    step EQU 9
    ptr EQU (bomb-5)
    away EQU (bomb1-7206) ; not the actual value

    bomb: spl #1,{1
    kill: mov bomb,<ptr
    mptr: mov >ptr,>ptr
    jmn.f kill,>ptr
    a: add #step+1,@mptr
    scan: jmz.f a,<ptr
    slt @mptr,#btm-ptr+3
    djn kill,@mptr
    djn a,#16
    btm: jmp a,{kill

    boot: mov btm,@dest
    N FOR 8
    mov btm-N,<dest
    ROF
    spl @dest,1
    dest: mov #250,@away
    mov bomb,<dest
    div.f #0,dest

    FOR 6
    dat 0,0
    ROF

    dbomb dat >-1,>1
    in dat 0,loss_table-state
    p spl 1,win_table-state
    spl 1,tie_table-state

    ;----------
    ;MINI PAPER
    ;----------

    spl @0,502 ; not the actual value
    mov }-1,>-1
    mov {-2,<1
    jmp @0,>3191 ; not the actual value

    PSTATE EQU 123 ; pspace location containing current state
    STATES EQU 10 ; maximum number of states (for brainwash protection)

    ;NOTE: state values go from 0 to STATES-1

    w0 EQU ccb ; THE CORE CLEAR
    w1 EQU boot ; MINI HSA
    w2 EQU p ; MINI PAPER
    w3 EQU cboot ; CARBONITE


    think ldp.a #0,in ; get input value
    load ldp.a #PSTATE,state ; load old state
    mod.a #STATES,state ; brainwash protection
    add.ba *in,state ; select correct state table
    store stp.a *state,load ; store new state

    win_table
    state jmp @0,w0 ; jump to warrior code

    init_state
    spl #0,w0
    spl #0,w0
    spl #3,w1
    spl #3,w1
    spl #4,w1
    spl #6,w2
    spl #7,w3
    spl #7,w3
    spl #8,w3

    tie_table
    spl #1,w0
    spl #2,w0
    spl #3,w1
    spl #3,w1
    spl #4,w1
    spl #5,w1
    spl #0,w0
    spl #7,w3
    spl #8,w3
    spl #9,w3

    loss_table
    spl #1,w0
    spl #2,w0
    spl #3,w1
    spl #4,w1
    spl #5,w1
    spl #6,w2
    spl #7,w3
    spl #8,w3
    spl #9,w3
    spl #3,w1

    ;-----------
    ;CARBONITE++
    ;-----------

    caway EQU (4174) ; not the actual value
    cst equ 4585
    ctime equ 7731
    cgate equ 2498

    cboot mov tar+1,<cdest
    mov tar,<cdest
    mov tar-1,<cdest
    cdest mov dbomb,*caway
    spl <cdest,<2000
    mov tar-2,@cdest
    div.f #0,cdest
    spl #0,<cgate+3
    mov cst,tar-cst*ctime
    tar add.ab {0,}0
    djn.f -2,<cgate

    END think

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)