Monday 17 November 2008

Core War - Hostile Programming

Core War is a game from the 80's, played between computer programs written in Redcode, a language similar to assembly.  The programmers design their battle programs to remove opponents from the memory of the MARS virtual computer by any means possible.

Some of the simpler techniques include blindly overwriting memory, searching for the opponent or spawning off new processes. These are commonly known as stone, scissors, paper after the popular playground game.  Stone usually wins against scissors, scissors normally defeat paper, and paper mostly beats stone.

Here's an example of a typical Core War program:

org   wipe

step  equ 5
first equ bomb-10

bomb:mov.i #1,       -1

ptr: sub   #step,    #first
wipe:jmz.f ptr,      @ptr

mov   bomb,     >ptr
djn.f wipe,     {ptr-5

This simple example of scissors once held a 20 point lead over it's rivals. The first instruction is never executed, it's the bomb used to overwrite opponents.  The next two instructions form a loop which look through memory for an opponent, and the final two instructions actually overwrite it.

Core War is still going strong, and celebrates it's 25th anniversary in 2009. If you'd like to discover more about Core War, here are the top resources:
What are your experiences with Core War, have you ever had any success?


  1. I always liked Core War, from the first time I read about it on a computer magazing, and later rediscovered the original articles by A.K. Dewdney. Like many, in time I have developed my own Core War system:

    But I somewhat become less interested with the newer verisons of the standard. I feel like too much complexity where added.

  2. Hi Marko, when I first started playing Core War, I only knew about the '88 standard. When I discovered '94, I absolutely hated it, but I've got used to it over time. It does add some flexibility to the language, but apart from post increment addressing, I think I could live without it.

  3. Hi John. I stopped by after your recent email to me about Core War history. Has it been almost 25 years already?! Looking at my old correspondence, printed mostly by 9-pin dot matrix printers, it certainly seems like ancient history. We need to have a party somewhere. Too bad The Computer Museum in Boston is no longer there.

    The '94 standard is practically 100% backward compatible with the '88 standard. In creating the '94 standard, we had two goals: 1) remove all ambiguity, and 2) make all combinations of opcodes, addressing modes, and fields valid instructions. Doing #2 made Redcode more flexible (and seemingly complex), whereas at the implementation level (MARS) it actually made things simpler.

    Looking back on my ancient correspondence, I see and remember that we were constantly griping about the standards from day one up until the '94 standard came out. That the '94 standard has lasted this long is a testament to its strengths.


Note: only a member of this blog may post a comment.