Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ZX Spectrum для пользователей и программистов.doc
Скачиваний:
56
Добавлен:
28.09.2019
Размер:
1.92 Mб
Скачать

Использование дополнительных фонтов

Другим, более гибким способом русификации является переключение

работы компьютера с основного набора символов (фонта) на другой, подгружаемый в память.

Полный набор символов ZX Spectrum состоит из 96 знаков — большие и маленькие латинские буквы, цифры, знаки препинания и т. д. Он занимает в ПЗУ 96x8=768 байт и не может быть изменен. Однако существует системная переменная CHARS, указывающая местоположение набора символов, с которым в данный момент работает компьютер (текущего фонта). Изменив значение этой переменной, можно назначить текущим фонт, расположенный по другому адресу, например, в ОЗУ. Переменная CHARS находится по адресам 23606/07 и при работе со стандартным набором указывает на адрес 15360 (число, на 256 меньшее адреса начала фонта в ПЗУ, см. «Системные переменные»).

Для изменения адреса текущего фонта нужно выполнить следующие

операторы:

Input "address: ";a: rem адрес нового фонта

POKE 23606,a-256*INT (a/256):POKE 23607,INT (а/256)-1

Русифицированный фонт может быть сформирован с помощью любой из многочисленных графических программ, позволяющих манипулировать шрифтами. Можно порекомендовать редактор Art Studio. При создании кириллицы встает вопрос, какому латинскому символу должна соответствовать конкретная русская буква. Вопрос этот не слишком принципиальный, однако есть определенные стандарты, которыми стоит руководствоваться. Обычно устанавливают такое соответствие:

А

А

и

I

Р

R

ш

[

а

а

и

i

Р

r

ш

{

Ь

В

и

J

С

S

щ

]

б

b

и

j

с

S

Щ

}

В

W

к

к

т

Т

ъ

?

в

w

к

k

т

t

ъ

©

Г

G

л

L

У

U

ы

Y

г

g

л

l

У

u

ы

V

д

D

м

М

ф

F

Ь

X

А

d

м

m

Ф

i

Ь

X

t

Е

н

N

X

Н

э

\

е

е

н

n

X

h

э

|

ж

V

о

О

ц

С

ю

@

ж

V

0

о

Ц

с

ю

f

3

Z

п

Р

ч

-

я

Q

3

Z

п

Р

ч

t

я

q

Файл с полным набором символов, созданных в графическом редакторе, записывается на магнитный носитель и обычно имеет длину 768 байт. Для загрузки фонта и назначения его текущим можно воспользоваться следующей подпрограммой:

9989 INPUT "Starting address: ";a: REM адрес загрузки шрифта

9990 IF a<25000 OR a>64768 THEN GO TO 9989

9991 CLEAR a-1: LET a=PEEK 23730+2S6*PEEK 23731 + 1

9992 LET RUS=9996: LET LAT=9998

9993 LOAD "RUS"CODE a: REM загрузка шрифта

9994 LET a2=INT (a/256)-1: LET a1=a-256*INT (a/256)

9995 STOP

9996 POKE 23606,a1: POKE 23607,a2: REM русский регистр

9997 RETURN

9998 POKE 23606,0: POKE 23607,60: REM латинский регистр

9999 RETURN

Теперь для переключения на русский шрифт достаточно вызвать

подпрограмму, расположенную со строки 9996, то есть выполнить оператор GO SUB RUS, а для возвращения к латинскому — оператор GO SUB LAT. Переключения можно производить как в непосредственном режиме, так и вставляя операторы GO SUB в программу. В последнем случае можно получать на экране одновременно и латинский, и русский текст. Например, дописав в рассмотренную выше программу не совсем понятную строку

10 GO SUB LAT: PRINT "ZX Spectrum -";: GO SUB RUS:

PRINT "moj drug"

и запустив программу командой RUN, на экране получим вполне

осмысленную фразу:

ZX Spectrum — мой друг

При выводе листинга текст на экране может быть представлен только либо латинским, либо русским шрифтом.

Адрес размещения подгружаемого фонта рекомендуется выбирать в

конце ОЗУ (например, 64768). Количество дополнительных фонтов, одновременно находящихся в памяти, ограничено лишь ее объемом.

Если область, которую занимают фонты, защитить оператором CLEAR

(как это сделано в приведенном примере), то они не будут удаляться из памяти даже после выполнения оператора NEW.

Заметим, что этот способ русификации программ наиболее универсален — такие программы будут работать на любом Spectrum-совместимом компьютере, в отличие от других вариантов, когда, например, русский фонт «зашивается» в стандартов ПЗУ. Правда, размещение кириллицы в ПЗУ

дает и определенные удобства, но, обычно, лишь ценой частичной, а иногда и полной потери совместимости с ZX Spectrum.