ZX-Ревю 1992 №3-4 1991 г.

Мастерфайл 09 полная русификация - окончание. начало в ZX-PEВЮ-92',стр-29-32.


Темы статьи: Софт  

МАСТЕРФАЙЛ-09 Полная русификация

Окончание.

Начало ZX-PEВЮ-92',стр-29-32.

Текстовые сообщения, выводимые на экран в любой программе кроме печатаемых символов содержат также управляющие коды AT, TAB, INK, PAPER и т.д. Их без крайней необходимости лучше не изменять, так как это может нарушить работу программы, но в некоторых случаях придётся изменять и их. Для этого в программе мониторе предусмотрена строка 231. Если Вы уберёте REM из строки 231 и подставите REM в начало строки 230, то работа программы несколько изменится. Будет такой же вывод на экран, так же запрашивается информация, но теперь без кавычек. Это означает что ожидается ввод кода -числа от 0 до 255, которое после нажатия "ENTER" непосредственно будет записано в память. Режим ввода кодов будет нужен редко, но все-таки иногда пригодится. Для того, чтобы остановить программу в этом режиме, надо просто нажать "КУРСОР ВНИЗ" (CAPS SHIFT+6) или нажать "STOP" (SYMBOL SHIFT + А) и "ENTER".

Теперь подставьте REM в обе строки 230 и 231 и сделайте RUN. После ввода адреса Вам будет выдан дамп памяти. Этот режим Вы будете использовать для поиска текстовых сообщений в программе. С этого момента можно начинать работу, но прежде - несколько примеров.

Введите адрес 60350. Вы увидите на экране:

60350 237 GO SUB

60351 225 LLIST

60352 201 <>

60353 22 ?

60354 2 ?

60355 0 ?

60356 17 ?

60357 6 ?

60358 86 V

60359 69 Е

60360 82 R

60361 84 Т

60362 73 I

60363 67 C

60364 65 A

60365 76 L

60366 32

60367 76 L

60368 73 I

60369 78 N

60370 69 Е

60371 255 COPY

В ячейках 60350 находится какая - то программа в машинных кодах, а вот с ячейки 60353 начинается строка символов. При этом в ячейках 60353...60357 находятся управляющие символы, а сам текст расположен в ячейках 60358...60370. Потом идет символ с кодом 255. который завершает строку текста. Далее опять начинается программа в машинных кодах.

Управляющие символы имеют следующее значение: Код: 16 - упр. INK Код: 17 - упр. PAPER Код: 18 - упр. FLASH

Код: 19 - упр. BRIGHT Код: 20 - упр. INVERSE Код: 21 - упр. OVER Код: 22 - упр. AT Код: 23 - упр. TAB

Так что комбинация кодов в ячейках 60353...60358 эквивалентна фрагменту Бейсик-строки:

... AT 2,0; PAPER 6; ...

В данном случае нас интересует только текст, который должен быть заменен:

VERTICAL LINE ВЕРТИК. ЛИНИЯ

(Можете, убрав REM из строки 230, запустить программу, задать адрес 60358 и попробовать заменить текст на русский.)

Другой пример. После старта программы-монитора задайте адрес 58425. В дампе памяти Вы узнаете текст основного меню MF 09:

AADD A RECORD ... CCHOOSE A REPORT DDISPLAY/PRINT ..

Правда он при работе программы выводится несколько иначе:

ADD A RECORD .......A

CHOOSE A REPORT .....C

DISPLAY/PRINT .......D

