OK, if you have a scope, a way of setting the calibration is to use this code....
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_OFF & _INTRC_OSC_CLKOUT & _MCLRE_OFF & _CPD_OFF
BANK1 ; BANK1
MOVLW H'XX' ; SET CALIBRATION VALUE AT A VALUE ('XX')
MOVWF OSCCAL ; LOAD IN TO OSC CALIBRATION REG
TEST
GOTO TEST ;LOOP FOREVER
Set value for your calibration (the H'XX' part) at a start value say H'40' (centre frequency), the data sheet is a bit weird here, they show the calibration value as 8bit's, CAL5->CAL0 then the lower 2 bits blank, and the description below as only 6 bits i.e. B'100000', there may be an errata for this oversite.... anyway..... check with your scope on pin3, you should see exactly 1uS pulses, if not, then reduce or increase your 'XX' value, by 4 (bottom 2 bits not used) accordingly.
I suppose a frequency counter, if you have one could also be used, if so then you are looking for the nearset you can get to 1Mhz.
When you have found your OSCCAL value, you need to program the data H"34XX" (were 'XX' is the value you have found, into location H"3FFF". You can do this, as mentioned in a previous post by programing the part as a larger chip, the programming will probably fail, but on reading the chip back you should see the your value (H'34XX', were 'XX' is your value) at H"3FFF".
If 1uS is too small a value to read accuratly with your scope then simply fit a delay into the above code and toggle an IO pin
set pin
wait 100uS
clear pin
wait 98uS (2uS to loop)
loop
It's a lot quicker to do.. than explain!
If you want to get really fancy you could write some code to check buttons, increase/decrease your temp value by 4, and store the result into the eeprom, you would then only need to read the eeprom on a programmer, and you would have your value, if you do this code, maybe you could post it?
Anyway, I hope this helps and that you can use your xbox soon!