diff --git a/minichlink/minichlink.c b/minichlink/minichlink.c
index 018b49ee9af0219855e5acfa1df163774b7bc65b..b1d1f4b96f2b1f7c2e7cdcbbd9b837fbe375d8d4 100644
--- a/minichlink/minichlink.c
+++ b/minichlink/minichlink.c
@@ -684,14 +684,21 @@ int DefaultSetupInterface( void * dev )
 
 static void StaticUpdatePROGBUFRegs( void * dev )
 {
-	MCF.WriteReg32( dev, DMDATA0, 0xe00000f4 );   // DATA0's location in memory.
-	MCF.WriteReg32( dev, DMCOMMAND, 0x0023100a ); // Copy data to x10
-	MCF.WriteReg32( dev, DMDATA0, 0xe00000f8 );   // DATA1's location in memory.
-	MCF.WriteReg32( dev, DMCOMMAND, 0x0023100b ); // Copy data to x11
-	MCF.WriteReg32( dev, DMDATA0, 0x40022010 ); //FLASH->CTLR
-	MCF.WriteReg32( dev, DMCOMMAND, 0x0023100c ); // Copy data to x12
+	uint32_t rr;
+	if( MCF.ReadReg32( dev, DMHARTINFO, &rr ) )
+	{
+		fprintf( stderr, "Error: Could not get hart info.\n" );
+		return;
+	}
+	uint32_t data0offset = 0xe0000000 | ( rr & 0x7ff );
+	MCF.WriteReg32( dev, DMDATA0, data0offset );       // DATA0's location in memory.
+	MCF.WriteReg32( dev, DMCOMMAND, 0x0023100a );      // Copy data to x10
+	MCF.WriteReg32( dev, DMDATA0, data0offset + 4 );   // DATA1's location in memory.
+	MCF.WriteReg32( dev, DMCOMMAND, 0x0023100b );      // Copy data to x11
+	MCF.WriteReg32( dev, DMDATA0, 0x40022010 );        // FLASH->CTLR
+	MCF.WriteReg32( dev, DMCOMMAND, 0x0023100c );      // Copy data to x12
 	MCF.WriteReg32( dev, DMDATA0, CR_PAGE_PG|CR_BUF_LOAD);
-	MCF.WriteReg32( dev, DMCOMMAND, 0x0023100d ); // Copy data to x13
+	MCF.WriteReg32( dev, DMCOMMAND, 0x0023100d );      // Copy data to x13
 }
 
 static int InternalUnlockBootloader( void * dev )
@@ -742,7 +749,7 @@ static int DefaultWriteHalfWord( void * dev, uint32_t address_to_write, uint16_t
 	ret |= MCF.WaitForDoneOp( dev, 0 );
 	iss->currentstateval = -1;
 
-
+	if( ret ) fprintf( stderr, "Fault on DefaultWriteHalfWord\n" );
 	return ret;
 }
 
@@ -768,6 +775,8 @@ static int DefaultReadHalfWord( void * dev, uint32_t address_to_write, uint16_t
 	ret |= MCF.WaitForDoneOp( dev, 0 );
 	iss->currentstateval = -1;
 
+	if( ret ) fprintf( stderr, "Fault on DefaultReadHalfWord\n" );
+
 	uint32_t rr;
 	ret |= MCF.ReadReg32( dev, DMDATA0, &rr );
 	*data = rr;
@@ -796,6 +805,7 @@ static int DefaultWriteByte( void * dev, uint32_t address_to_write, uint8_t data
 	MCF.WriteReg32( dev, DMCOMMAND, 0x00271008 ); // Copy data to x8, and execute program.
 
 	ret |= MCF.WaitForDoneOp( dev, 0 );
+	if( ret ) fprintf( stderr, "Fault on DefaultWriteByte\n" );
 	iss->currentstateval = -1;
 	return ret;
 }
@@ -820,6 +830,7 @@ static int DefaultReadByte( void * dev, uint32_t address_to_write, uint8_t * dat
 	MCF.WriteReg32( dev, DMCOMMAND, 0x00221008 ); // Read x8 into DATA0.
 
 	ret |= MCF.WaitForDoneOp( dev, 0 );
+	if( ret ) fprintf( stderr, "Fault on DefaultReadByte\n" );
 	iss->currentstateval = -1;
 
 	uint32_t rr;
@@ -892,7 +903,10 @@ static int DefaultWriteWord( void * dev, uint32_t address_to_write, uint32_t dat
 		iss->currentstateval = address_to_write;
 
 		if( is_flash )
+		{
 			ret |= MCF.WaitForDoneOp( dev, 0 );
+			if( ret ) fprintf( stderr, "Fault on DefaultWriteWord Part 1\n" );
+		}
 	}
 	else
 	{
@@ -908,10 +922,12 @@ static int DefaultWriteWord( void * dev, uint32_t address_to_write, uint32_t dat
 			// XXX TODO: This likely can be a very short delay.
 			// XXX POSSIBLE OPTIMIZATION REINVESTIGATE.
 			ret |= MCF.WaitForDoneOp( dev, 0 );
+			if( ret ) fprintf( stderr, "Fault on DefaultWriteWord Part 2\n" );
 		}
 		else
 		{
 			ret |= MCF.WaitForDoneOp( dev, 0 );
+			if( ret ) fprintf( stderr, "Fault on DefaultWriteWord Part 3\n" );
 		}
 	}
 
@@ -1144,6 +1160,7 @@ static int DefaultReadWord( void * dev, uint32_t address_to_read, uint32_t * dat
 		iss->currentstateval = address_to_read;
 
 		r |= MCF.WaitForDoneOp( dev, 0 );
+		if( r ) fprintf( stderr, "Fault on DefaultReadWord Part 1\n" );
 	}
 
 	if( iss->autoincrement )
@@ -1282,8 +1299,9 @@ int DefaultReadBinaryBlob( void * dev, uint32_t address_to_read_from, uint32_t r
 			}
 		}
 	}
