Try this for the XP portion of Grub (gedit /etc/grub.conf) - copied from -
http://sxs.thexdershome.com/administration/grubxp.html
Make sure you set the rootnoverify correctly checking with fdisk -l
title Windows XP
# as far as I can understand it the Windows XP hard disk hd1
# needs to think it is the first disk on the IDE bus in order to boot
# so do a swap and add the following two commands to change it
map (hd0) (hd1)
map (hd1) (hd0)
# you then need to tell grub which hard disk and which partition to read the booting information from
# although you have done a swap using the above commands the disks don't change their labelling
# so use hd1,0 as the root device (in grub all numbering starts at zero)
# the telltale to knowing which partition to add to the rootnoverify option
# is the output of fdisk -l the `*' on /dev/hdb1 showing it's the active or boot partition
rootnoverify (hd1,0)
# now tell grub that you are going to be doing an indirect boot using an external chainloader
# i.e it's going to grab the Windows boot code and run it instead
# of directly loading the linux kernel like it usually does.
chainloader +1
# not sure exactly what makeactive does
# I'm assuming it is marking the root partition you specified
# with the rootnoverify command as the active or boot partition
# if it isn't already marked as the `*' or boot partition
makeactive