First you should verify whether you mean SDRAM or SRAM. I don't think this microcontroller supports SDRAM and I suspect you should plan to use an external SRAM.
Refer to the microcontroller documentation for examples on how to connect the microcontroller to the external SRAM and flash. You could also find an evaluation board that contains external memories and reference the eval board's schematic.
You will need to configure the microcontroller's External Memory Controller in order for the microcontroller to be able to use the external memories. Refer to the microcontroller's User Guide for details on how to configure the External Memory Controller. Basically each memory will be associated with a chip select pin and you will have to configure all the settings associated with the chip selects that you are using. Typically the External Memory Controller gets configured with some instructions in the startup code for your application. (It's configured by the startup code so that the external memories are accessible sooner rather than later.) You will likely have to provide, or at least customize, this portion of the startup code. Here again, if you can find an eval board with external memories then the example program that comes with the eval board will be a great reference.
Once the External Memory Controller is configured properly, the microcontroller should be able to read and write to the external SRAM without any additional driver code. The microcontroller should also be able to read from the external flash without any special driver code. However, writing to the external flash will require some special driver code that you will have to incorporate in your program. Refer to the flash part's datasheet for the erase and program algorithms that are required to reprogram the flash. Once again, an eval board example would be a good reference.
(If you don't need to reprogram the external flash at run time then you may not need the flash driver code. For example, you may be able to get by with reprogramming the flash via JTAG with a special flash programming application on your PC.)
I'm not familiar with the internal bootloader provided with this microcontroller. I suspect it reads code from the UART and copies it into internal SRAM and then executes it. I doubt that this bootloader will support your external memories automatically. But you may be able to get the source code for the internal bootloader and then customize it by adding support for your external memories.
I agree that ARM is the way to go for 32-bit microcontrollers. ARM is ubiquitous and its assembly language can be used across a broad range of microcontroller families. ARM also has good support from the GCC toolchain. The ARM7TDMI chip architecture has dominated the 32-bit mcu space the last 5 years and the ARM Cortex-M3 is the emerging replacement. The Cortex-M3 does have a Harvard architecture (separate instruction and data address spaces), but I don't feel that's a limitation.
Micromint has a solid reputation, and they offer a Cortex-M3 board with configurable options for a decent price. However, if you really need DIP configuration, I've had success with the mbed
Now, the next thing is languages. You mentioned FORTH. I also recommend Python-on-a-Chip and eLua as powerful, easy to learn languages that work on this size target platform. eLua is more fully developed but has larger resource requirements than Python-on-a-Chip. Full disclosure: I'm the author of the PyMite VM used in Python-on-a-Chip. So, if your goal is to make your own language, I fully understand the joy of that exercise.
Best Answer
In the 68HC12A4, for example, there are two areas are available for data banking, the first from 0x7000 to 0x7fff (4KB) using the DPAGE register, and 0x0000 to 0x03ff or 0x0400 to 0x07ff (1K) using the EPAGE register. Apparently the two EPAGE areas overlap (bit 10 of the address is a don't care).
With the Cosmic C Cross Compiler for the HC12/HCS12, a variable in the DPAGE area can be specified using the @far modifier on the declaration. A variable in the EPAGE area can be specified using @epage and @far. For example,
I don't think the compiler automatically starts using banked RAM after filling up non-banked RAM, you must use these keywords.
A variable can be located in the code bank using @far with the const keyword:
Such a variable can only be accessed in a function located in a non-banked area.
Similarly, functions are located in a banked area using the @far keyword.
The syntax for other compilers (such as CodeWarrior) may vary, but they would have to use a similar mechanism. Check your compiler manual.