ROM addresses.

When a label is used on a "word" statement, the rom address of the word defined by the "word" statement is assigned as the value of the label. The label may be used in an expression exactly as if it were an the label of an equate statement. Furthermore, an asterisk ("*") may be used in an expression to specify the rom address of the current "word" statement (or the next "word" statement if it appears in some other type of statement). The following illustrates the use of labels and rom addresses. in the following it is assumed that the microcode sequencer being used forces a jump on every instruction.
flda: field position=0

fldb: field position=1

jadr: field position=3,width=12,cmdpos=0

a: word b,flda,fldb

b: word c,fldb

c: word *-2,flda


Normally ROM addresses are assigned consecutively starting from zero. The "org" statement can be used to change the rom address of the next "word" instruction. An example of an "org" statement given below.
org *+10

This statement will leave a ten word "hole" in the ROM. When an expression appears on an "org" statement, all equates and rom addresses that are needed to evaluate the expression must appear before the "org" statement in the text. This is the only restriction on statement ordering.

When a hole is left in a ROM, the preprocessor adds null words to fill the hole. A null word is created by assigning every field its default value.

The preprocessor normally will expand a ROM to a size large enough to hold all defined words, including holes. The number of address bits will be enough to address all specified words, but no larger. If it is necessary to limit the rom to a specific number of address bits, the "size" statement must be used. An example of a size statement is given below.
size 256

This statement will limit the rom to 8 address bits (no more, no less) and 256 words. The operand of the size statement may be an expression.