Sections
Home
Hills
Infinite Hills
Tournaments
Software
Evolving
Optimizer
Community
Newsletter
Discussion
History
Sections
 
For Beginners
First Steps
FAQ
Guides
Lexicon
Benchmarks
For Beginners
> Home > The Corewar Newsletters > Core Warrior > Issue #1

Issue 26                                                       April  22, 1996
______________________________________________________________________________
Core Warrior is a weekly newsletter promoting the game of corewar.  Emphasis
is placed on the most active hills--currently the '94 draft hill and the
beginner hill.  Coverage will follow where ever the action is.  If you have
no clue what I'm talking about then check out these five-star internet locals
for more information:

FAQs are available by anonymous FTP from rtfm.mit.edu as
pub/usenet/news.answers/games/corewar-faq.Z
FTP site is: ftp.csua.berkeley.edu /pub/corewar
Web pages are at:
http://www.stormking.com/~koth                  ;Stormking
http://www.ecst.csuchico.edu/~pizza/koth        ;Pizza
http://pauillac.inria.fr/~doligez/corewar/      ;Planar

Newbies should check the stormking page for the FAQ, language specification,
guides, and tutorials.  Post questions to rec.games.corewar.  All new players
are infinitely welcome!

If ftp.csua.berkeley.edu is still out of service, you can download pMARS at
Terry's web page--http://www.infi.net/~wtnewton/corewar/
______________________________________________________________________________
Greetings.

First thing:  We, the authors of Core Warrior (all two of us), would like to
support the nomination of Anders Ivner into the Core War Hall of Fame.  The
father of the imp is much more deserving than I'll ever be.  However this is
done, let's make it happen.

A slow week, so not a huge amount to report on.  But to redeem this issue,
Core Warrior has the source code to Grilled Octopus v0.5 by David Boeren.
Check it out in Extra Extra.  The hint section also delves into the inner
workings of effective p-logic.

--M R Bremer
______________________________________________________________________________
Current Status of the Internet Pizza Server ICWS '94 Draft Hill:

Hill Specs:
         coresize: 8000
   max. processes: 8000
         duration: after 80,000 cycles, a tie is declared.
max. entry length: 100
 minimum distance: 100
    rounds fought: 200
  instruction set: ICWS '94 Draft

 #  %W/ %L/ %T                      Name               Author   Score     Age
 1  46/ 40/ 14              Solomon v0.3          Ian Oversby     152      33
 2  43/ 36/ 21                  Mirage 2        Anton Marsden     150     187
 3  44/ 40/ 17                Scanny Boy        David van Dam     148     251
 4  42/ 36/ 22            The Core Clear        David van Dam     148      10
 5  41/ 34/ 25               Thermite II        Robert Macrae     147    1421
 6  35/ 24/ 41     Walk Like An Egyptian             John K W     146     102
 7  41/ 36/ 23                 Chameleon           M R Bremer     145     892
 8  43/ 41/ 16            Stepping Stone          Kurt Franke     145     234
 9  39/ 36/ 25      Grilled Octopus v0.5         David Boeren     143     637
10  39/ 35/ 26                     prova    Maurizio Vittuari     142     397
11  39/ 37/ 24             Blanket Party             J E Long     141     145
12  39/ 38/ 23          Gem of the Ocean              P.Kline     140     290
13  36/ 32/ 32                   Lithium     John K Wilkinson     140     428
14  36/ 33/ 31                      test          Beppe Bezzi     139       1
15  26/ 13/ 61             Hazy Shade II             John K W     139     380
16  42/ 46/ 12          Wind-up Toy v0.7          Ian Oversby     139     101
17  25/ 11/ 65                EvolCap XI       John Wilkinson     138     130
18  29/ 20/ 51            Impfinity v4g1               Planar     138    1620
19  35/ 33/ 31               Tornado 3.0                Beppe     138    1222
20  33/ 28/ 39                      test          Beppe Bezzi     137       2
21  37/ 37/ 26                    T.N.T.    Maurizio Vittuari     137    1146
22  32/ 31/ 37                    Flurry        Anton Marsden     133     382
23  31/ 31/ 38               Blue Funk 5       Steven Morrell     131     565
24  33/ 38/ 28                 test t36b          Beppe Bezzi     129       9
25  26/ 26/ 48                     Wtest              P.Kline     126       6

