I've been looking at examples of C code that is compiled for some lesser known processors (like ZPU) using the gcc cross compiler. Most of the working examples I see assume a certain arquitecture (Memory map and set of peripherals) and simply give you a recipe to compile for these and they work. However I can find very little information on what needs to modified if you use the same cpu with a different memory map and set of peripherals. >From what I've read. There are two main files that I need to make sure that are done "right". The linker script that is used and the crt0.o (Which if I need to modify means recompiling the crt0.S which is assembler). On this last one, especially I find very little information on what is actually supposed to do (other that setting up reset there is no clear info, and I'm talking conceptually not for an specific processor. Although something for this would also be useful). Can any one tell me what is the relationship between a the c files for the code of program (bare metal development), the crt0.S (specially why it is needed) and it's relationship with a working linker script? PD: Answers of the form "read this book" are welcome and I would love them. Thank for any help.