Another construction may be used to force declaration at a specific address or to assign an alias to another variable or variable bit: the variable type may be followed by:
absolute-declaration = identifier-declaration ( absolute-declaration-address | absolute-declaration-fixed ) ";" .
absolute-declaration-address = ( ABSOLUTE | "@" | AT ) ( address-expression | variable ) [ offset-expression ] .
absolute-declaration-fixed = ABSOLUTE ";" .
For PMP the symbol @ or the keyword "AT" are synonyms of the ABSOLUTE keyword for variables declaration (@ is only used to get a pointer to a variable in standard Pascal).
As an option, it is possible to add an offset expression after the aliased variable.
<absolute-declaration-fixed>:
A special syntax that indicates to the compiler that the variable as to be allocated immediately according the current configuration of the area to be used, without waiting for late optimization which decides to allocate or not the variable regarding its usage. This is useful to allocate a block of absolute variable where each item occupies always the same memory location.
CONST
Offset = 2; // Offset into TheVar
VAR
IoBit1: BOOLEAN @ PORTA.0; // bit of I/O on port A bit 0
CarryBit: BOOLEAN @ STATUS.C; // alias to status carry
TheVar: ARRAY[0..5] OF byte; // buffer
TheVarLo: BYTE @ TheVar + (Offset + 0); // alias into TheVar
TheVarHi: BYTE @ TheVar + (Offset + 1); // alias into TheVar
{$VARIABLES $500 TO $505}
TheVarFixed1: WORD ABSOLUTE; // Reserve memory immediately @ $500..$501 regardless of usage
TheVarFixed2: WORD ABSOLUTE; // Reserve memory immediately @ $502..$503 regardless of usage
TheVarFixed3: WORD ABSOLUTE; // Reserve memory immediately @ $504..$505 regardless of usage
{$VARIABLES ALL}