PETSCII

From Wikipedia, the free encyclopedia
Jump to: navigation, search

PETSCII (PET Standard Code of Information Interchange), also known as CBM ASCII, is the character set used in Commodore Business Machines (CBM)'s 8-bit home computers, starting with the PET from 1977 and including the VIC-20, C64, CBM-II, Plus/4, C16, C116 and C128.[1]

History[edit]

The character set was largely designed by Leonard Tramiel (the son of Commodore CEO Jack Tramiel) and PET designer Chuck Peddle. The graphic characters of PETSCII were one of the extensions Commodore specified for Commodore BASIC when laying out desired changes to Microsoft's existing 6502 BASIC to Microsoft's Ric Weiland in 1977.[1] The VIC-20 used the same pixel-for-pixel font as the PET, although the characters appeared wider due to the VIC's 22-column screen. The Commodore 64, however, used a slightly re-designed, heavy upper-case font, essentially a thicker version of the PET's, in order to avoid color artifacts created by the machine's higher resolution screen. The C64's lowercase characters are identical to the lowercase characters in the Atari 800's system font (released several years earlier).

Peddle claims the inclusion of card suit symbols was spurred by the demand that it should be easy to write card games on the PET (as part of the specification list he received).[2]

Specifications[edit]

C64 startup screen with shifted and unshifted modes of PETSCII, and the two characters from ASCII-1963
PETSCII Chart as displayed on the C64 in shifted and unshifted modes. (Not shown are control codes, as well as characters in the $C0–$FF range, which are the standard uppercase keycodes returned from the keyboard, and which are mirrored to the range $60–$7F.)

PETSCII is based on the 1963 version of ASCII (rather than the 1967 version, which most if not all other computer character sets based on ASCII use). Assuming the graphics mode is unshifted, PETSCII has only uppercase letters in its powerup state, an up-arrow ( ↑ ) instead of a caret ( ^ ) in position $5E and a left-arrow ( ← ) instead of an underscore ( _ ) in position $5F. Also, in the VIC-20 and C64 version, the backslash ( \ ) in position $5C is occupied by a British pound sign ( £ ). In unshifted mode, codes $60–$7F and $A0–$FF are allotted to CBM-specific block graphics characters (horizontal and vertical lines, hatches, shades, triangles, circles and card suits). Ranges $00–$1F and $80–$9F have control codes.

The Commodore PET's lack of a programmable bitmap-mode for computer graphics, as well as it having no redefinable character set capability, may be one of the reasons PETSCII was developed; by creatively using the well thought-out block graphics, a higher degree of sophistication in screen graphics is attainable than by using plain ASCII's letter/digit/punctuation characters. In addition to the relatively diverse set of geometrical shapes that can thus be produced, PETSCII allows for several grayscale levels by its provision of differently hatched checkerboard squares/half-squares. Finally, the reverse-video mode (see below) is used to complete the range of graphics characters, in that it provides mirrored half-square blocks.

PETSCII also has a text mode, in which lowercase letters occupy the range $41–$5A, and uppercase letters occupy the range $C1–$DA. The text mode is not available at powerup, but must be actuated by holding one of the SHIFT keys and then press and release the Commodore key. Regardless of whether the chip has undergone this graphic "shift", there are block graphic characters in the range of $E0-FF. This serves to distinguish PETSCII from those kinds of ASCII that go back no farther than ASCII-1967, so any text transfer between an 8-bit Commodore machine and one that uses 1967-derived ASCII would result in text where uppercase letters appear to be lowercase, and lowercase letters uppercase. There is no easy Boolean operation to change these cases to the proper case. Thus, as with other computers based on non-standard-ASCII character sets, software conversion is needed when exchanging text files and/or telecommunicating with standard ASCII systems. The other ranges are unchanged in shifted mode; this means that the other characters added in ASCII-1967 besides lowercase letters – i.e. the grave accent, curly braces, vertical bar, and tilde – do not exist in PETSCII.

Included in PETSCII are cursor and screen control codes, such as {HOME}, {CLR}, {RVS ON}, and {RVS OFF} (the latter two activating/deactivating reverse-video character display). The control codes appeared in program listings as reverse-video graphic characters, although some computer magazines, in their efforts to provide more clearly readable listings, pretty-printed the codes using their actual names, like the above examples. Such names were commonly enclosed in curly braces in the listings. This prevented ambiguity, since, as mentioned, PETSCII had no curly brace characters. The screen control codes were essentially similar to escape codes for text based computer terminals.

