Ian,
the PIC12F629/675, and other??, devices have a factory calibrated value stored at the last location (0x3FF) of the device program memory. This value is retrieved by the 'call 0x3FF' and is used to calibrate the internal 4MHz oscillator, by loading the OSCCAL register using the instruction 'movwf OSCCAL'.
If the value in 0x3FF is incorrect or non-existant, a program may actually run, but any timing-critical operations could be way off and produce erroneous results.
There's a function in the stand-alone PICkit2 GUI program for regenerating an OSCCAL value, should it be erased inadvertently.
For whatever reason, simulators, such as Oshonsoft, see the sequence of reading and loading the OSCCAL value as the end of the program and usually halt after a few instructions..
Removing completely, or simply commenting-out ( ; ) the 'call 0x3FF' and 'movwf OSCCAL' lines, allows the program to be simulated, once assembled, just as it would run on the PIC.