■ Использование пополнительных фонтов
Другим, более гибким способом русификации является переключение
работы компьютера с основного набора сштолов (фонта) на другой, подгру-
жаемый в память.
Полный набор символов ZX Spectrum состоит из 96 знаков — боль-
шие и маленькие латинские буквы, цифры, знаки препинания и т. д. Он
занимает в ПЗУ 96x8=768 байт и не может быть изменен. Однако существует
системная переменная CHARS, указывающая местоположение набора сим-
волов, с которым в данный момент работает компьютер (текущего фонта).
Изменив значение этой переменной, можно назначить текущим фонт, рас-
положенный по другому адресу, например, в ОЗУ. Переменная CHARS
находится по адресам 23606/07 и при работе со стандартным набором
указывает на адрес 15360 (число, на 256 меньшее адреса начала фонта в
ПЗУ, см. «Системные переменные»).
Для изменения адреса текущего фонта нужно выполнить следующие
операторы:
INPUT "address: ";а: REM адрес нового фонта
РОКЕ 23606,а—256*1NT (а/256): POKE 23607.INT (а/256)-1
Русифицированный фонт может быть сформирован с помощью лю-
бой из многочисленных графических программ, позволяющих манипулиро-
вать шрифтами. Можно порекомендовать редактор Art Studio. При создании
кириллицы встает вопрос, какому латинскому символу должна соответство-
вать конкретная русская буква. Вопрос этот не слишком принципиальный,
однако есть определенные стандарты, которыми стоит руководствоваться.
Обычно устанавливают такое соответствие:
А |
А |
и |
1 |
Р |
R |
ш |
[ |
а |
а |
и |
i |
P |
r |
Ш |
{ |
Б |
В |
й |
] |
С |
S |
щ |
] |
б |
Ь |
й |
j |
с |
s |
Щ |
} |
В |
W |
к |
к |
т |
Т |
ъ |
? |
в |
w |
к |
k |
T |
t |
ь |
© |
Г |
G |
л |
L |
У |
и |
ы |
Y |
г |
9 |
п |
1 |
У |
u |
Ы |
У |
Д |
D |
м |
м |
Ф |
F |
ь |
X |
А |
d |
м |
m |
Ф |
f |
b |
X |
Е |
Е |
н |
N |
X |
Н |
э |
|
е |
е |
н |
n |
X |
h |
Л |
! |
Ж |
V |
о |
О |
ц |
С |
ю |
® |
ж |
V |
о |
о |
Ц |
с |
Ю |
i |
3 |
Z |
п |
Р |
ч |
|
я |
О |
3 |
Z |
11 |
P |
4 |
t |
я |
q |
Файл с полным набором символов, созданных в графическом редак-
торе, записывается на магнитный носитель и обычно имеет длину 768 байт.
Для загрузки фонта и назначения его текущим можно воспользоваться
следующей подпрограммой:
9989 INPUT "Starting address: ";а: REM адрес загрузки шрифта
9990 IF а<25000 OR а>64768 THEN GO TO 9989
9991 CLEAR a-1: LET a=PEEK 23730+256*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*!NT (a/256)
9995 STOP
9996 POKE 23606,al: 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.