As indicated above, PETSCII provides for shifting between the power-on default (unshifted) uppercase+graphics character set and the alternative (shifted) lower+uppercase set (where the shifted set contains a subset of the block graphic characters of the unshifted set). The shift between modes is done by POKEing location 59468 with the value 14 to select the alternative set or 12 to revert to standard. On C64 the sets are alternated by flipping bit 2 of the byte 53272. On some models of PET this can also be achieved via special control code PRINT CHR$(14) which adjust the line spacing as well as changing the character set; the POKE method is still available and does not alter the line spacing.[2] Thus, screen editor state changes, rather than the employment of separate ASCII codes, are used to choose between single-case (all capitals) and dual case. In the VIC-20, C64, and later machines (not including the CBM business computers), color codes supplement the other screen control codes. (The colors of the VIC-20 and C64/128 are listed in the VIC-II article.)

Codepage layout[edit]

Since not all of the characters encoded by PETSCII are 'graphic' (i.e., control codes) and not all of them have a corresponding Unicode representation, they cannot be portably displayed in a web browser. The following table shows for PETSCII characters the corresponding Unicode glyph and code point, if there is any; otherwise the Unicode replacement character U+FFFD (�) and a hyphen for the code point. Control characters and other non-printing characters are represented by their names. Where a particular code point encodes both a shifted and unshifted character, both characters/code points/glyphs are shown, with the unshifted character/glyph on the left and the unshifted code point at the bottom. Row and column headings indicate the hexadecimal digit combinations to produce the eight-bit code value; e.g., the letter L is at code value $4C.

Note that the table below is for the Commodore 64. Other Commodore machines used slightly different versions of PETSCII, which used different control characters and in some cases different graphic characters. For example, on the Commodore 128, $07 was the bell control character, and on CBM machines prior to the VIC-20, characters $2C and $6C both produced a comma character, albeit with slightly different semantics.[3]

The actual character generator ROM used a different set of assignments. For example, to display the characters "@ABC" on screen by directly writing into the screen memory, one would POKE the decimal values 0, 1, 2, and 3 rather than 64, 65, 66, and 67.

PETSCII (Commodore 64)
_0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F
 
0_
 
 
-
0
 
-
1
 
-
2
RUN/ STOP
0003
3
 
-
4
WHITE
-
5
 
-
6
 
-
7
SHIFT DISABLE
-
8
SHIFT ENABLE
-
9
 
-
10
 
-
11
 
-
12
CR
000D
13
TEXT MODE
-
14
 
-
15
 
1_
 
 
-
16
DOWN
-
17
REVERSE ON
-
18
HOME
-
19
DEL
007F
20
 
-
21
 
-
22
 
-
23
 
-
24
 
-
25
 
-
26
 
-
27
RED
-
28
RIGHT
-
29
GREEN
-
30
BLUE
-
31
 
2_
 
SP
0020
32
!
0021
33
"
0022
34
#
0023
35
$
0024
36
%
0025
37
&
0026
38
'
0027
39
(
0028
40
)
0029
41
*
002A
42
+
002B
43
,
002C
44
-
002D
45
.
002E
46
/
002F
47
 
3_
 
0
0030
48
1
0031
49
2
0032
50
3
0033
51
4
0034
52
5
0035
53
6
0036
54
7
0037
55
8
0038
56
9
0039
57
:
003A
58
;
003B
59
<
003C
60
=
003D
61
>
003E
62
?
003F
63
 
4_
 
@
0040
64
A a
0041 0061
65
B b
0042 0062
66
C c
0043 0063
67
D d
0044 0064
68
E e
0045 0065
69
F f
0046 0066
70
G g
0047 0067
71
H h
0048 0068
72
I i
0049 0069
73
J j
004A 006A
74
K k
004B 006B
75
L l
004C 006C
76
M m
004D 006D
77
N n
004E 006E
78
O o
004F 006F
79
 
5_
 
P p
0050 0070
80
Q q
0051 0071
81
R r
0052 0072
82
S s
0053 0073
83
T t
0054 0074
84
U u
0055 0075
85
V v
0056 0076
86
W w
0057 0077
87
X x
0058 0078
88
Y y
0059 0079
89
Z z
005A 007A
90
[
005B
91
£
00A3
92
]
005D
93

