diff --git a/software/common/bootloader/bootloader.c b/software/common/bootloader/bootloader.c
index 1d4f0b15fa08af1d4d7f049918ae22efd922168a..a0d402f34a7a5572b0a831489d28f3dbdd64d1be 100644
--- a/software/common/bootloader/bootloader.c
+++ b/software/common/bootloader/bootloader.c
@@ -52,16 +52,31 @@
 #include "CMSDK_CM4.h"
 #endif
 
+#define UART_CTRL_TXEN         CMSDK_UART_CTRL_TXEN_Msk
+#define UART_CTRL_RXEN         CMSDK_UART_CTRL_RXEN_Msk
+#define UART_CTRL_TXRXEN       (CMSDK_UART_CTRL_TXEN_Msk + CMSDK_UART_CTRL_RXEN_Msk)
+#define UART_CTRL_TXIRQEN      (CMSDK_UART_CTRL_TXIRQEN_Msk + UART_CTRL_TXRXEN)
+#define UART_CTRL_RXIRQEN      (CMSDK_UART_CTRL_RXIRQEN_Msk + UART_CTRL_TXRXEN)
+
+/* Global variables */
+volatile int uart1_char;
+
 void UartStdOutInit(void)
 {
-  CMSDK_UART2->CTRL    = 0x00; // re-init
-  CMSDK_UART2->BAUDDIV = 6250; //(240MHz/384000) in 16.4 format
-  CMSDK_UART2->CTRL    = 0x01; //TX, UART2
-  CMSDK_USRT2->CTRL    = 0x00; //re-init
-  CMSDK_USRT2->CTRL    = 0x03; //RX+TX, FT1248 USRT
-  CMSDK_GPIO1->ALTFUNCSET = (1<<5);
-  if ((CMSDK_USRT2->STATE & 1)==0) CMSDK_USRT2->DATA    = 0x23; // write 8'b01000011 / "#"
-  if ((CMSDK_UART2->STATE & 1)==0) CMSDK_UART2->DATA    = 0x7e; // write 8'b01111110 / "~"
+  if (CMSDK_GPIO1->DATA & 0x80) {// high if FT1248
+    CMSDK_UART2->CTRL    = 0x00; // re-init
+    CMSDK_UART2->BAUDDIV = 6250; //(240MHz/384000) in 16.4 format
+    CMSDK_UART2->CTRL    = UART_CTRL_TXEN; //TX, UART2
+    CMSDK_GPIO1->ALTFUNCSET = (1<<5);
+    if ((CMSDK_UART2->STATE & 1)==0) CMSDK_UART2->DATA = 0x7e; // write 8'b01111110 / "~"
+    } else { // EXTIO mode - Data on UART1
+    CMSDK_UART1->CTRL    = 0x00; //re-init
+    CMSDK_UART1->CTRL    = UART_CTRL_TXRXEN; //RX+TX, EXTIO 
+    if ((CMSDK_UART1->STATE & 1)==0) CMSDK_UART1->DATA = 0x7e; // write 8'b01111110 / "~"
+    }
+    CMSDK_USRT2->CTRL    = 0x00; //re-init
+    CMSDK_USRT2->CTRL    = UART_CTRL_TXRXEN; //RX+TX, FT1248/EXTIO USRT
+    if ((CMSDK_USRT2->STATE & 1)==0) CMSDK_USRT2->DATA    = 0x23; // write 8'b01000011 / "#"
   return;
 }
 
@@ -71,8 +86,8 @@ unsigned char UartPutc(unsigned char my_ch)
 //  while ((CMSDK_UART2->STATE & 1)); // Wait if Transmit Holding register is full
 //  CMSDK_UART2->DATA = my_ch; // write to transmit holding register
 //  return (my_ch);
-  while (((CMSDK_USRT2->STATE & 1)==1) && ((CMSDK_UART2->STATE & 1)==1)); // Wait if both Transmit Holding registers full
-  if ((CMSDK_USRT2->STATE & 1)==0) CMSDK_USRT2->DATA = my_ch; // write to transmit holding register
+  while (((CMSDK_USRT2->STATE & 1)==1) ); // Wait if Transmit Holding register full
+    CMSDK_USRT2->DATA = my_ch; // write to transmit holding register
   return (my_ch);
 }
 // Uart string output
