Back to MrGibson.com
C64 BASIC V2 only.

PETSCII (PET Standard Code of Information Interchange), also known as CBM ASCII,    
    
PETSCII - C64 ASCII - CMB ASCII
A#  Character  A#  Character  A#  Character  A#  Character  A#  Character
32  [sp]       48  0          64  @          80  P          96  

33  !          49  1          65  A          81  Q          97  ♠

34  "          50  2          66  B          82  R          98  |

35  #          51  3          67  C          83  S          99  

36  $          52  4          68  D          84  T          100 

37  %          53  5          69  E          85  U          101

38  &          54  6          70  F          86  V          102

39  '          55  7          71  G          87  W          103 

40  (          56  8          72  H          88  X          104

41  )          57  9          73  I          89  Y          105 

42  *          58  :          74  J          90  Z          106 

43  +          59  ;          75  K          91  [          107 

44  ,          60  (          76  L          92  £          108 

45  -          61  =          77  M          93  ]          109 \

46  .          62  )          78  N          94  ↑          110 /

47  /          63  ?          79  O          95  ←          111 


Examples:
10 PRINT CHR$(40)

When code is RUN, this will print 
(

10 PRINT CHR$(64)

When code is RUN, this will print
@


This section below is for character storage in ROM and RAM order and *not* PETSCII (ASCII) order. RAM and ROM character order: Partial C64 character set - character number (char num) and character. R# Character R# Character R# Character R# Character R# Character 0 @ 13 M 26 Z 39 ' 52 4 1 A 14 N 27 [ 40 ( 53 5 2 B 15 O 28 £ 41 ) 54 6 3 C 16 P 29 ] 42 * 55 7 4 D 17 Q 30 ↑ 43 + 56 8 5 E 18 R 31 ← 44 , 57 9 6 F 19 S 32 [sp] 45 - 58 : 7 G 20 T 33 ! 46 . 59 ; 8 H 21 U 34 " 47 / 60 < 9 I 22 V 35 # 48 0 61 = 10 J 23 W 36 $ 49 1 62 > 11 K 24 X 37 % 50 2 63 ? 12 L 25 Y 38 & 51 3 64
C64 Basic Part II - Character manipulation Move charaters from ROM to RAM for manipulation: 100 rem copy rom routine 105 for i=0 to 26: read x: poke 828+i,x: next i 110 data 169,000,160,208,133,095,132,096 : rem LDA #0; LDY #$D0; STA 95, STY 96 115 data 169,000,160,224,133,090,132,091 : rem LDA #0; LDY #$E0; STA 90; STY 91 120 data 169,000,160,064,133,088,132,089 : rem LDA #0; LDY #$40; STA 88; STY 89 125 data 076,191,163 : rem JMP $A3BF 130 rem COPY FULL SET $D000-$DFFF -> $3000-$3FFF (POKE 12288 - 16383) 135 rem move char set rom into ram 140 poke 56334,peek(56334) and 254 : rem INTERRUPT OFF 145 poke 1,peek(1) and 251 : rem CHAR SET ROM ON 150 sys 828 : rem START COPY 155 poke 1,peek(1) or 4 : rem CHAR SET ROM OFF 160 poke 56334,peek(56334) or 1 : rem INTERRUPT ON 165 poke 53272,peek(53272) and 240 or 12 : rem CHAR SET RAM AT $3000 Each character in high resolution mode is formed by a matrix of 8 × 8 pixels, so there are 8 rows per character, each with their own POKE address. 8 pixels per row. Each row can be programmed by converting each pixel/binary value to a decimal and stored at the POKE address value. char RAM POKE num row 1 row 2 row 3 row 4 row 5 row 6 row 7 row 8 character 0 12288 12289 12290 12291 12292 12293 12294 12295 -> @ 1 12296 12297 12298 12299 12300 12301 12302 12303 -> A 2 12304 12305 12306 12307 12308 12309 12310 12311 -> B 3 12312 12313 12314 12315 12316 12317 12318 12319 -> C 4 12320 12321 12322 12323 12324 12325 12326 12327 -> D 5 12328 12329 12330 12331 12332 12333 12334 12335 -> E 6 12336 12337 12338 12339 12340 12341 12342 12343 -> F 7 12344 12345 12346 12347 12348 12349 12350 12351 -> G 8 12352 12353 12354 12355 12356 12357 12358 12359 -> H 9 12360 12361 12362 12363 12364 12365 12366 12367 -> I 10 12368 12369 12370 12371 12372 12373 12374 12375 -> J 11 12376 12377 12378 12379 12380 12381 12382 12383 -> K 12 12384 12385 12386 12387 12388 12389 12390 12391 -> L 13 12392 12393 12394 12395 12396 12397 12398 12399 -> M 14 12400 12401 12402 12403 12404 12405 12406 12407 -> N 21 12456 12457 12458 12459 12460 12461 12462 12463 -> U 22 12464 12465 12466 12467 12468 12469 12470 12471 -> V 23 12472 12473 12474 12475 12476 12477 12478 12479 -> W 24 12480 12481 12482 12483 12484 12485 12486 12487 -> X 25 12488 12489 12490 12491 12492 12493 12494 12495 -> Y 26 12496 12497 12498 12499 12500 12501 12502 12503 -> Z 27 12504 12505 12506 12507 12508 12509 12510 12511 -> [ 28 12512 12513 12514 12515 12516 12517 12518 12519 -> £ or (^ Vice) 29 12520 12521 12522 12523 12524 12525 12526 12527 -> ] 30 12528 12529 12530 12531 12532 12533 12534 12535 -> ↑ 31 12536 12537 12538 12539 12540 12541 12542 12543 -> ← 32 12544 12545 12546 12547 12548 12549 12550 12551 -> space 33 12552 12553 12554 12555 12556 12557 12558 12559 -> ! 34 12560 12561 12562 12563 12564 12565 12566 12567 -> " 35 12568 12569 12570 12571 12572 12573 12574 12575 -> # 36 12576 12577 12578 12579 12580 12581 12582 12583 -> $ 37 12584 12585 12586 12587 12588 12589 12590 12591 -> % 38 12592 12593 12594 12595 12596 12597 12598 12599 -> & 39 12600 12601 12602 12603 12604 12605 12606 12607 -> ' 40 12608 12609 12610 12611 12612 12613 12614 12615 -> ( 41 12616 12617 12618 12619 12620 12621 12622 12623 -> ) 42 12624 12625 12626 12627 12628 12629 12630 12631 -> * 43 12632 12633 12634 12635 12636 12637 12638 12639 -> + 44 12640 12641 12642 12643 12644 12645 12646 12647 -> , 45 12648 12649 12650 12651 12652 12653 12654 12655 -> - 46 12656 12657 12658 12659 12660 12661 12662 12663 -> . 47 12664 12665 12666 12667 12668 12669 12670 12671 -> / 48 12672 12673 12674 12675 12676 12677 12678 12679 -> 0 49 12680 12681 12682 12683 12684 12685 12686 12687 -> 1 EXAMPLE to rewrite character [ 170 rem rewrite char [ to stripes 171 rem Using the memory move to RAM in the above code 172 rem [ starts at 12504 and ends at 1250 173 rem 0 is an empty row of pixels and 255 is a full row of pixels in decimal 175 for a=12504 to 12511: read ze: poke a,ze: poke a+1024,255-ze: next a 180 data 255,0,255,0,255,0,255,0 Examples of 100 of the 256 possible compinations of pixels on a row.

1 1 1 1 1 1 1 1 = 255 - FF

1 1 1 1 1 1 1 0 = 254 - FE

1 1 1 1 1 1 0 1 = 253 - FD

1 1 1 1 1 1 0 0 = 252 - FC

1 1 1 1 1 0 1 1 = 251 - FB

1 1 1 1 1 0 1 0 = 250 - FA

1 1 1 1 1 0 0 1 = 249 - F9

1 1 1 1 1 0 0 0 = 248 - F8

1 1 1 1 0 0 1 1 = 243 - F3

1 1 1 1 0 0 1 0 = 242 - F2

1 1 1 1 0 0 0 1 = 241 - F1

1 1 1 1 0 0 0 0 = 240 - F0

1 1 1 0 1 1 1 1 = 239 - EF

1 1 1 0 1 0 1 1 = 235

1 1 1 0 1 0 1 0 = 234

1 1 1 0 1 0 0 1 = 233

1 1 0 1 0 1 0 1 = 213

1 1 0 1 0 1 0 0 = 212

1 1 0 1 0 0 1 1 = 211

1 1 0 1 0 0 1 0 = 210

1 1 0 1 0 0 0 1 = 209


1 0 0 1 0 0 1 1 = 147 - 93

1 0 0 1 0 0 1 0 = 146 - 92

1 0 0 1 0 0 0 1 = 145 - 91

1 0 0 1 0 0 0 0 = 144 - 90

1 0 0 0 1 1 1 1 = 143 - 8F

1 0 0 0 1 1 1 0 = 142 - 8E

1 0 0 0 1 1 0 1 = 141 - 8D

1 0 0 0 1 1 0 0 = 140 - 8C

1 0 0 0 1 0 0 1 = 137 - 89

1 0 0 0 1 0 0 0 = 136 - 88

1 0 0 0 0 1 1 1 = 135 - 87

1 0 0 0 0 1 1 0 = 134 - 86

1 0 0 0 0 1 0 1 = 133 - 85

1 0 0 0 0 1 0 0 = 132 - 84

1 0 0 0 0 0 1 1 = 131 - 83

1 0 0 0 0 0 1 0 = 130 - 82

1 0 0 0 0 0 0 1 = 129 - 81

1 0 0 0 0 0 0 0 = 128 - 80


0 1 1 1 1 1 0 1 = 125

0 1 1 1 1 1 0 0 = 124

0 1 1 1 1 0 0 1 = 121

0 1 1 1 1 0 0 0 = 120

0 1 1 0 0 1 1 0 = 102

0 1 1 0 0 1 0 1 = 101

0 1 1 0 0 1 0 0 = 100

0 1 0 1 0 1 0 1 = 85

0 1 0 1 0 0 0 1 = 81

0 1 0 1 0 0 0 0 = 80

0 1 0 0 1 1 0 1 = 77

0 1 0 0 1 1 0 0 = 76

0 1 0 0 1 0 1 1 = 75

0 1 0 0 1 0 1 0 = 74

0 1 0 0 1 0 0 1 = 73

0 1 0 0 1 0 0 0 = 72

0 1 0 0 0 1 1 1 = 71

0 1 0 0 0 1 1 0 = 70

0 1 0 0 0 1 0 1 = 69

0 1 0 0 0 1 0 0 = 68

0 1 0 0 0 0 1 1 = 67

0 1 0 0 0 0 1 0 = 66

0 1 0 0 0 0 0 1 = 65

0 1 0 0 0 0 0 0 = 64

0 0 1 1 1 1 1 1 = 63


0 0 1 1 1 1 1 0 = 62

0 0 1 1 1 1 0 1 = 61

0 0 1 1 1 1 0 0 = 60

0 0 1 1 0 1 1 1 = 55

0 0 1 1 0 0 1 1 = 51

0 0 1 1 0 0 1 0 = 50

0 0 1 0 1 1 0 1 = 45

0 0 1 0 1 0 0 1 = 41

0 0 1 0 1 0 0 0 = 40

0 0 1 0 0 0 0 1 = 33

0 0 1 0 0 0 0 0 = 32

0 0 0 1 1 1 1 1 = 31

0 0 0 1 1 1 1 0 = 30

0 0 0 1 1 0 0 1 = 25

0 0 0 1 0 1 0 1 = 21

0 0 0 1 0 1 0 0 = 20

0 0 0 1 0 0 0 1 = 17 - 11

0 0 0 1 0 0 0 0 = 16 - 10

0 0 0 0 1 1 1 1 = 15 - 0F

0 0 0 0 1 1 1 0 = 14 - 0E

0 0 0 0 1 0 1 1 = 11 - 0B

0 0 0 0 1 0 1 0 = 10 - 0A

0 0 0 0 1 0 0 1 = 9 - 09

0 0 0 0 1 0 0 0 = 8 - 08

0 0 0 0 0 1 1 1 = 7 - 07

0 0 0 0 0 1 1 0 = 6 - 06

0 0 0 0 0 1 0 1 = 5 - 05

0 0 0 0 0 1 0 0 = 4 - 04

0 0 0 0 0 0 1 1 = 3 - 03

0 0 0 0 0 0 1 0 = 2 - 02

0 0 0 0 0 0 0 1 = 1 - 01

0 0 0 0 0 0 0 0 = 0 - 00