Character Representation - PLATO vs NOS

Dealing with character representation is a complicated topic because of the various hardware variants involved in the CDC/PLATO ecosystem.

In short they are just the same - and exactly the opposite!

For example in NOS, the 60-bit octal representation

 o01020304050000000000

translates to the ASCII equivalent of:

 "ABCDE:::::"

The LOWER CASE representation of the 64 ASCII values CDC Display Code looks like this:

#  (dec)   0....+....1....+....2....+....3....+....4....+....5....+....6...
#          0123456789012345678901234567890123456789012345678901234567890123
 
#  (oct)   0.......1.......2.......3.......4.......5.......6.......7.......
#          0123456701234567012345670123456701234567012345670123456701234567
           :abcdefghijklmnopqrstuvwxyz0123456789+-*/()$= ,.#[]%"_!&'?<>@\^;

on PLATO the same octal value corresponds to the values in the preceding table and is displayed as

 "abcde"

Why the difference?

We start with NOS as our base. Why did PLATO choose to be the opposite? Efficiency. Most text shown to students is going to be lower-case. Also, in PLATO's display representation, it's important to note that the ZERO value (: Colon) is suppressed 1).

In NOS, the convention is to use the SHIFT character 2) code BEFORE each lower-case character representation. The SHIFT character in CDC character representation is mapped to the value o70, therefore the SHIFTed (lower-case) version of “ABCDE”→“abcde” would need to be:

 o70017002700370047005

Storing the lower-case “abcde” now uses twice the space using the NOS representation. Therefore the default character representation in PLATO character mapping is lower-case.

That's why COMPASS and other code is lower case in PLATO files but is upper case when using the PF Utility in transferring files between PLATO and NOS.

Mapping the entire PLATO character representation space to the ASCII/UNICODE 8-bit/multiple representation is much more complicated.

PLATO's character encoding includes myriad special symbols used for a variety of actions:

  • Displaying Characters
  • Cursor Positioning
  • Field Marking
  • … and more.

For example - the encoding of PLATO characters can be prefixed with up to 3 special characters:

  • The SHIFT (uncover) code (o70)
  • The ACCESS code (o76)
  • The ACCESS plus SHIFT

The UNICODE translate table used by cdc.io is:

####
# PLATO code to UNICODE equivalents, four strings corresponding to the plain, shifted (o70),
# access (o34), and shifted access (o74). ʘ = \u0298 (bilabial click)
# ↦     Tab
# ↵     Carriage Return
# ↶     Half Backspace
# ↤     Full Backspace
# ↷     HalfSpace
# ↥     Shift (o70)
# ↳     Subscript (o66)
# ↱     Superscript (o67)
# ◙     Access (o76)
# ◆     Font (o75)
# ;     Uncover (o77)
 
PLATO2UNICODE = (
 
    #   Base 64 Characters
    "␀abcdefghijklmno"          # o00-o17
    "pqrstuvwxyz01234"          # o20-o37
    "56789+-*/()$= ,.÷"         # o40-o57
    "[]%×⇦↳↱↥↵<>↤◆◙;",          # o60-o77
 
    #   Shift (o70+)
    "ʘABCDEFGHIJKLMNO"            # o00-o17
    "PQRSTUVWXYZ⇠⇢⇝↠↞"          # o20-o37
    "⇉_'∎⇎ΣΔʘ?⇈ʘʘʘʘ\"!"          # o40-o57
    "∩⋚⋛⌆∪ʘ╜╖ʘ⇂⇚⇛ʘʘʘ:",          # o60-o77
 
    #   Access (o76+)
    "ʘαβ\u0327δ\u0301ʘæøʘåäλµ\u0303°"        # o00-o17
    \u0300ρσΘ\u0308\u030cω\u0302öʘ⦓⦔ʘʘʘ"  # o20-o37
    "@⪢ʘʘʘ&ʘʘ\\ʘ≡#≠↷↕ʘ"                     # o40-o57
    "ʘ{}ʘ○⇇⌊⌈ʘ↖≤≥↶ʘʘ~",                     # o60-o77
 
    #   Access + Shift
    "ʘ←ʘ©→ʘ◆ÆØ|ÅÄʘʘʘ▫"            # o00-o17
    "ʘʘʘʘʘʘʘ↑↓Öʘʘʘʘʘʘ"            # o20-o37
    "ʘʘʘʘʘʘʘʘʘʘʘʘʘʘʘʘ"            # o40-o57
    "ʘʘʘʘ✕ʘ⇊⇈ʘʘʘʘʘʘʘʘ"           # o60-o77
)

Font Challenges

Due to font display inconsistencies, the UNICODE bilabial click symbol [ʘ] appears to be the same as the number [0] Zero in the base 64 characters.

There are more nuances than can be explored in one article but this should leave you with a contextual understanding of why bridging the worlds of differences in character representations is so complex in the PLATO/NOS/ASCII ecosystems.


1)
The PLATO representation of the colon character is o7077
2)
This SHIFT Character is referred to as the UNCOVER CODE
  • plato/operation.r2/nos2.guides/charcodes.txt
  • Last modified: 2026/01/03 19:49
  • by Site Administrator