@@ -134,12 +149,34 @@ void FlashLoader(void)
 
 int main (void)
 {
-  // UART init
+  // STDOUT init
   UartStdOutInit();
-
-  UartPuts("\nSoCLabs NanoSoC ARM-CM0+ADP+FT1+U38400 20240110\n");
-//  UartPuts("\nSoCLabs NanoSoC\n");
+  UartPuts("\nSoCLabs NanoSoC'24 ARM-CM0+ADP+");
+  if (CMSDK_GPIO1->DATA & 0x80) // high if FT1248, low if EXTIO
+    UartPuts("FT1+U38400");
+  else
+    UartPuts("EXTIO8x4CD");
+  UartPuts(" 20241212\n");
+  NVIC_EnableIRQ(UARTRX1_IRQn);
+  NVIC_EnableIRQ(UARTTX1_IRQn);
+  CMSDK_UART1->CTRL = UART_CTRL_RXIRQEN; // Enable RX interrupt
+  
   FlashLoader();
   return 0;
 }
 
+void UARTRX1_Handler(void)
+{
+  uart1_char = CMSDK_UART1->DATA; // read and store the byte received
+  CMSDK_UART1->INTCLEAR = CMSDK_UART_CTRL_RXIRQ_Msk; // Clear RX interrupt req
+  CMSDK_UART1->CTRL = UART_CTRL_TXIRQEN; // Enable TX interrupt
+  return;
+}
+
+void UARTTX1_Handler(void)
+{
+  CMSDK_UART1->DATA = uart1_char;  // write the byte to transmit
+  CMSDK_UART1->INTCLEAR = CMSDK_UART_CTRL_TXIRQ_Msk; // Clear TX interrupt req
+  CMSDK_UART1->CTRL = UART_CTRL_RXIRQEN; // Re-Enable RX interrupt
+  return;
+}
diff --git a/testcodes/bootloader/bootloader.hex b/testcodes/bootloader/bootloader.hex
index c8c4811ea1193b2ba1aa2794cdf6f68bea773754..68133be5984446712a3f0283c8244129b70cc9ca 100644
--- a/testcodes/bootloader/bootloader.hex
+++ b/testcodes/bootloader/bootloader.hex
@@ -2,16 +2,16 @@
 04
 00
 30
-95
-02
+15
+03
 00
 10
-9D
-02
+1D
+03
 00
 10
-9F
-02
+1F
+03
 00
 10
 00
@@ -42,8 +42,8 @@
 00
 00
 00
-A1
-02
+21
+03
 00
 10
 00
@@ -54,140 +54,140 @@ A1
 00
 00
 00
-A3
-02
+23
+03
 00
 10
-A5
-02
+25
+03
 00
 10
-A7
-02
+27
+03
 00
 10
-A7
-02
+27
+03
 00
 10
-A7
+53
 02
 00
 10
-A7
+65
 02
 00
 10
-A7
-02
+27
+03
 00
 10
-A7
-02
+27
+03
 00
 10
-A7
-02
+27
+03
 00
 10
-A7
-02
+27
+03
 00
 10
-A7
-02
+27
+03
 00
 10
-A7
-02
+27
+03
 00
 10
-A7
-02
+27
+03
 00
 10
-A7
-02
+27
+03
 00
 10
-A7
-02
+27
+03
 00
 10
-A7
-02
+27
+03
 00
 10
-A7
-02
+27
+03
 00
 10
-A7
-02
+27
+03
 00
 10
-A7
-02
+27
+03
 00
 10
-A7
-02
+27
+03
 00
 10
-A7
-02
+27
+03
 00
 10
-A7
-02
+27
+03
 00
 10
-A7
-02
+27
+03
 00
 10
-A7
-02
+27
+03
 00
 10
-A7
-02
+27
+03
 00
 10
-A7
-02
+27
+03
 00
 10
-A7
-02
+27
+03
 00
 10
-A7
-02
+27
+03
 00
 10
-A7
-02
+27
+03
 00
 10
-A7
-02
+27
+03
 00
 10
-A7
-02
+27
+03
 00
 10
-A7
-02
+27
+03
 00
 10
-A7
-02
+27
+03
 00
 10
-A7
-02
+27
+03
 00
 10
 00
@@ -250,11 +250,11 @@ AB
 43
 18
 47
-3C
+BC
 02
 00
 00
-5C
+DC
 02
 00
 00
@@ -324,8 +324,8 @@ B5
 BD
 00
 F0
-C5
-F8
+05
+F9
 11
 46
 FF
@@ -334,12 +334,12 @@ F7
 FF
 00
 F0
-59
+60
 F8
 00
 F0
-DD
-F8
+1D
+F9
 03
 B4
 FF
@@ -350,8 +350,8 @@ FF
 BC
 00
 F0
-E3
-F8
+23
+F9
 00
 00
 00
@@ -366,43 +366,69 @@ F8
 47
 00
 00
