+               #if defined(__DOXYGEN__)
+                       /** Type define for an unsigned integer the same width as the selected architecture's machine register.
+                        *  This is distinct from the non-specific standard int data type, whose width is machine dependant but
+                        *  which may not reflect the actual machine register width on some targets (e.g. AVR8).
+                        */
+                       typedef MACHINE_REG_t uint_reg_t;
+               #elif (ARCH == ARCH_AVR8)
+                       #include <avr/io.h>
+                       #include <avr/interrupt.h>
+                       #include <avr/pgmspace.h>
+                       #include <avr/eeprom.h>
+                       #include <avr/boot.h>
+                       #include <math.h>
+                       #include <util/delay.h>
+
+                       typedef uint8_t uint_reg_t;
+
+                       #define ARCH_HAS_EEPROM_ADDRESS_SPACE
+                       #define ARCH_HAS_FLASH_ADDRESS_SPACE
+                       #define ARCH_HAS_MULTI_ADDRESS_SPACE
+                       #define ARCH_LITTLE_ENDIAN
+
+                       #include "Endianness.h"
+               #elif (ARCH == ARCH_UC3)
+                       #include <avr32/io.h>
+                       #include <math.h>
+
+                       // === TODO: Find abstracted way to handle these ===
+                       #define PROGMEM
+                       #define pgm_read_byte(x)         *x
+                       #define memcmp_P(...)            memcmp(__VA_ARGS__)
+                       #define memcpy_P(...)            memcpy(__VA_ARGS__)
+                       // =================================================
+
+                       typedef uint32_t uint_reg_t;
+
+                       #define ARCH_BIG_ENDIAN
+
+                       #include "Endianness.h"
+               #elif (ARCH == ARCH_XMEGA)