6.1.1 A: Define Linker Class Option

The -Aclass=low[-entry]-high[xcount] option allows one or more address ranges to be defined as a linker class, which can then be used to locate psects in memory. Addresses should use the h suffix to indicate a hexadecimal value.

Typically, one or more comma-separated ranges are defined by a low and high address. Ranges do not need to be contiguous. For example:
-ACODE=1020h-5FFEh,8000h-BFFEh
specifies that the class called CODE represents the two distinct address ranges shown.
Psects can be placed anywhere in these ranges by using the -P option and the class name (see 6.1.19 P: Position Psect), for example:
-PmyText=CODE
will place the myText psect somewhere in the memory ranges defined by the CODE class. Alternatively, any psect that is associated with the CODE class when it is defined (see 4.9.47.3 Class Flag) will automatically be linked into this range, unless it is explicitly located by another option.
Where multiple same-sized, contiguous address ranges are required, they can be specified with a repeat count following an x character. For example:
-ACODE=0h-0FFFFhx16
specifies that there are 16 contiguous ranges, each 64k bytes in size, starting from address zero (0x0-FFFF, 0x10000-1FFFF, etc.). Even though the address ranges are contiguous, no psect will straddle a boundary between ranges, or in other words psects linked into the class will be wholly positioned in the range 0x0-FFFF or within the range 0x10000-1FFFF etc. Linking psects in such a class might yield a different placement to the case where they were linked into a class defined by:
-ACODE=0h-0FFFFFh
for example, which defines the same total address range but which does not include 64k boundaries.
The -A linker option can also specify an entry range, which is typically used for placement of code psects on Baseline devices. For example, the class called ENTRY defined as follows:
-AENTRY=00h-0FFh-01FFh,0200h-02FFh-03FEh
has two ranges, 0x0-1FF and 0x200-3FE. However, the middle address in the option informs the linker that any psect positioned in these ranges must not start above the second address, that is, any psect linked into this class must start in the entry ranges 0x0-FF or 0x200-2FF. A psect may extend beyond the entry range, provided the start address is located within it. Such classes should be used for Baseline devices, where the reachable destinations of call instructions are restricted. See the MPLAB® XC8 PIC Assembler User's Guide for Embedded Engineers for a more thorough example of using such classes.

The -A linker option does not specify the memory space associated with the address range. Once a psect is allocated to a class, the space value of the psect is then assigned to the class (see 4.9.47.18 Space Flag). Nor does this option assign a delta value to a class. If required (typically for Baseline and Mid-range classes used to hold executable code), this must be set with the linker's -D option (see 6.1.4 D: Define Class Delta Value).