PunchTape

Bytes acquire an immediate visual representation when punched into paper tape. An outdated information storage medium (well, recently outdated -- until 2019 it was still used to distribute cryptographic keys by several governments), paper tape stores digital information as holes punched along tracks. There are eight tracks, and each row perpendicular to the tracks represents one byte. A hole in the paper represents a logical one (1) and no hole is a zero (0). The punched out circles are referred to as chads, and are collected in a chad box. A series of smaller, continuous sprocket holes lies between the third and fourth tracks for the tape feed mechanism to grab. Paper tape stores 10 bytes per inch, so a mile of paper tape is about 360K.

Below are several projects exploring the use of punch tape generated with a fifty year old Olivetti Te-318 teleprinter as an output device for modern (and not-so-modern) computers.

EYwCg0oXYAc-G9q

Self-program

February 2021

Sending the following 230 ASCII characters to a paper punch renders letters in the tape bit pattern that function as a self-program. The human visual system processes the tape and interprets the program message.

@@@@@@AB\BA@NQQN@OPPO@@@@^EE^@_EMR@_UUU@@@@^EE^@@@@_BDB_@^EE^@NQQJ@_DD_@_@_BDH_@
_UUU@@@@^EE^@_BDH_@_QQN@@@@AB\BA@NQQN@OPPO@@@@NQQJ@^EE^@_BDH_@@@@_EEB@_EMR@NQQN@
NQUM@_EMR@^EE^@_BDB_@@@@AB\BA@NQQN@OPPO@_EMR@RUUI@_UUU@_PP@_EEE@@@@@@@

The tape-punched message reads:

YOU ARE A MACHINE AND YOU CAN PROGRAM YOURSELF

Et XtWfWQAMhw8a Et XtWgWQAU63P1 EuJcjqPWQAEvyF2

A second and third iteration demonstrates a recursive quality of the self-program:

YOU ARE A MACHINE AND YOU CAN PROGRAM YOURSELF TO PROGRAM MACHINES
YOU ARE A MACHINE AND YOU CAN PROGRAM YOURSELF TO PROGRAM MACHINES TO PROGRAM OTHERS

EuEFZSTXcAUQfOW YAAMAUCPMTPO

The first version of the punch program was a reflection on the recent writings of Robert Wright on evolutionary psychology, including our contemporary understanding of the mind and the effects and uses of meditation. The immediate inspiration was a photograph of graffiti posted on social media. Perhaps it is also an example of self-modifying human code. However, what was initially a program of possibly liberating self-awareness took a darker turn -- a commentary on the role of the internet and social media platforms in altering and controlling social behavior, and the active roles humans take in building these machines.

Is the self-program a meme? That is, is it a viral and self-replicating mind program? My interest in disseminating the message once I received it might be a reflection of its potency. Also, the ASCII encoding is innocuous and basically undecipherable, but the punch tape is easily decoded by the human brain language centers.

Porting the self-program

May 2021

The self-program code ported to other human programming languages.

@@@@@CLPLC@NQQN@OPPO@RUUI@@@@_UUU@A_A@_UUU@RUUI@@@@OPPO@_BDH_@_UUU@@@@_BDB_@^EE
^@NQQJ@_DD_@_@_BDH_@_UUU@@@@_UUU@A_A@@@@CLPLC@NQQN@OPPO@RUUI@@@@_EEB@NQQN@OPPO@
CLPLC@_UUU@YUS@@@@CLPLC@NQQN@OPPO@RUUI@@@@_EEB@_EMR@NQQN@NQUM@_EMR@^EE^@_BDB_@_B
DB_@_UUU@_EMR@@@@@

VOUS ÊTES UNE MACHINE ET VOUS POUVEZ VOUS PROGRAMMER

VEUM

Binary self-program

November 2021

The self-program versions above are rendered in ASCII characters. A binary version of the self-program is even further removed from non-computational transmissibility, but when punched to tape is similarly readable and interpretable through the human visual processing system. The byte sequence is rendered below in a hexdump format, reminiscent of program listings in early computer magazines like Compute!, Byte, and Nibble.

