BP BitPads Protocol

Enhancement Sub-Protocol · Category 1110

Binary
Pictography
& Codebooks

The Sumerian scribes of 3000 BCE used minimal clay tokens whose meaning expanded through shared context. BitPads Binary Pictography applies this principle to binary data.

Four bits per symbol. Sixteen semantic concepts per codebook. Richness held in shared context rather than transmitted with every message.

The Sumerian scribes of 3000 BCE used compact clay tokens whose meaning expanded through shared context between sender and receiver. The mark was minimal. The codebook was in the reader's knowledge. BitPads Binary Pictography is this same principle implemented in nibble streams: four bits per symbol, sixteen semantic concepts per codebook, semantic compression that is 14× more compact than the most compact text alternative for the same payload.

4
bits per symbol

One nibble. Selects one of 16 entries in the active codebook.

16
codebook entries

Per codebook. 65,536 codebooks referenceable in extended form.

14×
compression ratio

4 bits vs 56 bits minimum (7 ASCII chars) for the same semantic concept.

25.5:1
example ratio

4 status reports in 2 bytes vs 51 bytes of text. Spacecraft telemetry example.

Binary Pictography is available in three contexts:

  • Note blocks — Note encoding type = 10 (Stream category reference)
  • Telegraph Emulation streams — Category 1110 with active codebook
  • Any stream — with an active codebook and the binary pictography channel declared in the Stream-Open Control byte

Core Mechanism

Nibble Streams — Four Bits Per Symbol

A nibble is 4 bits. A nibble stream is a sequence of 4-bit symbols. Two nibbles per byte. Each nibble selects one of 16 entries in the active codebook. The codebook maps the 4-bit index to a full semantic concept.

One Byte — Two Nibble Symbols
1–4 NNNN Nibble 1
Symbol 1
5–8 NNNN Nibble 2
Symbol 2
Nibble 1 — First Symbol (Codebook Index) Nibble 2 — Second Symbol (Codebook Index)
Throughput:
2 symbols per byte
10-byte Note block → 20 semantic events
50-byte session over constrained link → 100 status reports
Each report is a complete semantic concept from the shared codebook. Zero overhead per report beyond the nibble itself.

At 2 symbols per byte, a constrained 50-byte session carries 100 status reports — each a complete semantic concept from the shared codebook. The only transmission cost is the nibble itself. No labels. No delimiters. No schema headers. The receiver holds the codebook; the stream carries only indices.

System Design

The Codebook Architecture

A codebook is a 16-entry mapping from 4-bit index to semantic concept. The codebook exists as a pre-shared lookup table — agreed at session setup, referenced by index in the stream, never transmitted as content.

PropertySpecification
Entries per codebook16 (indexed by 4 bits: 0000–1111)
Active codebook count1 per stream at any given time (can shift mid-stream)
Total codebook space (basic)32 codebooks (5-bit index in rolling shift byte)
Total codebook space (extended)65,536 codebooks (16-bit index in extended declaration)
Transmission cost per concept4 bits (one nibble)
Equivalent text label ("NOMINAL")56 bits minimum (7 ASCII bytes)
Compression ratio vs text14× at minimum. Higher for longer labels.
Pre-sharing mechanismSession Layer 1 custom extension block or firmware-resident table

Codebook Structure

Index (4 bits)BinaryEntry (example)
00000Concept 0 — Session-agreed semantic at index 0
10001Concept 1
20010Concept 2
30011Concept 3
40100Concept 4
50101Concept 5
60110Concept 6
70111Concept 7
81000Concept 8
91001Concept 9
101010Concept 10
111011Concept 11
121100Concept 12
131101Concept 13
141110Concept 14
151111Concept 15

Codebook 0001 — Example

Universal Codebook — 16 Standard Entries

Codebook 0000 (index 0) is the Universal codebook: globally agreed, no session declaration needed. The following shows Codebook 0001 — the spacecraft status codebook used throughout the BitPads specification examples.

