diff --git a/examples/sandbox/sandbox.c b/examples/sandbox/sandbox.c
index 9a50ccce1593883c43885eee6339491ce01d0373..05365be064812c3b7366d21e686c4742e3f78b5d 100644
--- a/examples/sandbox/sandbox.c
+++ b/examples/sandbox/sandbox.c
@@ -8,15 +8,6 @@
 
 // Working on WS2812 driving.
 
-
-static inline uint32_t __get_dscratch0(void)
-{
-    uint32_t result;
-
-    __ASM volatile("csrr %0," "0x7b2": "=r"(result));
-    return (result);
-}
-
 int main()
 {
 	SystemInit48HSI();
diff --git a/minichlink/Makefile b/minichlink/Makefile
index 777467a49e72f978c0871a1e1c5e54e23d10c1fb..5706a90ef536e4f396db4b089916757a2145103f 100644
--- a/minichlink/Makefile
+++ b/minichlink/Makefile
@@ -1,4 +1,4 @@
-TOOLS:=wch_erase wch_reset wch_write_simple minichlink
+TOOLS:=wch_erase wch_reset wch_write_simple wch_printf minichlink
 
 all : $(TOOLS)
 
@@ -9,6 +9,8 @@ wch_erase : wch_erase.c
 	gcc -o $@ $^ $(LDFLAGS) $(CFLAGS)
 wch_reset : wch_reset.c
 	gcc -o $@ $^ $(LDFLAGS) $(CFLAGS)
+wch_printf : wch_printf.c
+	gcc -o $@ $^ $(LDFLAGS) $(CFLAGS)
 wch_write_simple : wch_write_simple.c
 	gcc -o $@ $^ $(LDFLAGS) $(CFLAGS)
 minichlink : minichlink.c
diff --git a/minichlink/wch_printf.c b/minichlink/wch_printf.c
new file mode 100644
index 0000000000000000000000000000000000000000..1d78ee8befd5eb0d9ea5deb226dabfee5615beec
--- /dev/null
+++ b/minichlink/wch_printf.c
@@ -0,0 +1,35 @@
+#include <stdio.h>
+#include "wch_link_base.h"
+
+// TESTED
+
+int main()
+{
+	libusb_device_handle * devh = wch_link_base_setup();
+
+	// Issue reset
+//	wch_link_command( devh, "\x81\x0b\x01\x01", 4, 0, 0, 0 );
+	// Why does db[1] = 6 appear to be some sort of query?
+	// Also 0x0b appears to be a query.  But it wrecks up the chip.
+	// db[1] = 0xd DOES WRITE TO 0xe0000000.  But is it predictable?
+	// DO NOT 0x0f!
+	unsigned char databuff[11] = { 0x81, 0x0d, 0x08, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
+	unsigned char rbuff[1024];
+	int i, j;
+	for( i = 1; i < 20; i++ )
+	for( j = 1; j < 20; j++ )
+	{
+		databuff[2] = i;
+		databuff[3] = j;
+		int transferred;
+		wch_link_command( devh, databuff, 11, &transferred, rbuff, 1024 );
+		int k;
+		printf( "%d, %d: %d: ", i, j, transferred );
+		for( k = 0; k < transferred; k++ ) printf( "%02x ", rbuff[k] );
+		printf( "\n" );
+		usleep(10000);
+	}
+
+	// Close out.
+	wch_link_command( devh, "\x81\x0d\x01\xff", 4, 0, 0, 0 );
+}