LINK

The LINK program is a more flexibly replacement for the EXLINK linker program that came with EXIDY CP/M. The input for both linkers is an extended Intel HEX dialect produced by the EXASM; LINK supports additional DJOE extensions beyond EXLINK.

The first program that had to be written for the ORDINATOR was DIAMOND, its DIAgnostic MONitor and Debugger program. This posed a problem for us because the CP/M-based EXLINK could not link programs for base addresses outside the CP/M transient program area (TPA). Even then, it always included padding zeroes when the base address wasn't 0100H, the base of the TPA.

This prompted Luc to create a compatible EXLINK replacement, appropriately called LINK, that supported linking for arbitrary base addresses and could save the link result without adding any padding. At a later stage more extensive symbol table saving and simple archive loading facilities were added.

We'll let the comments at the beginning of LINK.ASM speak for themselves:
;LINK is upward compatible with Exidy EXLINK

;090690 Completed @respfile. Added N,V commands, / sep. L
;080690 Started adding @respfile. L
;100390 Added +/-/= options to L command. L
;	Also save IX,IY on some BDOS calls. L
;	Added Y command. Added ID. L
;270485 Selective loading. L
;100485 Use EXFC the right way. G
;	Fixed bug in WRHX routine. G
;090485 Fixed bug in S command. G
;080485 Added S, U commands. Changed '****' to '----'. G
;150884 Corrected some bugs. L
;091283-060184	Originally created. L

;	Version 1.0 06/01/84  L
;	Version 1.1 15/08/84  L
;	Version 1.2 08/04/85  G
;	Version 1.3 10/04/85  G
;	Version 1.4 27/04/85  L
;	Version 1.5 10/03/90  L
;	Version 1.6 09/06/90  L
;
;	LINK is upward compatible with Exidy EXLINK

;Invokation syntax:
;
;
;	LINK [file [,...]] [/option [[/|,]...]]

;Files can be:
;
;	@respfile				Response
;
;	objfile [[+|-|=]addr			Load

;Options are:
;
;	A=addr					Address
;
;	N					Non-verbose
;	V					Verbose
;
;	T					Table
;	U					Undefined
;
;	S [symfile]				Symbols
;	Y [symfile]				Symbols
;
;	D [comfile]				Data
;	E [comfile]				Exit
;	M [comfile]				Moving

;Interactive command syntax:
;
;	@ respfile				Response
;
;	; comment				Comment
;	# comment				Comment
;
;	L file					Load
;
;	N					Non-verbose
;	V					Verbose
;
;	T					Table
;	U					Undefined
;
;	S [symfile]				Symbols
;	Y [symfile]				Symbols
;
;	D [comfile]				Data
;	E [comfile]				Exit
;	M [comfile]				Moving
;
;	Q					Quit

;For invocation line files and options, verbosity is normally
;off, while for interactive commands it is normally on. The V
;option turns verbosity on for invocation line files, while
;the N option turns it off for interactive commands. The
;V and N commands do this immediately.

;Input file format:
;
;	:LLAAAA00[DD...]CC	Data record
;	:XXXXXX01CC		End-of-module record
;	$LLLLLL02AAAACC		Internal symbol record
;	$LLLLLL03RRRRCC		External symbol record
;	$LLXXXX04[AAAA...]CC	Relocation record
;	$NNNNNN05AACC		Start-of-module record
;	+[X...]			Comment record
;	-[LLLLLL...]		Selective load record
;
;	Ordering within a single module:
;
;     - Selective load record, if present
;     - Start-of-module record, if present
;     - Data, internal symbol, external symbol, relocation
;	records in any order, except that relocation records
;	must be preceded by the data records they relocate
;     - End-of-module record (Mandatory)
;
;	Comment lines are accepted only between modules
LINK was eventually renamed L (Linker) to save on typing.

The arrival of C compilers eventually caused us to grow frustrated with the limitations of the Intel HEX format; you can find some discussion of a new object file format on page 59 of the book "THE ORDINATOR PROJECT". No new format was ever implemented, however.