PETSCII(PET標準情報交換コード)、別名CBM ASCIIは、コモドール・ビジネス・マシーンズの8ビットホームコンピュータで使用されている文字セットです。
この文字セットは1977年にPETで初めて使用され、その後 CBM-II、VIC-20、Commodore 64、Commodore 16、Commodore 116、Plus/4、Commodore 128で使用されました。しかし、Amigaパーソナルコンピュータファミリーは代わりに標準のISO/IEC 8859-1を使用しています。
文字セットは主にレナード・トラミエル(コモドールCEOのジャック・トラミエルの息子)とPETデザイナーのチャック・ペドルによって設計されました。[ 1 ] [ 2 ] [ 3 ] PETSCIIのグラフィック文字は、1977年にマイクロソフトのリック・ウェイランドにマイクロソフトの既存の6502 BASICへの望ましい変更を説明した際に、コモドールがコモドールBASIC用に指定した拡張機能の1つでした。 [ 4 ] VIC-20はPETと同じピクセル単位のフォントを使用しましたが、VICの22桁の画面のため文字はより幅広く見えました。しかし、コモドール64は、マシンの高解像度画面によって発生する色のアーティファクトを避けるために、わずかに再設計された太字の大文字フォント、基本的にPETの太字バージョンを使用しました。C64の小文字は、 Atari 8ビットコンピュータのATASCIIフォント(2.75年前にリリース)の小文字と同一です。
ペドルは、カードのマークの導入は、PET上でカードゲームを簡単に作成できるようにすべきだという要求(彼が受け取った仕様リストの一部)がきっかけだったと主張している。[ 2 ]

「シフトなし」PETSCIIは、 ASCIIの1963年版に基づいています(ASCIIに基づく他のほとんどすべてのコンピュータ文字セットが使用する1967年版とは異なります)。大文字のみで、0x5Eにはキャレット⟨ ^ ⟩の代わりに上向き矢印⟨ ↑ ⟩ 、0x5Fにはアンダースコア⟨_⟩の代わりに左向き矢印⟨ ← ⟩があります。オリジナルのCommodore PETを除くすべてのバージョンでは、 0x5Cにバックスラッシュ⟨ \ ⟩の代わりに英国ポンド記号⟨ £ ⟩があります。ASCII-1967で追加されたその他の文字(小文字、グレイブアクセント、中括弧、縦棒、チルダ)はPETSCIIには存在しません。コード0xA0 ~ 0xDFは、CBM固有のブロックグラフィック文字(水平線、垂直線、ハッチング、陰影、三角形、円、トランプのマーク)に割り当てられています。
PETSCIIには「シフト」モード(「ビジネスモード」とも呼ばれる)もあり、0x41 ~ 0x5Aのアドレスの大文字を小文字に変更し、0xC1 ~ 0xDAのアドレスのグラフィックを大文字に変更します。ASCIIでは大文字と小文字が入れ替わります。このモードは、いずれかのSHIFTキーを押しながらCommodoreキーを押して離すことで切り替えます。シフトは、アドレス59468に値14を入力して代替セットを選択するか、値12を入力して標準に戻すことで実行できます。Commodore 64では、バイト53272のビット2を反転することでセットが切り替わります。一部のPETモデルでは、行PRINT CHR$(14)間隔を調整して文字セットを変更する特別な制御コードを使用してこれを実現することもできます。POKEメソッドも引き続き利用可能で、行間隔は変更されません。[ 5 ]
PETSCIIには、カーソルや画面の制御コードが含まれています。例えば、、、、{HOME}などです(後者2つは反転表示文字の有効化/無効化)。これらの制御コードは、プログラム一覧では反転表示文字として表示されていましたが、一部のコンピュータ雑誌では、より読みやすい一覧を提供するために、上記の例のように、実際のコード名を中括弧で囲んで整形して表示していました。PETSCIIには中括弧文字がないため、これは明確です。{CLR}{RVS ON}{RVS OFF}
文字を格納する場合( で使用される「インターチェンジ」マッピングCHR$())と文字を表示する場合(「ビデオ」マッピング)には、異なるマッピングが使用されます。たとえば、画面メモリに直接書き込んで画面に「@ABC」という文字を表示するには、64、65、66、67ではなく、10進数値0、1、2、3をPOKEします。[ 6 ] [ 7 ]
デフォルトでは、キーボードはコードページの下半分へのアクセスを提供します。Shiftキーを押しながらキーを押すと、対応する上半分のコードポイントが表示されます。PETSCIIコードポイントの中には、印刷できないものがあり、キーボード入力専用です(例:F1、RUN/STOP)。

