Well, I've figured out what the problem is and I've got a solution. This probably only affects those of you programming the OTP PIC12C508's using the Parallax PIC16CXX programmer. - SPASM wants to write the reset vector address to 1FFF. This location is really the OSCCAL instruction (MOVLW XX where XX is the correction number) - for the JW part, after erase, location 1FFF holds FFF. SPEP has no problem programming this location with the reset vector instruction so the JW part works fine. - for the OTP part, location 1FFF contains whatever the correction value is needed for the OSCCAL. SPEP cannot program this location with the reset vector instruction BUT IT DOESN'T COMPLAIN EITHER!! - So, when the OTP part powers up, the first instruction run is the MOVLW XX in location 1FFF. The next location run is memory location 0000, which is the start of my subroutine space. The subroutine is run and then the RET instruction is encountered but where does it return to? This subroutine was never called so the chip never runs!! - By adding to my code at memory location 0000 the instruction GOTO START, the OTP part now works. So there appears to be a bug in Parallax's SPASM. It is writing the reset vector to 1FFF instead of 0000, It doesn't complain if it cannot program this location (OTP have this location already programmed), and when assembling the code, it doesn't complain that you are beginning your code at memory location 0000 which should hold the reset vector. So, for those of you running SPASM 4.7 from Parallax, be sure to put org 0 goto start in your code or the OTP parts won't work right. I'm glad I didn't keep trying to program OTP parts and waste a bunch. Dave