There are severeal ways of doing this. One is to have GRUB on the MBR on your harddrive, and booting whatever OS you have in you /boot/grub/menu.lst.

I have Windows XP on my first partition, Slitaz on my second and Arch on my third. This is only on my laptop. My desktop computer looks even worse ūüėČ

Anyway – WinXP requires to be boot from the first partition following the MBR or something. Go figure. And it has its own bootloader, so GRUB must chainload it. I also did this with my first trial of Arch – chainloading a second GRUB install which deals with its respective kernels. This way new kernels will be populated in its own menu which belongs to the correct partition and OS, which keeps my original menu.lst clean(er).

My /boot/grub/menu.lst which resides on my /dev/hda, looks like this. As you can see, I could install GRUB on my Slitaz partition as well – to keep it even cleaner.

# /boot/grub/menu.lst: GRUB boot loader configuration.
default 2 # 3rd entry
timeout 2 # seconds delay

title     Windows
 rootnoverify (hd0,0)
 chainloader +1

title   SliTaz Latest (Kernel
 root (hd0,1)
 kernel /boot/vmlinuz- root=/dev/hda2

title     Slitaz (wireless) (Kernel vmlinuz-
 root (hd0,1)
 kernel /boot/vmlinuz- root=/dev/hda2

title      Arch Linux  [chainload]
 root   (hd0,2)
 chainloader +1