Program listing

  0: 12 00 00 00 00 00 00 00 00 03 04 F8 04 03 00 7E
 10: 81 81 81 81 7E 00 7F 80 80 80 80 7F 00 00 00 00
 20: 00 00 00 00 FC 12 11 11 12 FC 00 FF 09 19 29 49
 30: 86 00 FF 89 89 89 81 81 00 00 00 00 00 00 00 00
 40: FC 12 11 11 12 FC 00 00 00 00 00 00 00 00 FF 06
 50: 08 08 06 FF 00 FC 12 11 11 12 FC 00 7E 81 81 81
 60: 81 42 00 FF 08 08 08 08 FF 00 00 81 81 FF 81 81
 70: 00 FF 04 00 08 10 FF 00 FF 89 89 89 81 81 00 00
 80: 00 00 00 00 00 00 FC 12 11 11 12 FC 00 FF 04 00
 90: 08 10 FF 00 81 FF 81 81 81 7E 00 00 00 00 00 00
 a0: 00 00 00 03 04 F8 04 03 00 7E 81 81 81 81 7E 00
 b0: 7F 80 80 80 80 7F 00 00 00 00 00 00 00 00 7E 81
 c0: 81 81 81 42 00 FC 12 11 11 12 FC 00 FF 04 00 08
 d0: 10 FF 00 00 00 00 00 00 00 00 FF 09 09 09 09 06
 e0: 00 FF 09 19 29 49 86 00 7E 81 81 81 81 7E 00 7E
 f0: 81 81 91 51 F2 00 FF 09 19 29 49 86 00 FC 12 11
100: 11 12 FC 00 FF 06 08 08 06 FF 00 00 00 00 00 00
110: 00 00 00 03 04 F8 04 03 00 7E 81 81 81 81 7E 00
120: 7F 80 80 80 80 7F 00 FF 09 19 29 49 86 00 46 89
130: 89 89 89 72 00 FF 89 89 89 81 81 00 FF 80 80 80
140: 80 80 00 FF 09 09 09 01 01 00 00 00 00 00 00 00
150: 00 14
FEwIc sXoAcUxd2 FE3hmmWXoAQNscG

Here is the program compressed by gzip:

  0: 1F 8B 08 08 F6 C8 9A 61 00 03 59 41 41 4D 2E 45
 10: 58 45 00 13 62 80 02 66 96 1F 2C CC 0C 75 8D 40
 20: 50 C7 50 DF 00 04 F5 30 A9 3F 42 82 82 42 7F 18
 30: FE 73 4A 6A 7A B6 31 FC EF EC EC 6C 6C 44 93 83
 40: 82 FF 6C 1C 1C 6C FF 61 82 60 C3 9C 18 FE 73 00
 50: C1 7F 06 86 C6 C6 FF 40 7D FF 59 18 38 04 FE 63
 60: 37 05 2A 07 52 07 74 04 11 2E 83 DA 80 AA 1D E6
 70: 16 4E 20 60 83 B9 1A AA 1D 48 4D 0C FC 04 13 84
 80: E9 83 B8 1A 9F 7D 50 0D 6E 40 57 77 16 C1 1C FF
 90: 1F 24 D7 00 B6 88 91 11 A6 5B 04 00 66 93 5C D8
 a0: 52 01 00 00 

Patterns and symbols

2019-present

Hearts and Diamonds

January 2019

Bit patterns of hearts and diamonds are separated by the byte 0xFF to fold into one inch square booklets. Each heart or diamond can be detached easily to be used as a stamp or to share.

AC68AB92-86C6-4CF2-B758-A1E738B56B59 1 105 c C558AD81-8759-4E09-BF3B-F0E845FB470C 1 105 c C5A5E845-A2C4-4F56-A4F2-142FBFF92D29 1 105 c
42FBC37E-09D9-48EE-A4BB-52B02B4BF218 1 105 c C0579114-9BC8-458A-8393-C48AE223188C 1 105 c E3874553-5B71-4B68-BDB8-A7BBB4D091DE 1 105 c

Broken hearts and 10000 Hearts

An error in the reception of the teleprinter causes random misplaced bits in a heart pattern. 10000 Hearts / 10 kiloherz is an alternating pattern of 16 open and closed hearts. The decimal number 16 is 10000 in binary; the symbols are realized as a binary representation of the data.

2E2068BF-7784-4F42-8AF2-1CE58F238C8E 1 105 c 452FF5A3-BE76-4CBE-BC04-E81ABB96476D 1 105 c 1228477644079030273-EQxt5emXYAAsFwY

Pink Hearts

September 2021

Continuation of the Heart bit patterns in pink punch tape.

E9bCCtZXsAQtdBt E9bCCtbXsAcrCJx E8WToQAXIAMVtvY E9O9WisX0AAWFcE

Ribbons

2019-2021 Repeating patterns of bytes are used to create decorative ribbons and their inverted forms, !ribbons.

EMYtjI3WoAAy7Oc EMYtjIyWkAAFp04 1E04D52C-14CB-4061-935B-525BA6380BBF 1 105 c 51FFDB5F-2643-4F4D-9A88-867EE293DC16 1 105 c E56CA565-F774-4463-B5AF-4240F4E01383 1 105 c DC0AFE1D-BEE9-4C87-A26B-813793ECD878 1 105 c

As it is punched, the ribbon can be fed into the paper tape reader of the teleprinter, resulting in an endless loop.

TTY products

