tofergregg / IBM-Wheelwriter-Hack

Turning an IBM Wheelwriter into a unique printer
MIT License
100 stars 11 forks source link

Complete Font Table #5

Open Cabalist opened 7 years ago

Cabalist commented 7 years ago

I've managed to get my hands on 5 different font wheels. I went through and compared all of them and found some omissions and errors in the asciiTrans section of the Arduino code.

All font wheels have the same characters and sadly there are no curly braces to be found. Quine will not be possible in C 😉

This is the COMPLETE font table for these fonts. I went through the wheels by hand and looked at every letter. There may be different WAYS of typing to discover but there aren't different THINGS to type.

Elite (1353861) Title (1353952) Delegate (1353843) Courier 10 (1353511) Prestige Elite (1353502)

My summary follows:

Sequence Hex Elite Title Delegate Courier 10 Prestige Elite
1 0x01 a a a a a
2 0x02 n n n n n
3 0x03 r r r r r
4 0x04 m m m m m
5 0x05 c c c c c
6 0x06 s s s s s
7 0x07 d d d d d
8 0x08 h h h h h
9 0x09 l l l l l
10 0x0A f f f f f
11 0x0B k k k k k
12 0x0C , , , , ,
13 0x0D V V V V V
14 0x0E - - - - -
15 0x0F G G G G G
16 0x10 U U U U U
17 0x11 F F F F F
18 0x12 B B B B B
19 0x13 Z Z Z Z Z
20 0x14 H H H H H
21 0x15 P P P P P
22 0x16 ) ) ) ) )
23 0x17 R R R R R
24 0x18 L L L L L
25 0x19 S S S S S
26 0x1A N N N N N
27 0x1B C C C C C
28 0x1C T T T T T
29 0x1D D D D D D
30 0x1E E E E E E
31 0x1F I I I I I
32 0x20 A A A A A
33 0x21 J J J J J
34 0x22 O O O O O
35 0x23 ( ( ( ( (
36 0x24 M M M M M
37 0x25 . . . . . Missing (duplicate of 0x57)
38 0x26 Y Y Y Y Y
39 0x27 , , , , , Missing (duplicate of 0x0C)
40 0x28 / / / / /
41 0x29 W W W W W
42 0x2A 9 9 9 9 9
43 0x2B K K K K K
44 0x2C 3 3 3 3 3
45 0x2D X X X X X
46 0x2E 1 1 1 1 1
47 0x2F 2 2 2 2 2
48 0x30 0 0 0 0 0
49 0x31 5 5 5 5 5
50 0x32 4 4 4 4 4
51 0x33 6 6 6 6 6
52 0x34 8 8 8 8 8
53 0x35 7 7 7 7 7
54 0x36 * * * * *
55 0x37 $ $ $ $ $
56 0x38 # # # # #
57 0x39 % % % % %
58 0x3A ¢ ¢ ¢ ¢ ¢ Missing
59 0x3B + + + + +
60 0x3C ± ± ± ± ± Missing
61 0x3D @ @ @ @ @
62 0x3E Q Q Q Q Q
63 0x3F & & & & &
64 0x40 ] ] ] ] ]
65 0x41 [ [ [ [ [
66 0x42 ² ² ² ² ² Missing
67 0x43 ³ ³ ³ ³ ³ Missing
68 0x44 ° ° ° ° ° Missing
69 0x45 § § § § § Missing
70 0x46 ¶ ¶ ¶ ¶ ¶ Missing
71 0x47 ½ ½ ½ ½ ½ Missing
72 0x48 ¼ ¼ ¼ ¼ ¼ Missing
73 0x49 ! ! ! ! !
74 0x4A ? ? ? ? ?
75 0x4B " " " " "
76 0x4C ' ' ' ' '
77 0x4D = = = = =
78 0x4E : : : : :
79 0x4F _ _ _ _ _
80 0x50 ; ; ; ; ;
81 0x51 x x x x x
82 0x52 q p p p p
83 0x53 v v v v v
84 0x54 z z z z z
85 0x55 w w w w w
86 0x56 j j j j j
87 0x57 . . . . .
88 0x58 y y y y y
89 0x59 b d d d d
90 0x5A g g g g g
91 0x5B u u u u u
92 0x5C p q q q q
93 0x5D i i i i i
94 0x5E t t t t t
95 0x5F o o o o o
96 0x60 e e e e e
Cabalist commented 7 years ago

It is also worth noting that there are other very different fonts that were made available

Such as: image

I am thinking a Compatibility table is in the future with Model and Printwheels...

tofergregg commented 7 years ago

Wow -- thanks for the updated information (wait a minute...did you outbid me on an eBay listing for those wheels?? -- it looks like that listing included Letter Gothic, so probably not).

I'm surprised Courier doesn't have curly braces (did they really need § and ¶ ?). I was sure there would be modified letters (the Arabic wheel shows that there are completely different wheels). Alas.

I'm still flummoxed by the encoding (i.e., why 'a' is 0x1, b is 0x59, etc.). I wonder if it has to do with the frequency of letters in English -- having x, q, v, z, and w near each other is suspect, as is having i, t, o, and e next to each other. If we could only track down an engineer who originally worked on the Wheelwriter design...

Cabalist commented 7 years ago

Oh! The Encoding is actually really simple and I meant to point it out in the original post. a is the first letter on the wheel, n is the second, etc. There are 96 symbols on each wheel. Haha.

On the chart above the sequence is the order they appear and it exactly matches the hex values you found. :)

Cabalist commented 7 years ago

I've got 5 wheels if you would like me to send you one I totally can.

I have been on Craigslist pretty extensively in the PNW for the last few weeks trying to find these things. :)

tofergregg commented 7 years ago

Ah -- so interesting. I just looked at the wheel on mine and I see what you mean. I have a feeling that the code itself is related to letter frequency, because the top keys are aeoti (to the left) and rmcsb (to the right) -- pretty common letters.

No worries about the wheel -- I will get one soon. Thanks, though!

Cabalist commented 7 years ago

Here are some updated examples of asciiTrans with formatting. asciiTrans is kind of a misnomer as this has non-ascii symbols and is missing ascii symbols. Maybe symbolTrans instead?

Sequential Order

int asciiTrans[96] =
//   a        n        r        m        c        s        d        h
   {0x01,    0x02,    0x03,    0x04,    0x05,    0x06,    0x07,    0x08,
//   l        f        k        ,        V        -        G        U
    0x09,    0x0A,    0x0B,    0x0C,    0x0D,    0x0E,    0x0F,    0x10,
//   F        B        Z        H        P        )        R        L
    0x11,    0x12,    0x13,    0x14,    0x15,    0x16,    0x17,    0x18,
//   S        N        C        T        D        E        I        A
    0x19,    0x1A,    0x1B,    0x1C,    0x1D,    0x1E,    0x1F,    0x20,
//   J        O        (        M        .        Y        ,        /
    0x21,    0x22,    0x23,    0x24,    0x25,    0x26,    0x27,    0x28,
//   W        9        K        3        X        1        2        0
    0x29,    0x2A,    0x2B,    0x2C,    0x2D,    0x2E,    0x2F,    0x30,
//   5        4        6        8        7        *        $        #
    0x31,    0x32,    0x33,    0x34,    0x35,    0x36,    0x37,    0x38,
//   %        ¢        +        ±        @        Q        &        ]
    0x39,    0x3A,    0x3B,    0x3C,    0x3D,    0x3E,    0x3F,    0x40,
//   [        ²        ³        °        §        ¶        ½        ¼
    0x41,    0x42,    0x43,    0x44,    0x45,    0x46,    0x47,    0x48,
//   !        ?        "        '        =        :        _        ;
    0x49,    0x4A,    0x4B,    0x4C,    0x4D,    0x4E,    0x4F,    0x50,
//   x        q        v        z        w        j        .        y
    0x51,    0x52,    0x53,    0x54,    0x55,    0x56,    0x57,    0x58,
//   b        g        u        p        i        t        o        e
    0x59,    0x5A,    0x5B,    0x5C,    0x5D,    0x5E,    0x5F,    0x60}

Symbol order with grouping

int asciiTrans[96] =
//   A        B        C        D        E        F        G        H
   {0x20,    0x12,    0x1B,    0x1D,    0x1E,    0x11,    0x0F,    0x14,
//   I        J        K        L        M        N        O        P
    0x1F,    0x21,    0x2B,    0x18,    0x24,    0x1A,    0x22,    0x15,
//   Q        R        S        T        U        V        W        X
    0x3E,    0x17,    0x19,    0x1C,    0x10,    0x0D,    0x29,    0x2D,
//   Y        Z
    0x26,    0x13,
//   a        b        c        d        e        f        g        h
    0x01,    0x59,    0x05,    0x07,    0x60,    0x0A,    0x5A,    0x08,
//   i        j        k        l        m        n        o        p
    0x5D,    0x56,    0x0B,    0x09,    0x04,    0x02,    0x5F,    0x5C,
//   q        r        s        t        u        v        w        x
    0x52,    0x03,    0x06,    0x5E,    0x5B,    0x53,    0x55,    0x51,
//   y        z
    0x58,    0x54,
//   0        1        2        3        4        5        6        7
    0x30,    0x2E,    0x2F,    0x2C,    0x32,    0x31,    0x33,    0x35,
//   8        9
    0x34,    0x2A,
//   !        "        #        $        %        &        '        (
    0x49,    0x4B,    0x38,    0x37,    0x39,    0x3F,    0x4C,    0x23,
//   )        *        +        ,        ,        -        .        .
    0x16,    0x36,    0x3B,    0x27,    0x0C,    0x0E,    0x57,    0x25,
//   /        :        ;        =        ?        @        [        ]
    0x28,    0x4E,    0x50,    0x4D,    0x4A,    0x3D,    0x41,    0x40,
//   _        ¢        §        °        ±        ²        ³        ¶
    0x4F,    0x3A,    0x45,    0x44,    0x3C,    0x42,    0x43,    0x46,
//   ¼        ½
    0x48,    0x47}

Symbol order without grouping:

int asciiTrans[96] = 
//   A        B        C        D        E        F        G        H
   {0x20,    0x12,    0x1B,    0x1D,    0x1E,    0x11,    0x0F,    0x14,
//   I        J        K        L        M        N        O        P
    0x1F,    0x21,    0x2B,    0x18,    0x24,    0x1A,    0x22,    0x15,
//   Q        R        S        T        U        V        W        X
    0x3E,    0x17,    0x19,    0x1C,    0x10,    0x0D,    0x29,    0x2D,
//   Y        Z        a        b        c        d        e        f
    0x26,    0x13,    0x01,    0x59,    0x05,    0x07,    0x60,    0x0A,
//   g        h        i        j        k        l        m        n
    0x5A,    0x08,    0x5D,    0x56,    0x0B,    0x09,    0x04,    0x02,
//   o        p        q        r        s        t        u        v
    0x5F,    0x5C,    0x52,    0x03,    0x06,    0x5E,    0x5B,    0x53,
//   w        x        y        z        0        1        2        3
    0x55,    0x51,    0x58,    0x54,    0x30,    0x2E,    0x2F,    0x2C,
//   4        5        6        7        8        9        !        "
    0x32,    0x31,    0x33,    0x35,    0x34,    0x2A,    0x49,    0x4B,
//   #        $        %        &        '        (        )        *
    0x38,    0x37,    0x39,    0x3F,    0x4C,    0x23,    0x16,    0x36,
//   +        ,        ,        -        .        .        /        :
    0x3B,    0x27,    0x0C,    0x0E,    0x57,    0x25,    0x28,    0x4E,
//   ;        =        ?        @        [        ]        _        ¢
    0x50,    0x4D,    0x4A,    0x3D,    0x41,    0x40,    0x4F,    0x3A,
//   §        °        ±        ²        ³        ¶        ¼        ½
    0x45,    0x44,    0x3C,    0x42,    0x43,    0x46,    0x48,    0x47}
bitcraft commented 7 years ago

nice work!

tofergregg commented 7 years ago

I just received an OCR-A wheel, and interestingly, there are some differences. Funnily enough, there are curly braces, but you use the parentheses keys, so there aren't any parentheses! At least I haven't found them yet. :/

There aren't any square brackets, either, nor an exclamation point, nor an underscore. So, my idea to print code with the typewriter seems slim at this point.

RussellSenior commented 4 years ago

According to https://typewriters.com/supplies/genuine-ibm-printwheel/ there are "ASCII" printwheels. I have yet to actually find one available anywhere, but they seem to have existed at some point (e.g. Courier 10 ASCII DP, Letter Gothic ASCII, Prestige Elite 12 ASCII)

RussellSenior commented 4 years ago

I did finally score a Courier 10 DP, 1353909, which has the full ASCII character set. See: https://github.com/RussellSenior/ww5teletype/blob/master/doc/printwheel-map-with-option-board-codes.txt

RussellSenior commented 4 years ago

And @Cabalist, fyi, I'm just across the river from you in Portland.