Add script/print-bits.go.
diff --git a/script/print-bits.go b/script/print-bits.go
new file mode 100644
index 0000000..82b6be4
--- /dev/null
+++ b/script/print-bits.go
@@ -0,0 +1,61 @@
+// Use of this source code is governed by a BSD-style license that can be found
+// in the LICENSE file.
+
+// +build ignore
+
+package main
+
+// print-bits.go prints stdin's bytes in hexadecimal and binary.
+//
+// Usage: go run print-bits.go < foo.bin
+
+import (
+	"fmt"
+	"io"
+	"os"
+)
+
+func main() {
+	if err := main1(); err != nil {
+		os.Stderr.WriteString(err.Error() + "\n")
+		os.Exit(1)
+	}
+}
+
+func main1() error {
+	in := make([]byte, 4096)
+	bits := []byte("...._....\n")
+	os.Stdout.WriteString("offset  ASCII   hex     binary\n")
+	for iBase := 0; ; {
+		n, err := os.Stdin.Read(in)
+		for i, x := range in[:n] {
+			bits[0] = bit(x >> 7)
+			bits[1] = bit(x >> 6)
+			bits[2] = bit(x >> 5)
+			bits[3] = bit(x >> 4)
+			bits[5] = bit(x >> 3)
+			bits[6] = bit(x >> 2)
+			bits[7] = bit(x >> 1)
+			bits[8] = bit(x >> 0)
+			ascii := rune(x)
+			if (x < 0x20) || (0x7F <= x) {
+				ascii = '.'
+			}
+			fmt.Printf("%06d  %c       0x%02X    0b_%s", iBase+i, ascii, x, bits)
+		}
+		if err == io.EOF {
+			return nil
+		}
+		if err != nil {
+			return err
+		}
+		iBase += n
+	}
+}
+
+func bit(x byte) byte {
+	if x&1 != 0 {
+		return '1'
+	}
+	return '0'
+}