Weekly age: 91
New warriors 6  Turnover/age rate 7%
Average age: 424 ( 386 last week, 397 the week before )
Average score: 141 ( 130 last week, 140 the week before )
The top 25 warriors are represented by 14 authors, JKW and Bezzi with 4,
Oversby, Marsden, van Dam, Vittuari, and Kline with 2.

Not really that much going on in terms of volume or number of new warriors,
but the quality of the new warriors is superb.  Solomon v0.3 entered the hill
in third, but on the next challenge rose to the top slot, a position it held
for 12 challenges.  Since then, it's been bouncing all over the hill, but it
just so happens to hold the king position as this issue was created.  The
Core Clear performed a similar feat, rising to the number one ranking at the
age of two.  It was only for one challenge, but this warrior continues to do
well.  However, the real Kings this week have been Scanny Boy and Mirage 2.

I'm amazed at the quality of programs the hill is receiving from new authors.
Just take a look some of the top ten.  Oversby, Marsden, van Dam, Franke,
Boeren--all have made the jump from the b-hill in the past few months.  And
they aren't struggling at the bottom of the hill, but are often challenging
the King of the Hill.  Of course it is really remarkable to someone like me
who still has a bit of core war hero worship for the old days of Kline,
Morrell, Mintardjo, Strack, Sieben, Sheppard, et al.  Keep up the competition
level.
______________________________________________________________________________
94 - What's New

 #  %W/ %L/ %T                      Name               Author   Score     Age
 3  45/ 42/ 13              Solomon v0.3          Ian Oversby     148       1
 4  43/ 37/ 20            The Core Clear        David van Dam     148       1
23  32/ 41/ 27                 test t36b          Beppe Bezzi     124       1
23  25/ 30/ 45                     Wtest              P.Kline     121       1
11  33/ 28/ 39                      test          Beppe Bezzi     138       1
13  34/ 34/ 32                      test          Beppe Bezzi     135       1

Both Solomon and The Core Clear have seen first place.
______________________________________________________________________________
94 - What's No More.

 #  %W/ %L/ %T                      Name               Author   Score     Age
26   2/  2/  0                    Test 4          Ian Oversby       7       2
26   4/  2/  1                    Test 3          Ian Oversby      13       4
26   6/  4/  2                   testest           M R Bremer      20       6
26  36/ 47/ 17          Wind-up Toy v0.6          Ian Oversby     125      48
26  35/ 46/ 20                   Harmony              P.Kline     123      41
26  29/ 33/ 38                   Barrage        Anton Marsden     124     876

Barrage, a qscan -> replicator, was lost this week.
______________________________________________________________________________
94 - What's Old

 #  %W/ %L/ %T                      Name               Author   Score     Age
18  29/ 20/ 51            Impfinity v4g1               Planar     138    1620
 5  41/ 34/ 25               Thermite II        Robert Macrae     147    1421
19  35/ 33/ 31               Tornado 3.0                Beppe     138    1222
21  37/ 37/ 26                    T.N.T.    Maurizio Vittuari     137    1146
 7  41/ 36/ 23                 Chameleon           M R Bremer     145     892
 9  39/ 36/ 25      Grilled Octopus v0.5         David Boeren     143     637
23  31/ 31/ 38               Blue Funk 5       Steven Morrell     131     565
13  36/ 32/ 32                   Lithium     John K Wilkinson     140     428
10  39/ 35/ 26                     prova    Maurizio Vittuari     142     397
22  32/ 31/ 37                    Flurry        Anton Marsden     133     382
15  26/ 13/ 61             Hazy Shade II             John K W     139     380
______________________________________________________________________________
HALL OF FAME
* means the warrior is still active.

