While doing some test prints, the PLA that was feeding into the extruder decided to grab a bunch of wires and twist them up into itself (my own fault for leaving the PLA coil on the desk). Of course, I didn't notice this happening until the wires for the X-Stop got pulled off the micro-switch and the printer stopped.
Not only did this ruin the test print, but it seems to have fried the ATMega 644p too. No matter what I did with the firmware, the endstops for X & Y would not trigger (or un-trigger).
You can see from the photo of the un-populated board, the outer pins are Ground and Sig. In normal operation, you should see about 5V between these pins, as the Signal line is being pulled up by an internal resistor. On ours, I was seeing about 2V. Not right.
Also, with the power off, I measured the resistance between ground and the signal line -- it read 20ohms. It should be off the scale, i.e. not connected. Also not good. So the pulled wire had fried the input pins of both the X and Y end stops. The Z end stop, which was not connected, behaves as it's supposed to. It read 5V when being pulled high, and had an open circuit to ground when the board was powered off. Hooking up a microswitch to that gave the expected results.
We've ordered a new ATMega to replace the existing one - hopefully it comes with the right bootloader and I can just plug it in and flash it with the correct firmware -- fingers crossed!