tried to minimize the boolean expressions - (
void _isrd2()
{
byte bn = 1;
byte rec = 0;
byte reg = PIND;
while (~reg & B00000100)
{
while ((~reg & B00100100) == B00100100) { reg = PIND; };
if (reg & B01000000)
{
rec += bn;
}
bn = bn << 1;
while ((~reg & B00100100) == B00000100) { reg = PIND; };
}
flag = rec;
}
or even
void _isrd2()
{
byte bn = 1;
byte rec = 0;
byte reg = PIND;
while (~PIND & B00000100)
{
while ((~PIND & B00100100) == B00100100) ;
if (PIND & B01000000)
{
rec += bn;
}
bn = bn << 1;
while ((~PIND & B00100100) == B00000100);
}
flag = rec;
}