Steve, glad to hear you made some progress. I'll add a couple things. First, the 644PA is basically the same chip as the 1284P, just with less memory. They share the same datasheet. I think the 644PA lacks the second 16-bit timer (Timer/Counter3) but I think that's the only difference. So given that, code that works on one should work on the other. (The price difference between the two is less than a dollar, so unless I was building dozens or hundreds of copies of something, I'd just stick with the 1284P.)
Second, I hardly ever use attachInterrupt(), reason being it is quite straightforward to set the registers directly. This code is equivalent to what I posted above. It just uses INT2 to toggle an LED. Maybe give that approach a try.
const uint8_t ledPin = 7;
void setup(void)
{
pinMode(ledPin, OUTPUT);
EICRA = _BV(ISC21); //external interrupt on falling edge
EIFR = _BV(INTF2); //clear the interrupt flag (setting ISCnn can cause an interrupt)
EIMSK = _BV(INT2); //enable external interrupt
}
void loop(void)
{
}
ISR(INT2_vect)
{
static bool ledState;
digitalWrite(ledPin, ledState = !ledState);
}