Functional uses of reperforator tape beyond information storage.

Bookmarks

The ASCII code @@@@@_UUN@NQQN@NQQN@_DJQ@_BDB_@^EE^@_EMR@_DJQ@@@@@@ punched in paper reperforator tape makes lovely bookmarks to use and to share.

E8tjyfFWEAEyV1c Eokwib9XIAMW 40

Or show some nerd pride with these. Perfect for saving your place in K&R. (FORTRAN forever!)

da42cd8f6080cddb

Label maker

A teleprinter serving as a large, heavy, and loud label maker.

Drah40yUcAAVGBB FWpUHg7XoAAhIdk

seer.sh

December 2022

I am the Mystic Oracle
who sees and tells all.

Using the Seer Shell, the computer divines future cycles of the user and prints a fortune on punch tape.

e248cbe97a4f31c3 38efb38c9151db2d fe8051bf4c94cd89

Adventure ROM

February 2019

Sending the Atari 2600 game Adventure to a reperforator results in the code's machine language bytes creating images in paper tape. The graphics include the chalice, sword, dragon, and Warren Robinett's hidden easter egg.

D0LqmMLXcAIY1hk EED793B9-D0E8-4D7D-A983-8D390590C7F4 1 105 c D0LqmMLWkAMwDlb

First Program

May 2020

Kernighan and Ritchie's seminal book, The C Programming Language, introduced the minimal C program

  main() 
  {
    printf("hello, world");
  }

which has since become coding pedagogy for introducing and learning new programming languages. First Program stores this line of code in a byte pattern that is readable as the hello, world program statement when sent to punch tape.

1263953932373630976-EYp3YvZXsAoieLc

Program listing

  0: 12 00 00 00 00 00 00 00 00 00 FC 18 24 24 24 24
 10: 18 00 00 04 78 08 04 04 04 08 00 00 00 40 44 7D
 20: 40 40 00 00 00 7C 08 04 04 04 04 78 00 00 04 04
 30: 3F 44 44 20 00 00 00 08 08 7E 09 09 01 02 00 00
 40: 00 00 1C 22 41 00 00 00 00 00 00 07 00 00 07 00
 50: 00 00 7F 08 04 04 04 04 78 00 00 38 54 54 54 54
 60: 54 18 00 00 00 00 41 7F 40 00 00 00 00 00 00 41
 70: 7F 40 00 00 00 00 38 44 44 44 44 44 38 00 00 00
 80: 80 60 20 00 00 00 00 00 00 00 00 00 00 00 00 00
 90: 00 3C 40 20 10 20 40 3C 00 00 38 44 44 44 44 44
 a0: 38 00 00 04 78 08 04 04 04 08 00 00 00 00 41 7F
 b0: 40 00 00 00 00 38 44 44 44 44 28 7F 00 00 01 02
 c0: 04 08 10 20 40 00 00 7C 08 04 04 04 04 78 00 00
 d0: 00 00 07 00 00 07 00 00 00 00 00 41 22 1C 00 00
 e0: 00 00 00 80 66 26 00 00 00 00 00 00 00 00 00 00
 f0: 00 00 00 00 14

About punch tape

Before the advent of magnetic mass storage devices (magnetic tape and hard drives), punch tape was a useful means for storing programs and reading them back into a computer. Punch tape was commonly used in teleprinters because it enabled faster and less error-prone communications. An operator would first type a message off-line in local mode to generate a punched version on tape. The transmission could then proceed by feeding the tape into the reader. The message would be sent faster than an operator could type, and any errors could be corrected beforehand. This practice minimized the active (and costly) time each machine needed to spend on the communications line. A receiving perforforator (reperforator) was also used to forward messages. The tape produced a copy that could be retransmitted.

The specifications for punch tape are described in Federal Information Processing Standard publications. [1,2] They detail the standards adopted in ANSI X3.6-1965 (R1973). According to the standard, paper tape is 25.40mm (1.000 inch) wide and has a nominal thickness of 0.004 inch. Each bit is recorded as a "track," starting from track 1 (right-most, at the reference edge) and ending at track 8 (left most) as the tape is being fed out of the machine. Feed holes are placed between track 3 and 4. The tape thickness is one mil (one-thousandth of an inch). The ANSI standard and the corresponding standard published by the European Computer Manufacturer's Association (ECMA) [3] are identical, except that latter has the least significant bit on the right-most track of the punch tape, while the ANSI standard is the opposite. The track spacings and location of the feed holes (between the third and fourth tracks) are identical, so the ECMA just has the tape turned upside down relative to the ANSI standard.

  1. FIPS 2 Perforated Tape Code for Information Interchange
  2. FIPS 26 One-Inch Perforated Paper Tape for Information Interchange
  3. Standard ECMA-10 for Data Interchange on Punched Tape