Только у этих всех гадов регистры УАРТ-ов расположены так, что нельзя обойтись указателем на начало блока регистров порта :-( Говорил же я ещё в 98-м году - ну нафига они это пространство портов сделали... Размах на офигительное пространство программы и 64 байта под порты... Хоть бы уж тогда сразу horisontal windowing заложили, чтоли.
А ещё лучше бы ещё один указательный регистр под ldd/std пустили, там после удаления из системы команд in/out и sbi/cbi/sbis/sbic столько места освобождается, что даже аналоги этого дела на адресацию относительно указателя хватает (вместо номер порта + номер бита - смещение + номер бита).
Эх... Нет в жизни совершенства (С) Лис...