IndexBinaryCodebook 0001 — Spacecraft Status
00000Nominal
10001Warning
20010Critical
30011Burn complete
40100Fuel low
50101Power nominal
60110Comms nominal
70111Attitude nominal
81000Thermal nominal
91001Data rate normal
101010Orbit nominal
111011Navigation lock
121100Downlink active
131101Uplink active
141110Fault detected
151111Emergency

Four Status Reports in Two Bytes

The canonical BitPads Binary Pictography example: spacecraft attitude control system reporting four subsystem states simultaneously using codebook 0001.

Interactive Nibble Visualisation

Byte 1 (0x35):
bits 1-40011Nibble 1
Index 3
bits 5-80101Nibble 2
Index 5
Codebook[3] = Burn complete
Codebook[5] = Power nominal
Byte 2 (0x60):
bits 1-40110Nibble 3
Index 6
bits 5-80000Nibble 4
Index 0
Codebook[6] = Comms nominal
Codebook[0] = Nominal
Binary Pictography — 4 Status Reports in 2 Bytes
Active codebook:0001 (spacecraft status)
Symbol 1: Burn complete0011
Symbol 2: Power nominal0101
Symbol 3: Comms nominal0110
Symbol 4: Nominal0000
Byte 1:0011 0101=0x35
Byte 2:0110 0000=0x60
Total:4 status reports in 2 bytes (16 bits)
Text equivalent:"BURN COMPLETE / POWER NOMINAL / COMMS NOMINAL / NOMINAL" = 51 bytes
Compression ratio:25.5:1
Binary Pictography Calculator

Enter a binary nibble stream (e.g. 0011 0101 0110 0000) or hex bytes (e.g. 35 60). Select codebook and decode. For reverse: enter meanings (one per line) and encode.

Enter nibble stream above and click Decode.

Session Configuration

Session-Declared Codebooks

At session open, via the Custom Domain Extension Block or Layer 1 codebook declaration, the sender declares a custom codebook for the session. The codebook maps 4-bit indices to session-specific concepts. The receiver holds the codebook in a firmware-resident lookup table. The nibble stream references entries. No labels transmitted. Pure semantic compression.

Spacecraft
16 Subsystem States

Nominal, Warning, Critical, Burn complete, Fuel low, Power nominal, Comms nominal, Attitude nominal, Thermal nominal, Data rate normal, Orbit nominal, Navigation lock, Downlink active, Uplink active, Fault detected, Emergency.

Factory Floor
16 Process States

Idle, Starting, Running, Paused, Stopping, Error, Maintenance, Calibrating, Overload, Temperature high, Vibration high, Power fault, Conveyor stop, Feed empty, Output full, Emergency stop.

Financial
16 Transaction Events

Received, Pending, Cleared, Rejected, Reversed, Partial, Settled, Disputed, Escrow, Released, Expired, Converted, Allocated, Consolidated, Obligated, Audited.

Medical IoT
16 Patient Events

Stable, Improving, Degrading, Alert, Critical, Medication due, Vitals normal, Heart rate high, SPO2 low, BP elevated, Temperature elevated, Movement detected, Alarm cleared, Call staff, Emergency, Device fault.

The session codebook declaration is a one-time overhead: the 16-entry codebook is transmitted once at session open and then held by the receiver. Every subsequent nibble in the session references the codebook by index. For a 1000-event session, the one-time overhead is 16 codebook entries × 8 bits per entry = 128 bits, amortised across 1000 events at 4 bits each = 4000 bits of payload. The codebook overhead is 3.2% of the payload.

Dynamic Mechanism

Rolling Codebook — The Shift Mechanism

Enhancement field 110 bytes (flags=110: Priority+ACK, no Continuation) within an active enhancement stream update the active codebook. The lower 5 bits of the C0 code identity carry the new codebook index.

When the receiver encounters a byte with flags=110 at a signal slot position:

  1. Lower 5 bits = new codebook index (0–31 in the basic form)
  2. Active codebook shifts immediately at that byte position
  3. All subsequent nibble symbols decoded against the new codebook
  4. Both sender and receiver derive the shift sequence from the session key
  5. An interceptor without session context cannot determine which codebook is active
