PETSCII
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.
History
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).
Specifications
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
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.
_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).
Base 128
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
Notes
References
- ↑ A Conversation with Chuck Peddle, Bil Herd, Jeri Ellsworth - part 3 (2009 videoconference, 06:30)
- ↑ THE COMMODORE PET COMPUTER / FREQUENTLY ASKED QUESTIONS FILE - VERSION 1.7 ( Updated 25 November 2000) BY LARRY ANDERSSON, COMMODORE COLLECTOR AND PET ENTHUSIAST
- ↑ Commodore Trivia Edition #26 Answers for February 1996
External links
- PETSCII character map, part 1, part 2, part 3 (JPEG)
- An attempt at PETSCII to Unicode mapping, unshifted, shifted
- Commodore 128 PETSCII control characters
- Typography in 8 bits: System fonts
- Online PETSCII-art editor