2191
94

2190
95
 
6_
 

2500
96
A
2660 0041
97
B
2502 0042
98
C
2500 0043
99
D
- 0044
100
E
- 0045
101
F
- 0046
102
G
- 0047
103
H
- 0048
104
I
256E 0049
105
J
2570 004A
106
K
256F 004B
107
L
- 004C
108
M
2572 004D
109
N
2571 004E
110
O
- 004F
111
 
7_
 
P
- 0050
112
Q
25CF 0051
113
R
- 0052
114
S
2665 0053
115
T
- 0054
116
U
256D 0055
117
V
2573 0056
118
W
25CB 0057
119
X
2663 0058
120
Y
- 0059
121
Z
2666 005A
122

253C
123

-
124

2502
125
π
03C0 2592
126
◥ �
25E5 -
127
 
8_
 
 
-
128
ORANGE
-
129
 
-
130
 
-
131
 
-
132
F1
-
133
F3
-
134
F5
-
135
F7
-
136
F2
-
137
F4
-
138
F6
-
139
F8
-
140
LF
000A
141
GRAPHICS
-
142
 
-
143
 
9_
 
BLACK
-
144
UP
-
145
REVERSE OFF
-
146
CLR
-
147
INSERT
-
148
BROWN
-
149
LIGHT RED
-
150
DARK GRAY
-
151
MIDDLE GRAY
-
152
LIGHT GREEN
-
153
LIGHT BLUE
-
154
LIGHT GRAY
-
155
PURPLE
-
156
LEFT
-
157
YELLOW
-
158
CYAN
-
159
 
A_
 
SHIFT- SPACE
00A0
160

258C
161

2584
162

2594
163

2581
164

258F
165

2592
166

2595
167

-
168
◤ �
25E4 -
169

-
170

251C
171

2597
172

2514
173

2510
174

2582
175
 
B_
 

250C
176

2534
177

252C
178

2524
179

258E
180

258D
181

-
182

-
183

-
184

2583
185
� ✓
- 2713
186

2596
187

259D
188

2518
189

2598
190

259A
191
 
C_
 

2500
192
A
2660 0041
193
B
2502 0042
194
C
2500 0043
195
D
- 0044
196
E
- 0045
197
F
- 0046
198
G
- 0047
199
H
- 0048
200
I
256E 0049
201
J
2570 004A
202
K
256F 004B
203
L
- 004C
204
M
2572 004D
205
N
2571 004E
206
O
- 004F
207
 
D_
 
P
- 0050
208
Q
25CF 0051
209
R
- 0052
210
S
2665 0053
211
T
- 0054
212
U
256D 0055
213
V
2573 0056
214
W
25CB 0057
215
X
2663 0058
216
Y
- 0059
217
Z
2666 005A
218

253C
219

-
220

2502
221
π
03C0 2592
222
◥ �
25E5 -
223
 
E_
 
SHIFT- SPACE
00A0
224

258C
225

2584
226

2594
227

2581
228

258F
229

2592
230

2595
231

-
232
◤ �
25E4 -
233

-
234

251C
235

2597
236

2514
237

2510
238

2582
239
 
F_
 

250C
240

2534
241

252C
242

2524
243

258E
244

258D
245

-
246

-
247

-
248

2583
249
� ✓
- 2713
250

2596
251

259D
252

2518
253

2598
254
π ▒
03C0 2592
255
_0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F

Some PETSCII codes cannot be printed and are only used for keyboard input (e.g. F1, RUN/STOP).

PET 2001 keyboard layout, illustrating PETSCII graphics characters

Base 128[edit]

Out of PETSCII's first 192 codes, 164 have visible representations (for the control codes, these are visible when quoted): 5 (white), 17–20 and 28–31 (colors and cursor controls), 32–90 (ASCII equivalent), 91–127 (graphics), 129 (orange), 133–140 (function keys), 144–159 (colors and cursor controls), and 160–192 (graphics). This theoretically permits encodings, such as base128, between PETSCII-speaking machines; for example, 33–127, 160–192.

See also[edit]

Notes[edit]

  1. ^ The Amiga home/personal computer family uses standard ISO-8859-1.
  2. ^ see On The Edge by Brian Bagnall, ISBN 0-9738649-0-7, page 43, 54–55.

References[edit]

External links[edit]