ROLLING CODEBOOK — SHIFT BYTE SEQUENCE
──────────────────────────────────────────────────────
 
0xC0 = 110 00000 → shift to codebook index 0 (Universal)
flags=110 (Priority+ACK) · code bits = 00000 → index 0
 
0xC8 = 110 01000 → shift to codebook index 8 (session codebook 8)
flags=110 (Priority+ACK) · code bits = 01000 → index 8
 
0xC1 = 110 00001 → shift to codebook index 1 (spacecraft status example)
flags=110 (Priority+ACK) · code bits = 00001 → index 1
 
0xD5 = 110 10101 → shift to codebook index 21 (session-specific)
flags=110 (Priority+ACK) · code bits = 10101 → index 21
──────────────────────────────────────────────────────
After each shift byte, all subsequent nibbles decoded against the new codebook.
Shift bytes themselves do not carry nibble payload — they are pure control.

The shift mechanism allows a single stream to carry content from multiple semantic domains without any in-band framing overhead beyond the single shift byte. A stream can switch from spacecraft system states to fuel telemetry to orbital parameters and back, with each domain reading from its own codebook, at the cost of one byte per domain transition.

Signal Slot Mechanism

SO/SI Signals — Mid-Note Codebook Shifts

In Note blocks with encoding type=10 (binary pictography), mid-Note codebook shifts use the SO (Shift Out, 0x0E) and SI (Shift In, 0x0F) C0 signals in the P7 signal slot (Post-Task/Pre-Note position).

P7 Pre
SO Byte (0x0E)
Shift Out signal. Active codebook changes from primary to alternate codebook for note content that follows.
Note
Primary Codebook Content
Note bytes encoded against primary (session-baseline) codebook. Decoded by receiver with primary codebook active.
P7 Shift
SO Mid-Note
Second SO signal within note. Shifts from primary to alternate codebook for the remaining bytes. No byte boundaries required for the shift.
Note
Alternate Codebook Content
Note bytes encoded against alternate codebook. Receiver has shifted at the SO signal — decodes with alternate codebook active.
P7 Post
SI Byte (0x0F)
Shift In signal. Restores primary codebook. All subsequent note bytes decoded against primary again. Session-baseline codebook restored.
Note
Primary Codebook Restored
Final note bytes decoded against primary codebook. Single Note block has now used two semantic domains.
SO/SI MID-NOTE SHIFT — WORKED EXAMPLE
──────────────────────────────────────────────────────────────
 
P7 slot: 0x0E (SO) → shift to alternate codebook for note content
 
Note bytes [0-1]: 0011 0101 = 0x35, primary codebook active
Nibble 0011 → Burn complete | Nibble 0101 → Power nominal
 
P7 slot (mid): 0x0E (SO) → shift to fault-code codebook (alternate)
 
Note bytes [2-4]: 1110 0001 0011 alternate codebook active
Nibble 1110 → Fault #14 | 0001 → Fault #1 | 0011 → Fault #3
 
P7 slot (post): 0x0F (SI) → restore primary codebook
 
Note bytes [5]: 0000 = primary codebook, Nominal
──────────────────────────────────────────────────────────────
Single Note block. Two codebooks. Zero framing overhead beyond SO/SI signals.

Security Model

Semantic Obscuration — What It Is and Isn't

The rolling codebook creates semantic obscuration — a specific and intentional property that is distinct from cryptographic security. Understanding the distinction is essential for correct deployment.

What Semantic Obscuration IS
  • An interceptor without session context cannot determine which codebook is active at any point in the stream
  • They see bytes, but cannot decode nibbles to their semantic meanings
  • With N codebooks and a session-key-derived shift sequence, the interceptor faces an N-choice ambiguity at each shift point
  • The semantic layer is opaque to passive observation without the session key
  • Meaningful resistance to casual interception on low-threat channels
  • Appropriate for sensor networks and industrial telemetry
  • Appropriate for semi-public broadcast channels where semantic privacy vs passive observation is needed
