Hello TonyP,
There seems to be a significant misinterpretation of my previously posted suggestion. There is no requirement for the ISR functions, designated by ISR_func() or ISR_Routine, to be placed at fixed locations. I did not say this. The position of each ISR function need only be known to the application program, and not the boot loader.
In your case, the SoftVector table would be located within the application area, and the position of each table entry would need to be known in advance by the boot loader code. However, your code has the additional Redirect routines within the boot loader area, that are referenced by the normal interrupt vectors. A consequence of this approach is that similar routines must be included for every interrupt vector, since the boot loader does not know in advance which interrupts would be required by the application. This would result in an increase in bootloader code size by maybe up to 280 bytes.
For the alternative approach, the Redirect routines would each occupy three bytes (or four bytes should a JSR instruction be used), and these routines would be located in a jump table within the application area. This table would at a known location, usually immediately below the boot loader code - a very similar scenario to your SoftVector table.
The primary difference between the two approaches is that all interrupts, that do not require interception by the boot loader, may vector directly to the jump table within the application area, resulting in simplification of the boot loader code, and reduced code size.
The trade off would therefore appear to be either a slightly more complex jump table structure, versus an increase in the boot loader code size.
Regards,
Mac