text: #if defined(__AVR__)
  
  #include <avr/io.h>
  #include <avr/interrupt.h>
  
  #define attachInterrupt(num, func, mode) enableInterrupt(num)
  #if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
  #define SCRAMBLE_INT_ORDER(num) ((num < 4) ? num + 2 : ((num < 6) ? num - 4 : num))
  #define DESCRAMBLE_INT_ORDER(num) ((num < 2) ? num + 4 : ((num < 6) ? num - 2 : num))
  #else
  #define SCRAMBLE_INT_ORDER(num) (num)
  #define DESCRAMBLE_INT_ORDER(num) (num)
  #endif
  
  static void enableInterrupt(uint8_t num)
  {
    switch (DESCRAMBLE_INT_ORDER(num)) {
  #if defined(EICRA) && defined(EIMSK)
      case 0:
        EICRA = (EICRA & 0xFC) | 0x01;
        EIMSK |= 0x01;
        return;
      case 1:
        EICRA = (EICRA & 0xF3) | 0x04;
        EIMSK |= 0x02;
        return;
      case 2:
        EICRA = (EICRA & 0xCF) | 0x10;
        EIMSK |= 0x04;
        return;
      case 3:
        EICRA = (EICRA & 0x3F) | 0x40;
        EIMSK |= 0x08;
        return;
  #elif defined(MCUCR) && defined(GICR)
      case 0:
        MCUCR = (MCUCR & ~((1 << ISC00) | (1 << ISC01))) | (mode << ISC00);
        GICR |= (1 << INT0);
        return;
      case 1:
        MCUCR = (MCUCR & ~((1 << ISC10) | (1 << ISC11))) | (mode << ISC10);
        GICR |= (1 << INT1);
        return;
  #elif defined(MCUCR) && defined(GIMSK)
      case 0:
        MCUCR = (MCUCR & ~((1 << ISC00) | (1 << ISC01))) | (mode << ISC00);
        GIMSK |= (1 << INT0);
        return;
      case 1:
        MCUCR = (MCUCR & ~((1 << ISC10) | (1 << ISC11))) | (mode << ISC10);
        GIMSK |= (1 << INT1);
        return;
  #endif
  #if defined(EICRB) && defined(EIMSK)
      case 4:
        EICRB = (EICRB & 0xFC) | 0x01;
        EIMSK |= 0x10;
        return;
      case 5:
        EICRB = (EICRB & 0xF3) | 0x04;
        EIMSK |= 0x20;
        return;
      case 6:
        EICRB = (EICRB & 0xCF) | 0x10;
        EIMSK |= 0x40;
        return;
      case 7:
        EICRB = (EICRB & 0x3F) | 0x40;
        EIMSK |= 0x80;
        return;
  #endif
    }
  }
  
  #elif defined(__PIC32MX__)
  
  #ifdef ENCODER_OPTIMIZE_INTERRUPTS
  #undef ENCODER_OPTIMIZE_INTERRUPTS
  #endif
  
  #else
  
  #ifdef ENCODER_OPTIMIZE_INTERRUPTS
  #undef ENCODER_OPTIMIZE_INTERRUPTS
  #endif
  
  #endif
  