What Semantic Obscuration IS NOT
  • Cryptographic guarantee — the byte values themselves are transmitted in cleartext
  • Physical layer protection — layer inspection reveals the bytes
  • Resistance to determined adversaries with knowledge of the agreed codebooks and the session key derivation
  • A substitute for transport-layer encryption
  • Suitable as the sole protection mechanism for high-threat channels
  • Forward secrecy — if the session key is compromised, past streams can be decoded

Deployment note: Semantic obscuration is appropriate when the threat model is passive casual interception — a receiver that can see the wire but does not hold the session codebook mapping. It is not appropriate as a substitute for encryption in adversarial threat models. The mechanism was designed for sensor networks, industrial controllers, and semi-public broadcast where the primary goal is preventing casual semantic decoding, not resisting active cryptographic attack.

Protocol Element

Codebook Declaration Grammar

The Stream-Open Control byte's Codebook field (bits 5–6) declares the codebook mode for the stream. This interacts directly with the rolling codebook mechanism.

CodeModeRolling AllowedEffect
00 Universal Yes (if Update Flag = 1) Start on universal codebook. May shift to any session codebook via rolling mechanism.

The stream begins with the globally-agreed universal codebook active. No session negotiation needed. Both sender and receiver derive meaning identically from nibble index 0–15. If the Update Flag (bit 8 of Stream-Open Control byte) is 1, rolling codebook shifts via flags=110 bytes are permitted during the stream.

01 Session-declared Yes (if Update Flag = 1) Start on the codebook declared at session open. Rolling shifts permitted if Update Flag set.

The stream begins with the session-declared codebook active. The codebook was declared in the Layer 1 custom extension block at session open. The receiver already holds this codebook from session negotiation. Rolling shifts from this baseline are permitted if the Update Flag is 1.

10 Cipher shift Always Active codebook = session baseline + cipher offset. Start offset derived from session key. Baseline not directly observable from the stream.

The strongest obscuration mode. The active codebook index is not directly observable from the byte stream — even if an interceptor can see the shift bytes (flags=110 + code index), they cannot determine the actual active codebook without knowing the session baseline. The baseline itself is session-derived via the session key. Rolling shifts apply a further XOR offset from the observable shift index.

This means: even knowing the shift bytes, an interceptor cannot determine which codebook is active at any point unless they hold the session key.

11 Extended Depends on extended declaration Extended codebook declaration follows in the bytes immediately after the Stream-Open Control byte. Allows arbitrary codebook definition at stream open — 16-bit codebook index space.

When Extended mode is declared, the next 2+ bytes after the Stream-Open Control byte carry the extended codebook declaration: a 16-bit codebook index (0–65535) identifying the specific codebook from the receiver's extended codebook library. This allows up to 65,536 distinct codebooks to be referenced within a session. The extended declaration bytes are not stream content — they are consumed by the parser before the stream body begins.

Worked Example

Encoding Example — 4 Status Reports in 2 Bytes

Detailed walkthrough of the canonical Binary Pictography example from the BitPads specification. Scenario: spacecraft attitude control system reporting four subsystem states simultaneously.

BINARY PICTOGRAPHY ENCODING — STEP BY STEP
──────────────────────────────────────────────────────────────
 
Scenario: Spacecraft ACS — 4 subsystem state reports
Active codebook: 0001 (spacecraft status)
 
Step 1 — Session opened with codebook 0001 active
Step 2 — Note block opened, encoding type = 10 (binary pictography)
Step 3 — Sensor data gathered from four subsystems
Step 4 — Encoder maps sensor states to codebook indices
 
State 1: Burn complete → index 3 = 0011
State 2: Power nominal → index 5 = 0101
State 3: Comms nominal → index 6 = 0110
State 4: Nominal → index 0 = 0000
 
Step 5 — Pack nibbles into bytes (2 nibbles per byte)
 
