Ok, what I'm going to suggest here is to use the nice functionalities built into GRUB to try to force a boot (and thereby indicating it's an issue with a corrupted grub.conf/menu.lst or a bad GRUb setup)
First, on system boot, you likely will have to type some key to prevent GRUB from automatically booting an OS. With only Ubuntu installed it looks like you have to hit "ESC" to enter the normal GRUB menu screen.
At this point, we want to drop into the console to try to boot a simple kernel, the "memtest86" kernel.
[code:1:661565cb19]c
//now at the GRUB CLI
help
//get an idea of some of the tools we have to work with
root (hd0,1)
//this is just a guess based on your description of actions taken
//you should get confirmation along the lines of "Filesystem type is
// SOME_FS, partition type 0x##", 0x83=Linux
//if it doesn't look right (e.g. it is NTFS or FAT32) try something like
//"root (hd0,0)" or "root (hd1,0)", etc.
//basically, hdM,N corresponds to disk M and partition N
//and you cannot ruin things by entering a bad combination while
//searching for the right disk.
//Continuing, assuming you've found the Linux partition
kernel /bo[tab]
//this should change the entry to "kernel /boot/" and list all possible options
kernel /boot/mem[tab]
//you should get some output like [Linux-zImage, etc, numbers here]
//now you've set the memtest kernel image as the thing to try to boot,
//let's give it a go
boot[/code:1:661565cb19]
This should boot you into a DOS-ish, very blue memory testing system called MemTest86+ If you got that far, things are looking better, now we just need to try to resurrect the linux options and such to boot your system in the same way we just did with MemTest (and later Windows too, although it's likely that that won't even be necessary once the problem has been fixed from within Ubuntu)
The standard Ubuntu kernel options are as follows (at least on my machine, should be fine or close enough for your system)
[code:1:661565cb19]//from /boot/grub/menu.lst
...
title Ubuntu, some version
root (hdM,N) //looks familiar, no?
kernel /boot/vmlinuz-2.6.some_version-arch root=/dev/XdYZ ro quiet splash
initrd /boot/initrd.img-2.6.same_version-as-the-kernel
savedefault
boot
...[/code:1:661565cb19]
Now, some explanation about that is listed above as we build the necessary options for booting. Drop back into the GRUB command line.... here we go...
Title is a nicety for you and I, just that. It is not needed for booting and should be skipped in the GRUB command line.
root is the same as when we were playing with MemTest, it tells GRUB where to start looking for files to try to boot (kernels, system images, the like). Reuse here what you discovered before, likely (hd0,1).
kernel tells GRUB what to try to boot and also what parameters to pass to that kernel before we get going. Note that you may of course use (and I suggest you do so) TAB completion to find that kernel name/version/architecture.
An example would be "kernel /bo[tab]"->"kernel /boot/" and lists vmlinuz-2.6.15_23-386 and vmlinuz-2.6.15_25-386, choose the latest kernel, so -> "kernel /boot/vm[tab]"->"kernel /boot/vmlinuz-2.6.15_25[tab]" should have all of the kernel image name listed.
I hope I am explaining this well enough, because tab-completion is one of the most powerful tools out there when dealing with systems this low-down and close to the hardware.
Anyway, now comes the kernel parameters.
ro tells the kernel to look at itself as a read-only file, to protect itself from corruption.
quiet tells the kernel to suppress unneeded output.
splash tells the kernel that there's a nice splashscreen that's already been setup, use it.
Now for the trickiest kernel param, the
root option. This tells the kernel, in terms it can understand, what disk and partition holds the root filesystem for the Linux system. This requires a translation from physical layout of the system to the UNIX format. Since the disk is an ATA device, X will be 'h', so we have "/dev/hdYZ". Now, we have to figure out what Y is. The breakdown for ATA devices is this: Primary Channel: Master='a' Slave='b' Secondary Channel: Master='c' Slave='d'. So, let's say your main disk is the Master on the primary IDE channel (check your BIOS to verify). That gives us "/dev/hdaZ". The final part is the partition number. We've already figured this out in the "root (hdM,N)" step, N being the partition number-1, so Z=N+1 (to get it back to normal). Using my assumed settings you have, (hd0,1) and /dev/hda2 would be the values to use for the respective steps. Change to suit what you have found to actually exist on your system.
initrd is an image file that includes drivers and such for use by the kernel. You can have drivers built-into the kernel or have them separated into modules, some of which are packed into this image if they are important system-related stuff (like disk drivers, chipset drivers, etc.) Go through the same steps listed to locate the kernel, but re-focus it on initrd. An example would be "initrd /bo[tab]in[tab]5[tab]" leading to "initrd /bootinintrd.img-2.6.15_25-386" No options are needed here unlike the
kernel line.
savedefault is not needed, skip it.
boot, cross your fingers, and let 'er rip! With any luck, this will bring you back into Linux.
This is a long way to come and I imagine some problem(s) will rear their head before you get here, but it's a start. Let us know what you find.