Pos    Name                  Author          Age     Strategy
 1  Jack in the box        Beppe Bezzi       1620    P-warrior
 1  Impfinity v4g1         Planar            1620 *  Stone/ imp
 3  Torch t18              P.Kline           1539    Bomber
 4  Thermite II            Robert Macrae     1421 *  Qscan -> bomber
 5  Frontwards v2          Steven Morrell    1420    One shot scanner
 6  Evol Cap 6.6           John Wilkinson    1299    Imp / stone
 7  quiz                   Schitzo           1262    Scanner/ bomber
 8  Tornado 3.0            Beppe Bezzi       1222 *  Bomber
 9  T.N.T.                 Maurizio Vittuari 1146 *  Bomber
10  Iron Gate 1.5          Wayne Sheppard     926    CMP scanner
11  Agony II               Stefan Strack      912    CMP scanner
12  Chameleon              Myer R Bremer      892 *  P-warrior
13  Barrage                Anton Marsden      876    Qscan -> replicator
14  Blue Funk              Steven Morrell     869    Stone/ imp
15  Thermite 1.0           Robert Macrae      802    Qscan -> bomber
16  Blue Funk 3            Steven Morrell     766    Stone/ imp
17  Night Train            Karl Lewin         755    Replicator
18  Mirage 1.5             Anton Marsden      736    Scanner/ bomber
19  Blizzard               Anton Marsden      713    Qscan -> replicator
20  HeremScimitar          A.Ivner,P.Kline    666    Bomber
21  La Bomba               Beppe Bezzi        650    Qscan -> replicator
22  myVamp v3.7            Paulsson           643    Vampire
23  Grilled Octopus v0.5   David Boeren       637 *  P-warrior
24  Hazy Shade Of Winter   John Wilkinson     616    P-warrior
25  Armory - A5            John Wilkinson     609    P-warrior

Impfinity v4g1 by archive master Damien Doligez is tied for the all time lead
of the core war hall of fame.  This veteran has been floating in the lower
half of the hill and just last challenge, fallen into the 20s.  Impfinity has
rebounded before, but continued attacks by p-warriors could spell its demise.

New entry Grilled Octopus v0.5 pushes off juliet and paper by Bremer & Bezzi.
______________________________________________________________________________
Current Status of the Internet Pizza Server Beginner's Hill:

Hill Specs:
         coresize: 8000
   max. processes: 8000
         duration: after 80,000 cycles, a tie is declared.
max. entry length: 100
 minimum distance: 100
      maximum age: At age 100, warriors are retired.
    rounds fought: 200
  instruction set: ICWS '94 Draft

 #  %W/ %L/ %T                      Name               Author   Score     Age
 1  62/ 29/  9        Violent Micro v0.3             basehead     196      89
 2  59/ 34/  7              Gunslinger 2               Julian     184      59
 3  49/ 26/ 25                Reluctance       Andy Nevermind     172      19
 4  51/ 35/ 14          C-Seagal II 1.02             jShelton     167      72
 5  48/ 35/ 17                       why       bjoern guenzel     162      44
 6  50/ 39/ 11                     AK-47               Julian     161      64
 7  50/ 39/ 11                   AK-47.1               Julian     160      63
 8  47/ 36/ 16                  why rave       bjoern guenzel     159      42
 9  43/ 30/ 27                  Toxin II                Edgar     156       9