Nibble 1 + 2: 0011 0101 = 0x35
Nibble 3 + 4: 0110 0000 = 0x60
 
──────────────────────────────────────────────────────────────
Transmit: 0x35 0x60 (2 bytes = 16 bits)
Text equiv: "BURN COMPLETE / POWER NOMINAL / COMMS NOMINAL / NOMINAL"
Text size: 51 bytes (408 bits)
Ratio: 25.5:1 compression vs text
──────────────────────────────────────────────────────────────

Worked Example

Decoding Example — Receiver Side

Same 2 bytes. Receiver side. Full decoding from wire bytes to semantic events.

BINARY PICTOGRAPHY DECODE — RECEIVER SIDE
──────────────────────────────────────────────────────────────
 
Input bytes: 0x35, 0x60
Active codebook: 0001 (spacecraft status)
 
──────────────────────────────────────────────────────────────
Byte 1: 0x35 = 0011 0101
Nibble 1: 0011 → index 3 → codebook[3] = Burn complete
Nibble 2: 0101 → index 5 → codebook[5] = Power nominal
 
Byte 2: 0x60 = 0110 0000
Nibble 3: 0110 → index 6 → codebook[6] = Comms nominal
Nibble 4: 0000 → index 0 → codebook[0] = Nominal
 
──────────────────────────────────────────────────────────────
Report 1: Burn complete
Report 2: Power nominal
Report 3: Comms nominal
Report 4: Nominal
──────────────────────────────────────────────────────────────
4 events decoded. 2 bytes consumed. Zero parsing overhead.
Receiver lookup: 4 array accesses. O(1) per event. No schema. No delimiter scan.

Record Component

Binary Pictography in Note Blocks

Binary Pictography is declared as a Note encoding type (type=10, Stream category reference). The Note Header declares the encoding; the Note content is a nibble stream decoded through the active codebook.

Note Header — Binary Pictography Mode
1–2 10 Enc.
Type
3–4 VV Codebook
Variant
5–8 LLLL Length
(escape=1111)
Encoding Type = 10 (Binary Pictography) Codebook Variant Selector Content Length

When encoding type = 10, the Note content is a nibble stream decoded through the active codebook. The Note Header's variant field (bits 3–4) selects a variant of the active codebook — providing four sub-variants per codebook without requiring a full codebook shift.

SO/SI mid-Note shifts (Section 7) operate via the P7 signal slot. This allows a single Note block to contain content encoded against multiple codebooks — with seamless transitions driven by the P7 signal slot's SO/SI C0 control signals. The transition does not break the Note block; the content continues in the same Note after the shift.

Note block pictography at scale: A 10-byte Note block in binary pictography mode carries 20 semantic events. A session with 100 Note blocks carries 2,000 events in 1,000 bytes of Note content (plus Note headers). The same session in text would require approximately 14,000 bytes of label content minimum. The structured BitPads record overhead (identity, timestamp, CRC) is shared across all events in each record — it does not multiply.

Integration

Telegraph Emulation + Pictography Together

The combination of Category 1110 (Telegraph Emulation stream) with binary pictography active creates the most semantically dense binary communication channel in the BitPads protocol family.

Combined capability:
Every byte = enhanced C0 byte (flags + code identity)
Active codebook provides semantic context for C0 code interpretations
Rolling codebook shifts update semantic context mid-stream
Legacy receivers see standard C0 controls throughout
BitPads receivers decode typed events with full semantic resolution
This is the Sumerian principle in binary: minimal marks, shared context, rich meaning.

In this mode, the C0 code identity within each stream byte serves as a compressed semantic pointer into the active codebook, while the P/A/C flags carry the event's priority, confirmation, and continuation state. A single byte carries: a 3-bit flag state AND a 5-bit semantic index into the codebook. The codebook entry carries the full semantic concept.