-29
-48
+30
+B4
+41
+4C
+20
+68
+7E
+23
+00
+06
 00
+21
+03
 22
-82
+00
+28
+0C
+DA
+3E
+48
+81
 60
-29
-49
-01
+3E
+4D
+05
 61
 01
-21
-81
-60
-28
-49
-8A
-60
-03
-22
-8A
+25
+85
 60
-27
-4B
 20
-22
-9A
+25
+A5
 61
-4A
+44
 68
-D2
+E4
 07
-01
+08
 D1
-23
-22
-0A
+03
+60
+06
+E0
+39
+48
+81
+60
+82
+60
+44
+68
+E4
+07
+00
+D1
+03
+60
+37
+48
+81
+60
+82
 60
 41
 68
@@ -410,65 +436,53 @@ C9
 07
 01
 D1
-7E
+23
 21
 01
 60
+30
+BC
 70
 47
-1D
-4A
-1E
+32
 49
-4B
-68
-DB
-07
-02
-D0
-53
-68
-DB
-07
-F9
-D1
 4A
 68
 D2
 07
-00
+FC
 D1
 08
 60
 70
 47
-30
+10
 B5
-04
+03
 46
-25
+1C
 78
 00
-2D
+2C
 02
 D0
-28
+20
 46
 FF
 F7
-EB
+F2
 FF
-64
+5B
 1C
 00
-2D
+2C
 F6
 D1
-30
+10
 BD
 10
 B5
-14
+29
 4C
 20
 68
@@ -476,7 +490,7 @@ B5
 28
 0B
 D0
-13
+28
 A0
 FF
 F7
@@ -496,11 +510,11 @@ F3
 8F
 FF
 F7
-B8
+B1
 FF
 10
 BD
-11
+26
 A0
 FF
 F7
@@ -510,7 +524,7 @@ FF
 20
 FF
 F7
-D0
+D7
 FF
 FE
 E7
@@ -518,22 +532,108 @@ E7
 B5
 FF
 F7
-B3
+AC
 FF
-0F
+24
 A0
 FF
 F7
 D6
 FF
+16
+48
+00
+68
+00
+06
+03
+D5
+2A
+A0
 FF
 F7
+CF
+FF
+02
 E0
+2B
+A0
+FF
+F7
+CB
+FF
+2C
+A0
+FF
+F7
+C8
+FF
+2E
+48
+04
+21
+01
+60
+08
+21
+01
+60
+0F
+49
+0B
+20
+88
+60
+FF
+F7
+CA
 FF
 00
 20
 10
 BD
+0C
+48
+01
+68
+28
+4A
+11
+60
+02
+21
+C1
+60
+07
+21
+81
+60
+70
+47
+24
+48
+01
+68
+06
+48
+01
+60
+01
+21
+C1
+60
+0B
+21
+81
+60
+70
+47
+00
+00
+00
+10
+01
+40
 00
 60
 00
@@ -543,12 +643,12 @@ BD
 00
 00
 00
-E0
+50
 00
 40
 00
-10
-01
+E0
+00
 40
 00
 F0
@@ -598,6 +698,9 @@ F0
 53
 6F
 43
+27
+32
+34
 20
 41
 52
@@ -611,6 +714,10 @@ F0
 44
 50
 2B
+00
+00
+00
+00
 46
 54
 31
@@ -621,19 +728,40 @@ F0
 34
 30
 30
+00
+00
+45
+58
+54
+49
+4F
+38
+78
+34
+43
+44
+00
+00
 20
 32
 30
 32
 34
-30
 31
+32
 31
-30
+32
 0A
 00
 00
 00
+E1
+00
+E0
+00
+00
+00
+30
 04
 49
 03
@@ -654,7 +782,7 @@ F0
 1C
 4E
 0E
-00
+04
 00
 00
 30
@@ -690,8 +818,8 @@ E7
 47
 00
 00
-85
-02
+05
+03
 00
 10
 C1
@@ -794,15 +922,15 @@ C0
 46
 FF
 F7
-1C
-FF
+DC
+FE
 10
 BD
 00
 48
 70
 47
-04
+08
 00
 00
 30
@@ -822,7 +950,7 @@ E7
 47
 00
 00
-58
+D8
 03
 00
 10
@@ -830,7 +958,7 @@ E7
 00
 00
 30
-04
+08
 00
 00
 00
@@ -838,15 +966,15 @@ E7
 01
 00
 10
-5C
+E0
 03
 00
 10
-04
+08
 00
 00
 30
-64
+60
 04
 00
 00
@@ -855,6 +983,10 @@ E7
 00
 10
 00
+00
+00
+00
+00
 1C
 4E
 0E