Verständnis frage --> pinMode

Das ist eigentlich ganz einfach. Die Pin Nummer kannst du als Byte übergeben. Nichts ungewöhnliches daran.

Den Port musst du als Zeiger übergeben und dieser muss volatile sein, weil das Register so in der avr libc definiert ist. Daher einfach volatile byte* port als Parameter. Wenn man direkt PORTB als byte übergeben würden, hätte man den Inhalt des Registers!

Bei Aufruf übergibt man dann mit & die Adresse: &PORTB
Genauso wie bei Zeigern allgemein.

Und wenn du den Port ansprichst musst du den Zeiger mit * dereferenzieren:
*port =
Damit du das hast worauf der Zeiger zeigt und nicht etwas auf die Zeiger-Variable selbst zuweist.

Und bei PINA geht das genauso.