Each of these commands emit code to be executed by the boot code. Code sequences are grouped in InitCode sections. The order of OUT... and InitCode sections is observed. All adjacent InitCode commands contribute to the same InitCode section. If the command InitCode (without parameters) or another command except InitCode is specified, the current InitCode section is closed. The InitCode Filename command always creates a unique InitCode section which is not concatenated with other sections. When a section is closed, RTLoc will append a

jmp [e]bx

instruction to the section, since register [e]bx contains the return address.

InitCode Filename appends the content of the MS-DOS .EXE file Filename to the InitCode data. The program must not contain fixups and its entry point must be the start of the program. InitCodeB/W/D emit bytes, word, or dwords, respectively. InitCodeS writes strings to the InitCode data and interprets embedded escape sequences following the C/C++ rules for string constants (e.g. \n, \r, \x123, etc). No zero byte is appended to such strings.

The offset within the InitCode data to receive the next emitted code can be changed with command:

Registers es and ecx are not modified by the boot code while it processes InitCode commands. They can be used to pass information from one InitCode section to another.

Note that RAM might not be usable as long as the chipset initialization has not been completed. In this case, not even the stack can be used. The boot code itself will not use the stack or any other RAM until all OUT... and InitCode commands have been processed.