知識ベース

ZX Spectrumの文字セット

ZX Spectrumの文字セットは、英国のSinclair ZX Spectrumファミリーコンピューターで使用されているASCIIのバリアントです。 ASCII-1967に基づいていますが、^、 `、DELの各文字は↑、£、©に置き換えられます。また、共通BSおよびCR以外のC0制御コードの使用も異なり、ASCII範囲を超える128個の高ビット文字を使用します。 ZX Spectrumの印刷可能な文字とシステムフォントのメインセットは、Jupiter Aceコンピューターでも使用されています。

印刷可能な文字

コードポイント0x5Eはキャレット(^)ではなく上矢印(↑)、0x60は重大なアクセントではなくポンド記号(£)であることを除いて、標準のUS-ASCII、0x20–0x7FはSpectrum文字セットに含まれています。 ( `)、および0x7Fは、制御文字DELではなく著作権記号(©)です。 ASCIIの古い1963バージョンでは、↑として0x5Eを使用することもありました。 ASCIIの英国版(ISO-646-GB)のように£記号は0x23にマップされず、ポンド記号と番号記号(#)の両方を同時に許可しました。 ↑文字はSpectrumのBASICの累乗演算子です。ASCII1967と比較して^が置き換えられるのと同様に、BASICおよび他のプログラミング言語の他の多くの方言で累乗に使用されます。

0x7Fを超えると、Spectrum文字セットは特別な目的のために高ビット範囲0x80–0xFFを使用します。 0x80〜0x8Fには、ZX80文字セットとZX81文字セットが(他の場所で)持っているのと同じ2x2ブロックグラフィックス文字が含まれており、Block Elements Unicodeブロックでも使用できます。ただし、ZX Spectrumの標準文字セットには、ZX80 / 81 50%ディザー1x2ブロックグラフィックス文字は含まれていません。コードポイント0x90–0xA4には元々21個のUser-Defined Graphics(UDG)文字が含まれ、0xA5–0xFFには単一コードポイントとしてトークン化されたBASICキーワードが含まれています。後に導入された128 BASICモードでは、これは0xA2で終わる19個のUDG文字に変更され、その後に2つの新しいトークンSPECTRUMおよびPLAYが続きます。コードポイント0xC7–0xC9は、2文字の演算子=、> =、および>であり、同様に単一のコードポイントにトークン化されます。これらのトークンを使用すると、PRINTなどのBASICコマンドを、行の先頭(コマンドモード)で1回キーを押すだけで入力でき、0xF6が生成されます。これは画面上に完全なキーワードPRINTとして表示されますが、1バイトトークンのみが保存されるため、その1バイトのみがインタープリターによって解析されるか、テープなどの外部ストレージに保存/ロードされる必要があります。

すべての非UDGスペクトル文字をUnicodeにマップできます。 ASCII -1967以外の3つの文字↑、£、および©は、U + 2191、U + 00A3、およびU + 00A9にあります。 2×2ブロックのグラフィック文字はU + 2580–U + 259Fのブロック要素ブロックにありますが、後者のフォントサポートは普遍的ではありません。

UDG文字の形状はRAMメモリ領域にマップされ、文字AUのコピーに初期化されますが、たとえばBASICコマンドPOKEを使用して任意に再定義できます。システムフォントのすべての文字と同様に、8バイトで保存された8×8ピクセルグリッドを使用します。それらを再定義すると、後続のPRINTステートメントの外観が変更されますが、画面に既に描画されているUDG文字は変更されません。 UDG文字の定義の場所は、文字を引数として使用するBASIC関数USRで決定できます。たとえば、最初の文字はUSR "A"です。デフォルトでは、これは48Kスペクトルのメモリアドレス65368(0xFF58)から65535(0xFFFF)にあるRAMの最後の168(21×8)バイトを指します。場所は、メモリアドレス23675/6(0x5C7B / C)にあるシステム変数UDGによって示され、変更できます。 ZX SpectrumのブラジルクローンであるTK90Xには、これらのUDG文字をグラフィカルに編集するためのROMアプリケーションと、ポルトガル語で使用されるアクセント付き文字をプリロードする機能が含まれていました。 (このため、TK90Xはコード0と1でそれぞれ2つの追加の基本コマンド「trace」と「udg」を定義しました)

メインシステムフォントの定義32(スペース)から127(著作権)は、メモリアドレス23606/7(0x5C36 / 7)にあるシステム変数CHARSによって参照されます。スペース文字の最初のバイトより256バイト小さいと定義され、文字をCHARS + 8× コードポイントに配置するための式を簡素化します 。 CHARS値のデフォルト値は15360(0x3C00)で、システムフォントはSpectrumのROMの最後のアドレス15616(0x3D00)から16383(0x3FFF)までです。代替フォント全体をRAMにロードし、それに応じてCHARS変数を再ポイントできます。

制御コード

制御コード領域(C0範囲)では、Spectrumは、主にINKやPAPERなどの独自の制御を使用して、前景色と背景色を制御します。ただし、一般的なBSおよびCRコードポイントはASCIIの場合と同じです。カーソルダウン(0x0A、ASCIIラインフィード)はOVER 1(透明オーバープリント)で印刷された32スペースでシミュレートでき、カーソルアップ0x0B(ASCII垂直タブ)は32バックスペースでシミュレートできます。システムROMに障害があり、0x09でのカーソル右(ASCII水平タブレーションを参照)が機能しません。

制御コード0x0Eは、テキスト処理を高速化するために、浮動小数点数が続くことを示すために使用されます。 Sinclair BASICプログラムでは、数値定数はASCIIとして格納され、その後に0x0Eバイトと5バイトのバイナリ浮動小数点表現が続きます。 BASICプログラムをリストする場合、ASCII部分のみが使用されますが、実行時にはバイナリ表現のみが使用されます。 Spectrumプログラムの中には、これを利用して数値を難読化するものもあれば、メモリを節約するために使用するものもありました。たとえば、GO TO 10として表示されるBASIC行には、数字1と0のASCII文字と、それに続く0x0Eバイトと、10ではなく100の浮動小数点表現が含まれます。プログラムは100行目にジャンプしました。

未定義のコード

範囲0x00–0x05、0x07、0x0A–0x0C、0x0Fおよび0x17–0x1Fは未定義です。ほとんどの場合、ディスプレイに印刷すると疑問符が生成されます。ただし、特定の制御コードと組み合わせてリテラル数値を表すために使用できます。たとえば、INK + 0x07は、インク(前景テキスト)の色を色番号7(白)に設定します。

キャラクターセット

スペクトル文字セット
0_キーを押す 0_文字 1_ 2_ 3_ 4_ 5_ 6_ 7_ 8_ 9_ A_ B_ C_ D_ E_ F_
_0 インク 0 @ P £ p (A) (Q) VAL USR フォーマット LPRINT リスト
_1 論文 1 A Q a q (B) (R) レン STR $ 移動 LLIST レット
_2 閃光 2 B R b r (C) (S) CHR $ 消去 やめる 一時停止
_3 明るい 3 C S c s (D) (T) COS ない 開いた # 読む
_4 本当のビデオ $ 4 D T d t (E) (U) タン 置き場 閉じる# データ ポーク
_5 inv video オーバー 5 E うん e あなたは (F) RND ASN または マージ 戻す 印刷する
_6 キャップスロックコンマ AT 6 F V f v (G) INKEY $ ACS そして 確認 新着 プロット
_7 編集するタブ ' 7 G W g w (H) PI ATN = ビープ 境界 走る
_8 8 H バツ h バツ (私) FN LN > = サークル 持続する セーブ
_9 9 Y y (J) ポイント EXP > インク 薄暗い ランダム化
_A ダウン * J Z j z (K) 画面$ INT ライン 論文 レム IF
_B アップ + ; K k { (L) ATTR SQR その後 閃光 ために CLS
_C 削除する L \ l | (M)b タブ ABS ステップ GO SUB クリア
_E 伸ばす > N n (O) VAL $ ピーク DEF FN オーバー 入力 戻る
_F グラフィックス / O _ o © (P) コード ネコ でる 負荷 コピー