CP/M pages
Home -> CP/M -> REL file format

Microsoft REL file format

The REL format is generated by Microsoft's M80 and Digital Research's RMAC. The following description is from the Digital Research Programmer's Utilities Guide for CP/M+; comments in brackets refer to RMAC syntax.

M80 is capable of generating some record types which DR's LINK-80 can't handle. I don't know if these are present in the list.

REL files contain information encoded in a bit stream, which LINK-80 interprets as follows:

Special link items

A special item consists of:

The following special items are followed by a name field only:

0000
entry symbol. The symbol indicated in the name field is defined in this module, so the module should be linked if the current file is being searched, as indicated by the S switch. [PUBLIC declaration]
0001
select common block. Instructs LINK-80 to use the location counter associated with the common block indicated in the name field for subsequent common relative items.
0010
program name. The name of the relocatable module.
0011
unused.
0100
unused.

The following special items are followed by a value field and a name field.

0101
define common size. The value field determines the amount of memory reserved for the common block described in the name field. The first size allocated to a given block must be larger than or equal to any subsequent definitions for that block in other modules being linked.
0110
chain external. The value field contains the head of a chain that ends with an absolute 0. Each element of the chain is replaced with the value of the external symbol described in the name field. [used by EXTRN etc]
0111
define entry point. The value of the symbol in the name field is defined by the value field. [PUBLIC definition]
1000
unused.

The following special items are followed by a value field only.

1001
external plus offset. The following two bytes in the current segment must be offset by the value of the value field after all chains have been processed.
1010
define data size. The value field contains the number of bytes in the data segment of the current module.
1011
set location counter. Set the location counter to the value determined by the value field.
1100
chain address. The value field contains the head of a chain that ends with an absolute 0. Each element of the chain is replaced with the current value of the location counter.
1101
define program size. The value field contains the number of bytes in the program segment of the current module.
1110
end module. Defines the end of the current module. If the value field contains a value other than absolute 0, it is used as the start address for the module being linked. That is, the current module is the main module. The next item in the file starts at the next byte boundary.
1111
end file; has no value field or name field. This item follows the end module item in the last module in the file.

Return to archive listing