В памяти сначала идет символ той клавиши, которая должна быть нажата, затем текст сообщения. Вдаваться в детали работы программы нет необходимости. У нас другая задача. Оставив без изменения символы тех клавишей, которые должны нажиматься (первые буквы, они набраны в режиме курсора [C], надо заменить текст на русский: АНОВАЯ ЗАПИСЬ... СОБЗОР ФОРМАТОВ. ОДИСПЛЕЙ/ПЕЧАТЬ.

Еще пример. После старта монитора задайте адрес 59759. На экране увидите:

59759

78

N

59760

79

О

59761

32

59762

84

Т

59763

73

I

59764

84

Т

59765

76

L

59766

197

OR

При работе программы эта надпись выводится так:

NO TITLE

Откуда же берется последняя буква <Е> ?

Вообще надо сказать, что перед тем, как в машинных кодах подана команда вывода строки символов на экран, предварительно задан адрес начальной ячейки, где расположена строка символов и длина этой строки. Анализ программы MF 09 показывает, что здесь применяется еще и другой способ вывода. Длина выводимой строки не указывается, однако во время вывода анализируется код выводимого символа. Если это код с 0 по 127, то продолжается вывод на экран, а если код символа больше или равен 128, то это значит, что процедура вывода этим символом заканчивается, при этом на экран выводится символ, код которого на 128 меньше, чем содержащийся в памяти. В ячейке 59766 стоит OR. Его код (читаем на экране) равен 197. 197-128=69. По таблице кодов "Спектрума", а если ее нет под рукой, то сделав PRINT CHR$ 69, выясняем, что этому коду соответствует буква "Е". Вот откуда взялась последняя буква.

Этот текст можно заменить следующим образом:

NO TITLE

НЕ НАЗВ.

При этом буквы "НЕ НАЗВ" заменяем непосредственно русскими буквами, а вместо точки, код которой (выясняем: PRINT CODE ".") равен 46, надо ввести символ с кодом 46+128=174. По таблице кодов "Спектрума" или сделав PRINT CHR$ 174, определяем, что это VAL$. Можно ввести его в том же режиме, нажав "EXT. MODE", затем "SYMBOL SHIFT"+"j". Часто придется вводить в качестве последнего символа - "пробел" (его код 32). Это будет символ, код которого равен 32+128 =160. По таблице кодов находим, что это символ "Q" UDG-графики. Вводя его, нажмите "GRAPH" (CAPS SHIFT+9), затем "Q", затем еще раз "GRAPH" (пусть Вас не смущает, что напечатается что-то непонятное, так как на месте символов UDG-графики находятся коды программы MF 09). Однако, могут попадаться такие символы, которые с клавиатуры вводятся в режиме курсора [K]. Например, начиная с адреса 64522 находится текст:

64522

65

A

64523

82

R

64524

71

G

64525

32

64526

78

N

64527

79

О

64528

84

Т

64529

32

64530

78

N

64531

85

U

64532

77

М

64533

69

Е

64534

82

R

64535

73

I

64536

195

NOT

В ячейке 64536 "спрятана" буква, код которой 195-128=67. Это латинская буква "C". Заменяем эту строку на русский текст:

ARC NOT NUMERIC АРГ.НЕ ЧИСЛОВОЙ

При этом вместо последней русской буквы "И", (ее код выясняем, сделав PRINT CODE "И" - при этом "И" набрана в режиме курсора [L], так как включен русско-латинский символьный набор; он равен 106) надо ввести символ с кодом 106+128=234. Это REM. Ввести этот символ, находясь в режиме курсора [L] или [C] никак не удастся. Для этого надо переключить курсор на [К] (командный режим). Как это сделать? Введите ключевое слово "THEN" (SYMBOL SHIFT+G). Теперь курсор стал [K] и Вы можете ввести "REM", нажав "Е". Теперь нажмите "КУРСОР ВЛЕВО" и удалите "THEN" при помощи "DELETE" (CAPS SHIFT+0). Далее - "ENTER" - ввод кода в память.

Можно это сделать и иначе - просто остановить программу и "вручную" сделать POKE 64536,234.

Теперь Вы знаете, как располагаются текстовые сообщения в программе MF 09 и умеете работать с программой-монитором. Подставьте REM в обе строки 230 и 231 и начинайте работу. Запустив программу-монитор, задайте адрес 57328. (С адреса 56560 по 57327 расположен символьный набор, там делать нечего.) Сейчас задача - просмотреть все коды программы от начала до конца, найти все текстовые сообщения в программе и записать их адреса и сами сообщения на бумагу, оставляя место для последующего перевода.

Далее, вооружившись англо-русским словарем, начинаем перевод. Не надо стремиться переводить текст дословно, так как мы слишком сильно сжаты рамками того места, которое отведено в программе под ту или иную фразу. Более подойдет литературный перевод, при этом, конечно, лучше, если Вы уже достаточно поработали с программой MF 09 и Вам понятен смысл переводимых сообщений. Это позволит Вам найти подходящую по смыслу замену, даже если она не является переводом английской фразы. Что касается программы MF 09, то сообщения, которые Вы там встретите и их перевод, реализованный в моем варианте "MF09 RUS", приведен ниже. Когда же Вы возьметесь за какую-нибудь другую программу, то Вам придется проделать самим всю эту работу. Это, пожалуй, самая большая по затратам времени, ответственная и творческая часть работы. Так что запаситесь терпением, может быть не на один день. Остальное - дело чисто механическое.

Текстовые сообщения программы MF 09 и их перевод

Вначале каждого сообщения указан адрес, с которого необходимо произвести замену текста. Далее - английский текст и под ним русский вариант перевода.

Подчеркивающая черта обозначает "пробел".

Символы, коды которых должны быть на 128 больше, отмечены "*" в конце строки, далее идет код символа и сам символ или ключевое слово.

* 196 BIN

* 160 Q-GRAPH

57764:

ITEM_ALREADY_IN_RECORD ЭТО_ПОЛЕ_УЖЕ_ВВЕДЕНО_

57787:

AADD_ITEM... АНОВОЕ_ПОЛЕ.

RREPLACE_ITEM... RИ3MEHEHИE ПОЛЯ.

HNEXT_ITEM......

НВЫБОР_ПОЛЯ.....

GGET_ITEM.......

GВЫЗОВ_ПОЛЯ.....

ANOTHER,RECORD. СЛЕДУЮЩАЯ ЗАП..

EERASE_ITEM.... ЕУДАЛЕНИЕ_ПОЛЯ.

DDISPLAY/PRINT. DДИСПЛЕИ/ПЕЧАТЬ

PPROMPT_ITEMS.. РАВТОЗАПРОС....

MMAIN_MENU......

МГЛАВНОЕ_МЕНЮ...

57940:

ENTER_TEXT_1-12 8_CHARS. ВВОД_ТЕКСТА_1-12 8_СИМВ.

57988:

GIVE_DATA_REF * 19 8 AND МЕТКА_ДАННЫХ_ * 160 Q-GRAPH

58089: NOT_NAMED НЕТ ИМЕНИ

58130:

SAVE_PROG/FILE. ЗАПИСЬ.ПР./ФАЙЛ

58243:

Y-TO CONFIRM * 2 05 STEP

Y-ЕСЛИ^ДА_ * 160 Q-GRAPH

58425:

AADD_A_RECORD.. AНОВАЯ_ЗАПИСЬ..

DDISPLAY/PRINT. DДИСПЛЕИ/ПЕЧАТЬ

LLOAD_A_FILE... LЗАГРУЗКА ФАЙЛА

CCHOOSE_A_REPORT CОБЗОР_ФОРМАТОВ.

EEDIT_FORMAT_DEF ЕРЕДАКТ._ФОРМАТА

NNAME_DATA_REF.. NИМЕНА_ПОЛЕЙ_ДАН

SSEARCH_THE_FILEIIHVERT_SELECTN. SПОИСК.......... ИНВЕРСИЯ_ВЫБОРA

RRESET_SELECTIONPPURGE_SEL_RECDS RCБP0C_BЫБ0РA...РУДАЛЕН.ВЫБР.3АП

TTOTAL/AVERAGE.. VSAVE_PROG/FILE ТИТОГ_ОБЩ./СРЕДНVЗАПИСЬ_ПР./ФАЙЛ

UEXEC_USER_BASIC UВЫПОЛНИТЬ ВASIC

58903:

FILE_ONLY.......... F

ТОЛЬКО_ДАННЫЕ...... F

58998: _RECS = 00000_ ЗАП=00000

59326:

FILE_FULL

HET_MECTA

_SEL=0 0 0 0 0_ ВЫБ=00000

59759: NO_TITLE HE HA3B.

_SPA=0 0 0 0 0_ СВБ=00000

* 197 OR

* 17 4 VAL$

60065: DELETE УДАЛ._

60077

COPY

КОП.

60082:

ALREADY_DEFINED * 19 6 BIN МЕТКА_ЗАНЯТА_ * 160 Q-GRAPH

60097:

NO_SUCH_FORMAT_DEFINED * 19 6 BIN ТАКОИ_ФОРМАТ_НЕ_ЗАДАН_ * 160 Q-GRAPH

(Глюк в 601124: REF_0 MET.0 тексте)

60287:

GENERAL

ГЛАВНЫЙ

60300: SEQU__ : СОРТ. :

60325: _INTVL 0 02 ИНТЕРВ002

60358: 60387:

VERTICAL_LINE LINE_ACROSS ВЕРТИК. ЛИНИЯ ГОРИЗ.ЛИНИЯ

60312:

BORDER_

_БОРДЮР

60574:

DATA_REF_

ПОЛЕ-ДАН.

60435

BOX

ПР.

60495

TEXT

ТЕКС

(Примечание: перевод слова TEXT как ТЕКС - не очень удачный вариант, но мы ограничены местом в памяти. То же касается перевода слова BOX - ПР. (Прямоугольник). Как с этим бороться, мы ещё рассмотрим ниже.)

60591: WIDTH_0 0 0 ШИРИНА0 0 0

60603: DEPTH_0 0 0 ВЫСОТА000

60615:

NULL:

НОЛЬ:

60645: PAPER_ БУМАГА

60677:

GIVE_REPORT_REF * AND МЕТКА_ФОРМАТА_ * Q-GRAPH

60793:

INV_N

ИНВ-N

60817:

FLASH_N

МИГАН-N

60883: COL_0 0 0 КОЛ.000

60957: Y_COORD_0 0 0 Y-КООРД.000

61220: DEPTH= ВЫСОТА

60801:

BRI_Y

ЯРК-Y

60828:

MPRT=42

СИМВ=42

60931: X_COORD_0 0 0 Х-КООРД.000

61205: LENGTH= ДЛИНА__

61227:

PAD

ФОН

60809:

PAD_Y

ФОН_Y

60872: LINE_0 0 0 СТР.000

LENGTH_0 0 0 _ДЛИНА_0 0 0

61213: WIDTH= ШИРИНА

61234:

NULL_TEXT=

НОЛЬ_ТЕКСТ

61361: LINE = CTP.

61367:

MICRO-PRT_

МИКРОПЕЧ._

61380: 42_PITCH 42 СИМВ.

61392:

COLUMN=

КОЛОНКА

61457:

BRIGHT_

ЯРКОСТЬ

61467:

INVERSE_

ИНВЕРСИЯ

61478:

PAPER= * 189 ABS БУМАГА * 225 LLIST

61484: FLASH_ МИГАН.

61516:

X_COORD=

Х-КООРД.

61525:

Y_COORD=

Y-КООРД.

61596:

BORDER=

БОРДЮР_

61603:

61612:

INTERVAL=

ИНТЕРВАЛ

SEQUENCE= * 189 ABS СОРТИРОВ. * 17 4 VAL$

61639:

AADD_NEW_FORMAT.RREVIEW_FORMAT.. AНОВЫЙ.ФОРМАТ...RИ3МEHEHИE ФОPM.

MMAIN_MENU......

MГЛАВНОЕ МЕНЮ...

61688:

AADD_NEW_ELEMENTRREPLACE_ELEMENT AНОВЫЙ_ЭЛЕМЕНТ..RИЗМЕНЕНИЕ_ЭЛЕМ.

EERASE_ELEMENT..NNEXT_ELEMENT... EУДАЛЕНИЕ_ЭЛЕМ.ЖЫБОР_ЭЛЕМЕНТА.

CCOPY_FORMAT....XDELETE_FORMAT.. CКОПИРОВ. ФОРМ..XУДАЛЕНИЕ_ФОРМ..

DDISPLAY/PRINT..MPREVIOUS_MENU.. DДИСПЛЕИ/ПЕЧАТЬ.MПРЕДЫДУЩЕЕ_МЕНЮ

61817:

DDATA_FROM_RECD.LLITERAL_TEXT... DДАННЫЕ.........LЗАГОЛОВОК,ТЕКСТ

ВВОХ............HHORIZONTAL_LINE

ВПРЯМОУГОЛЬНИК..НГОРИЗОНТ._ЛИНИЯ

VERTICAL_LINE.. MPREVIOUS_MENU.. VВЕРТИК._ЛИНИЯ..МПРЕДЫДУЩЕЕ_МЕНЮ

62102: 62127:

TOTAL___=_ AVERAGE_=_

ОБЩЕЕ___=_ СРЕДНЕЕ_=_

62194: 62219:

GIVE_FILE_NAME _ERROR_

ИМЯ_ФАИЛА_ _ОШИБКА_

63177: 63196: 63205:

REPORT_ MENU ,._MORE

ФОРМАТ_ МЕНЮ .._ЕЩЁ_

63225:

f1 A f0 LL_ f1 S f0 INGLE_PAGE * 197 OR f1 A f0 -ВСЕ, f1 S f0 -ЭКРАН_ * 160 Q-GRAPH

(здесь f1 и f0 - управляющие символы с кодами 18, 1 и 18, 0 - включение и выключение режима мигания)

63331:

NNEXT_PAGE......#ADVANCE_1-9_RCS

ЖЛЕДУЮЩИЙ_ЭКРАН#ВПЕРЕД_НА_1-9..

OBACK_ONE RECORDBBACK_TO_1ST_REC ОНАЗАД_НА_1.....ВВОЗВР._В_НАЧАЛО

PPRINT..........UUPDATE_TOP_REC.

РПЕЧАТЬ.........UИ3MEH._ВЕРХ_ЗАП

EERASE_TOP_REC..OOMIT_TOP_RECORD ЕУДАЛЕН.ВЕРХ_ЗАПОИСКЛЮЧ.ВЕРХ_ЗАП

CCOPY_TOP_RECORDSSEARCH_THE_FILE СКОПИР. ВЕРХ_ЗАПSПОИСК..........

TTOTAL/AVERAGE..RSELECT_REPORT.. ТИТОГ_ОБЩ./СРЕДНRВЫБОР_ФОРМАТА..

MMAIN_MENU......QQUIT_THIS_MENU.

МГЛАВНОЕ_МЕНЮ...QУДАЛИТЬ_МЕНЮ...

64522:

ARG NOT NUMERIC * 19 5 NOT

АРГ. НЕ ЧИСЛОВОИ * 234 REM

64555:

ARGUMENT=

АРГУМЕНТ=

64570:

ALL_

ВСЕ

64580:

SEL_

ВЫБР

64596:

CHAR_

ТЕКС.

64607: NUM__ ЧИСЛ.

64623:

ASELECT_FROM_ALLLSELECT_FROM_SEL AВЫБОР_ИЗ_ВСЕХ..LВЫБОР_И3_ВЫБРАН

DDISPLAY/PRINT..MMAIN_MENU......

DДИСПЛЕЙ/ПЕЧАТЬ.МГЛАВНОЕ_МЕНЮ...

64688:

CCHARACTER......NNUMBERIC.......

СТЕКСТОВЫИ......NЧИСЛОВОИ.......

MPREVIOUS_MENU..NПРЕДЫДУЩЕЕ.МЕНЮ

64737:

EEQUAL_TO.......UUNEQUAL_TO.....

ЕРАВНО_АРГУМЕНТУUНЕ_РАВНО_АРГ...

LLESS_THAN......GGREATER_THAN...

LMEHЬШЕ.ЧЕМ_АРГ.GБОЛЬШЕ.ЧЕМ_АРГ.

SSTRING_SEARCH..MMAIH_MENU......

SСКАНИРОВАНИЕ...MГЛАВНОЕ_МЕНЮ...

65210:

NON-NUMERIC_DATA: f1 S f0 KIP_ НЕ_ЧИСЛ.ДАНН. f1 S f0 -ДАЛЬШЕ,

f1 U f0 PDATE * 197 OR f1 U f0 -СТОП * 240 LIST

65320:

PPROGRAM+FILE...FFILE_ONLY......

РПРОГР.+_ФАЙЛ...FТОЛЬКО_ДАННЫЕ..

65353:

SAVE_NAME_?

ИМЯ_ФАЙЛА_?

После того, как перевод закончен на бумаге, загружаем программу-монитор. Убираем REM из строки 230 и начинаем замену английских текстов на русские в соответствии со своими записями. Не забывайте периодически выгружать результаты через RUN 5.

Попутно следует сказать о том, что не стоит экономить ленту, стирая старый вариант и записывая на него новый. Это позволит Вам вернуться назад в том случае, если в результате работы Вы случайно "запортите" программу, ошибочно изменив содержимое памяти где-нибудь в области машинных кодов.

Когда эта часть работы будет выполнена и записан последний вариант "русского" кодового куска, надо проверить, как все будет работать в новом виде. Запустите программу MF 09 и, после загрузки блоков, "MF LOADER" И "MF 09 LEER" остановите магнитофон и вставьте кассету с записью "русского" кодового куска. Загрузите его. После старта программы, если Вы все сделали аккуратно, Вы можете насладиться результатами своего труда. Но это потом. А сейчас надо внимательно посмотреть, нет ли где-нибудь грамматических ошибок, которые практически неизбежны в результате такой большой работы, и вообще, все ли выполняется "ладно" и хорошо, нет ли где-нибудь "шероховатостей" перевода и т. д.

Если ошибок нет, то в общем можно считать работу выполненной, но присмотримся к работе программы повнимательнее. Ну например, вместо слова "BOX" - прямоугольник - мы ввели "ПР." (см. ячейку 60435). Это выглядит не очень удачно на экране, но, с другой стороны, что еще можно разместить в выделенных для этого трех байтах текста? Аналогично, вместо "TEXT" - мы ввели "ТЕКС" (ячейка 60495). Та же история - не хватает места. Что тут можно сделать?

Вспомним, как в машинных кодах осуществляется вывод на экран. Непосредственно перед выводом где-то должен быть задан адрес начала строки текста. Надо найти этот адрес и изменить его, расположив альтернативные текстовые сообщения на новом месте. Вот как это может выглядеть.

Текстовая строка "BOX" начинается фактически с адреса 60430:

60430

22

? -

AT 2:

0;

60431

2

?

60432

0

?

60433

17

? -

PAPER

6;

60434

6

?

60435

66

В -

т е к

с т

60436

79

О

60437

88

X

60438

255

COPY

- п

конец"

Вместо "ПР." желательно было бы разместить ну хотя бы:

AT 2 0 PAPER 6 ПРЯМОУГ. "конец"

Для такой строки надо 14 байтов памяти. Аналогично со строкой "TEXT" - фактическое начало - адрес 60490. Замена:

AT 2 0 PAPER 6 ТЕКСТ "конец"

Для этой строки надо 11 байтов памяти. Всего для двух строк нам нужны 25 байтов. Подумаем где бы их найти. В нашем случае есть свободное место перед символьным набором (расположенным с адреса 56560). Запустите программу-монитор (REM - в строке 321) и с адреса 56560-25=56535 осуществите ввод. Вначале пять пробелов (они нужны, чтобы потом на их место поставить управляющие коды AT и PAPER), затем текст "ПРЯМОУГ.", затем ещё пробел. И сразу же далее: еще пять пробелов, затем слово "ТЕКСТ" и еще один пробел. Ввод закончится ячейкой 56559. Теперь остановите программу, подставьте REM в строку 230 и удалите REM из строки 231. Запустите программу-монитор: GO TO 200 и снова с адреса 56535 введите следующие коды: 22, 2, 0, 17, 6, затем восемь раз просто нажмите "ENTER", ничего не вводя, затем введите: 255, 22, 2, 0, 17, 6, ещё 4 раза нажмите "ENTER", и, наконец, введите последнюю цифру 255. Ввод завершен на ячейке 56559.

Теперь надо найти в программе те места, где указаны адреса старых текстовых сообщений и изменить их на новые. Старый адрес для сообщения "BOX" - 60430. Для поиска подставим REM в строки 230 и 231 и введем новую строку:

210 IF (РЕЕК A+256*РЕЕК(A+1))<>60430 THEN GO TO 300

Запустите программу RUN, задайте адрес 56328 - это будет начало поиска - и можете откинуться на спинку кресла, пока компьютер не выдаст Вам необходимую информацию. На экране напечатается:

60405 14 ?

Не нажимайте "BREAK", подождите, пока не будет просмотрена вся программа, может быть на этот адрес есть ссылки и в других местах или это случайная комбинация чисел, никакого отношения не имеющая к процедуре вывода. Поиск закончится сообщением об ошибке: "В Integer out of range, 210:1". Это значит, что вся память просмотрена.

Место в программе, где указывается на искомый адрес, оказалось единственным. Тем проще для нас.

Теперь найдем адрес, где указано начало второго, интересующего нас сообщения -"TEXT" - это 60490. Изменим в строке 210 программы-монитора число 60430 на 60490 и GO TO 200. На экране появилось:

60458 74 J

Сообщение об ошибке. Поиск закончен, этот адрес тоже единственный. Теперь оба адреса надо заменить на новые. Для сообщения "ПРЯМОУГ. " это будет адрес 56535, а для "ТЕКСТ" - 56549. Младшие и старшие байты этих чисел находим, выполнив:

PRINT 56535-256*INT(56535/256)

PRINT INT(65355/256)

PRINT 56549-INT(56549/256)

PRINT INT(56549/256)

Получим, соответственно, числа 215, 220, 229, 220. Теперь выполним:

POKE 60405,215 РОКЕ 60406,220 POKE 60458,229 РОКЕ 60459,220

Осталось готовую программу записать на ленту, но прежде чем сделать RUN 5, вспомните, что наша программа стала длиннее на 25 байтов. Это надо учесть, производя изменения в строке 6 программы-монитора:

SAVE N$ CODE 56560,8976

надо заменить на

SAVE N$ CODE 56535,9001

Теперь можете сделать RUN 5. Надо также изменить программу-загрузчик "MF LOADER", заменив CLEAR 56559 на CLEAR 56534.

Попробуйте новый вариант программы. Вы согласны с тем, что она выиграла от такой замены?

Еще одна деталь. При запуске программы, когда появляется на экране главное меню, слева вверху на синем фоне появляется надпись

"FИЛЕ:МF 0 9 LEER"

Вместо русско-латинского слова 'ТИЛЕ" надо бы написать "ФАЙЛ", но вот беда: это слово мы не нашли в кодах программы MF 09. На самом деле все очень просто, Его там и нет. Надо искать в другом месте. Это слово находится внутри Бейсик-программы MF 09 LEER. Чтобы убедиться в этом, сделайте следующее. Остановите программу нажав в главном меню "L", затем "КУРСОР ВНИЗ" (CAPS SHIFT + 6). Теперь сделайте PRINT F$. Вы увидите надписи, выводимые на экран в режиме главного меню. Слово "ТИЛЕ" находится в файле данных Бейсик-переменной F$. Как поступить в этом случае?

Запустите программу MF 09. Находясь в главном меню, нажмите "V", а затем "F" и, указав имя, например "LEER", запишите пустой файл на магнитофон. (Это как раз и будет переменная F$). Дальше загрузите опять программу-монитор (и коды MF 09), остановите ее и загрузите переменную F$, подав прямую команду:

LOAD "LEER" DATA F$ ()

Теперь надо помнить о том, что нельзя подавать команду RUN только GO ТО 1, так как по команде RUN Вы уничтожите переменную F$. Просматривая дамп памяти примерно с адреса 24400, вскоре Вы встретите фразы: "MASTERFILE ВЕР 09" и "FИЛЕ:LEER". Замените их на "MASTERFILE RUS 09" и "ФАЙЛ:LEER" обычным способом. Теперь остановите программу-монитор и запишите переменную F$ на магнитофон прямой командой:

SAVE "LEER" DATA F$ ()

Далее надо запустить программу MF 09 и, находясь в главном меню нажать "L". Задайте имя "LEER" и загрузите с магнитофона изменённый вариант переменной F$. После выхода в главное меню Вы увидите, правильно ли Вы все сделали. Теперь можете записать измененную Бейсик-программу MF 09, нажимая в главном меню "V" затем "P" и указав имя "MF 09 LEER".

Смотрим, что еще в программе не так. В режиме "дисплей" при просмотре записей в правом нижнем углу экрана на голубом фоне появляется надпись:

.._ЕЩЕ_ или ^_ЕЩЕ_ ("_" - обозначает пробел)

При этом в памяти постоянно хранится только запись "_ЕЩЕ_", a "No" или ".." подставляются программой непосредственно в строку, подлежащую выводу, в зависимости от алгоритма работы. Таким образом, если мы хотим сделать перевод текста, то на место английского "No" не помещается даже русское "НЕТ". А русско-латинская фраза "No ЕЩЕ" выглядит довольно-таки неудачно. В этом случае можно попробовать использовать символы, например "+" и "-".

Анализируя работу программы MF 09 (кстати в этом мне очень помог трехтомник "Программирование в машинных кодах", написанный "ИНФОРКОМОМ"), я нашел, как мне кажется, приемлемый вариант замены. Для реализации этого варианта надо сделать:

POKE 62759, 230 POKE 63155, 32

POKE 63037, 230 POKE 63205, 32

POKE 63123, 230 POKE 62206, 32

POKE 63146, 230 POKE 62757, 45

POKE 63121, 43 POKE 63040, 45

Теперь, если при просмотре записей в режиме "дисплей" есть еще записи, то в левом нижнем углу будет: "_+_ЕЩЕ_", а если больше нет записей, то: "_-_ЕЩЕ_". По моему, это выглядят более гармонично.

Теперь еще об одной существенной детали. При вводе данных, для переноса строки в режиме "дисплей", применяется символ "вертикальная линия" - С.В.Л. (это в режиме "EXT. MODE" нажимаем SYMBOL SHIFT + S). Код этого символа равен 124. Но в кодах ASCII в символьном наборе КОИ-7 "HC", который применен в нашем варианте MF 09, коду 124 соответствует буква "Э". Поэтому, как только в тексте встретится буква "Э", она напечатана не будет, а произойдет перенос текста на новую строку.

Устранить можно и эту проблему, заменив символ, дающий команду переноса на какой-нибудь другой. Вопрос только: на какой? Ведь любой другой символ может встретиться в файлах данных, введенных на нерусифицированной программе MF 09.

Я считаю, что мне удалось найти удачное решение. Сделайте:

POKE 58237,0 POKE 63812,0

Теперь вместо С.В.Л. для переноса строки будет использоваться любой символ, с кодом больше 127. Это любое ключевое слово, например "STOP" или "AT" или любое другое, которое Вам удобнее набирать. При этом в файл данных будет занесен код 0 (независимо от того, какое ключевое слово Вы ввели). Символ с кодом 0 - это в кодах ASCII управляющий символ "NUL", он для печати не используется. Но в режиме "дисплей" теперь по этому символу произойдет перенос на новую строку. Если же Вы при помощи переделанной программы будете просматривать файлы данных, введенные на непеределанной программе, то все символы переноса строки, находящиеся в тексте, станут видимыми.

Если при пользовании русифицированной программой MF 09 возникнут какие-либо неудобства, связанные с переносом строки, то напишите в ИНФОРКОМ, я готов придумать что можно сделать. (Например, можно написать несложную программу обработки уже готовых файлов данных, заменяющую все встречающиеся в тексте С.В.Л. на управляющие символы "NUL".)

Многие проблемы, существенные и несущественные, связанные с русификацией MF 09, мы решили. Но осталась еще одна очень важная проблема, пока еще нерешенная. Это сортировка по русскому алфавиту. Как производится сортировка по латинскому алфавиту? Очень просто. В кодах ASCII латинские буквы уже расположены в алфавитном порядке. Значит, располагая записи по возрастанию кодов, можно производить сортировку. С точки зрения программирования это довольно простая задача. С русским алфавитом сложнее. Здесь нет никакой связи между алфавитом и кодом символа. Поэтому сортировка по тому же принципу, что и латинского текста не годится. Причем проблема сортировки по русскому алфавиту гораздо шире, чем рамки программы MF 09. По-моему проблема вполне достойна того, чтобы вынести ее на общественный "Форум". Может быть, кому-нибудь из читателей удастся преодолеть ее? В таком случае заявите в ИНФОРКОМ. В свою очередь, я тоже пытаюсь найти приемлемый вариант решения этой задачи и когда закончу работу, сообщу об этом.

ЗАКЛЮЧЕНИЕ.

Мы закончили перевод программы MF 09 на русский язык. Выполняя эту работу, Вы познакомились с некоторыми методами, которые могут применяться для этого и немного "набили руку". Теперь Вы легко сможете применять "русский язык" при разработке своих программ.

Что же касается перевода фирменных программ, то тут следует отметить некоторые моменты. Приобретенные знания помогут Вам во многих случаях, однако будут встречаться разные "сюрпризы и хитрости", придуманные авторами (как было в MF 09, например, код последнего символа на 128 больше и др.). Процедуры вывода на экран могут быть самыми различными. Кроме того, трудности начнутся с загрузки программы, так как при нажатии "BREAK" программа "зависает" или происходит рестарт компьютера. Но даже если Вы удачно "взломаете" защиту загрузчиков программы, надо учесть, что очень многие коммерческие программы закодированы и поэтому, просматривая дамп памяти, мы ничего похожего на текстовые сообщения увидеть не можем. В этом случае надо, дизассемблируя программу, начиная со стартового адреса, найти процедуру декодирования, написать аналогичную процедуру в машинных кодах, раскодировать программу и только после этого заниматься переводом. Закодировать программу после перевода нет необходимости, проще изменить процедуру запуска, исключив элементы декодирования. Без знания машинных кодов Z-80 решить эту проблему, конечно невозможно.

"ИНФОРКОМ" продолжает прием заявок на свой трехтомник для желающих самостоятельно освоить программирование в машинном коде. т.1 "Первые шаги в машинном коде". т.2 "Практикум по программированию в машинном коде". т.3 "Справочник по машинному коду".

Напоминаем, что данный трехтомник является наиболее доступным учебным материмом, не имеет аналогов ни у нас в стране ни за рубежом и, кроме вопросов программирования в машинном коде и на языке АССЕМБЛЕРа, содержит малоизвестные сведения по программированию в кодах встроенного калькулятора и сотни примеров команд, расширяющих систему программирования Z-80.

? ■

"ИНФОРКОМ" получает массу писем от начинающих программистов с просьбами посоветовать им над чем бы стоило поработать, в какой области приложить свои усилия.

Мы считаем, что лучше всего в этой деле равняться на классиков. Поэтому пользуясь тем, что этот номер "ZX-РЕВЮ" является апрельским, мы поздравляем дорогих читателей с праздником 1-го апреля и рекомендуем обратить внимание на последние достижения всемирно известной фирмы PFA.

Мастеров "самого быстрого ксерокса" просим при перепечатке (или ином воспроизведении информации) не стесняться и смело указывать на первоисточник.

Проблем совместимости больше не существует.

Уникальная развлекательная программа разработана и выпущена фирмой PRESENT FROM AFRICA. Это первая версия имитатора "Super Real Bomb Simulator".

Программа отличается от всех известных аналогов тем, что ее не надо инициализировать, настраивать и вообще ее не надо загружать. Она не требует ни джойстика, ни клавиатуры.

Вам достаточно вставить кассету в магнитофон, нажать клавишу PLAY и спокойно ждать, когда она сработает.

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

За особо дополнительную плату программа может поставляться на диске.

Решается вопрос о перспективах маркетинга программы в термоядерном исполнении (так называемый экспортный вариант). Это первая в мире программа, работающая на компьютере любой системы!

Проблем с продуктами больше нет!

Впервые в мире фирмой PRESENT FROM AFRICA выпущен имитатор продукта питания. Это завоевавшая всемирную известность программа "Shashlyik Basturma Simulator".

Программа состоит из двух частей. Первая часть - аркадная игра по нанизыванию кусочков баранины и лука на палочку.

Вторая часть требует специального блока питания (поставляется вместе с программой).

Подключив его и запустив программу, Вы уже через несколько минут сможете насладиться ароматом настоящего шашлыка, исходящим от Вашего компьютера.

Если запах немножко не тот, значит Вы забыли замочить компьютер в слабом растворе уксуса или в сухом вине. Сделать это лучше всего накануне вечером. Не забудьте добавить лука репчатого, перца молотого и посолить.

Суперновинка!

Развивая плодотворную идею программы "Shashlyik..." фирма PFA подготовила совершенно оригинальный программный продукт, объединяющий в себе абсолютно все известные жанры игровых, прикладных и вкусовых программ. Эта новинка поступила на прилавки под названием "Chuckie Egg F16".

Сначала Вы работаете в режиме "TOOLKIT", конструируя себе цыпленка-табака по вкусу. В этом режиме программа является также обучавшей по анатомии пернатых.

Увлекательный аркадный эффект возникает, если Вы ошибетесь и Ваш цыпленок начнет походить на утку или гуся - Вам придется отбиваться от группы сумасшедших яблок (APPLES), желающих в нем расположиться.

Вы можете выбрать своему цыпленку лапки, ножки, крылышки, грудку по вкусу, можете оснастить его хвостовым, оперением, подвесить дополнительные топливные баки, ракеты "воздух-воздух" и "воздух-земля", установить приборы ночного бомбометания и многое, многое другое.

Дальше программа может развиваться как STRATEGY/ACTION, а можно сразу перейти в кулинарный модуль с помощью описанного выше блока питания. Но в последнем случае способ предпусковой подготовки компьютера путем замачивания будет несколько отличаться, впрочем вместо инструкции к программе прилагается книга о вкусной и здоровой пище.

Проблем с ошибками больше нет!

Известно сколько неприятностей доставляют каждому работающему с компьютером сообщения об ошибках.

Наконец-то эта проблема решена всемирно известной фирмой PRESENT FROM AFRICA.

Покупайте новую программу "О.К. Simulator" (Имитатор О.К.)

Что бы Вы ни делали с компьютером, он всегда выдает радостное сообщение О.К.

Программа проста в работе. С ней успешно (и без ошибок) работают грудные дети. Группа академиков освоила работу с этой программой всего за полтора месяца во время учебного круиза по маршруту Одесса-Афины-Кейптаун-Сингапур-Токио и обратно. Теперь у них тоже все OX.

По окончании круиза все академики высказали два пожелания и поставили один проблемный вопрос.

Первое пожелание - сократить количество утомительных нажатий клавиш хотя бы до двух (большее количество мешает круизу).

Второе пожелание - повторить круиз для окончательного решения вопроса о рекомендации программы ко всеобщему внедрению.

Проблемный вопрос: почему во всех городах мы побывали по два раза, а в Токио только один?

Сейчас фирма работает над новой версией, печатающей сообщение "О.К." в любых необходимых количествах автоматически, но, как сообщают, работа над проектом может затянуться из-за неразрешимости проблемного вопроса. Он стал известен в академических кругах под названием "Токийский синдром".

Ряд крупных академических институтов уже взялись за его отработку, по крайней мере на моделях. В модельных экспериментах функции Токио выполняли Лондон, Париж и Нью-Йорк, но проблема еще далека от разрешения. На очереди Сан-Франциско и Рио-де-Жанейро.

Происшествия!

В московском отделении фирмы PRESENT FROM AFRICA совершено крупное хищение. Украдены персональный компьютер, монитор, курсор и джойстик.

При обыске у подозреваемого обнаружены компьютер, джойстик и монитор.

Фирма гарантирует всем гражданам, которым известно что-либо о местоположении курсора, призовое вознаграждение своим программным обеспечением.

Без курсора фирма не может продолжать работы над замечательными проектами.




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Вопрос-Ответ - Итерактивность...
Народ - народные пословицы.
Interview with Arty Noonzen - интервью с организатором Digital Reality.
Обратная связь - контакты редакции.
Сплошные приколы - 3 анекдота. Сборник высказываний советских офицеров (продолжение).

В этот день...   23 апреля