Partial success.
Using the CPU Bean, I was able to define a couple more memory areas, as well as convince PE to move the interrupt vector table to 0xF7CC. The one thing it did not move was the entry point (reset) vector, which is still nailed to 0xFFFE in vectors.c. Interestingly enough, the comment given for the reset vector seems to indicate that it should have moved, to wit:
void (* const _vectReset[])() @0xFFFE = { /* Interrupt vector table */
_EntryPoint /* Int.no. 25 Vreset (at F7FE) Reset vector */
};
I'm wondering if this is a bug in PE.
One other side effect of this is I have lost control of the PRM file (linker file) which specifies memory areas. Even though I specified 8 different memory areas (BOOT, ROM, DATABASE, etc), PE now dumps them all together in the PLACEMENT section of the PRM file as follows:
NAMES
END
SECTIONS
ROM = READ_ONLY 0x8000 TO 0xF7CB;
Z_RAM = READ_WRITE 0x0070 TO 0x008F;
RAM = READ_WRITE 0x0090 TO 0x086F;
InterruptVectors_ROM = READ_ONLY 0xF7CC TO 0xF7FF;
DBASE = READ_ONLY 0x0A00 TO 0x17FF;
BOOT = READ_ONLY 0xF800 TO 0xFFAF;
ROM_BUFFER = READ_ONLY 0x1860 TO 0x7FFF;
BOOT_VECTORS = READ_ONLY 0xFFCC TO 0xFFFF;
END
PLACEMENT
DEFAULT_RAM INTO RAM;
DEFAULT_ROM, ROM_VAR, STRINGS INTO ROM,DBASE,BOOT,ROM_BUFFER,BOOT_VECTORS;
_DATA_ZEROPAGE, MY_ZEROPAGE INTO Z_RAM;
END
INIT _EntryPoint /* The entry point of the application. This function is generated into the CPU module. */
STACKSIZE 0x0080 /* Size of the system stack. Value can be changed on the "Build options" tab */
I am apparently not allowed to name the sections of memory I have created and use those names to separate FLASH memory areas for specific uses.
It appears that I can only redirect the interrupt vectors if I choose to redefine the memory areas and let PE generate the PRM file for the linker, however, this still has unacceptable results.