From the reset vector:
void reset (void)
{
asm LDS #$2100; // or where ever you have the stack...
if(MODE == something)
{
runSomeCode();
}
else
{
runSomeOtherCode();
}
Yes, this will leave stuff on the stack permanently, so you will have to reset the stack pointer yet again on top of main().