-	MCF.WaitForDoneOp( dev, 0 );
-	return 0;
+	int r = MCF.WaitForDoneOp( dev, 0 );
+	if( r ) fprintf( stderr, "Fault on DefaultReadBinaryBlob\n" );
+	return r;
 }
 
 int DefaultReadCPURegister( void * dev, uint32_t regno, uint32_t * regret )
diff --git a/minichlink/pgm-wch-linke.c b/minichlink/pgm-wch-linke.c
index 530f366fc1dadcb8ac030d72d170c74beb412243..6189f1e9164c8504c43a9331a03e649eb90920b5 100644
--- a/minichlink/pgm-wch-linke.c
+++ b/minichlink/pgm-wch-linke.c
@@ -17,9 +17,11 @@ struct LinkEProgrammerStruct
 };
 
 // For non-ch32v003 chips.
+#if 0
 static int LEReadBinaryBlob( void * d, uint32_t offset, uint32_t amount, uint8_t * readbuff );
 static int InternalLinkEHaltMode( void * d, int mode );
 static int LEWriteBinaryBlob( void * d, uint32_t address_to_write, uint32_t len, uint8_t * blob );
+#endif
 
 #define WCHTIMEOUT 5000
 #define WCHCHECK(x) if( (status = x) ) { fprintf( stderr, "Bad USB Operation on " __FILE__ ":%d (%d)\n", __LINE__, status ); exit( status ); }
@@ -39,8 +41,13 @@ void wch_link_command( libusb_device_handle * devh, const void * command_v, int
 	{
 		reply = buffer; replymax = sizeof( buffer );
 	}
-	
+
+//	printf("wch_link_command send (%d)", commandlen); for(int i = 0; i< commandlen; printf(" %02x",command[i++])); printf("\n");
+
 	status = libusb_bulk_transfer( devh, 0x81, reply, replymax, transferred, WCHTIMEOUT );
+
+//	printf("wch_link_command reply (%d)", *transferred); for(int i = 0; i< *transferred; printf(" %02x",reply[i++])); printf("\n"); 
+
 	if( status ) goto sendfail;
 	return;
 sendfail:
@@ -223,9 +230,9 @@ static int LESetupInterface( void * d )
 	
 	if( rbuff[2] == 0x05 && rbuff[3] == 0x06 )
 	{
-		fprintf( stderr, "CH32V307 Detected.  Allowing old-flash-mode for operation.\n" );
-		MCF.WriteBinaryBlob = LEWriteBinaryBlob;
-		MCF.ReadBinaryBlob = LEReadBinaryBlob;
+//		fprintf( stderr, "CH32V307 Detected.  Allowing old-flash-mode for operation.\n" );
+//		MCF.WriteBinaryBlob = LEWriteBinaryBlob;
+//		MCF.ReadBinaryBlob = LEReadBinaryBlob;
 	}
 	else
 	{
@@ -316,7 +323,7 @@ void * TryInit_WCHLinkE()
 };
 
 
-
+#if 0
 
 // In case you are using a non-CH32V003 board.
 
@@ -506,3 +513,5 @@ static int LEWriteBinaryBlob( void * d, uint32_t address_to_write, uint32_t len,
 	return 0;
 }
 
+
+#endif
\ No newline at end of file