diff --git a/examples/debugprintfdemo/.vscode/settings.json b/examples/debugprintfdemo/.vscode/settings.json
index 5f7790e17f25ffb056231c9e95e5ecb65837a14c..e81e011860891e8f3d4696c8aaa7a31f4fd8171f 100644
--- a/examples/debugprintfdemo/.vscode/settings.json
+++ b/examples/debugprintfdemo/.vscode/settings.json
@@ -3,7 +3,7 @@
     "makefile.launchConfigurations": [
         {
             "cwd": "",
-            "sbinaryPath": "blink.elf",
+            "sbinaryPath": "debugprintfdemo.elf",
             "binaryArgs": []
         }
     ],
diff --git a/examples/template/template.c b/examples/template/template.c
index 25d236be8c10ac4457f9cd9aa39e6a7054955944..d81e4eb93d7f614b29f42e96753ef74f604a2c13 100644
--- a/examples/template/template.c
+++ b/examples/template/template.c
@@ -1,4 +1,5 @@
 /* Template app on which you can build your own. */
+#define SYSTEM_CORE_CLOCK 48000000
 
 #include "ch32v003fun.h"
 #include <stdio.h>
@@ -30,9 +31,11 @@ int main()
 		GPIOD->BSHR = 1 | (1<<4);	 // Turn on GPIOs
 		GPIOC->BSHR = 1;
 		printf( "+%lu\n", count++ );
+		Delay_Ms(250);
 		GPIOD->BSHR = (1<<16) | (1<<(16+4)); // Turn off GPIODs
 		GPIOC->BSHR = (1<<16);
 		printf( "-%lu\n", count++ );
+		Delay_Ms(250);
 	}
 }
 
diff --git a/minichlink/ardulink.c b/minichlink/ardulink.c
index 962061945387bb6537d10be21d99274a5f2fe14f..24819c138af68a21495730fe5d7b61675114e9b7 100644
--- a/minichlink/ardulink.c
+++ b/minichlink/ardulink.c
@@ -112,6 +112,8 @@ int ArdulinkSetupInterface( void * dev )
 		fprintf(stderr, "Ardulink: not the sync character.\n");
 		return -1;
 	}
+
+	return 0;
 }
 
 void * TryInit_Ardulink(const init_hints_t* hints)
diff --git a/minichlink/microgdbstub.h b/minichlink/microgdbstub.h
index da9246f835ff697825a706f14ffb6111982df523..50421314901e7a9c03032673ecdfa398376cfd61 100644
--- a/minichlink/microgdbstub.h
+++ b/minichlink/microgdbstub.h
@@ -181,9 +181,18 @@ void HandleGDBPacket( void * dev, char * data, int len )
 		else if( StringMatch( data, "sThreadInfo" ) )  // Query all active thread IDs, continued
 		    SendReplyFull( "l" );
 		else if( StringMatch( data, "Xfer:memory-map" ) )
-		    SendReplyFull( MICROGDBSTUB_MEMORY_MAP );
+		{
+			int mslen = strlen( MICROGDBSTUB_MEMORY_MAP ) + 32;
+			char map[mslen];
+			struct InternalState * iss = (struct InternalState*)(((struct ProgrammerStructBase*)dev)->internal);
+			snprintf( map, mslen, MICROGDBSTUB_MEMORY_MAP, iss->flash_size, iss->sector_size, iss->ram_size );
+		    SendReplyFull( map );
+		}
 		else
+		{
+			printf( "Unknown command: %s\n", data );
 			SendReplyFull( "" );
+		}
 		break;
 	case 'c':
 	case 'C':
@@ -487,6 +496,7 @@ static int GDBListen( void * dev )
 		serverSocket = 0;
 		return -1;
 	}
+	
 	return 0;
 }
 
