Hello Mike,
When you created a new project using the wizard, you are provided with a basic framework for the file main.c, which incorporates the function main(). This function is equivalent to the initialisation sequence, followed by a non-exiting loop that you would also have in an assembly project. Within the file Start08.c is the _Startup() function that is normally referenced by the reset vector, and this will exit by doing a direct jump to main().
_Startup() basically does two things. It provides "copydown" of initialisation values for global and static variables, and it initialises the stack pointer. When you create a new project, you are given the choice of either ANSI initialisation, or minimal initialisation. With the latter selection, the copydown process is eliminated, leaving only the initialisation of the stack pointer prior to jumping to main(). It is not a good idea to bypass the initialisation of the stack pointer.
You will notice that the top of file main.c there is an #include derivative.h. This file, in turn, #includes the actual header file for the MCU derivative that you are using, and this is already incorporated within the project structure. This identifies all the MCU register names, and their associated individual bits. derivative.h should be #included at the top of any other .c file that manipulates MCU registers.
The MCU header file contains many examples where, obviously, a particular register needs to be associated with a specific address. It is also possible for the linker to place a function at a specific address if a special segment is created for that function (see documentation for .PRM file).
I have attached some basic C tutorial information obtained from the web some time ago. Google will probably find numerous other examples. There is also the publication "HCS08 Unleashed' by Fabio Pereira, that contains a multitude of programming examples in C, and directly relates to an earlier version of CodeWarrior.
Regards,
Mac