10  42/ 28/ 30                     Toxin                Edgar     155      10
11  46/ 39/ 15                  x-frog 2       bjoern guenzel     152      13
12  45/ 41/ 14               frog vamp 2       bjoern guenzel     149       8
13  46/ 44/ 10        Uni Charm Password             jShelton     149      80
14  44/ 48/  8          Optma Dwarf v5.3              Phoenix     140      87
15  37/ 41/ 22       Bye Bye Badman v1.1            Iain Hogg     133      23
16  38/ 43/ 19      Forked Lite Ning 4.1 Ansel Greenwood Serm     132      38
17  38/ 43/ 19                Bloodhound        Andrew Fabbro     132      11
18  32/ 40/ 28                    Killer          Ian Oversby     124      16
19  31/ 38/ 31              Assassinator        David van Dam     124       6
20  31/ 38/ 31              Assassinator        David van Dam     124       3
21  34/ 46/ 20    C Seagal II v 2.0 Test             jShelton     121      18
22  38/ 59/  3                 lightning       Jens Heunemann     116      24
23  17/ 71/ 12               Centurion x                Edgar      64       2
24  10/  0/  1            The Core Clear        David van Dam      31       5
25   2/ 98/  0                   Unknown            Anonymous       6       1

Fifty challenges since last week.  basehead still rules the roost, but
Oversby and van Dam have leap frogged to the '94 draft hill.
______________________________________________________________________________
The Hint
Switching Techniques and Brainwash Recovery

When pspace was first implemented on the hills, one of the first switching
algorithms was the simple 'switch on loss' or 'switch on tie or loss'.

res     ldp.ab  _RESULT, #0
str     ldp.a   _STRATEGY, str1     ;load strategy in use
        sne.ab  #0, res             ;check result
lost    add.a   #1, str1            ;lost change 
        mod.a   #X, str1            ;X = number of strategies to switch
win     stp.ab  str1, _STRATEGY
str1    jmp     @0, strat0
        dat     0, strat1
        dat     0, strat2
        . . .
        dat     0, stratX-1