@@ -494,14 +504,16 @@ int MicroGDBPollServer( void * dev )
 {
 	if( !serverSocket ) return -4;
 
-	struct pollfd allpolls[2];
-
 	int pollct = 1;
+	struct pollfd allpolls[1] = { 0 };
 	allpolls[0].fd = serverSocket;
-	allpolls[0].events = POLLIN;
-
-	//Do something to watch all currently-waiting sockets.
-	poll( allpolls, pollct, 0 );
+	allpolls[0].events = 0x00000100; //POLLRDNORM;
+	int r = poll( allpolls, pollct, 0 );
+	
+	if( r < 0 )
+	{
+		printf( "R: %d\n", r );
+	}
 
 	//If there's faults, bail.
 	if( allpolls[0].revents & (POLLERR|POLLHUP) )
@@ -615,8 +627,6 @@ int MicroGDBStubStartup( void * dev )
 
     err = WSAStartup(wVersionRequested, &wsaData);
     if (err != 0) {
-        /* Tell the user that we could not find a usable */
-        /* Winsock DLL.                                  */
         fprintf( stderr, "WSAStartup failed with error: %d\n", err);
         return 1;
     }
diff --git a/minichlink/minichgdb.c b/minichlink/minichgdb.c
index 0596f4fdaed6bde45741cad77193ee18d70ece0e..60fc13ca812c7e442691c7efe21bcd7eef21a919 100644
--- a/minichlink/minichgdb.c
+++ b/minichlink/minichgdb.c
@@ -9,16 +9,18 @@
 #define MICROGDBSTUB_SOCKETS
 #define MICROGDBSTUB_PORT 2000
 
-
 const char* MICROGDBSTUB_MEMORY_MAP = "l<?xml version=\"1.0\"?>"
 "<!DOCTYPE memory-map PUBLIC \"+//IDN gnu.org//DTD GDB Memory Map V1.0//EN\" \"http://sourceware.org/gdb/gdb-memory-map.dtd\">"
 "<memory-map>"
-"  <memory type=\"flash\" start=\"0x00000000\" length=\"0x4000\">"
-"    <property name=\"blocksize\">64</property>"
+"  <memory type=\"flash\" start=\"0x00000000\" length=\"0x%x\">"
+"    <property name=\"blocksize\">%d</property>"
 "  </memory>"
-"  <memory type=\"ram\" start=\"0x20000000\" length=\"0x800\">"
+"  <memory type=\"ram\" start=\"0x20000000\" length=\"0x%x\">"
 "    <property name=\"blocksize\">1</property>"
 "  </memory>"
+"  <memory type=\"ram\" start=\"0x40000000\" length=\"0x10000000\">"
+"    <property name=\"blocksize\">4</property>"
+"  </memory>"
 "</memory-map>";
 
 #include "microgdbstub.h"
@@ -72,7 +74,7 @@ void RVCommandEpilogue( void * dev )
 void RVNetConnect( void * dev )
 {
 	// ??? Should we actually halt?
-	MCF.HaltMode( dev, 0 );
+	MCF.HaltMode( dev, 5 );
 	MCF.SetEnableBreakpoints( dev, 1, 0 );
 	RVCommandPrologue( dev );
 	shadow_running_state = 0;
@@ -125,7 +127,7 @@ int RVReadCPURegister( void * dev, int regno, uint32_t * regret )
 {
 	if( shadow_running_state )
 	{
-		MCF.HaltMode( dev, 0 );
+		MCF.HaltMode( dev, 5 );
 		RVCommandPrologue( dev );
 		shadow_running_state = 0;
 	}
@@ -349,7 +351,7 @@ int RVWriteRAM(void * dev, uint32_t memaddy, uint32_t length, uint8_t * payload
 
 void RVHandleDisconnect( void * dev )
 {
-	MCF.HaltMode( dev, 0 );
+	MCF.HaltMode( dev, 5 );
 	MCF.SetEnableBreakpoints( dev, 0, 0 );
 
 	int i;
@@ -373,7 +375,7 @@ void RVHandleGDBBreakRequest( void * dev )
 {
 	if( shadow_running_state )
 	{
-		MCF.HaltMode( dev, 0 );
+		MCF.HaltMode( dev, 5 );
 	}
 }
 
diff --git a/minichlink/minichlink.c b/minichlink/minichlink.c
index fbfe5bff2915eeb069b0e04f38e50b6ac95967d4..d3f1a0192e60eaaf832af3bbd1aa283d849b6685 100644
--- a/minichlink/minichlink.c
+++ b/minichlink/minichlink.c
@@ -35,13 +35,13 @@ void * MiniCHLinkInitAsDLL( struct MiniChlinkFunctions ** MCFO, const init_hints
 		if( strcmp( specpgm, "linke" ) == 0 )
 			dev = TryInit_WCHLinkE();
 		else if( strcmp( specpgm, "esp32s2chfun" ) == 0 )
-			dev = dev = TryInit_ESP32S2CHFUN();
+			dev = TryInit_ESP32S2CHFUN();
 		else if( strcmp( specpgm, "nchlink" ) == 0 )
-			dev = dev = TryInit_NHCLink042();
+			dev = TryInit_NHCLink042();
 		else if( strcmp( specpgm, "b003boot" ) == 0 )
-			dev = dev = TryInit_B003Fun();
+			dev = TryInit_B003Fun();
 		else if( strcmp( specpgm, "ardulink" ) == 0 )
-			dev = dev = TryInit_B003Fun();
+			dev = TryInit_B003Fun();
 	}
 	else
 	{
diff --git a/minichlink/minichlink.exe b/minichlink/minichlink.exe
index 5bbad93764ed20f109bc7e89424a6ef4b3b783da..13cd21c366c018e72ce7e745f3f92e9b0f8eb547 100644
Binary files a/minichlink/minichlink.exe and b/minichlink/minichlink.exe differ