( tovis | 2020. 11. 08., v – 17:24 )

Az igazán durva az7 volt, mikor C -ből raktam össze mit is kell ki shiftelni

  uint16_t  w;

  w  = shft_dig;
  w |= (shft_seg[shft_idx] << 8);

Ebből lett

        ld      a, _shft_dig+0
        ldw     x, #_shft_seg+0
        ld      a, xl
        add     a, _shft_idx+0
        rlwa    x
        adc     a, #0x00
        ld      xh, a
        ld      a, (x)
        call

Ezt mind öszesen 1 utasítással tudtam lejjebb tenni (lásd feljebb) amihez kellet egy két bájt hely a CODE területen.
Nem biztos hogy megérte.

Az általad javasolt makrókhoz hasonlókat is használok (másutt)

#define BCPL_PA_ODR_BIT1()    __asm__("BCPL 0x5000,#1")
#define BRES_PA_ODR_BIT1()    __asm__("BRES 0x5000,#1")
#define BSET_PA_ODR_BIT1()    __asm__("BSET 0x5000,#1")
#define BCPL_PA_ODR_BIT2()    __asm__("BCPL 0x5000,#2")
#define BSET_PA_ODR_BIT2()    __asm__("BSET 0x5000,#2")
#define BRES_PA_ODR_BIT2()    __asm__("BRES 0x5000,#2")

Abban biztos vagyok, hogy ennél gyorsabbat nehéz lenne írni. Viszont nem hordozható, szerintem még a családon belül sem feltétlenül.