10-BYTE STREAM — FULL ANNOTATION (BOTH VIEWS)
──────────────────────────────────────────────────────────────────────────────────
Active codebook: 0001 (spacecraft status). Category 1110 active.
──────────────────────────────────────────────────────────────────────────────────
Byte Hex Binary Legacy View BitPads View
──────────────────────────────────────────────────────────────────────────────────
1 0x16 000 10110 SYN — idle SYN, no flags — heartbeat
2 0x96 100 10110 [extended char] SYN, Priority — priority pulse
3 0xC1 110 00001 [extended char Á] SOH, P+ACK → shift to codebook 1
4 0x35 001 10101 % (ASCII) C+NAK — nibbles: 0011|0101
Codebook[3]=Burn complete | Codebook[5]=Power nominal
5 0x60 011 00000 ` (backtick) ACK+C NUL — nibbles: 0110|0000
Codebook[6]=Comms nominal | Codebook[0]=Nominal
6 0x07 000 00111 BEL — rings bell BEL, no flags — standard alert
7 0x87 100 00111 [extended char] BEL, Priority — urgent alert
8 0xC8 110 01000 [extended char È] BS, P+ACK → shift to codebook 8
9 0x16 000 10110 SYN — idle SYN, no flags — heartbeat resumed
10 0x04 000 00100 EOT — end of tx EOT, no flags — stream close
──────────────────────────────────────────────────────────────────────────────────
Legacy: a standard C0 stream. BEL rings. EOT closes. Sync bytes idle the line.
BitPads: 10 typed events. 4 status reports in 2 bytes. 2 codebook shifts. 1 alert.

Design Lineage

Design Heritage Connections

Every mechanism in the Binary Pictography system has a lineage reaching back to the history of communication. The connections are not metaphorical — they are structural isomorphisms.

c. 3000 BCE Sumerian Clay Tokens

Compact marks whose meaning expanded through shared context between sender and receiver. The scribe pressed a minimal token into clay. The reader interpreted it through a shared codebook held in cultural knowledge. The token itself was compact — the richness was in the shared context, not in the mark.

Connection: BitPads nibble codebook — 4-bit index, semantic meaning held in the shared codebook, zero label overhead per event. The same structural principle separated by 5,000 years.

1870 Baudot Shift States

Baudot's five-bit code used two shift states — "Letters" and "Figures" — to double the vocabulary from 32 to 64 symbols without adding bits. A single control signal (Shift Out / Shift In) changed the interpretation of all subsequent symbols. The shift state was maintained by the receiver.

Connection: BitPads SO/SI codebook switching — the same structural mechanism: a single control signal changes the semantic interpretation of all subsequent content. One SO byte shifts the active codebook. One SI byte restores it. Zero content bits consumed by the shift itself.

1838 Morse Code Priority

Samuel Morse assigned the shortest codes to the most frequent letters (E = dot, T = dash) and longer sequences to rare letters. The code was optimised by frequency — common signals carried the minimum weight. The priority flag operates on the same principle: the most important signals receive elevated handling regardless of their code identity.

Connection: BitPads Priority flag (P bit) — signals marked with P=1 receive pre-emptive handling. The most urgent events carry the flag. Legacy equivalence: BEL was always the highest-priority C0 control. Priority BEL (0x87) is the direct structural successor to the telegraph operator's emergency key.

1844 Telegraph Key Contact

The telegraph key closed or opened a circuit — one binary bit. The complete meaning of a signal was in the timing and sequence of key contacts, read through a shared protocol (Morse, Baudot, etc.). The contact itself carried no label. The receiver decoded through trained knowledge.

Connection: Every byte in a Category 1110 stream is a complete signal event. The C0 code identity plays the role of the key contact sequence; the codebook plays the role of the trained operator's knowledge. The mechanism is direct: binary contact → shared codebook → complete semantic event.

The unbroken line: Sumerian clay token (4000+ BCE) → Baudot shift state (1870) → SO/SI in ASCII (1963) → BitPads codebook shift (2024). The structural principle — minimal mark, shared context, rich meaning — has been rediscovered and implemented in every major binary communication standard. BitPads Binary Pictography is its most compact binary-native expression: four bits per semantic event, sixteen events per codebook, 65,536 codebooks per session.