.: Main Menu :.
:: Home ::
.: Debugging Warriors :.
:: Redcoder 2  New!::
:: Original Redcoder ::
.: Evolving Warriors :.
:: Species ::
-> Tycho ->
-> Kepler ->
:: Evolving for Rnd9 ::
:: Which Mars? ::
.: Warrior Archives :.
:: fsh94nop ::
:: By Hill ::
:: Mega Index ::
:: Search :: Logo
Crafted with jEdit

Varfar's RedCoder 2


  1. What is it?
  2. Screenshot!
  3. How does it do it?
  4. Feature status
  5. Download
  6. Which Mars? - if you are interested in programming and specifically in programming Mars emulators, you might be interested in a quick summary I wrote to myself to stop me forgetting what I found when I dug up all the sourcecode I could find..

What is it?

RedCoder 2 is a graphical MARS Emulator, incorporating a powerful debugger. The graphical nature should make it approachable to newcomers, while the graphical debugging might attract serious corewars devotees. Maybe.

The GUI is written in C++, using the wxWidgets (formerly known as wxWindows) framework. The underlying MARS is a heavily modded C Exhaust 1.9.2 by M Joonas Pihlaja, which has been adapted to be interruptable. It will soon integrate the C pMars parser, as packaged by exMars by Martin Ankerl. It ought be runnable anywhere wxWidgets is, which includes Windows, MacOS, most UNIXs and Linux on most desktop and workstation architectures.



^ a very early screenshot of the core-overview window


How does it do it?

This is the second MARS debugger I have tried to write (Redcoder 1 being the first). I have learnt something about it!

  • The MARS is run in-thread, taking cycles away from the GUI display. The MARS pauses when it hits a breakpoint (which include On Writes, On Exec and a stepping mode).
  • As the MARS runs, it records an execution log, which can be useful for timescape debugging.
  • As an in-thread MARS might lead to a unresponsive UI, the MARS pauses every n cycles to update the GUI and process GUI events (such as STOP; this means that a STOP command may not be honoured immediately, but so what!). The repaint in these interruptions is progressive, based upon the exec-log rather than a full core redraw; this is a major efficiency. The precise number of cycles between repaints can be automatically derived from a "n cycles per second" target in a user interface settings panel, and adjusted automatically to honour this throttling.
  • The execution log has a very fine grain; it records precisely the actions being taken, making distinctions possible between: A_PREDEC_A, A_PREDEC_B, A_POSTINC_A, A_POSTINC_B, B_PREDEC_A, B_PREDEC_B, B_POSTINC_A, B_POSTINC_B, SET_A, SET_B, SET_AB, SET_I and EXEC.


Feature status

FeatureIn EngineIn GUI
On Exec
Execution is paused before the instruction executes, but after the operands have been evaluated (which might cause On-Write breakpoints).
On Write
Execution is paused after the write has occurred. Writes during operand evaluation (pre-decrementss and post-increments) can be caught, and can even be specifically specified in the condition.
On Read
hmm, including indirects?
Treated as a special case of On-Exec.
Step threadn/a-
Step warriorn/a-
Timescape debugging2004-02-29-
Editable coren/a-
Other focuses to follow..



    Redcoder 2 shall soon be uploaded to CVS, and prebuilt windows binary snapshots will regularly be made available from this very page right here. Redcoder 2 shall be GPLed. Watch this space!


Copyright © Will 'Varfar' 2002/2003. All Rights Reserved