Why is memory reserved for parameters which are actually passed in registers? Isn't that a waste of DATA space?
It isn't! Fixed locations are only used when the compiler is not using registers. The location of the fixed areas (DATA, XDATA, etc) is controlled by the memory model. The compiler puts an underscore prefix on the names of functions with arguments passed in registers (and "_?" for reentrant functions).