ОБМЕН ОПЫТОМ
В последнее время все больше стало появляться известных программ, переведённых на русский язык. Наверное, это объясняется не только желанием играть в русифицированную игру. Скорее всего, это, с одной стороны, непреодолимая тяга к самостоятельному творчеству, а с другой недостаточные навыки в программировании в машинных кодах. Создать свою собственную программу для начинающего довольно сложно. Кроме чистого машинного кода существует ещё масса проблем компоновки, символьного набора и других. Если все это попытаться преодолеть сразу, то можно зарыться так, что и не раскопаешься потом. Поэтому первое, с чего обычно начинают изучение машинного кода это перевод фирменных программ на русский язык. А когда психологический барьер преодолен, и поток новой информации улёгся в голове, можно двигаться и дальше. Однако сказанное не означает, что переводом программ занимаются только начинающие. Многие продолжают и дальше заниматься этой работой профессионально, оттачивая свое мастерство. Для тех, кто делает только первые шаги в переводе программ на русский язык, полезной может оказаться следующая информация.
Опыт русификации программ.
© Дмитрий Пьянков, Сергей Машарин, Горно-Алтайск, 1994.
Хотели бы поделиться небольшим опытом, накопленным в результате перевода на русский язык программ "Dizzy 1-2", Gremlins. Во всех (практически) фирменных программах используется свой шрифт. Поэтому символьный набор надо найти. Следующие две программы это делают. Нахождение символьного набора.
10 FOR i=93 TO 255 20 POKE 23607,i
30 FOR k=32 TO 127: PRINT CHR$ k;: NEXT k
40 IF INKEY$=CHR$ 13 THEN POKE 23607,60: PRINT (i+1)*256: GO TO 70 50 IF INKEY$="" THEN GO TO 40 60 PRINT AT 0,0;: NEXT i
Эта программа находит примерное расположение шрифта. Если он пока не встретился, нажимаете любую клавишу и поиск продолжается. Если символьный набор уже встретился, то нажмите ENTER - будет выведен текущий адрес - примерный адрес расположения символьного набора. Его можно использовать в следующей программе. 100 POKE 22528,24: FOR i=24500 TO 65535 105 PRINT AT 1,1;i
110 FOR k=0 TO 7: POKE (16384+256*k),PEEK (i+k) 120 NEXT k: PAUSE 0 130 NEXT i
Здесь вместо i=24500 в строке 100 надо поставить примерный адрес, найденный предыдущей программой.
ИФК: можем порекомендовать вставить дополнительно строку:
125 IF INKEY$=" " THEN LET i=i-1: GO TO 105 так Вы обеспечите себе возможность "реверса". Нахождение и распечатка текстовых сообщений.
10 FOR i=24500 TO 65535
20 IF PEEK i<128 THEN IF PEEK i>31 THEN PRINT PAPER 6;CHR$ PEEK i;: NEXT i 30 PRINT : NEXT i
Эта небольшая программка распечатывает только текстовые сообщения. Если же в строке 30 убрать PRINT, то её можно использовать для нахождения сообщений.
И последняя программа - перевода сообщений: 1 LET b$=""
10 FOR i=24500 TO 65535
20 IF PEEK i<128 THEN IF PEEK i>31 THEN LET b$=b$+CHR$ PEEK i: NEXT i 25 IF LEN b$<2 THEN GO TO 60
30 PRINT AT 21,1; PAPER 6;b$ 35 LET d=LEN b$
40 POKE 23606,40: POKE 23607,95: REM Russian 45 INPUT b$: IF b$="" THEN GO TO 60 4 6 IF LEN b$<>d THEN GO TO 45
50 FOR k=0 TO d-1: POKE (i+k-d),CODE b$(k+1): NEXT k 60 LET b$="": POKE 23606,0: POKE 23607,60: CLS : NEXT i
Эта программа выводит текстовое сообщение, которое надо перевести на русский язык, затем запрашивает перевод (длина сообщений должна быть одинакова) и размещает новое сообщение вместо старого. В строках 1...30 программа ищет сообщение и пишет его на экране, строки 35.60 выполняют ввод нового сообщения и замену старого.
Эта программа является базовой, то есть для каждого конкретного случая к ней можно добавлять или убирать строки. Например, убрав РОКЕ в строке 60 программа может применяться для редактирования уже переведенных сообщений. Не очень сложно сделать, чтобы она работала в режиме, когда последний символ текстового сообщения инвертирован, то есть с включенным 7 битом. В общем, программу можно развивать и переделывать для конкретного случая.
ИФК: Рекомендуем дополнить программу строками для выгрузки на ленту или диск уже готового материала (см. статью Алексеева А.Г. "МАСТЕРФАЙЛ 09 полная русификация" в ZX-РЕВЮ № 1-2 за 1992 г.) - мы пробовали, это очень удобно.
В заключение ещё пара советов. Найдя символьный набор, выгрузите его на ленту или диск командой:
SAVE "имя" CODE адрес,768 это позволит без изменений загружать символьный набор для редактирования в ART STUDIO.
Для тех, кто работает с магнитофоном, пригодится следующий приём. Перед переводом программу надо "разметить", то есть выделить в ней участки, где есть текстовые сообщения. Сохранять можно только блок кодов с текстовыми сообщениями, это значительно сэкономит время при загрузке-выгрузке. Например, кодовый блок программы CODE 24500,40000 содержит текстовые сообщения, расположенные с адреса 32000 и сосредоточены они в массиве длиной 5000 байт. Сохраните этот фрагмент программы и в дальнейшем работайте с ним. А после завершения работы объедините этот блок со всей программой.