The code is short and decisions are made quickly.  However it is definitely
lacking in sophistication ( which you don't always need to be effective ).
The mod instruction ensures that a valid strategy is chosen even if brain-
washed.  However, since there is no active wash detection, the strategy
chosen is essentially random.  The algorithm does average ( for a pspace
warrior ) against non-pspace opponents, but tends to do better against
slower p-opponents that take multiple rounds to make decisions.  Jack in the
box uses this type of p-logic.

To equip this switcher with a decent detection system is simple.  One method
is to simply load of number into pspace on the first round and check it every
remaining round to see if it's been tampered with.  You could reset it and
run a special anti-wash warrior or stick with the anti-wash warrior for the
rest of the battles.  This could take a lot of extra p-code.  A better method
may be this:

res     ldp.ab _RESULT, #0
str     ldp.a _STRATEGY, str1   ;load strategy in use

        mod.a #97, str1         ;valid strategies are are all mod 97
        jmn.a washed, str1      ;do 'have been washed' code [then reset?]
        ldp.a _STRATEGY, str1   ;got to be a way to get rid of repeating this

        sne.ab  #0, res         ;check result
lost    add.a   #97, str1       ;lost change 
        mod.a   #X, str1        ;X = number of strategies to switch
win     stp.ab  str1, _STRATEGY
str1    jmp     @0, strat0
        dat     0, strat1
        dat     0, strat2
        . . .
        dat     0, stratX-1

This is almost exactly the same p-code with the addition of three extra lines
of instructions to ensure that all valid strategies are mod 97.  A brainwash
would have to wash with a multiple of 97 (unfortunately zero is one of them)
to escape detection.  Of course you special number can vary as long as the
mod.a #X instruction yields the proper series to switch your components.  I
used this type of detection along with a custom scoring system in my warrior
'testestest' which held first place for a challenge and then dropped off the
hill a few challenges later.  It could have used better components.

start   ldp.ab _STRATEGY, check
        jmz.b switch, check     ; washed or first round, just do a switch
check   mod.ab #97, #0000       ; if not multiple of 97, have been washed!
        jmn.b scanner, check    ; washed --> do scanner (can do any plogic)
        ldp.a _RESULT, keeper
        ldp.ab _SCORE, adjust
keeper  jmp @0, adjust+1        ; result == 0 == loss
        jmp 0, adjust           ; result == 1 == win
        jmp 0, adjust+2         ; result == 2 == tie
adjust  add.ab #6, #0           ; win
        add.ab #-2, adjust      ; lose
        add.ab #-1, adjust      ; tie
        ldp.a _STRATEGY, select ; again.  can't seem to save it.
        slt.b adjust, #7000     ; did it go negative?
        jmp switch
return  stp.b adjust, _SCORE
        mod.a #3, select
select  jmp @0, scanner
        jmp 0, stone
        jmp 0, paper
switch  add.a #97, select
        stp.ab select, _STRATEGY
        mov.ab #10, adjust
        jmp return

This code creates a 'score' for each strategy starting at 10.  For every
win the score increases by 3, tie--decrease by 1, loss--decrease by 3.  The
strategy switches when the score goes negative.  When fighting a non-pspace
opponent, the logic should quickly find the proper strategy and not deviate
from the optimum.

One of the neatest switcher I've seen so far is Kline's Gem of the Ocean.  It
is very effective while maintaining simplicity.  (For a complex, effective
switcher see Boeren's Grilled Octopus).  It uses an array to determine its
next strategy thereby controlling the sequence of warriors.  The key here is
to select the proper sequence of warriors as well as good componets.  Kline
provides a lengthy explanation of his choices in the post of Gem.


parray    dat 0,choose1         ;table for pswitching
          dat 0,choose3         ;- stay after win
          dat 0,choose1         ;- go to ptie after tie
          dat 0,choose4         ;- move up one after loss
          dat 0,choose1
          dat 0,choose3
ptie      dat 0,choose2
          dat 0,choose4

presult   ldp.ab #0,#0                  ;pswitch code, nice and short
pselect   ldp.ab #PFLAG,#0
          sne.ab #0,presult             ;advance table selection after a loss   add.ab #1,pselect             
          sne.ab #2,presult             ;go to Sweep after a tie
          mov    #ptie-parray,pselect
          stp.ba pselect,pselect
          mod.ab #presult-parray,pselect
          add.ba pselect,pchoice
pchoice   jmp    @parray,{pselect       ;jump to selection


A few things to consider:  most programs switch on losses.  Keeping the same
strategy after a win can be quite dangerous to you.  Quick scanners feast on
bloated code.  Consider switching step sizes or bomb types instead of entire
strategies.  Often pspacers do not use booted components.  There has to be a
way to write common boot code that will handle every p-component ( most
likely in next week's issue ).  How difficult can it be to write a switcher
that creams stand still programs?  And one that takes advantage of the stay
on win, switch on loss algorithm?  And then switches both of those?  Let me
know when you find out.
______________________________________________________________________________
Planar's Corner

                           Mount Olympus


"Mt Olympus" is the name of a little experiment I'm working on.  You
can check it out at: http://pauillac.inria.fr/~doligez/corewar/olympus/

In real life, Mount Olympus is the biggest mountain of the solar
system, 21 km high.  It is located on the planet Mars.

In my Web page, Mt Olympus is a hill with room for all warriors.

Of course, I'm not running all the battles.  The Web page gives an
explanation of how it works.  Even then, it'll take a few months
before I'm through with all the old warriors.  In the meantime, you
can climb in my time machine and see which warriors were state of the
art back in 1992, and which ones were already outclassed.

-- Planar
______________________________________________________________________________
Extra Extra
Grilled Octopus by David Boeren

Here's the source code for the version of Grilled Octopus which is currently
on the Hill.  He no longer terrorizes the Hill like he used to, so I thought
it was finally time to let you know how it works.  Basically, I use two
threshold-switching algorithms (like Clisson) and one switch-on-loss algorithm
(like Jack).  There is also some very good brainwash detection which will
make me permanently switch to a brainwash-handling component.  My first
component is my best one, it's a 6-instruction self-splitting .5c DAT bomber
with a 1-pass (suicidal) DAT coreclear.  You can hardly ask for a better
anti-scanner component due to the small size, and it does pretty well against
other bombers too.  It's quick to boot, and hard to see/hit.  It's also
guaranteed to lose horribly against any paper and any normal imp spiral.
If this component fails, then I switch to a 1-shot scanner->coreclear, which
is also my anti-brainwash component.  Nothing special about it, but it seems
to work fairly well vs. papers and some bombers.  Finally, if this also
fails I end up in a switch-on-loss between my bomber and paper0.  I tried
other papers, but the only ones that scored better than paper0 were all much
larger, and thus unsuitable as components.  The switch-on-loss helps me
score better against other pspacers, particularly those which are slow to
adapt.

The pspace code used here is pretty neat, and fast as well.  I have not
had much trouble with qscanners, since I'm generally finished booting away
in 22 cycles or so.  Some components go faster than others, and if I detect
brainwash I boot VERY fast due to skipping almost all the thinking.

I don't really know for sure if the re-stepping code for my bomber helps
much or not.  I may drop the idea in future warriors.  It was intended to
help me adjust to the step size of my opponent, but results on the Hill were
pretty ambiguous.

If you read my earlier article on pspace you'll see that I still use the
same methods of erasing my boot pointers, but I have rigged the code so that
I only have to erase one location to erase my pspace pointers now.

I've made some improvements since this code, but I was sick of ;killing my
programs all the time when they were doing so well and throwing away all my
hard-won age.  It may interest some to know that if I'd left v0.1 on the
Hill it would be #10 in the Hall of fame right now!

For next week, I'll be writing an article on how to make a multi-boot
routine that you can use to boot all of your components with only minimal
overhead.  By using one of these I was able to save 16 instructions, which
is enough to add a 4th component.

;redcode-94
;name Grilled Octopus v0.5
;author David Boeren
;assert CORESIZE == 8000
;strategy Aggressive P-warrior
;strategy Death awaits you all, with nasty big pointy teeth!
;strategy     v0.1 Initial Release
;strategy     v0.2 More aggressive, wins are better than ties!
;strategy     v0.5 Totally new pspace techniques, upgraded components

step    equ 95
stepb   equ (step*2)
stepz   equ (184*2)                  ; "second chance" step for Fei-Oh
gate    equ (inc-95)

dest0   equ   2200
dest1   equ   3740
dest2   equ  -1278                   ; pmars optimized
range   equ    933                   ; pmars optimized

sid     equ    143                   ; Stage ID
pdata   equ     23                   ; Win/Loss data
Pmod    equ     29

; 5=7859, 7=7801, 8=7772, 10=7685, 13=7598, 16=7511, 20=7385
Pinit   equ   7598                   ; Fei-Oh loss tolerance
Pmorf   equ   7801                   ; Fei-Oh re-stepping tolerance
Pinit2  equ   7772                   ; Paper Shredder loss tolerance

bdist1  equ   (sflag+3317)           ; Fei-Oh boot distance
bdist2  equ   (sflag+3268)           ; Paper Shredder boot distance
bdist3  equ   (sflag+3243)           ; Paper boot distance

        org start
sflag   DAT.F      #sid,   #pdata    ; pspace data pointers
        DAT.F        #0,   +Pinit    ; first round
PRESULT DAT.F        #0,    +Pmod    ; loss
        DAT.F        #0,    -Pmod    ; win
        DAT.F        #0,       #0    ; tie

start   LDP.A        #0,  PRESULT    ; Get results of last round
        SNE.A       #-1,  PRESULT    ; Is it the 1st round?
        STP.A     #1003,    sflag    ;     If so, init stage ID
        LDP.A     sflag,     jtab    ; Load stage ID
        SUB.A     #1003,     jtab    ; Subtract secret number...
        SLT.AB     jtab,       #3    ; Are we brainwashed?
        JMP.B        @0,   nowash    ;     If so, jump to handler
        LDP.BA    sflag,    PTEST    ; Get the current win/loss counter
jtab    JMP.B        @0,   stage1    ; Jump table to correct component
        DAT.F        #0,   stage2
        DAT.F        #0,   stage3

stage1  ADD.AB    PTEST, *PRESULT    ; Update win/loss counter
        STP.B  *PRESULT,    sflag    ; Store updated counter
        MOD.AB    #Pmod, *PRESULT    ; Check the MOD
        SLT.B  *PRESULT,   #Pmorf    ; See if Fei-Oh is losing...
        MOV.A    #stepz,   loop+1    ;     Try a new step
        JMZ.B    fei_oh, *PRESULT
        STP.A     #1004,    sflag    ; Engage stage 2 pspace algorithm
        STP.AB  #Pinit2,    sflag    ; Reset stage 2 loss counter
                                     ; Too many losses, fall through...
shred
        MOV.I         0,    sflag    ; Safety-net for our pspace stuff
nowash
boot3   MOV.I   clear+1,   bdist2    ; fast boot away tail first
for 7
        MOV.I    {boot3,   <boot3
rof
        ADD.AB       #3,    boot3    ; adjust so we split to "loop"
        SPL.B    @boot3,       #1    ; split to main program
        MOV.I         0,    boot3    ; obliterate boot pointer
                                     ; fall through and die...
ptr     DAT.F       #10,       #5
        DAT.F       #10,       #1
        SPL.B        -1,       #1
scan    ADD.A        #8,      ptr   ; "Ippatsu" one-shot scanner
        JMZ.F      scan,     *ptr
        SPL.B       #10,       #2
clear   MOV.I      @ptr,     }ptr
        DJN.F     clear,    <gate

stage2  ADD.AB    PTEST, *PRESULT    ; Update win/loss counter
        STP.B  *PRESULT,    sflag    ; Store updated counter
        MOD.AB    #Pmod, *PRESULT    ; if flag is not the right mod:
        JMZ.B     shred, *PRESULT
        STP.A     #1005,    sflag    ; Engage stage 3 pspace algorithm
                                     ; Fall through to backup strategy...
pboot
        MOV.I         0,    sflag    ; Safety-net for our pspace stuff
boot2   MOV.I     ibomb,   bdist3    ; fast boot away tail first
for 10
        MOV.I    {boot2,   <boot2
rof
        SPL.B    @boot2,       #1    ; split to main program
        MOV.I         0,    boot2    ; obliterate boot pointer
        DAT.F        #0,       #0    ; die

paper   SPL.B         1,       #0    ;\
        SPL.B         1,       #0    ;-> generate 8 processes
        SPL.B         1,       #0    ;/

silk    SPL.B        @0,   {dest0
        MOV.I       }-1,      >-1
silk1   SPL.B        @0,   <dest1
        MOV.I       }-1,      >-1
        MOV.I     ibomb,   }range
        MOV.I    {silk1,   <silk2
silk2   JMP.B        @0,   >dest2
ibomb   DAT.F     <2667,    <5334

inc     SPL.B        #0,    <gate    ; Fei-Oh v0.6
loop    MOV.I      bomb,    @targ
        ADD.AB   #stepb,     targ
targ    MOV.I      bomb, }stepb-1
        DJN.F      loop,    <gate
bomb    DAT.F     #step,       >1

; stage 3 is a switch-on-loss module against pspacers and paper/imps

stage3  SNE.A        #0,  PRESULT    ; check result
lost    ADD.A        #1,    PTEST    ; lost change
        MOD.A        #2,    PTEST    ; secure result
win     STP.AB    PTEST,    sflag
PTEST   JMP.B        @0,   fei_oh
        DAT.F         0,    pboot

fei_oh
        MOV.I         0,    sflag    ; Safety-net for our pspace stuff
boot    MOV.I      bomb,   bdist1    ; fast boot away tail first
for 5
        MOV.I     {boot,    <boot
rof
        SPL.B     @boot,       #1    ; split to main program
        MOV.I         0,     boot    ; obliterate boot pointer
                                     ; fall through and die...
        END
______________________________________________________________________________
Questions?  Concerns?  Comments?  Complaints?  Mail them to people who care.
authors: Beppe Bezzi <bezzi@nemo.it> or Myer Bremer <bremermr@ecn.purdue.edu>
2002-2005 corewar.info. Logo C. Schmidt