--- /dev/null
+/* [ROM] */\r
+define symbol __intvec_start__ = 0x0;\r
+define symbol __region_ROM_start__ = 0x0;\r
+define symbol __region_ROM_end__ = 0x0003FFFF;\r
+\r
+/* [RAM] Vector table dynamic copy: 79 vectors * 4 bytes = 316 bytes (0x13C) */\r
+define symbol __NVIC_start__ = 0x00000000;\r
+define symbol __NVIC_end__ = 0x00000140; /* to be aligned on 8 bytes */\r
+define symbol __region_RAM_start__ = 0x20000000;\r
+define symbol __region_RAM_end__ = 0x20007FFF;\r
+\r
+/* Memory regions */\r
+define memory mem with size = 4G;\r
+define region ROM_region = mem:[from __region_ROM_start__ to __region_ROM_end__];\r
+define region RAM_region = mem:[from __region_RAM_start__ to __region_RAM_end__];\r
+\r
+/* Stack and Heap */\r
+define symbol __size_cstack__ = 0x800;\r
+define symbol __size_heap__ = 0x800;\r
+define block CSTACK with alignment = 8, size = __size_cstack__ { };\r
+define block HEAP with alignment = 8, size = __size_heap__ { };\r
+\r
+initialize by copy { readwrite };\r
+do not initialize { section .noinit };\r
+\r
+place at address mem:__intvec_start__ { readonly section .intvec };\r
+place in ROM_region { readonly };\r
+place in RAM_region { readwrite,\r
+ block CSTACK, block HEAP };\r