Русификация программ
Взгляните еще раз на последнюю программу - разве вам не хочется, чтобы страничка помощи (HELP) была написана на русском языке? И хотя ваш любимый Speccy, скорее всего, не знает русских букв, научить его не так уж сложно.
Прежде всего обратите внимание на заглавные буквы английского алфавита. Многие из них совпадают по начертанию с русскими: А, В, Е, К, М, Н, О, Р, С, Т, X. Русскую букву 3 можно заменить цифрой «три»
Остальные буквы можно создать точно так же, как мы до этого рисовали «гномика», то есть поместив русский шрифт в область определяемых пользователем символов (UDG). Таких символов потребуется 20, а именно: Б, Г, Д, Ж, И, Л, П, У, Ф, Ц, Ч, Ш, Щ, Ъ, Ы, Ь, Э, Ю, Я, И Программа, которая формирует эти недостающие буквы, выглядит так:
Программа 10. РУССКИЙ АЛФАВИТ.
9905 BORDER 0: PAPER 0: INK 5: CLS
9910 FOR N=1 TO 20
9920 READ A$
9930 FOR M=0 TO 7
9940 READ S
9950 POKE USR A$+M,S
9960 NEXT M
9970 NEXT N
9975 DATA "B",0,124,64,124,66,66,124,0
9976 DATA "G",0,126,64,64,64,64,64,0
9977 DATA "D",0,28,36,36,36,36,126,66
9978 DATA "J",0,73,73,62,73,73,73,0
9979 DATA "I",0,66,70,74,82,98,66,0
9980 DATA "L",0,30,34,34,34,34,98,0
9981 DATA "P",0,126,66,66,66,66,66,0
9982 DATA "O",0,66,66,36,24,16,96,0
9983 DATA "C",0,68,68,68,68,68,126,2
9984 DATA "H",0,66,66,66,62,2,2,0
9985 DATA "N",0,65,73,73,73,73,127,0
9986 DATA "M",0,65,73,73,73,73,127,1
9987 DATA "E",0,60,66,30,2,66,60,0
9988 DATA "U",0,76,82,114,82,82,76,0
9989 DATA "A",0,62,66,66,62,34,66,0
9990 DATA "S",24,66,70,74,82,98,66,0
9991 DATA "R",0,64,64,124,66,66,124,0
9992 DATA "T",0,192,64,124,66,66,124,0
9993 DATA "F",0,62,73,73,73,62,8,0
9994 DATA "Q",0,66,66,114,74,74,114,0
После выполнения программы вместо латинских букв, если вводить их в режиме курсора [G], мы увидим на экране следующие русские буквы:
В, G, D, J, I, L, P, О, F, С, Н, N, М, Т, Q, R, E, U, A, S
Б, Г, Д, Ж, И, Л, П, У, Ф, Ц, Ч, Ш, Щ, Ъ, Ы, Ь, Э, Ю, Я, Й
Если к предложенной программе добавить оператор 9995 RETURN, то ее можно будет использовать как подпрограмму. А теперь несколько слов о самой программе.
9910 - внешний цикл, в котором переменная N изменяется в пределах от 1 до 20 -по количеству вводимых букв.
9920 - ввод строковой переменной из оператора DATA. Во всех таких операторах на первом месте стоят латинские буквы, которые и будут в графическом режиме определять соответствующие русские буквы;
9930 - внутренний цикл, в котором осуществляется ввод кодов выбранной в предыдущем цикле буквы;
9940 - присваивание переменной S числа из списка DATA;
9950 - ввод кода в память компьютера по адресу USR А$ + М;
9960, 9970 - операторы завершения циклов;
9975...9994 - блок данных, содержащий латинские буквы для обозначения символов UDG, и соответствующие коды для русских букв. Число операторов DATA равно количеству новых символов.
Приведенную программу не обязательно загружать и выполнять всякий раз, когда вам требуется русский шрифт. Достаточно сделать это один раз и записать сформированную область UDG-символов на магнитную ленту оператором
SAVE "RUS"CODE USR "A",168
Если теперь вставить в любую программу оператор LOAD "RUS"CODE - то после загрузки этого короткого блока можно смело писать по-русски в соответствии с приведенной выше таблицей.
Но при такой русификации область UDG окажется занятой полностью и места для размещения спрайтов в ней уже не останется. Поэтому лучше воспользоваться графическим редактором Art Studio, с помощью которого можно изменять символы основного набора, оставляя UDG для прочих нужд.
Правда, работа с Art Studio, как вы уже заметили, требует определенных навыков. Если этих навыков у вас еще недостаточно, можете воспользоваться приведенной ниже программой, которая решает задачу по переводу всех символов стандартного (латинского) набора ZX Spectrum в совершенно новый - русский набор. При этом появляются как строчные, так и прописные буквы, а также сохраняются знаки препинания и дополнительные символы - всего 96. Эта программа не затрагивает область UDG, которую можно использовать для создания спрайтов уже хорошо знакомыми вам способами одновременно с русским шрифтом.
После загрузки программы перед вами появится краткая инструкция по ее использованию. Так, для перехода к новому набору символов (символы русского алфавита) следует включить в программу оператор РОКЕ 23607,250 - а для возврата к стандартному (латинскому) набору РОКЕ 23607,60 В инструкции дана также таблица соответствия русских и латинских букв и знаков. Вот эта программа:
Программа 11. НОВЫЕ СИМВОЛЫ.
10 BORDER 0: PAPER 0: INK 5: CLEAR 64255 20 POKE 23607,60 30 PRINT AT 10,10;"PLEASE WAIT" 40 LET s=0
50 FOR n=64256 TO 65023 60 READ a: LET s=s+a 70 POKE n, a 80 NEXT n
90 IF s<>64289 THEN PRINT AT 10,10;"ERROR IN DATA": STOP 100 REM -
110 POKE 23607,250 120 CLS
130 PRINT AT 1,6; INK 6;"Новый набор символов"
140 LET z$="------------------"
150 PRINT AT 2,0;z$
160 PRINT AT 5,0;"POKE 23607,250"'; INK 4;"-Включение русских букв""; INK 5; "POKE 23607,60"'; INK 4; "-Включение латинских букв" 170 PRINT AT 12,6; INK 3;"Таблица соответствий:" 180 POKE 23607,60
190 LET а$="абвгдежзиклмнопрстуфхцчшщьыьэюя"
200 PRINT INK 5;a$
210 POKE 23607,250
220 PRINT INK 1;z$
230 PRINT INK 4;a$
240 POKE 23607,60
250 LET a$="АБВГДЕЖЗИКЛМНОПРСТУФХЦЧШЩЬЫЫЬЭЮЯ"
260 PRINT INK 5;a$
270 POKE 23607,250
280 PRINT INK 1;z$
290 PRINT INK 4;a$
300 REM -
310 POKE 23607,60
320 SAVE "RUS"CODE 64256,768
900 REM -
1000 DATA 0,0,0,0,0,0,0,0: REM Space 1010 DATA 0,24,24,24,24,0,24,0: REM ! 1020 DATA 0,108,108,0,0,0,0,0: REM " 1030 DATA 36,36,255,36,36,255,36,36: REM # 1040 DATA 24,62,88,60,26,124,24,0: REM $ 1050 DATA 96,102,12,24,48,102,70,0: REM % 1060 DATA 56,108,56,58,110,124,54,0: REM & 1070 DATA 0,12,24,48,0,0,0,0: REM ' 1080 DATA 12,24,48,32,32,48,24,12: REM ( 1090 DATA 48,24,12,4,4,12,24,48: REM ) 1100 DATA 0,102,60,255,60,102,0,0: REM * 1110 DATA 0,24,24,126,126,24,24,0: REM + 1120 DATA 0,0,0,0,0,24,24,48: REM , 1130 DATA 0,0,0,126,126,0,0,0: REM -
1140 DATA 0,0,0,0,0,24,24,0: REM .
1150 DATA 2,6,12,24,48,96,64,0: REM /
1160 DATA 124,198,206,214,230,198,124,0: REM 0
1170 DATA 24,56,24,24,24,24,126,0: REM 1
1180 DATA 60,102,6,60,96,102,126,0: REM 2
1190 DATA 60,102,6,28,6,102,60,0: REM 3
1200 DATA 28,60,108,204,254,12,30,0: REM 4
1210 DATA 126,98,96,124,6,102,60,0: REM 5
1220 DATA 60,102,96,124,102,102,60,0: REM 6
1230 DATA 126,102,6,12,24,24,24,0: REM 7
1240 DATA 60,102,102,60,102,102,60,0: REM 8
1250 DATA 60,102,102,62,6,102,60,0: REM 9
1260 DATA 0,24,24,0,24,24,0,0: REM :
1270 DATA 0,24,24,0,24,24,48,0: REM ;
1280 DATA 12,24,48,96,48,24,12,0: REM <
1290 DATA 0,126,126,0,126,126,0,0: REM =
1300 DATA 48,24,12,6,12,24,48,0: REM >
1310 DATA 60,102,102,12,24,0,24,0: REM ?
1320 DATA 204,214,214,246,214,214,204,0: REM @
1330 DATA 30,54,102,102,126,102,102,0: REM A
1340 DATA 254,96,124,102,102,102,252,0: REM B
1350 DATA 204,204,204,204,204,206,254,6: REM C
1360 DATA 28,44,108,108,108,108,254,0: REM D
1370 DATA 254,98,104,120,104,98,254,0: REM E
1380 DATA 124,214,214,214,124,16,56,0: REM F
1390 DATA 254,102,96,96,96,96,240,0: REM G
1400 DATA 198,108,56,56,108,198,198,0: REM H
1410 DATA 198,198,206,222,246,230,198,0: REM I
1420 DATA 118,182,206,222,246,230,198,0: REM J
1430 DATA 230,102,108,120,108,102,230,0: REM K
1440 DATA 30,54,102,102,102,102,102,0: REM L
1450 DATA 198,238,254,214,198,198,198,0: REM M
1460 DATA 102,102,102,126,102,102,102,0: REM N
1470 DATA 124,198,198,198,198,198,124,0: REM 0
1480 DATA 126,102,102,102,102,102,102,0: REM P
1490 DATA 126,198,198,126,54,102,198,0: REM Q
1500 DATA 252,102,102,102,124,96,240,0: REM R
1510 DATA 60,102,192,192,192,102,60,0: REM S
1520 DATA 126,90,24,24,24,24,60,0: REM T
1530 DATA 102,102,102,62,6,102,60,0: REM U
1540 DATA 214,214,214,120,214,214,214,0: REM V
1550 DATA 248,108,108,124,102,102,252,0: REM W
1560 DATA 120,48,60,54,54,54,124,0: REM X
1570 DATA 198,198,246,218,218,218,246,0: REM Y
1580 DATA 60,102,6,28,6,102,60,0: REM Z
1590 DATA 198,214,214,214,214,214,254,0: REM [
1600 DATA 60,102,6,30,6,102,60,0: REM
1610 DATA 198,214,214,214,214,214,254,6: REM ]
1620 DATA 102,102,102,102,62,6,6,0: REM
1630 DATA 0,0,240,60,54,54,60,0: REM Z
1640 DATA 0,0,204,214,246,214,204,0: REM
1650 DATA 0,0,62,102,102,102,58,0: REM a
1660 DATA 0,0,126,96,124,102,124,0: REM b
1670 DATA 0,0,204,204,204,206,254,6: REM с
1680 DATA 124,6,62,102,102,102,60,0: REM d
1690 DATA 0,0,60,102,124,96,62,0: REM e
1700 DATA 0,16,124,214,214,124,16,0: REM f
1710 DATA 0,0,126,102,96,96,96,0: REM g
1720 DATA 0,0,198,108,56,108,198,0: REM h
1730 DATA 0,0,102,102,110,118,102,0: REM i
1740 DATA 24,24,102,102,110,118,102,0: REM j 1750 DATA 0,0,230,108,120,108,230,0: REM k 1760 DATA 0,0,30,54,102,102,102,0: REM l 1770 DATA 0,0,198,238,254,214,198,0: REM m 1780 DATA 0,0,102,102,126,102,102,0: REM n 1790 DATA 0,0,60,102,102,102,60,0: REM о 1800 DATA 0,0,126,102,102,102,102,0: REM p 1810 DATA 0,0,62,102,126,54,102,0: REM q 1820 DATA 0,0,252,102,102,124,96,240: REM r 1830 DATA 0,0,60,102,96,102,60,0: REM s 1840 DATA 0,0,126,24,24,24,24,0: REM t 1850 DATA 0,0,102,102,62,6,60,0: REM u 1860 DATA 0,0,214,214,124,214,214,0: REM v 1870 DATA 112,88,112,124,102,102,60,0: REM w 1880 DATA 0,0,96,120,108,108,120,0: REM x 1890 DATA 0,0,198,246,218,218,246,0: REM у 1900 DATA 0,0,60,102,28,102,60,0: REM z 1910 DATA 0,0,198,214,214,214,254,0: REM { 1920 DATA 0,0,60,6,30,6,60,0: REM I 1930 DATA 0,0,198,214,214,214,254,6: REM У 1940 DATA 0,0,102,102,102,62,6,0: REM ~ 1950 DATA 126,227,221,209,209,221,227,126: REM ©
10 - подготовительные операции;
20 - объявление текущим стандартного набора символов на случай повторного запуска программы. При этом текст следующей строки будет выводиться по-английски;
30 - вывод на экран надписи PLEASE WAIT (пожалуйста, подождите), так как чтение кодов новых символов из операторов DATA занимает некоторое время;
40 - установка переменной s (счетчика контрольной суммы) в начальное состояние;
50...80 - цикл, в результате выполнения которого оператор READ из списка DATA считывает коды, которые затем оператором РОКЕ записываются в ячейки памяти, начиная с адреса 64256 и по адрес 65023. Одновременно происходит суммирование всех кодов в переменной s;
90 - если сумма всех прочитанных кодов (контрольная сумма) не равна 64289, то счет останавливается, так как несовпадение контрольной суммы с числом 64289 указывает на ошибку в списке DATA. B этом случае необходимо тщательно проверить, что же вы ввели в компьютер на самом деле;
110 - включение режима новых символов;
120...290 - вывод на экран инструкции по применению этой программы;
310 - восстановление стандартного символьного набора;
320 - запись кодов русского шрифта на ленту. Если вы работаете с дисководом, то строка 320 должна выглядеть так:
320 RANDOMIZE USR 15619: REM: SAVE "RUS"CODE 64256,768