86Duino EduCake

初期導入されていた BIOS が EduCake 版じゃ無かったのが原因で COM ポートが使えなくてレジスタダンプするプログラム作ったりして二日ほど悩まされてました…。

/*
 * vortex86ex internal pcidevs
 * dev#0 func#0: NB0
 * dev#0 func#1: NB1
 * dev#1 func#0: PCI-E
 * dev#7 func#0: SB0
 * dev#7 func#1: SB1
 */

void
setup(void)
{
  Serial.begin(9600);
  Serial.println("begin");
}

void
loop(void)
{
  
  delay(10000);
  
  int sbclk = sb_Read16(0xc0) & (1UL << 31);
  Serial.print("SBCLK: ");
  Serial.println(sbclk ? "1" : "0");
  Serial.println("");
  
  int base = sb_Read16(0x60);
  Serial.print("UART base: 0x");
  Serial.println(base, HEX);
  void *cookie = io_Alloc(IO_USE_PORTIO, base & 0xfffe, 4 * 10); /* XXX and 0xfffe? */
  if (cookie != NULL) {
    int i;
    for (i = 0; i < 10; ++i) {
      unsigned long uartbase = io_In32(cookie, i * 4);
      Serial.print("UART[");
      Serial.print(i);
      Serial.print("]: 0x");
      Serial.println(uartbase, HEX);
      Serial.print("  Duplex mode: ");
      Serial.println(uartbase & (1 << 25) ? "Half" : "Full");
      if (i == 0) {
        if (uartbase & (1 << 24)) {
          Serial.println("  Forward port 80h to UART1");
        }
      }
      Serial.print("  Internal UART I/O Address Decode: ");
      Serial.println(uartbase & (1 << 23) ? "Enabled" : "Disabled");
      Serial.print("  Clock: ");
      Serial.println(uartbase & (1 << 22) ? (sbclk ? "48MHz" : "24MHz") : (sbclk ? "26MHz" : "13Mhz"));
      Serial.print("  FIFO: ");
      Serial.println(uartbase & (1 << 21) ? "32 bytes" : "16 bytes");
      Serial.print("  High Speed UART Clock Ratio Selection: ");
      Serial.println(uartbase & (1 << 20) ? "1/8" : "1/16");
      static const char *irq_table[] = {
        "Disabled", "IRQ[9]", "IRQ[3]", "IRQ[10]",
        "IRQ[4]", "IRQ[5]", "IRQ[7]" ,"IRQ[6]",
        "IRQ[1]", "IRQ[11]", "Reserved" ,"IRQ[12]",
        "Reserved", "IRQ[14]", "Reserved" ,"IRQ[15]"
      };
      Serial.print("  IRQ Routing Table: ");
      Serial.println(irq_table[(uartbase >> 16) & 0xf]);
      unsigned short combase = uartbase & 0xfff8;
      Serial.print("  I/O Address: ");
      Serial.println(combase, HEX);
        if (combase != 0) {
        void *com_cookie = io_Alloc(IO_USE_PORTIO, combase, 8);
        if (com_cookie != NULL) {
          Serial.print("    Register: ");
          int r;
          for (r = 0; r < 8; ++r) {
            unsigned char reg = io_In8(com_cookie, r);
            Serial.print(reg, HEX);
            Serial.print(" ");
          }
          Serial.println("");
          io_Free(com_cookie);
        }
      }
    }
    io_Free(cookie);
  }
  
  Serial.println("");
  int cbbase = sb_Read16(0x64);
  Serial.print("CrossBar base: 0x");
  Serial.println(cbbase, HEX);
  void *cb_cookie = io_Alloc(IO_USE_PORTIO, cbbase & 0xfffe, 0xb0); // XXX and fffe?
  if (cb_cookie != NULL) {
    static const char *port_function_table[] = {
      /*00*/"No function", "MCM P0", "MCM P1", "MCM P2",
      /*04*/"PRT 8/17 P0", "PRT 8/17 P1", "SD/MMC", "COM[5678] TXD[56768]/RXD[5678]",
      /*08*/"Bit-RichIO Port0", "Bit-RichIO Port1", "Bit-RichIO Port2", "[ISA P0]",
      /*0c*/"[ISA P1]", "[ISA P2]", "[ISA P3]", "[ISA P4]",
      /*10*/"[ISA P5]", "[ISA P6]", "[ISA P7]", "",
      /*14*/"", "", "", "",
      /*18*/"", "", "", "",
      /*1c*/"", "", "", ""
    };
    int port;
    for (port = 0; port < 10; ++port) {
      Serial.print("  RichIO Port[");
      Serial.print(port);
      Serial.print("]: ");
      unsigned char reg = io_In8(cb_cookie, port);
      Serial.print(reg, HEX);
      Serial.print(" (");
      Serial.print(port_function_table[reg & 0x1f]);
      Serial.println(")");
    }
    Serial.println("");
    
    static const char *bit_function_table[] = {
      /*00*/"No function", "COM1-TXD1", "COM1-RXD1", "COM2-TXD2",
      /*04*/"COM2-RXD2", "COM3-TXD3", "COM3-RXD3", "COM4-TXD4",
      /*08*/"COM4-RXD4", "SPI-CS1", "SPI-CLK", "SPI-DO",
      /*0c*/"SPI-DI", "I2C-SDA", "I2C-SCL", "CAN-TXD",
      /*10*/"CAN-RXD", "USB-DEVICE+", "USB-DEVICE-", "KBDATA",
      /*14*/"KBCLK", "MSDATA", "MSCLK", "LAN-LINK/ACK",
      /*18*/"LAN-DUPLEX", "PRINT 1/17-PError", "SPEAKER", "WDTOUT",
      /*1c*/"TXDEN1", "TXDEN2", "TXDEN3", "TXDEN4",
      /*20*/"TXDEN5", "TXDEN6", "TXDEN7", "TXDEN8",
      /*24*/"CLK-OUT", "MTBF", "SPI-CS2", "H_BCLK",
      /*28*/"H_SYNC", "H_SDO", "H_SDI", "H_RST#",
      /*2c*/"", "", "", "",
      /*30*/"", "", "", "",
      /*34*/"", "", "", "",
      /*38*/"", "", "", "",
      /*3c*/"", "", "", ""
    };
    for (port = 0; port < 8; ++port) {
      Serial.print("  Bit-RichIO Port0 Select[");
      Serial.print(port);
      Serial.print("]: ");
      unsigned char reg = io_In8(cb_cookie, 0x10 + port);
      Serial.print(reg, HEX);
      Serial.print(" (");
      Serial.print(bit_function_table[reg & 0x3f]);
      Serial.println(")");
    }
    for (port = 0; port < 8; ++port) {
      Serial.print("  Bit-RichIO Port1 Select[");
      Serial.print(port);
      Serial.print("]: ");
      unsigned char reg = io_In8(cb_cookie, 0x18 + port);
      Serial.print(reg, HEX);
      Serial.print(" (");
      Serial.print(bit_function_table[reg & 0x3f]);
      Serial.println(")");
    }
    for (port = 0; port < 8; ++port) {
      Serial.print("  Bit-RichIO Port2 Select[");
      Serial.print(port);
      Serial.print("]: ");
      unsigned char reg = io_In8(cb_cookie, 0x20 + port);
      Serial.print(reg, HEX);
      Serial.print(" (");
      Serial.print(bit_function_table[reg & 0x3f]);
      Serial.println(")");
    }
    
    static const char *power_control0_table[] = {
      /*00*/"COM1", "COM2", "COM3", "COM4",
      /*04*/"COM5", "COM6", "COM7", "COM8",
      /*08*/"COM9", "COM10", "GPIO INTC0", "GPIO INTC1",
      /*0c*/"SPI0", "I2C0", "MOTOR", "USB Device",
      /*10*/"Parallel Port", "CAN Bus", "8051A", "GPIO Port0",
      /*14*/"GPIO Port1", "GPIO Port2", "GPIO Port3", "GPIO Port4",
      /*18*/"GPIO Port5", "GPIO Port6", "GPIO Port7", "GPIO Port8",
      /*1c*/"GPIO Port9", "8051A GPIO Port0", "8051A GPIO Port1", "8051A GPIO Port2"
    };
    unsigned long pdc0 = io_In32(cb_cookie, 0x28);
    Serial.print("  On-Chip Device Power-Down Control 0: ");
    Serial.println(pdc0, HEX);
    for (port = 0; port < 32; ++port) {
      Serial.print("    ");
      Serial.print(power_control0_table[port]);
      Serial.print(": ");
      Serial.println(pdc0 & (1U << port) ? "power-down" : "activate");
    }
    
    static const char *power_control1_table[] = {
      /*00*/"8051A GPIO Port3", "8051A GPIO Port4", "8051A GPIO Port5", "8051A GPIO Port6",
      /*04*/"8051A GPIO Port7", "8051A GPIO Port8", "8051A GPIO Port9", "HDA",
      /*08*/"", "", "", "",
      /*0c*/"", "", "", "",
      /*10*/"", "", "", "",
      /*14*/"", "", "", "",
      /*18*/"", "", "", "",
      /*1c*/"", "", "", ""
    };
    unsigned long pdc1 = io_In32(cb_cookie, 0x2c);
    Serial.print("  On-Chip Device Power-Down Control 1: ");
    Serial.println(pdc1, HEX);
    for (port = 0; port < 7; ++port) {
      Serial.print("    ");
      Serial.print(power_control1_table[port]);
      Serial.print(": ");
      Serial.println(pdc1 & (1U << port) ? "power-down" : "activate");
    }
    
    int pad;
    for (pad = 0; pad < 80; ++pad) {
      unsigned long val = io_In8(cookie, 0x30 + pad);
      Serial.print("  PAD Attribute[");
      Serial.print(pad);
      Serial.print("]: 0x");
      Serial.print(val, HEX);
      Serial.print(", ");
      Serial.print(val & (1 << 4) ? "high" : "low");
      Serial.print(" slew rate, Smitter Trigger: ");
      Serial.print(val & (1 << 3) ? "Enabled" : "Disabled");
      Serial.print(", Driving current: ");
      Serial.print(val & (1 << 2) ? "16" : "8");
      Serial.print(" mA, Input State: ");
      static const char *input_state_table[] = {
        "Tri-state", "Pull-up", "Pull-down", "Reserved"
      };
      Serial.println(input_state_table[val & 3]);
    }
    
    for (port = 4; port < 10; ++port) {
      Serial.print("  Port Group Selection[");
      Serial.print(port);
      Serial.print("]: ");
      unsigned char reg = io_In8(cb_cookie, 0x80 + port);
      Serial.print(reg, HEX);
      Serial.print(" (");
      switch (reg & 0x1f) {
        case 0:
          Serial.print("No function");
          break;
        case 1 << 0:
          Serial.print("GPIO Group");
          break;
        case 1 << 1:
          Serial.print("COM Group");
          break;
        case 1 << 2:
          Serial.print("8051A Group");
          break;
        case 1 << 3:
          Serial.print("RichIO Group");
          break;
        case 1 << 4:
          Serial.print("Reserved");
          break;
        default:
          Serial.print("Unknown");
          break;
      }
      Serial.println(")");
    }

    for (port = 0; port < 32; ++port) {
      Serial.print("  Bit Group Selection[");
      Serial.print(port);
      Serial.print("]: ");
      unsigned char reg = io_In8(cb_cookie, 0x90 + port);
      Serial.print(reg, HEX);
      Serial.print(" (");
      switch (reg & 0x1f) {
        case 0:
          Serial.print("No function");
          break;
        case 1 << 0:
          Serial.print("GPIO Group");
          break;
        case 1 << 1:
          Serial.print("COM Group");
          break;
        case 1 << 2:
          Serial.print("8051A Group");
          break;
        case 1 << 3:
          Serial.print("RichIO Group");
          break;
        case 1 << 4:
          Serial.print("Reserved");
          break;
        default:
          Serial.print("Unknown");
          break;
      }
      Serial.println(")");
    }
    
    io_Free(cb_cookie);
  }
}

