Hi
I'm not exactly sure how CFFlasher modifies the memory map of the target device, but I believe that it downloads some code to SRAM and that code probably adjusts the various base addresses. However, that probably has nothing to do with your problem.
When you compiled and flashed your code to address 0x00000000 everything worked properly because the external flash is mapped to address 0x00000000 at reset. This is because you will have arranged for CS0 to be used to boot from the external flash. When the CPU resets, it loads the initial stack pointer from adress 0x00000000 and the initial PC from 0x00000004, therefore your external flash must start off at address 0x00000000.
The initial PC could be the start address of your boot loader, and the boot loader could change base addresses and relocate code as you wish, but it must be able to start executing with the flash at 0x00000000. It must either be compiled to run at this address or it must not use any absolute addresses.
What you could do is to compile your boot loader to start at 0x00000000. Compile your application to start at 0x00100000. Flash your boot loader to 0x00000000. Do not change your CFFlasher flash base address setting and then flash your application to an address after the end of the boot loader. When the boot loader starts, it should set up SDRAM to start at address 0x00100000, it then copies the application to that address and finally jumps to the entry point in the application.
The key point is that CFFlasher can only change the base address of flash when you are flashing it. It is your application that must do that, if neccessary, at run time.
Cheers,
Paul.