Code Fingers

Many years ago, I was wondering how I could display information about the supported escape and control sequences in DEC’s terminals, in a graphical fashion. I hoped to show the evolution of the machines, and also to provide a handy reference so that someone planning an emulator could see how much work would be involved in moving the emulation from one generation of terminal to another (e.g. VT100 to VT220).

I called the pictures that I came up with code fingers because I thought they would be like finger prints for terminals. They are very cryptic, so here is a quick explanation.

Code Finger for VT320 Code Finger for VT320 C0 0đ‘„ 1đ‘„ 0123456789abcdef NUL—Null SOH—Start Of Heading STX—Start of Text ETX—End of Text EOT—End Of Transmission ENQ—Enquiry ACK—Acknowledge BEL—Bell BS—Backspace HT—Character Tabulation LF—Line Feed VT—Line Tabulation FF—Form Feed CR—Carriage Return SO—Shift-Out SI—Shift-In DLE—Data Link Escape DC1—Device Control One DC2—Device Control Two DC3—Device Control Three DC4—Device Control Four NAK—Negative Acknowledge SYN—Synchronous Idle ETB—End of Transmission Block CAN—Cancel EM—End of Medium SUB—Substitute ESC—Escape FS—Field Separator GS—Group Separator RS—Record Separator US—Unit Separator C1 8đ‘„ 9đ‘„ BPH—Break Permitted Here NBH—No Break Here IND—Index NEL—Next Line SSA—Start of Selected Area ESA—End of Selected Area HTS—Character Tabulation Set HTJ—Character Tabulation with Justification VTS—Line Tabulation Set PLD—Partial Line Forward PLU—Partial Line Backward RI—Reverse Line Feed SS2—Single-Shift Two SS3—Single-Shift Three DCS—Device Control String PU1—Private Use One PU2—Private Use Two STS—Set Transmit State CCH—Cancel Character MW—Message Waiting SPA—Start of Guarded Area EPA—End of Guarded Area SOS—Start Of String DECID—Identify Terminal CSI—Control Sequence Introducer ST—String Terminator OSC—Operating System Command PM—Privacy Message APC—Application Program Command ESC final 4đ‘„ 5đ‘„ 6đ‘„ 7đ‘„ IND—Index NEL—Next Line SSA—Start of Selected Area ESA—End of Selected Area HTS—Character Tabulation Set HTJ—Character Tabulation with Justification VTS—Line Tabulation Set PLD—Partial Line Forward PLU—Partial Line Backward RI—Reverse Line Feed SS2—Single-Shift Two SS3—Single-Shift Three DCS—Device Control String PU1—Private Use One PU2—Private Use Two STS—Set Transmit State CCH—Cancel Character MW—Message Waiting SPA—Start of Guarded Area EPA—End of Guarded Area SOS—Start Of String DECID—Identify Terminal CSI—Control Sequence Introducer ST—String Terminator OSC—Operating System Command PM—Privacy Message APC—Application Program Command DMI—Disable Manual Input INT—Interrupt EMI—Enable Manual Input RIS—Reset to Initial State CMD—Coding Method Delimiter LS2—Locking Shift Two LS3—Locking Shift Three LS3R—Locking Shift Three Right LS2R—Locking Shift Two Right LS1R—Locking Shift One Right ESC SP final 4đ‘„ 5đ‘„ 6đ‘„ 7đ‘„ S7C1T—Select 7-bit C1 Transmission S8C1T—Select 8-bit C1 Transmission ASCEF—Announce Subset of Code Extension Facilities ASCEF—Announce Subset of Code Extension Facilities ASCEF—Announce Subset of Code Extension Facilities ESC inter final 3đ‘„ 203đ‘„ 213đ‘„ 223đ‘„ 233đ‘„ 243đ‘„ 253đ‘„ 263đ‘„ 273đ‘„ 283đ‘„ 293đ‘„ 2a3đ‘„ 2b3đ‘„ 2c3đ‘„ 2d3đ‘„ 2e3đ‘„ 2f3đ‘„ 0123456789abcdef DECHTS—Horizontal Tab Set DECCAHT—Clear All Horizontal Tabs DECVTS—Vertical Tab Set DECCAVT—Clear All Vertical Tabs DECXMIT—Transmit DECBI—Back Index DECSC—Save Cursor DECRC—Restore Cursor DECFI—Forward Index DECKPAM—Keypad Application Mode DECKPNM—Keypad Numeric Mode S7C1R—Select 7-bit C1 Reception S8C1R—Select 8-bit C1 Reception DECDHL—Double-Height Line DECDHL—Double-Height Line DECSWL—Single-Width Line DECDWL—Double-Width Line DECHCP—Hardcopy DECALN—Screen Alignment Display DECFPP—Positioning DECTCS—Exit NAPLPS DECSCCS—Enter NAPLPS DECHPPCL—Enter HP PCL emulation mode DDD3—Report Hebrew Settings DDD1—Report Hebrew Settings CSI final 4đ‘„ 5đ‘„ 6đ‘„ 0123456789abcdef ICH—Insert Character CUU—Cursor Up CUD—Cursor Down CUF—Cursor Forward (Cursor Right) CUB—Cursor Backward (Cursor Left) CNL—Cursor Next Line CPL—Cursor Preceding Line CHA—Cursor Horizontal (Character) Absolute CUP—Cursor Position CHT—Cursor Horizontal Forward Tabulation ED—Erase in Display (Erase in Page) EL—Erase in Line IL—Insert Line DL—Delete Line EF—Erase in Field EA—Erase in Area DCH—Delete Character SEM—Select Editing Extent Mode CPR—Cursor Position Report (Active Position Report) SU—Scroll Up (Pan Down) SD—Scroll Down (Pan Up) NP—Next Page PP—Preceding Page CTC—Cursor Tabulation Control ECH—Erase Character CVT—Cursor Vertical Tabulation (Cursor Line Tabulation) CBT—Cursor Backward Tabulation SRS—Start Reversed String PTX—Parallel Texts SDS—Start Directed String SIMD—Select Implicit Movement Direction HPA—Horizontal Position Absolute (Character Position Absolute) HPR—Horizontal Position Relative (Character Position Forward) REP—Repeat DA1—Primary Device Attributes VPA—Vertical Position Absolute (Line Position Absolute) VPR—Vertical Position Relative (Line Position Forward) HVP—Horizontal and Vertical Position (Character and Line Position) TBC—Tabulation Clear SM—Set Mode MC—Media Copy HPB—Horizontal Position Backward (Character Position Backward) VPB—Vertical Position Backward (Line Position Backward) RM—Reset Mode SGR—Set Graphic Rendition DSR—Device Status Report DAQ—Define Area Qualification CSI SP final 4đ‘„ 5đ‘„ 6đ‘„ SL—Scroll Left SR—Scroll Right GSM—Graphic Size Modification GSS—Graphic Size Selection FNT—Font Selection TSS—Thin Space Specification JFY—Justify SPI—Spacing Increment QUAD—Quad SSU—Select Size Unit PFS—Page Format Selection SHS—Select Character Spacing SVS—Select Line Spacing IGS—Identify Graphic Subrepertoire HTSA—Character Tabulation Set Absolute IDCS—Identify Device Control String PPA—Page Position Absolute PPR—Page Position Relative (Page Position Forward) PPB—Page Position Backward SPD—Select Presentation Directions DTA—Dimension Text Area SLH—Set Line Home SLL—Set Line Limit FNK—Function Key SPQR—Select Print Quality and Rapidity SEF—Sheet Eject and Feed PEC—Presentation Expand or Contract SSW—Select Space Width SACS—Set Additional Character Separation SAPV—Set Alternative Presentation Variants STAB—Selective Tabulation GCC—Graphic Character Combination TATE—Tabulation Aligned Trailing Edge TALE—Tabulation Aligned Leading Edge TAC—Tabulation Aligned Centred TCC—Tabulation Centred on Character TSR—Tab Stop Remove SCO—Set Character Orientation SRCS—Set Reduced Character Separation SCS—Set Character Spacing SLS—Set Line Spacing SPH—Set Page Home SPL—Set Page Limit SCP—Select Character Path CSI inter final 7đ‘„ 207đ‘„ 217đ‘„ 227đ‘„ 237đ‘„ 247đ‘„ 257đ‘„ 267đ‘„ 277đ‘„ 287đ‘„ 297đ‘„ 2a7đ‘„ 2b7đ‘„ 2c7đ‘„ 2d7đ‘„ 2e7đ‘„ 2f7đ‘„ 0123456789abcde DECSSL—Select Set-Up Language DECLL—Load LEDs DECSTBM—Set Top and Bottom Margins DECSLRM—Set Left and Right Margins DECSLPP—Set Lines per Physical Page DECSHTS—Set Horizontal Tabulation Stops DECSVTS—Set Vertical Tabulation Stops DECSHORP—Set Horizontal Pitch DECREQTPARM—Request Terminal Parameters DECTST—Invoke Confidence Test DECVERP—Set Vertical Pitch DECTTC—Select Transmit Termination Character DECPRO—Set Protected Field Attributes DECFNK—Function Key DECSSCLS—Set Scroll Speed DECSCUSR—Set Cursor Style DECSKCV—Set Keyclick Volume DECNS—New Sheet DECSWBV—Set Warning Bell Volume DECSMBV—Set Margin Bell Volume DECSLCK—Set Lock Key Style DECSITF—Select Input Tray Failover DECSDPM—Set Duplex Print Mode DECVPFS—Variable Page Format Select DECSSS—Set Sheet Size DECRVEC—Draw Relative Vector DECKBD—Keyboard Language Selection DECTME—Terminal Mode Emulation DECSTR—Soft Terminal Reset decVKPPI—Print Partial Image DECNVR—Nonvolatile RAM Feature Settings DECFIL—Right Justification DECFNVR—Loading Factory NVR Settings DECASFC—Automatic Sheet Feeder Control DECUND—Programmable Underline Character DECPTS—Printwheel Table Select DECSS—Set Space Size DECVEC—Draw Vector DECFIN—Document Finishing DECSCL—Set Conformance Level DECSCA—Select Character Attributes DECHPWA—Page Width Alignment DECSRFR—Select Refresh Rate DECSTRL—Set Transmit Rate Limit DECRQDE—Request Device Extent DECRPDE—Report Device Extent DECFCR—Font Configuration Request DECDEN—Select Density DECRFS—Request Font Status DECRQM—Request Mode Settings DECSDDT—Select Disconnect Delay Time DECCARA—Change Attributes in Rectangular Area DECSPRTT—Select Printer Type DECRARA—Reverse Attributes in Rectangular Area DECRQTSR—Request Terminal State Report DECCRA—Copy Rectangular Area DECRQPSR—Request Presentation State Report DECFRA—Fill Rectangular Area DECRPM—Report Mode Settings DECERA—Erase Rectangular Area DECSERA—Selective Erase Rectangular Area DECSCPP—Set Columns Per Page DECSASD—Select Active Status Display DECSSDT—Select Status Display Type DECSNC—Set Number of Copies DECRQUPSS—Request User-Preferred Supplemental Set DECLRP—Locator Report DECES—Enable Session DECSPO—Set Page Orientation DECSGD—Set Graphics Density DECDLG—Deleting Logos Sequence DECILG—Select Logo Sequence DECFMSR—Request Forms Status DECRLGS—Request Logo Status DECSBCA—Select Bar Code Attributes DECBCS—Setting Block Character Parameters DECTLTC—Transmit Line Termination Characters DECEFR—Enable Filter Rectangle DECELR—Enable Locator Reports DECSLE—Select Locator Events DECRQLP—Request Locator Position DECIC—Insert Column DECDC—Delete Column DECSDPT—Select Digital Printed Data Type DECSTGLT—Select Text/Graphics Look-Up Table DECSPPCS—Select ProPrinter Character Set DECSRC—Secure Reset Confirmation DECSCS—Select Communication Speed DECSFC—Select Flow Control DECSCP—Select Communication Port DECSACE—Select Attribute Change Extent DECRQCRA—Request Checksum of Rectangular Area DECINVM—Invoke Macro DECMSR—Macro Space Report DECSNLS—Select Number of Lines per Screen DECLFKC—Local Function Key Control DECSR—Secure Reset DECELF—Enable Local Functions DECSMKR—Select Modifier Key Reporting DECMM—Memory Management DECSPP—Set Port Parameter DECRQPKFM—Program Key Free Memory Inquiry DECPKFMR—Program Key Free Memory Report DECPKA—Program Key Action DECLTOD—Load Time of Day DECTID—Select Terminal ID DECRQKT—Key Type Inquiry DECRPKT—Report Key Type DECRQKD—Request Key Definition DECSPMA—Session Page Memory Allocation DECUS—Update Session DECDLDA—Down Line Load Allocation DECSZS—Select Zero Symbol DECAC—Assign Color DECATC—Alternate Text Color DECPS—Play Sound DECARR—Select Auto Repeat Rate DECCRTST—CRT Saver Timing DECSEST—Energy Saver Timing DCS inter final 7đ‘„ 207đ‘„ 217đ‘„ 227đ‘„ 237đ‘„ 247đ‘„ 257đ‘„ 267đ‘„ 277đ‘„ 287đ‘„ 297đ‘„ 2a7đ‘„ 2b7đ‘„ 2c7đ‘„ 2d7đ‘„ 2e7đ‘„ 2f7đ‘„ 0123456789abcde decREGIS—ReGIS graphics decSIXEL—Sixel graphics DECLBAN—Load Banner Message decVKPK—GIGI program keys decVT105G—Emulate VT105 graphics DECLANS—Load Answerback Message DECLFF—Load Font File decTALK—DECtalk Commands and Responses DECDLD—Downline Load DECUDK—User-Defined Keys DECATFF—Assign Type Family or Font DECDTFF—Delete Type Family or Font decGIDIS—Enter GIDIS mode DECAUPSS—Assign User-Preferred Supplemental Set DECDMAC—Define Macro DECSTUI—Set Terminal Unit ID (Restricted) DECRPTUI—Report Terminal Unit Information DECCKSR—Memory Checksum Report DECPFK—Program Function Key DECPAK—Program Alphanumeric Key DECCKD—Copy Key Default DECFSR—Font Status Report DECRPFK—Report Function Key Definition DECRPAK—Report All Modifiers/Alphanumeric Key State DECRSTS—Restore Terminal State DECRQSS—Request Control Function Settings DECRPSS—Report Control Function Settings DECTSR—Terminal State Report DECRSPS—Restore Presentation State DECTABSR—Tab Stop Report DECLBD—Locator Button Definition DECLFM—Loading Forms Sequence DECDFM—Delete Forms Sequence DECIFM—Start Forms Sequence DECRFMS—Form Status Report DECLLG—Loading Logos Sequence DECLGSR—Logo Status Report 1 2 3 4 4a 5 6 7 8
Code Finger for VT320 terminal
  1. Control Codes. The first two columns show the C0 area, with the first column running from 0/0 to 0/15 and the second column from 1/0 to 1/15. The second two columns show the C1 area, with the first column running from 8/0 to 8/15 and the second from 9/0 to 9/15.
  2. Standard Escape Sequences. Sequences of the form ESC Fe, where Fe runs from 4/0 (top of first column) to 7/14 (bottom of fourth column).
  3. Standard Escape Sequences. Sequences of the form ESC SP Fe, where Fe runs from 4/0 (top of first column) to 7/14 (bottom of fourth column).
  4. Private Escape Sequences. All private escape sequences end with a character in the range 3/0 to 3/15. The columns here represent the intermediate characters. The first column is with no intermediate character, the second is with intermediate character SP (2/0) and the last column is with intermediate character ‘/’ (2/15). (4a) is the region devoted to Select Character Set (SCS) sequences, with final characters that select DEC-private sets. That is why it is sparsely populated: the two grey squares are the SCS sequences that the VT500-series terminals use as reports to the host when a Hebrew keyboard is connected.
  5. Standard Control Sequences. Sequences of the form CSI ... F where F runs from 4/0 (top of first column) to 6/15 (bottom of third column).
  6. Standard Control Sequences. Sequences of the form CSI ... SP F where F runs from 4/0 (top of first column) to 6/15 (bottom of third column).
  7. Private Control Sequences. All private control sequences end with a character in the range 7/0 to 7/14. The columns here represent the intermediate characters. The first column is with no intermediate character, the second is with intermediate character SP (2/0) and the last column is with intermediate character ‘/’ (2/15).
  8. Device Control Sequences. DEC structured these like control sequences, using final characters in the range 7/0 to 7/14. The columns here represent the intermediate characters. The first column is with no intermediate character, the second is with intermediate character SP (2/0) and the last column is with intermediate character ‘/’ (2/15).

The light blue background shows the total available code space, and the light grey squares show sequences that DEC implemented on at least one of their terminals or printers.

The columns are labelled with the hex codes of the bytes in the sequences, so “3x” means that the column covers characters with ASCII codes from 0x30 to 0x3f. For example, take a look at the square with the green circle around it. This is the function DECALN. This is in the “ESC inter final” table under the column labelled “23 3x”, in the row labelled “8.” So, the sequence for invoking DECALN is the three bytes 0x1b 0x23 0x38 or, in ASCII, “ESC # 8”.

Generated Code Fingers

I have been encouraged to revive this work in 2023, so these fingers have now been regenerated in SVG format.

The data for these comes from the DECronomicon, which may be inaccurate. All of these pictures are also image maps; hover over black dots to find out the mnemonic for the sequence.

There are also some difference fingers, which show what changed from one terminal to another. Some of the red dots showing missing features are wrong; I probably missed some escape sequences when skimming the manuals.