/*
Result: 86Duino EduCake with Hehuan 1.0/GuavaCake 0.9 (20140218)

SBCLK: 0

UART base: 0xC01
UART[0]: 0x8403F8
  Duplex mode: Full
  Internal UART I/O Address Decode: Enabled
  Clock: 13Mhz
  FIFO: 16 bytes
  High Speed UART Clock Ratio Selection: 1/16
  IRQ Routing Table: IRQ[4]
  I/O Address: 3F8
    Register: 0 0 C1 3 3 60 0 81 
UART[1]: 0x8202F8
  Duplex mode: Full
  Internal UART I/O Address Decode: Enabled
  Clock: 13Mhz
  FIFO: 16 bytes
  High Speed UART Clock Ratio Selection: 1/16
  IRQ Routing Table: IRQ[3]
  I/O Address: 2F8
    Register: 0 0 C1 3 3 60 0 1 
UART[2]: 0x8403E8
  Duplex mode: Full
  Internal UART I/O Address Decode: Enabled
  Clock: 13Mhz
  FIFO: 16 bytes
  High Speed UART Clock Ratio Selection: 1/16
  IRQ Routing Table: IRQ[4]
  I/O Address: 3E8
    Register: 0 0 C1 3 3 60 0 0 
UART[3]: 0x820260
  Duplex mode: Full
  Internal UART I/O Address Decode: Enabled
  Clock: 13Mhz
  FIFO: 16 bytes
  High Speed UART Clock Ratio Selection: 1/16
  IRQ Routing Table: IRQ[3]
  I/O Address: 260
    Register: 0 0 C1 3 3 60 0 4D 
UART[4]: 0x0
  Duplex mode: Full
  Internal UART I/O Address Decode: Disabled
  Clock: 13Mhz
  FIFO: 16 bytes
  High Speed UART Clock Ratio Selection: 1/16
  IRQ Routing Table: Disabled
  I/O Address: 0
UART[5]: 0x8B02E8
  Duplex mode: Full
  Internal UART I/O Address Decode: Enabled
  Clock: 13Mhz
  FIFO: 16 bytes
  High Speed UART Clock Ratio Selection: 1/16
  IRQ Routing Table: IRQ[12]
  I/O Address: 2E8
    Register: 0 0 C1 3 3 60 0 A0 
UART[6]: 0x0
  Duplex mode: Full
  Internal UART I/O Address Decode: Disabled
  Clock: 13Mhz
  FIFO: 16 bytes
  High Speed UART Clock Ratio Selection: 1/16
  IRQ Routing Table: Disabled
  I/O Address: 0
UART[7]: 0x0
  Duplex mode: Full
  Internal UART I/O Address Decode: Disabled
  Clock: 13Mhz
  FIFO: 16 bytes
  High Speed UART Clock Ratio Selection: 1/16
  IRQ Routing Table: Disabled
  I/O Address: 0
UART[8]: 0x8403E0
  Duplex mode: Full
  Internal UART I/O Address Decode: Enabled
  Clock: 13Mhz
  FIFO: 16 bytes
  High Speed UART Clock Ratio Selection: 1/16
  IRQ Routing Table: IRQ[4]
  I/O Address: 3E0
    Register: 0 0 C1 3 3 60 0 0 
UART[9]: 0x0
  Duplex mode: Full
  Internal UART I/O Address Decode: Disabled
  Clock: 13Mhz
  FIFO: 16 bytes
  High Speed UART Clock Ratio Selection: 1/16
  IRQ Routing Table: Disabled
  I/O Address: 0

CrossBar base: 0xA01
  RichIO Port[0]: 3 (MCM P2)
  RichIO Port[1]: 8 (Bit-RichIO Port0)
  RichIO Port[2]: 1 (MCM P0)
  RichIO Port[3]: 2 (MCM P1)
  RichIO Port[4]: 0 (No function)
  RichIO Port[5]: 0 (No function)
  RichIO Port[6]: 6 (SD/MMC)
  RichIO Port[7]: 0 (No function)
  RichIO Port[8]: 9 (Bit-RichIO Port1)
  RichIO Port[9]: A (Bit-RichIO Port2)

  Bit-RichIO Port0 Select[0]: E (I2C-SCL)
  Bit-RichIO Port0 Select[1]: D (I2C-SDA)
  Bit-RichIO Port0 Select[2]: 1 (COM1-TXD1)
  Bit-RichIO Port0 Select[3]: 2 (COM1-RXD1)
  Bit-RichIO Port0 Select[4]: 5 (COM3-TXD3)
  Bit-RichIO Port0 Select[5]: 6 (COM3-RXD3)
  Bit-RichIO Port0 Select[6]: 3 (COM2-TXD2)
  Bit-RichIO Port0 Select[7]: 4 (COM2-RXD2)
  Bit-RichIO Port1 Select[0]: 9 (SPI-CS1)
  Bit-RichIO Port1 Select[1]: A (SPI-CLK)
  Bit-RichIO Port1 Select[2]: C (SPI-DI)
  Bit-RichIO Port1 Select[3]: B (SPI-DO)
  Bit-RichIO Port1 Select[4]: 17 (LAN-LINK/ACK)
  Bit-RichIO Port1 Select[5]: 18 (LAN-DUPLEX)
  Bit-RichIO Port1 Select[6]: 1A (SPEAKER)
  Bit-RichIO Port1 Select[7]: 0 (No function)
  Bit-RichIO Port2 Select[0]: 27 (H_BCLK)
  Bit-RichIO Port2 Select[1]: 28 (H_SYNC)
  Bit-RichIO Port2 Select[2]: 29 (H_SDO)
  Bit-RichIO Port2 Select[3]: 2A (H_SDI)
  Bit-RichIO Port2 Select[4]: 2B (H_RST#)
  Bit-RichIO Port2 Select[5]: 21 (TXDEN6)
  Bit-RichIO Port2 Select[6]: 11 (USB-DEVICE+)
  Bit-RichIO Port2 Select[7]: 12 (USB-DEVICE-)
  On-Chip Device Power-Down Control 0: F8010C00
    COM1: activate
    COM2: activate
    COM3: activate
    COM4: activate
    COM5: activate
    COM6: activate
    COM7: activate
    COM8: activate
    COM9: activate
    COM10: activate
    GPIO INTC0: power-down
    GPIO INTC1: power-down
    SPI0: activate
    I2C0: activate
    MOTOR: activate
    USB Device: activate
    Parallel Port: power-down
    CAN Bus: activate
    8051A: activate
    GPIO Port0: activate
    GPIO Port1: activate
    GPIO Port2: activate
    GPIO Port3: activate
    GPIO Port4: activate
    GPIO Port5: activate
    GPIO Port6: activate
    GPIO Port7: activate
    GPIO Port8: power-down
    GPIO Port9: power-down
    8051A GPIO Port0: power-down
    8051A GPIO Port1: power-down
    8051A GPIO Port2: power-down
  On-Chip Device Power-Down Control 1: 7F
    8051A GPIO Port3: power-down
    8051A GPIO Port4: power-down
    8051A GPIO Port5: power-down
    8051A GPIO Port6: power-down
    8051A GPIO Port7: power-down
    8051A GPIO Port8: power-down
    8051A GPIO Port9: power-down
  PAD Attribute[0]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[1]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[2]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[3]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[4]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[5]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[6]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[7]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[8]: 0x1, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Pull-up
  PAD Attribute[9]: 0x1, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Pull-up
  PAD Attribute[10]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[11]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[12]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[13]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[14]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[15]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[16]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[17]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[18]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[19]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[20]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[21]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[22]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[23]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[24]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[25]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[26]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[27]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[28]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[29]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[30]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[31]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[32]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[33]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[34]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[35]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[36]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[37]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[38]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[39]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[40]: 0x1, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Pull-up
  PAD Attribute[41]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[42]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[43]: 0x1, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Pull-up
  PAD Attribute[44]: 0x1, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Pull-up
  PAD Attribute[45]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[46]: 0x1, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Pull-up
  PAD Attribute[47]: 0x1, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Pull-up
  PAD Attribute[48]: 0x1, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Pull-up
  PAD Attribute[49]: 0x1, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Pull-up
  PAD Attribute[50]: 0x1, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Pull-up
  PAD Attribute[51]: 0x2, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Pull-down
  PAD Attribute[52]: 0x1, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Pull-up
  PAD Attribute[53]: 0x1, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Pull-up
  PAD Attribute[54]: 0x1, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Pull-up
  PAD Attribute[55]: 0x1, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Pull-up
  PAD Attribute[56]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[57]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[58]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[59]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[60]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[61]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[62]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[63]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[64]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[65]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[66]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[67]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[68]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[69]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[70]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[71]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[72]: 0x2, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Pull-down
  PAD Attribute[73]: 0x2, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Pull-down
  PAD Attribute[74]: 0x2, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Pull-down
  PAD Attribute[75]: 0x2, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Pull-down
  PAD Attribute[76]: 0x1, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Pull-up
  PAD Attribute[77]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[78]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  PAD Attribute[79]: 0x0, low slew rate, Smitter Trigger: Disabled, Driving current: 8 mA, Input State: Tri-state
  Port Group Selection[4]: 1 (GPIO Group)
  Port Group Selection[5]: 2 (COM Group)
  Port Group Selection[6]: 8 (RichIO Group)
  Port Group Selection[7]: 1 (GPIO Group)
  Port Group Selection[8]: 8 (RichIO Group)
  Port Group Selection[9]: 8 (RichIO Group)
  Bit Group Selection[0]: 8 (RichIO Group)
  Bit Group Selection[1]: 8 (RichIO Group)
  Bit Group Selection[2]: 8 (RichIO Group)
  Bit Group Selection[3]: 8 (RichIO Group)
  Bit Group Selection[4]: 8 (RichIO Group)
  Bit Group Selection[5]: 8 (RichIO Group)
  Bit Group Selection[6]: 8 (RichIO Group)
  Bit Group Selection[7]: 8 (RichIO Group)
  Bit Group Selection[8]: 8 (RichIO Group)
  Bit Group Selection[9]: 8 (RichIO Group)
  Bit Group Selection[10]: 1 (GPIO Group)
  Bit Group Selection[11]: 1 (GPIO Group)
  Bit Group Selection[12]: 1 (GPIO Group)
  Bit Group Selection[13]: 1 (GPIO Group)
  Bit Group Selection[14]: 1 (GPIO Group)
  Bit Group Selection[15]: 1 (GPIO Group)
  Bit Group Selection[16]: 8 (RichIO Group)
  Bit Group Selection[17]: 8 (RichIO Group)
  Bit Group Selection[18]: 8 (RichIO Group)
  Bit Group Selection[19]: 8 (RichIO Group)
  Bit Group Selection[20]: 8 (RichIO Group)
  Bit Group Selection[21]: 8 (RichIO Group)
  Bit Group Selection[22]: 8 (RichIO Group)
  Bit Group Selection[23]: 8 (RichIO Group)
  Bit Group Selection[24]: 8 (RichIO Group)
  Bit Group Selection[25]: 8 (RichIO Group)
  Bit Group Selection[26]: 8 (RichIO Group)
  Bit Group Selection[27]: 8 (RichIO Group)
  Bit Group Selection[28]: 8 (RichIO Group)
  Bit Group Selection[29]: 8 (RichIO Group)
  Bit Group Selection[30]: 8 (RichIO Group)
  Bit Group Selection[31]: 8 (RichIO Group)
*/