RBJ (Redcode oBJect)

From Just Solve the File Format Problem
Jump to: navigation, search
File Format
Name RBJ (Redcode oBJect)
Ontology
Extension(s) .rbj
Reference Implementation http://mark0.net/soft-xrk-e.html
Endianness Little_endian
Developed By Marco Pontello
Released 1992

XRK core display

XRK core display

RBJ format belongs to XRK - Extra Redcode Kit, a complete Core Wars system for DOS by Marco Pontello. RBJ files contains an assembled binary version of a Redcode Warrior, usually written by the XRA - Extra Redcode Assembler. RBJ files also contains info about the warrior's author, name and version of the assembler used, date & time.

Contents

File structure overview

An RBJ file is composed of 3 sections: Header, Code, Tail

The Tail is represented by 1 byte used as a checksum. To verify the integrity of a RBJ file, simply compare this value to the calculated checksum of the first (filesize - 1) bytes (that is Header + Code).

Structure Descriptions

Int = 2 bytes in Little-endian format.

Header

The Header is 75 bytes long, and is composed as follow:

Pos  Field           Len Data
---------------------------------
  0  Version ID        1 Byte - decimal
  1  Author           30 Chars
 31  Made with        30 Chars
 61  Serial Date&Time  8 FP64
 69  Split Flag        1 Byte
 70  Reserved          1 Byte
 71  Program Len       2 Int
 73  Start             2 Int

Code

The Code block is a sequence of (Program Len) blocks as follow:

     Field           Len Data
---------------------------------
  0  Command           1 Byte
 +1  Mode A / B        1 Byte
 +2  Operand A         2 Int
 +4  Operand B         2 Int

Tail

One Byte as a checksum:

     Field           Len Data
---------------------------------
  0  CheckByte         1 Byte
---------------------------------

Fields Descriptions

Header

Version ID

Decimal (Major ver. * 10 + Minor ver.) Ex: 12 = v1.2

Author

Warrior's programmer Name/Nick

Made with

Assembler used

Serial Date&Time

Floating Point value: Dec * 86400 = seconds from midnight / Int = days from some date

Split Flag

0 = No SPL opcode used (program doesn't split) !0 = Program may use SPL

Reserved

Not used

Program Len

Instructions count, length of the code block

Start

Point to the instruction where execution start


Code

Command

   0 DAT
   1 MOV
   2 ADD
   3 SUB
   4 JMP
   5 JMZ
   6 JMN
   7 DJN
   8 CMP
   9 (not used)
  10 SPL

Mode A / B

  Field A = low nibble
  Field B = high nibble

  0 "#" Immediate
  1 "$" Direct
  2 "@" Indirect
  3 "<" Indirect autodecremented

Operand A & B

  2 bytes signed integer

Tail

CheckByte

Here's how to calc the checksum byte (in BASIC-like pseudocode):

  Sum = 0
  FOR i = 1 TO BufferLen STEP 1
    Sum = Sum + BufferByte(i)
  NEXT i
  FOR i = 1 TO BufferLen STEP 2
    Sum = Sum + BufferByte(i)
  NEXT i
  FOR i = 1 TO BufferLen STEP 3
    Sum = Sum + BufferByte(i)
  NEXT i
  FOR i = 1 TO BufferLen STEP 4
    Sum = Sum + BufferByte(i)
  NEXT i
  Sum = Sum AND 255

External links

Personal tools
Namespaces

Variants
Actions
Navigation
Toolbox