You can learn C from several tutorials, K&R being the best probably. Embedded C has a number of quirks that make it very compiler dependent. For example sdcc is very ANSI-like (unlike most other embedded compilers imho). It also has a buyilt in aggressive optimizer, and that means that all and I mean *all* global variables that are used concurrently must be marked volatile. Other than that, it's like the other free/open source products: works, works, works, works ... > Other than that, I also want to know if there is any way I can inform > the compiled C program to execute instructions starting at a certain > location I prefer instead of from 0000h? You can do this by manipulating the assembly files (after compiling to assembly) and linking them by hand, by changing the linker script and the startup stub, by providing a function stub that will consume text segment space where you need it (setting it to unprogrammed state, e.g. 0xFF), or by rewriting the compiler's startup code (by providing your own function instead of the original). I do not remember what the sdcc startup stub is called, it is in the sdcc documentation. Peter -- http://www.piclist.com hint: To leave the PICList mailto:piclist-unsubscribe-request@mitvma.mit.edu