diff --git a/example.cpp b/example.cpp
index 2fb1e83..55bd4ed 100644
--- a/example.cpp
+++ b/example.cpp
@@ -14,6 +14,7 @@
  * limitations under the License.
  */
 
+#include <cinttypes>
 #include <cstdio>
 #include <iostream>
 #include <memory>
@@ -86,7 +87,7 @@
 
             /* Print output to verify the example program is receiving values.
              */
-            std::printf("recv: 0x%x\n", static_cast<uint8_t>(rawValue));
+            std::printf("recv: 0x%" PRIx64 "\n", rawValue);
         }
     }
 
diff --git a/main.cpp b/main.cpp
index 8037564..a780335 100644
--- a/main.cpp
+++ b/main.cpp
@@ -28,6 +28,7 @@
 #include "lpcsnoop/snoop.hpp"
 
 static const char* snoopFilename = "/dev/aspeed-lpc-snoop0";
+static size_t codeSize = 1; /* Size of each POST code in bytes */
 
 /*
  * 256 bytes is a nice amount.  It's improbable we'd need this many, but its
@@ -54,8 +55,24 @@
 {
     fprintf(stderr,
             "Usage: %s [-d <DEVICE>]\n"
+            "  -b, --bytes <SIZE>     set POST code length to <SIZE> bytes. "
+            "Default is %zu\n"
             "  -d, --device <DEVICE>  use <DEVICE> file. Default is '%s'\n\n",
-            name, snoopFilename);
+            name, codeSize, snoopFilename);
+}
+
+static uint64_t assembleBytes(std::array<uint8_t, BUFFER_SIZE> buf, int start,
+                              int size)
+{
+    uint64_t result = 0;
+
+    for (int i = start + size - 1; i >= start; i--)
+    {
+        result <<= 8;
+        result |= buf[i];
+    }
+
+    return result;
 }
 
 /*
@@ -88,14 +105,28 @@
     bool deferSignals = true;
 
     static const struct option long_options[] = {
-        {"device", required_argument, NULL, 'd'}, {0, 0, 0, 0}};
+        {"bytes", required_argument, NULL, 'b'},
+        {"device", required_argument, NULL, 'd'},
+        {0, 0, 0, 0}};
 
-    while ((opt = getopt_long(argc, argv, "d:", long_options, NULL)) != -1)
+    while ((opt = getopt_long(argc, argv, "b:d:", long_options, NULL)) != -1)
     {
         switch (opt)
         {
             case 0:
                 break;
+            case 'b':
+                codeSize = atoi(optarg);
+
+                if (codeSize < 1 || codeSize > 8)
+                {
+                    fprintf(stderr,
+                            "Invalid POST code size '%s'. Must be "
+                            "an integer from 1 to 8.\n",
+                            optarg);
+                    exit(EXIT_FAILURE);
+                }
+                break;
             case 'd':
                 snoopFilename = optarg;
                 break;
@@ -161,10 +192,20 @@
                 }
                 else
                 {
-                    /* Broadcast the bytes read. */
-                    for (int i = 0; i < readb; i++)
+                    if (readb % codeSize != 0)
                     {
-                        reporter.value(buffer[i]);
+                        fprintf(stderr,
+                                "Warning: read size %d not a multiple of "
+                                "POST code length %zu. Some codes may be "
+                                "corrupt or missing\n",
+                                readb, codeSize);
+                        readb -= (readb % codeSize);
+                    }
+
+                    /* Broadcast the values read. */
+                    for (int i = 0; i < readb; i += codeSize)
+                    {
+                        reporter.value(assembleBytes(buffer, i, codeSize));
                     }
                 }
             }
