I was looking at some web pages for the Coleco Adam and saw the schematics for the daisywheel printer which piqued my curiosity.
Looking around, there was also complete source code for the 6801 program for the printer, so why not see if it could do something.
There was a nice picture of the daisywheel and I rotated the picture and got the sequence of the characters.
One character quite eluded me, it was a strange L laying on its side.
Finding a manual for the Diablo 630 Diablo_630_Printer-Terminal_Manual.PDF there is a lot of datasheet information about the different Diablo daisywheels and the plastic 96 character is a perfect match. The funky L character on its side is a "not" symbol.
note that the electrical spoke position + spoke position = 96.
In the rom for the printer, there's a complete table of ascii character to printwheel position
Code
ADAM DAISYWHEEL
cent ! " # $ % & ' ( ) * + , - . /
FD17 02 44 46 2E 2C 2F 45 36 3C 3A 3D 2D 03 2B 05 42 .DF.,/E6<:=-.+.B
0 1 2 3 4 5 6 7 8 9 : ; < = > ?
FD27 25 21 22 23 24 26 27 28 29 2A 0C 1F 39 30 32 41 %!"#$&'()*..902A
@ A B C D E F G H I J K L M N O
FD37 3E 0B 08 0A 16 0F 09 18 11 14 1D 1C 15 06 13 12 >..... .........
P Q R S T U V W X Y Z [ \ ] ^ _
FD47 1A 1B 0D 0E 10 17 1E 04 20 19 07 35 3F 33 40 37 ........ ..5?3@7
` a b c d e f g h i j k l m n o
FD57 38 54 4E 4F 4C 53 59 4A 57 55 48 5D 4D 47 52 50 8TNOLSYJWUH]MGRP
p q r s t u v w x y z { | } ~ not (unicode FFE2)
FD67 5A 5C 51 58 56 5B 49 00 4B 5E 5F 31 3B 43 34 01 Z\QXV[I.K^_1;C4.
FD77 07 06 06 07 07 07 07 05 06 06 07 06 05 05 05 06 ................
f = io.open("adamdaisy.bin") a = f:read("*a") f:close() print(#a)
chartab={} for i = 1,#a do chartab[a:byte(i)]=string.char(i+32-1) end
chartab[1]="not" chartab[2]="cent"
for i,j in pairs(chartab) do print(i,j) end
io.write('{"') for i=0,#chartab,1 do io.write(chartab[i]) end io.write('"}') print()
which gives you the daisywheel table
Code
lua
> f = io.open("adamdaisy.bin") a = f:read("*a") f:close() print(#a)
96
> chartab={} for i = 1,#a do chartab[a:byte(i)]=string.char(i+32-1) end
> chartab[1]="not" chartab[2]="cent"
> for i,j in pairs(chartab) do print(i,j) end
1 not
2 cent
3 ,
4 W
5 .
6 M
7 Z
8 B
9 F
10 C
11 A
12 :
13 R
14 S
15 E
16 T
17 H
18 O
19 N
20 I
21 L
22 D
23 U
24 G
25 Y
26 P
27 Q
28 K
29 J
30 V
31 ;
32 X
33 1
34 2
35 3
36 4
37 0
38 5
39 6
40 7
41 8
42 9
43 -
44 $
45 +
46 #
47 %
48 =
49 {
50 >
51 ]
52 ~
53 [
54 '
55 _
56 `
57 <
58 )
59 |
60 (
61 *
62 @
63 \
64 ^
65 ?
66 /
67 }
68 !
69 &
70 "
71 m
72 j
73 v
74 g
75 x
76 d
77 l
78 b
79 c
80 o
81 r
82 n
83 e
84 a
85 i
86 t
87 h
88 s
89 f
90 p
91 u
92 q
93 k
94 y
95 z
0 w
{"wnotcent,W.MZBFCA:RSETHONILDUGYPQKJV;X1234056789-$+#%={>]~['_`<)|(*@\^?/}!&"mjvgxdlbcorneaithsfpuqkyz"}
and cleaning up the cent, not, \\ and \" then you have a string for the daisywheel:
So far, I've got the daisywheel to ascii working, the paper feed stepper (it doesn't actually use a stepper but a motor that turns with a detent sensor to track distance) and the cr stepper.
Yes, good eyes JD. I mistyped and the Adam's built-in electronic typewriter will let you backspace and "correct" your errors but it's already typed it on the page. Now I'm actually copying the whole rectangle and it would be cleared up but it doesn't actually fire the hammer on a space.
I wanted to see if I could make a typewriter driver do something with a daisywheel, and managed to find a driver on github for a brother word processor:
It needed converting to more recent mame, and I was able to get it to do something:
The daisywheel for brother printers is different from the Diablo wheel.
I was having some trouble with unicode characters in the string, I ended up just replacing them with blanks for now. That makes any unicode symbol come up as a cent symbol.
It's not perfect, and it runs strangely slow for some reason. I still see the Check printer message upon trying to enter the Word Processor. But it's cool to see it work a little.