Movatterモバイル変換


[0]ホーム

URL:


Jump to content
WikipediaThe Free Encyclopedia
Search

ZX Spectrum character set

From Wikipedia, the free encyclopedia
Character set
ZX Spectrum character set
The ZX Spectrum character set as rendered in the system font (not including User-Defined Graphics characters)
LanguageEnglish withpseudographics
Created bySinclair Research
Based onASCII-1967
Preceded byZX81 character set
Other related encodingsZX80 character set,Jupiter Ace character set

TheZX Spectrum character set is the variant ofASCII used in theZX Spectrum family computers. It is based onASCII-1967 but the characters ^, ` andDEL are replaced with ↑, £ and ©. It also differs in its use of theC0 control codes other than the commonBS andCR, and it makes use of the 128 high-bit characters beyond the ASCII range.[1] The ZX Spectrum's main set of printable characters and system font are also used by theJupiter Ace computer.

Printable characters

[edit]
Screenshot of output from aSinclair BASIC program that demonstrates all printable code points including BASIC keywords and the User-Defined Graphics characters (by default defined as copies of the A-U glyphs)

Standard US-ASCII, 0x20–0x7F, is included in the Spectrum character set except that code point 0x5E is anup-arrow (↑) instead of acaret (^), 0x60 is thepound sign (£) instead of thegrave accent (`), and 0x7F is thecopyright sign (©) instead of thecontrol characterDEL. Note that the use of 0x5E as ↑ was also the case in the older 1963 version of ASCII. The £ sign was not mapped to 0x23 as in the British variant of ASCII (ISO-646-GB), allowing both the pound sign and thenumber sign (#) simultaneously. The ↑ character is theexponentiation operator inSpectrum's BASIC, just like the ^ it replaces compared to ASCII-1967 is used for exponentiation in many other dialects of BASIC and other programming languages.

Beyond 0x7F, the Spectrum character set uses the high-bit range 0x80–0xFF for special purposes. 0x80–0x8F contain the same 2×2block graphics characters that theZX80 character set and theZX81 character set have (at other locations), also available in theBlock Elements Unicode block. However, the ZX Spectrum's standard character set does not include the ZX80/81 50%dithered 1×2 block graphics characters. Code points 0x90–0xA4 contain the originally 21 User-Defined Graphics (UDG) characters, and 0xA5–0xFF contain BASIC keywords tokenized as single code points. In the 128 BASIC mode introduced later, this was changed to 19 UDG characters ending at 0xA2 followed by the two new tokensSPECTRUM andPLAY. Code points 0xC7–0xC9 are the two-character operators<=,>= and<>, similarly tokenized into single code points. These tokens allow a BASIC command likePRINT to be entered with the single keypressP at the beginning of a line (i.e. in command mode), which generated 0xF6. That is displayed as the full keywordPRINT on screen but only a single byte token is stored so only that single byte need be parsed by the interpreter or saved to/loaded from external storage such as tape.

All non-UDG Spectrum characters can be mapped toUnicode. The three non ASCII-1967 characters ↑, £ and © are at U+2191, U+00A3 and U+00A9. The 2×2 block graphics characters are in theBlock Elements block at U+2580–U+259F although font support for the latter is not universal.

The shape of the UDG characters is mapped to aRAM memory area and is initialized to copies of characters A-U, but can be redefined arbitrarily for example using the BASIC commandPOKE. Like all characters in the system font they use an 8×8 pixel grid stored in 8 bytes. Redefining them changes their appearance in subsequentPRINT statements but it does not change any UDG characters already drawn on the screen. The location of a UDG character's definition can be determined with the BASIC functionUSR with the character as the argument, e.g.USR "A" for the first one. By default this points to the last 168 (21×8) bytes of RAM at memory addresses 65368 (0xFF58) to 65535 (0xFFFF) for a 48K Spectrum. The location is pointed to by the system variable UDG[2] which can be found at memory address 23675/6 (0x5C7B/C) and can be changed. TheTK90X, a Brazilian clone of the ZX Spectrum included an in ROM application to graphically edit these UDG characters, along with functionality to preload them with accented letters used in Portuguese. (For this, the TK90X defined two extra Basic commands at the codes 0 and 1, respectivelyTRACE andUDG)[3]

The definition of the main system font, 32 (space) to 127 (copyright), are referenced by the system variable CHARS which can be found at memory address 23606/7 (0x5C36/7). It is defined as 256 bytes lower than the first byte of the space character, simplifying the formula for locating a character to CHARS+8×code point. The CHARS value defaults to the value 15360 (0x3C00), with the system font at the end of the Spectrum's ROM at address 15616 (0x3D00) to 16383 (0x3FFF). Entire alternative fonts can be loaded into RAM and the CHARS variable re-pointed accordingly.[2]

Control codes

[edit]

In the control codes area (the C0 range), the Spectrum mostly uses proprietary controls, such as INK and PAPER to control foreground and background colour. However, the commonBS andCR code points are the same as in ASCII. Cursor-down (0x0A, ASCII Line Feed) can be simulated with 32 spaces printed with OVER 1 (transparent overprint) and cursor-up 0x0B (ASCII Vertical Tabulation) can be simulated with 32 backspaces. The system ROM has a fault which prevents cursor-right at 0x09 (cf. ASCII Horizontal Tabulation) from working.[4][5]

Control code 0x0E is used to indicate that a floating-point number follows, to accelerate text processing. In aSinclair BASIC program numeric constants are stored as ASCII followed by a 0x0E byte and a 5-byte binary floating point representation. When listing a BASIC program only the ASCII part is used but at runtime only the binary representation is used. Some Spectrum programs exploited this to obfuscate numbers, while others did so to save memory.[6] For example, a BASIC line displayed asGO TO 10 could contain the ASCII characters for digits 1 and 0 followed by a 0x0E byte and the floating-point representation of 100 instead of 10. Anyone listing that program saw the number 10, but when executed the program jumped to line 100.

Undefined codes

[edit]

Ranges 0x00–0x05, 0x07, 0x0A–0x0C, 0x0F and 0x17–0x1F are undefined. In most cases, they will produce a question mark if printed to the display. However, they may be used to represent their literal numeric values in conjunction with certain control codes: for example, 0x10 + 0x02 sets the ink (foreground text) colour to colour number 2 (red).

Character set

[edit]

The following table shows the ZX Spectrum character set. Each character is shown with a potentialUnicode equivalent.[7][8] Space and control characters are represented by the abbreviations for their names.

Spectrum Character Set[1]
0_ keypress0_ character1_2_3_4_5_6_7_8_9_A_B_C_D_E_F_
_0INK 0@P£[a]p(A)[b](Q)[b]VALUSRFORMATLPRINTLIST
_1PAPER!1AQaq(B)[b](R)[b]LENSTR$MOVELLISTLET
_2FLASH"2BRbr(C)[b](S)[b]SINCHR$ERASESTOPPAUSE
_3BRIGHT#3CScs(D)[b](T)[c]COSNOTOPEN #READNEXT
_4true videoINVERSE$4DTdt(E)[b](U)[d]TANBINCLOSE #DATAPOKE
_5inv videoOVER%5EUeu(F)[b]RNDASNORMERGERESTOREPRINT
_6caps lockcommaAT&6FVfv(G)[b]INKEY$ACSANDVERIFYNEWPLOT
_7editTAB'7GWgw(H)[b]PIATN<=BEEPBORDERRUN
_8leftleft[e](8HXhx(I)[b]FNLN>=CIRCLECONTINUESAVE
_9rightright[f])9IYiy(J)[b]POINTEXP<>INKDIMRANDOMIZE
_Adown*:JZjz(K)[b]SCREEN$INTLINEPAPERREMIF
_Bup+;K[k{(L)[b]ATTRSQRTHENFLASHFORCLS
_Cdelete,<L\l|(M)[b]ATSGNTOBRIGHTGO TODRAW
_Denterenter-=M]m}(N)[b]TABABSSTEPINVERSEGO SUBCLEAR
_Eextendnumber[g].>N[a]n~(O)[b]VAL$PEEKDEF FNOVERINPUTRETURN
_Fgraphics/?O_o©[a](P)[b]CODEINCATOUTLOADCOPY


Lithuanian Spectrum variant

[edit]

The Lithuanian Spectrum variant replaces some letters in ISO 8859-1 with Lithuanian letters.[9][10] It is calledCode page 63283 by FreeDOS.[11]

Lithuanian (Spectrum)
0123456789ABCDEF
CxĄ
0104
ÁÂÃÄÅČ
010C
ÇĘ
0118
Ė
0116
ÊËĮ
012E
ÍÎÏ
DxÐÑÒÓÔÕŠ
0160
רŲ
0172
Ū
016A
Ž
017D
ÜÝÞß
Exą
0105
áâãäåč
010D
çę
0119
ė
0117
êëį
012F
íîï
Fxðñòóôõš
0161
÷øų
0173
ū
016B
ž
017E
üýþÿ

Notes

[edit]
  1. ^abcDifferent from US-ASCII.
  2. ^abcdefghijklmnopqrsUDG (User-Defined Graphics) character.
  3. ^UDG T in 48 BASIC, keywordSPECTRUM in 128 BASIC.
  4. ^UDG U in 48 BASIC, keywordPLAY in 128 BASIC.
  5. ^In the Standard ROMCHR$ 8 fails backing from line 1 to line zero, and fails in a different way backing off line zero.
  6. ^In the Standard ROMCHR$ 9 does not actually move the text output position.
  7. ^Used in BASIC programs as a marker prefixing a 5-byte floating point number.

References

[edit]
  1. ^abZX Spectrum manual, Appendix A, the character set
  2. ^abZX Spectrum manual, Chapter 25, the system variables
  3. ^"Los Comandos Exclusivos de la TK 90X".CompuClasico - Antigüedades Digitales. 2010. Archived fromthe original on March 27, 2019.
  4. ^Logan, Ian (1983).Understanding Your Spectrum. Melbourne House. p. 189.ISBN 086161111X.
  5. ^Wearmouth, Geoff (2004)."An Assembly File Listing to generate a 16K ROM for the ZX Spectrum".The Incomplete Spectrum ROM Assembly. Archived fromthe original on August 25, 2015.
  6. ^Swann, Richard P. "Part 4 Decrypters".HOW TO HACK on the ZX Spectrum.
  7. ^Zaretski, Michael (2004)."Sinclair ZX Spectrum+ 48K Character Set to Unicode".The Eclectic Satyr. Archived fromthe original on 2005-03-07. Retrieved2023-04-03.
  8. ^Zaretski, Michael (2005-03-07)."Sinclair Spectrum+ 48K Character Set".The Eclectic Satyr. Archived fromthe original on 2005-03-07. Retrieved2023-04-03.
  9. ^"Rašmenų koduotės".Lietuvybé.lt (in Lithuanian).
  10. ^"spectrum.gif".Lietuvybé.lt (in Lithuanian).
  11. ^"Cpi/CPIISO/Codepage.TXT at master · FDOS/Cpi".GitHub.

External links

[edit]

See also

[edit]
Amstrad
Licenced systems
Timex Corporation
Cambridge Computer
Lists ofclones
Compatible or
related systems
Sinclair Research peripherals
Timex peripherals
Other peripherals
People
Early telecommunications
ISO/IEC 8859
Bibliographic use
National standards
ISO/IEC 2022
Mac OSCode pages
("scripts")
DOS code pages
IBM AIX code pages
Windows code pages
EBCDIC code pages
DEC terminals (VTx)
Platform specific
Unicode /ISO/IEC 10646
TeX typesetting system
Miscellaneous code pages
Control character
Related topics
Retrieved from "https://en.wikipedia.org/w/index.php?title=ZX_Spectrum_character_set&oldid=1303473290"
Categories:
Hidden categories:

[8]ページ先頭

©2009-2026 Movatter.jp