Tutorial - How to change firmware on 8u2

I thought of this too.
Didn't make a difference.
Why did you add the extra 0x00 after 0xff by the way?
My Code, as it stands now.

Hid Descriptor

USB_Descriptor_HIDReport_Datatype_t PROGMEM JoystickReport[] =
{
      0x05, 0x01,          /* Usage Page (Generic Desktop)                       */
      0x09, 0x04,          /* Usage (Joystick)                                   */
      0xa1, 0x01,          /* Collection (Application)                           */
      0x09, 0x01,          /*   Usage (Pointer)                                  */
      0xa1, 0x00,          /*   Collection (Physical)                            */
      0x05, 0x01,          /*     Usage Page (Generic Desktop)                   */
      0x09, 0x30,          /*     Usage (X)                                      */
      0x09, 0x31,          /*     Usage (Y)                                      */
      0x09, 0x32,          /*     Usage (Z)                                      */
      0x09, 0x35,          /*     Usage (Rz)                                     */
      0x15, 0x00,          /*     Logical Minimum (0)                         */
      0x26, 0xff, 0x00,    /*     Logical Maximum (255)                          */
      0x75, 0x08,          /*     Report Size (8)                                */
      0x95, 0x04,          /*     Report Count (4)                               */ 
      0x81, 0x82,          /*     Input (Data, Variable, Absolute, Volatile)     */
      0xc0,                /*   End Collection                                   */
      0x05, 0x09,          /*   Usage Page (Button)                              */
      0x09, 0x02,          /*   Usage (Button 2)                                 */
      0x09, 0x01,          /*   Usage (Button 1)                                 */
      0x15, 0x00,          /*   Logical Minimum (0)                              */
      0x25, 0x01,          /*   Logical Maximum (1)                              */
      0x75, 0x01,          /*   Report Size (1)                                  */
      0x95, 0x02,          /*   Report Count (2)                                 */
      0x81, 0x02,          /*   Input (Data, Variable, Absolute)                 */
      0x75, 0x06,          /*   Report Size (6)                                  */
      0x95, 0x01,          /*   Report Count (1)                                 */
      0x81, 0x01,          /*   Input (Constant)                                 */
      0xc0                 /* End Collection                                     */
};
typedef struct
            {
                  int8_t  X; /**< Current absolute joystick X position, as a signed 8-bit integer */
                  int8_t  Y; /**< Current absolute joystick Y position, as a signed 8-bit integer */
                  int8_t  Z; /**< Current absolute joystick Z position, as a signed 8-bit integer */
                  int8_t  Rz; /**< Current absolute joystick Rz position, as a signed 8-bit integer */
                  uint8_t Button; /**< Bit mask of the currently pressed joystick buttons */
            } USB_JoystickReport_Data_t;

Data Holders

uint8_t dataIn;
uint8_t data[5];
uint8_t counter;

Main loop

int main(void)
{
      SetupHardware();
      
      //LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
      
      sei();
      
      for (;;)
      {
            HID_Device_USBTask(&Joystick_HID_Interface);
            USB_USBTask();
            
            if (counter==5){counter=0;}
            if (Serial_IsCharReceived())
        {
                  dataIn = Serial_RxByte();
                  if (dataIn == 0xFF){counter=0;}
                  data[counter]=dataIn;
                  counter+=1;
            }


      }
}
USB_JoystickReport_Data_t* JoystickReport = (USB_JoystickReport_Data_t*)ReportData;

JoystickReport->X  =  data[1];
JoystickReport->Y  =  data[2];
JoystickReport->Z  =  data[3];
JoystickReport->Rz =  data[4];

JoystickReport->Button = 0;

*ReportSize = sizeof(USB_JoystickReport_Data_t);
      return false;

And Arduino code:

int sensorBottom[] = {0, 0, 0, 0};
int sensorTop[] = {1024, 1024, 1024, 1024};

byte dataStart = 0xFF;
byte sensorValue;

void setup() 
  {  
  // initialize serial communications at 9600 bps:
  Serial.begin(9600); 
  }

void loop() {
  // Send start byte to 8u2
  Serial.print(dataStart); 
  
  for (int i = 0; i < 4; i++)
    {
    sensorValue = analogRead(i);            

    sensorValue = map(sensorValue, sensorBottom[i], sensorTop[i], 0, 255);
    sensorValue = constrain(sensorValue, 0, 255);
    
    // print the results to the serial monitor:         
    Serial.print(sensorValue);
    }
  delay(40);    
}

Problem: the values "wrap" around.
In the Windows 7 calibrate dialog I see the values ranging from 0 to 63 and then wrap around, a total of 4 time. (This makes sense in a way, it equals 256. I'm still not sure why though...)
Also, no matter what range (I tried 64 steps instead of 265), the values still "roll around" 4 times in a row.