- Redcode
"This article is about the abstract programming language. For the video codec used in the Red One camera, see Red Digital Cinema Camera Company."
Redcode is the name of the
programming language used in the gameCore War . It is executed by avirtual machine known as a "Memory Array Redcode Simulator", or "MARS". The design of Redcode is loosely based on actual CISCassembly language s of the early 1980s era, but contains several features not usually found in actual computer systems.Key Language Features
;No numeric instruction values: The Redcode standard leaves the underlying representation of instruction codes undefined, and provides no means for programs to directly access it. Arithmetic operations may only be done on the two address fields contained in each instruction. The only operations supported on the instruction codes themselves are copying and comparison for equality.;No absolute addressing: All addresses are interpreted as offsets relative to the instruction containing them. Since the address space wraps around, it is in fact impossible for a Redcode program to determine its absolute address.;Low level multiprocessing: Instead of a single
instruction pointer a Redcode simulator has a number of "process queues", each containing a variable number of instruction pointers which the simulator cycles through. New processes may be added to the queue using theSPL
instruction.Other notable features of Redcode include:
;No external access: Redcode and the MARS architecture provide no input or output functions. The simulator is a closed system, with the only input being the initial values of the memory and the process queues, and the only output being the outcome of the battle, i.e. which programs had surviving processes. Of course, the simulator may still allow external inspection and modification of the memory while the simulation is running. ;Constant instruction length and time: Each Redcode instruction occupies exactly one memory slot and takes exactly one cycle to execute. The rate at which a process executes instructions, however, depends on the number of other processes in the queue, as processing time is shared equally.;Relatively few instructions: The earliest published version Redcode had only eight instructions, while the currently used version has eighteen. However, it should be noted that Redcode supports a number of different addressing modes and (in later versions) instruction modifiers which increase the actual number of possible opcodes to several thousand.;All addresses are valid: All numbers in Redcode are treated as unsigned integers, and the
maximum integer value is set to equal the number of memory locations minus one. Thus each integer is a valid address, and each memory location has exactly one valid address. Numbers that would fall outside the valid range are wrapped around according to the usual rules ofmodulo arithmetic .;Circular memory: As a consequence of the above and the lack of absolute addressing, the memory space (or "core") appears to the programs in it as a circle with no definite start or end. A process that encounters no invalid or jump instructions can continue executing successive instructions endlessly, eventually returning to the instruction where it started.A number of variants of Redcode exist. The earliest versions described by
A. K. Dewdney differ in many respects from the later standards established by theInternational Core War Society , and could be considered a different, albeit related, language. The form of Redcode most commonly used today is based on a draft standard submitted to the ICWS in 1994 that was never formally accepted, as the ICWS had become effectively defunct around that time. Development of Redcode, however, has continued in an informal manner, chiefly via online forums such as the " [news:rec.games.corewar rec.games.corewar] "newsgroup .Earliest versions
The earliest published description of Redcode is found in the [http://www.ociw.edu/~birk/COREWAR/DOCS/guide2red.txt "Core War Guidelines"] published in March 1984 by
A. K. Dewdney andD. G. Jones . The language as described here differs significantly from the later variants, being in many ways closer to actual assembly languages of the era.The Guidelines describe a set of only eight instructions, but it is stated that the earliest implementations of Redcode by Dewdney and Jones had a larger instruction set. Indeed, the language described in the Guidelines is best seen more as a basis for other developers to expand on than as an actual standard.
Wikimedia Foundation. 2010.