Versuchs Mal damit (Operatorreihenfolge!)
Code:
uint8_t digitalRead(uint8_t pin) {
	data = (reg & (1 << pin)) >> pin;
Davon abgesehen ist das eine reichlich ineffiziente Art, einen Pin einzulesen.

mfG,
Markus