Another frustrating day... Very simple little program in HITECH C for the 12F675, randomly produces this very strange error: aspic "\"--edf=3DD:\Program Files\HI-TECH Software\ Error [800] C:\DOCUME~1\JAMESN~1.EFP\LOCALS~1\Temp\s3h4.; 353. undefined symbol "btemp" Strange because no where in the program do my friend and I use the identifier "btemp"... searching for btemp in the compiler manual finds: "1. The BTEMP register is a memory location allocated by the compiler, but which is treated like a register for code generation purposes." Google for "undefined symbol btemp" finds: In which the cryptic reply... Add the following bit of assembly: psect temp,ovrld,class=3DBANK0,space=3D1 global btemp btemp ds 2 =09 You could put #asm/#endasm around it and add it to the C file. ....provides us with a solution. Apparently, it needs to be at the end of th= e C file? Anyway, adding that code allows for a successful compile, and destroys my confidence in the compiler...=20 I mean... really? Are you kidding? The compiler is using an identifier that is isn't bothering to define space for? And one that (although we didn't) has a name any one could /easily/ crash on? Just for fairness, here is the program, so you can see how simple it is and maybe find something in it that could cause an issue. Actually, if someone could try compiling this on their PC I would appreciate it; just to see if it does the same thing to you with out the #asm block at the end.=20 BTW: the offending line seems to be the=20 for (;speed < MID_SPEED;speed++)=20 if you comment out that one line, it compiles without the asm block.=20 Also had to change=20 return (int)(ADRESH << 8 | ADRESL); (which seems more intuitive to me) into return (int)(ADRESH << 8 + ADRESL); or the same error appears. Here is the complete program (bugs, I'm sure, and all) #include __CONFIG (UNPROTECT // & BORDIS //brown out reset disabled (default enabled) & MCLRDIS //master clear reset on pin 3 disabled (default enabled) // & PWRTEN //power up timer enabled (default disabled) & WDTDIS //watch dog timer disabled (default enabled) & INTIO //internal osc, GP4,5 are IO (default RCCLK) ); #define _XTAL_FREQ 4000000 //required for __delay_ms macro #define AINbit 0 volatile bit AIN @ (unsigned)&GPIO*8+AINbit; #define STEPX GPIO1 #define STEPY GPIO2 #define STEPZ GPIO4 #define DIR GPIO5 void init() { TRISIO =3D 1<