以下の表は、によって使用される「交換」PETSCIIエンコーディングを表していますCHR$()。
制御文字は 0x00 ~ 0x1F および 0x80 ~ 0x9Fの範囲で定義されますが、どの制御文字が定義されているか、またどのように定義されているかはシステムによって異なります。以下の表には制御文字は含まれていません。制御文字のエンコードについては、§ 制御文字で説明します。
0x60 – 0x7F と 0xE0 – 0xFFの範囲は重複していますが、重複する内容はシステムによって異なります。Commodore PET では、それぞれ 0x20 – 0x3F と 0xA0 – 0xBF を重複しています。Commodore VIC-20、64、16、128 では、それぞれ 0xC0 – 0xDF と 0xA0 – 0xBF を重複しています。[ 6 ]これらの文字は視覚的には重複していますが、意味的には異なります。たとえば、Commodore PET では、コード ポイント 0x2C と 0x6C はどちらもカンマ文字を生成しますが、入力フィールド間の区切り文字として機能するのは 0x2C だけです。[ 8 ]
\グラフィック文字は、0x5C ( Commodore PET と他のシステムの両方に存在する)、0xDE (Commodore PET と VIC-20 では U+1FB95 CHECKER BOARD FILL、他のシステムでは U+1FB96 INVERSE CHECKER BOARD FILL)、および 0x60 –£ 0x7Fの範囲(Commodore PET では別の範囲が重複) を除いて、システム間でほぼ同一です。さらに、Commodore PET 2001のシフト文字セットでは、大文字と小文字が他のシステムと入れ替わっています。
Unicode規格では、PETSCII文字は様々なブロックで表現されます。
以下の表は、Commodore VIC-20、64、16、および128で使用されているPETSCIIエンコーディングを表しています。
グラフィック文字はコモドールシステム間でほぼ共通していましたが、コントロール文字は頻繁に異なっていました。以下の表は、Commodore PET 2001、Commodore PET 8032、VIC-20、Commodore 64、Commodore 16、Commodore 128(40桁モードと80桁モード)におけるコントロール文字の意味を示しています。
VIC-20とC64/128のカラーバリエーションは、VIC-IIの記事に記載されています。
PETSCIIの最初の192コードのうち、128文字はグラフィック文字です(32~127と160~192)。これにより、DATA文内、あるいはPETSCII対応マシン間で、「128進数」形式のエンコーディングが可能になります。また、制御文字も使用できます。制御文字は引用符で囲むと表示されますが、どの制御文字が定義されているかはシステムによって異なります。
「Base 128」エンコーディングの主な用途は、Commodore BASIC の DATA ステートメントです。バイナリ データは比較的低いオーバーヘッドで格納でき、1 文字のデータで 7 ビットのデータをエンコードできます。標準的な 80 文字の行では、通常 4 文字が行番号に使用され、2 文字が省略された DATA ステートメント ( dA) に使用されます。BASIC ではカンマとコロンが意味を持つため、引用符文字も必要となり、データ用に 73 文字が残ります。1 文字あたり 7 ビットの場合、1 DATA 行には 511 ビットのバイナリ データを格納でき、効率は 79% になります。3 桁の行番号を使用すると、効率は 80% に向上します。2 桁の行番号を使用すると、効率は 82% になります。
Commodore BASICでバイナリデータを格納する場合、通常は2桁または3桁の行番号が最適な選択肢となるようだ。
引用符で囲まれた文字列では、164個のPETSCII文字を表現できます。したがって、理論的には164進数表現が可能です。これにより、色値、ファンクションキー、カーソル制御が追加されます。
Q $195) VIC-20 より前の CBM マシンでは、どの chr$ コードが chr$(44) と同じ文字、つまりカンマを出力しますか。
A $195) 108。
Q $196) $195 で説明されている文字は何か役に立ちますか。
A $196) INPUT で読み込んだ文字列にカンマを入れるためです。INPUT はカンマ (chr$(44)) を入力フィールド間の区切り文字として扱いますが、chr$(108) は同じ効果を生み出さないため、ディスクに書き込んだデータで 44 を 108 に置き換えて、INPUT で読み込むことができます。