ZX-Ревю 1992 №1-2 1991 г.

Мастерфайл 09 полная русификация - вступление.


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

ВСТУПЛЕНИЕ.

Прежде всего я хотел бы сказать что эта статья ориентирована на тех пользователей "Спектрума" которые уже немного овладели программированием на Бейсике, зашитом в ПЗУ компьютера но, еще не владеют знаниями, необходимыми для программирования в машинных кодах Z80. Но, пользуясь только этими знаниями, многие усовершенствования можно уже делать с готовыми программами. А стимул для дальнейшего освоения машинных кодов несомненно появится в процессе такой работы. Таким образом, психологический барьер будет преодолён и Вы выйдете на новый уровень.

В этой статье изложены основные методы и приемы неполной и полной русификации программ для "Спектрума". В качестве примера будут рассмотрены способы русификации программы "MF 09". Она достаточно широко распространена среди пользователей "Спектрума" и английский вариант сильно сдерживает ее применение.

Существует несколько способов русификации "Спектрума". Сначала немного о самом простом из них.

1. Использование символов UDG-графики.

Так как многие латинские буквы в режиме CAPS LOCK по написанию совпадают с русскими (А, В, Е, К, M, H, O, P, C, Т, X), а вместо русской буквы "З" можно использовать цифру "3", то остается всего 20 букв, требующихся для русификации (Б, Г, Д, Ж, И, Й, А, П, У, Ф, Ц, Ч, Ш, Щ, Ъ, Ы, Ь, Э, Ю, Я), то есть мы укладываемся в 21 символ, которые отведены для графики пользователя в "Спектруме".

Предлагаемая программа наглядно показывает принцип формирования символа UDG-графики. Например, для формирования буквы "Я", закрепленной за символом UDG "A", набираем программу:

10 LET n=USR "а" 20 FOR x=n ТО n+7 30 READ y 40 POKE x,y 50 NEXT x 100 DATA

BIN 00000000, BIN 00111110, BIN 01000010, BIN 01000010, BIN 00111110, BIN 00100010, BIN 01000010, BIN 00000000

В строке 100 после запятых надо набирать по 19 пробелов, чтобы наглядно просматривалась будущая буква. Те пиксели, которые должны быть включены, отмечаем как "1", а те, которые выключены - как "0".

Для буквы "Б" надо в строке 10 вместо USR "а" подставить USR "b" и изменить нули и единицы в строке 100.

Более подробно этот метод был изложен в разработке ИНФОРКОМА "Большие возможности Вашего Спектрума". Говорилось о нем и в ZX-РЕВЮ N 4-5 (стр. 80). Поэтому, чтобы не повторяться, представим теперь, что русские UDG-символы Вами уже сформированы и Вы записываете 21 символ, начиная с "а", на магнитофон:

SAVE "rusudg" CODE USR "a",21*8

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

1 GO TO 100

2 LOAD "rusudg" CODE

3 GO TO 1

5 SAVE "zagotowka" LINE 2:

SAVE "rusudg" CODE USR "a",168

6 GO TO 5

Получился своеобразный "дебют" программы. Теперь сделайте RUN 2 и загрузите записанную ранее область UDG. После сообщения "0 ОК" набирайте свою программу, начиная с той строки, которую указали в строке 1 после GO TO, то есть с 100. Для записи готовой программы на магнитофон используйте RUN 5, предварительно подставив вместо "zagotowka" имя программы. При этом запишется программа, а следом за ней блок кодов UDG. Строка 6 "зацикливает" процесс записи, если Вам надо записать несколько дублей программы. При загрузке программа автостартует со строки 2 и загрузит блок UDG. Команда RUN обеспечивает "холодный" старт программы.

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

После рестарта компьютера наберите: 1 REM, а после REM столько пробелов (или любых других символов), сколько байтов памяти Вам надо зарезервировать для Ваших целей. Для размещения, например, блока символов UDG надо набрать 168 пробелов. После того, как строка введена в память компьютера, заменяем ее номер на 0, подав прямую команду: POKE 23756,0 . На экране теперь видим: 0 REM. Первая строка стала нулевой. Теперь ее невозможно случайно испортить, вызвав на редактирование командой EDIT. Свободная область в этой строке начинается с первого символа (пробела), стоящего за REM, адрес ее начала - 23760, длина равна числу набранных символов (пробелов). Теперь, если Вы набрали 168 пробелов, можете загрузить в нулевую строку блок кодов UDG-графики:

LOAD "rusudg" CODE 23760

Далее надо сделать так, чтобы включался блок UDG-кодов, загруженный в новое место. Для этого используем системную переменную UDG, занимающую два байта в ячейках 23675 и 23676. Эта переменная указывает адрес первой ячейки области UDG. Выполните:

PRINT PEEK 23675+256*РЕЕК 23676

Вы получите результат: 65368. Кстати, этот же результат Вы получите, выполнив: PRINT USR "а".

Новое значение системной переменной UDG будет равно 23760. Вычислим младший, а затем старший байты этого числа, выполнив:

PRINT 23760-256*INT(23760/256)

PRINT INT(23760/256)

Получим 208 и 92. Теперь догрузим к нулевой строке наш "дебют" программы, выполнив:

MERGE "zagotowka"

и изменим строки 2 и 5:

1 GO TO 100

2 POKE 23675,208: POKE 23676,92

3 GO ТО 1

5 SAVE "zasotowka" LINE 2 6 GO TO 5

Теперь сделайте RUN 2. После сообщения "0 ОК" можете набирать свою программу, используя графический регистр. Надо только помнить о том, что при выполнении команды LIST при выведении нулевой строки, скорее всего, будет сообщение об ошибке. Это связано с тем, что интерпретатор Бейсика не понимает ту информацию, которая стоит в нулевой строке. Для получения листинга придется делать LIST 1. Неприятности могут быть также и в том, что не все начальные строки могут быть видны в автоматическом листинге, хотя они нормально вызываются при редактировании командой EDIT и работа готовой программы от этого никак не страдает.

Для несложных своих программ этот способ русификации вполне может применяться, так как позволит писать на русском языке даже комментарии в тексте программы.

Что касается программы MF 09, то, к сожалению, к ней не подходит этот самый простой способ русификации, так как символы, набранные с использованием графического регистра (курсор [G]) не отображаются в режиме "дисплей". Вместо них на экране печатается знак "?". Такие же трудности возникнут и при выведении текста на печать при помощи принтеров, отличных от "ZX". Поэтому рассмотрим другой, более совершенный способ неполной русификации.

2. Использование дополнительного символьного набора.

Некоторые проблемы, связанные с этим вопросом, были изложены в ZX-РЕВЮ № 4-5 стр. 80-81. Наиболее крупная из всех - это, по моему, программная совместимость. Какой латинской букве будет соответствовать какая русская? Это не имеет большого значения для конкретной игровой программы, где не надо вводить текст в процессе игры, однако для таких программ, как MF 09, это имеет немаловажное значение, ведь со временем все больше и больше появится возможностей пользоваться базами данных, составленными другими авторами. Это могут быть и каталоги программ для "Спектрума" (с комментариями на русском языке), и расписание движения поездов, самолетов и т.д. Даже если Вы вместе с базой данных перепишете и саму программу MF 09 автора, трудности возникнут при внесении дополнений и изменений в базу данных, так как каждый раз надо будет "осваивать" незнакомое распределение русских букв между кнопками клавиатуры.

К стандарту кодов ASCII автор этих строк подошел своим, независимым от ИНФОРКОМА путем, но результат все равно тот же. Значит наверняка есть и другие авторы, работающие в этом стандарте. Кстати и символьный набор "Спектрума" (коды с 32 по 127) являются кодами ASCII. Поэтому настоятельно рекомендую начинающим придерживаться именно этого стандарта. Распределение русских букв на первый взгляд может показаться неудобным, но Вы быстро привыкнете и перестанете это неудобство замечать. Зато у Вас будет больше шансов найти "привычные" для себя программы.

Базисная таблица КОИ-7 кодов ASCII имеет несколько символьных наборов: латинский, русский, смешанный. Символьный набор условно можно разделить на три части:

1 часть - коды с 32 по 63 - символы и цифры;

2 часть - коды с 64 по 95 - буквы, в основном печатаемые в регистре CAPS LOCK;

3 часть - коды с 96 по 127 - буквы, печатаемые без регистра CAPS LOCK.

Вы можете увидеть эти три части в трех строках на экране, выполнив:

FOR а=32 ТО 127: PRINT CHR$ а;: NEXT a

То, что Вы видите на экране, является символьным набором "Н0" базисной кодовой таблицы КОИ-7 кодов ASCII. Если взять другой символьный набор: "H1", то у него первая часть остается той же, вторая часть - это строчные русские буквы, а третья часть - заглавные русские буквы. Таблица их соответствия с тем набором, который в ROM "Спектрума" приведена в ZX-РЕВЮ №4-5 за 1991г., стр. 81.

Когда Вы принципиально решили для себя вопрос стандартизации, все остальное -дело техники. Загружаем программу "ART STUDIO", входим в режим TEXT и далее FONT EDITOR. Теперь надо переделать латинские буквы на русские соответственно таблице (вторую и третью части символьного набора), оставив без изменения цифры и символы (первую часть символьного набора) и записать новый набор символов на ленту (например с

именем "ruschr").

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

USR "а"-768=64600

Кстати, сохранять на ленте целесообразно символьный набор вместе с блоком кодов UDG; последние могут использоваться в Ваших программах непосредственно по назначению - для получения графических элементов. Для этого надо обьединить эти блоки в один:

LOAD "ruschr" CODE 64600,768

LOAD "rusudg" CODE 65368,168

SAVE "rus" CODE 64600,936

Теперь подумаем об удобстве пользования. Если символьный набор расположен с адреса 64600, то системная переменная CHARS (ячейки 23606, 23607) будет равна:

64600-256=64344

Младший и старший байты ее:

64344-256*INT(64344/255)=88

INT(64344/256)=251

"Дебют" программы может выглядеть теперь следующим образом:

1 GO ТО 100

2 LOAD ""

3 GO TO 1

5 SAVE "zagotowka" LINE 2 : SAVE "rus" CODE 64600,936

6 GO TO 5

8 POKE 2З606,88: POKE 23607, 251: RETURN : REM rus

9 РО^ 23606,0 : POKE 23607,60 :RETURN : RЕМ lat

Для записи готовой программы, как и раньше, используется RUN 5 (предварительно подставив имя программы). Следом за программой будет записан символьный набор с блоком UDG (т.е. 768+168=936 байт). Теперь поговорим о строках 8 и 9. Подайте прямые команды:

GO SUB 8 и затем: LIST

Вы увидите, что листинг программы печатается русскими буквами. Для обратного переключения сделайте GO SUB 9. Теперь эти переключения можно применять в Вашей программе. Например, чтобы написать фразу: "ZX-Spectrum пишет ПО-РУССКИ", надо ввести такую строку в программе:

100 PRINT "ZX-Spectrum ";:GO SUB 8: PRINT "pi{et PO-RUSSKI":GO SUB 9

Чтобы не допускать ошибок при наборе большого объема русского текста в своей программе, перед набором строки сделайте GO SUB 8 прямой командой и Вы будете видеть русский текст, который набиваете, в том виде, как он будет напечатан на экране.

Применение двух символьных наборов позволяет выводить на экран текст русскими и латинскими заглавными и строчными буквами, однако производить переключения вставляя в программу GO SUB 8 и GO SUB 9 не очень удобно, но главное, эти переключения нельзя выполнить, не останавливая программу, например, набирая строку данных в программе MF 09. Поэтому можно воспользоваться другим набором кодов ASCII - это набор КОИ-7 "НС". Здесь первая и вторая части - совпадают с ROM "Спектрума", а в третьей части вместо строчных латинских - заглавные русские буквы.

Таблица соответствия с ROM "Спектрума" приведена ниже (только третья часть символьного набора):

99

100 101 102

103

104

С Т У Ж В Ь

Ц

Д Е Ф Г Х

115

116

117

118

119

120

с

s t

d

е

f g

h

u

v

w

x

105

i

И

121

y

И

106

j

Й

122

z

З

107

k

К

123

[

Ш

108

l

Л

184

верт. черта

Э

109

m

М

125

]

Щ

110

n

Н

126

апостроф

Ч

111

о

О

127

копирайт

Ъ

В этом случае переключение на символьный набор можно сделать только один раз сразу же после старта программы. Измените строку 3 нашего дебюта:

3 GO SUB 8: GO TO 1

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

Попутно следует сказать несколько слов о том, как выглядит готовый шрифт на экране компьютера. Вы обращали внимание, что почти ни в одной хорошей коммерческой программе не применяется символьный набор "Спектрума" а, в основном стилизованные шрифты. К особому зрительному эффекту приводит применение уплотнённых шрифтов. При этом программа буквально преображается. Почему бы не использовать такие шрифты в своих программах? Кроме красивого "внешнего вида" они имеют повышенную четкость при различном сочетании цветов INK - PAPER.

В своих программах я применяю "утолщенный" русско-латинский символьный набор ("НС" в кодах КОИ-7), который хочу предложить вашему вниманию. При этом буквы выглядят в увеличенном виде следующим образом (Ц - один пиксел):

1111

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

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

10 CLEAR 54599 20 LET N=64600: LET S=0 30 FOR X=N TO N+767 40 READ Y: POKE X,Y 50 LET S=S+Y: 60 NEXT X

70 IF S<>44655 THEN PRINT FLASH 1;"ERROR":STOP

80 POKE 23606,88: POKE 23607,251

90 FOR A=32 TO 127: PRINT CHR$ A;: NEXT A

100 SAVE "znak" CODE 64600,768

110 DATA

000, 000, 000, 000, 000, 000, 000, 000,

000, 024, 024, 024, 024, 000, 024, 000,

000,

108,

108,

108,

000,

000,

000,

000

000,

108,

254,

108,

108,

254,

108,

000

120

DATA

000,

024,

126,

088,

126,

026,

126,

024

000,

098,

100,

008,

016,

038,

070,

000

000,

048,

088,

048,

122,

204,

118,

000

000,

024,

048,

000,

000,

000,

000,

000

130

DATA

000,

012,

024,

024,

024,

024,

012,

000

000,

O48,

024,

024,

024,

024,

048,

000

000,

000,

108,

056,

254,

056,

108,

000

000,

000,

024,

024,

126,

024,

024,

000

140

DATA

000,

000,

000,

000,

000,

024,

024,

048

000,

000,

000,

000,

124,

000,

000,

000

000,

000,

000,

000,

000,

024,

024,

000

000,

000,

006,

012,

024,

048,

096,

000

150

DATA

000,

060,

102,

110,

118,

102,

060,

000

000,

024,

056,

024,

O24,

024,

060,

000

000,

060,

102,

005,

060,

096,

126,

000

000,

060,

102,

012,

006,

102,

060,

000

160

DATA

000,

012,

028,

044,

076,

126,

012,

000

000,

126,

096,

124,

006,

102,

060,

000

000,

060,

096,

124,

102,

102,

060,

000

000,

126,

102,

012,

024,

048,

048,

000

170

DATA

000,

060,

102,

060,

102,

102,

06O,

000

000,

060,

102,

102,

062,

006,

060,

000

000,

000,

024,

024,

000,

024,

024,

000

000,

000,

024,

024,

000,

024,

024,

048

180

DATA

000,

000,

012,

024,

048,

024,

012,

000

000,

000,

000,

124,

000,

124,

000,

000

000,

000,

048,

024,

012,

024,

048,

000

000,

060,

102,

012,

024,

000,

024,

000

190

DATA

000,

124,

206,

214,

222,

192,

124,

000

000,

060,

102,

102,

126,

102,

102,

000

000,

124,

102,

124,

102,

102,

124,

000

000,

060,

102,

096,

096,

102,

060,

000

200

DATA

000,

124,

102,

102,

102,

102,

124,

000

000,

126,

096,

124,

096,

096,

126,

000

000,

126,

096,

124,

096,

096,

096,

000

000,

060,

102,

096,

110,

102,

060,

OOO

210

DATA

000,

102,

102,

126,

102,

102,

102,

000

000,

060,

024,

024,

024,

024,

060,

000

000,

014,

006,

006,

102,

102,

060,

000

000,

102,

108,

120,

120,

108,

102,

000

220

DATA

000,

096,

096,

096,

096,

096,

126,

000

000,

066,

102,

126,

102,

102,

102,

000

000,

102,

102,

116,

110,

102,

102,

000

000,

060,

102,

102,

102,

102,

060,

000

230

DATA

000,

124,

102,

102,

124,

O96,

096,

000

000,

060,

102,

102,

110,

110,

062,

000

000,

124,

102,

102,

124,

106,

102,

000

000,

060,

096,

060,

006,

102,

060,

000

24O

DATA

000,

126,

024,

024,

024,

024,

024,

000

000,

102,

102,

102,

102,

102,

060,

000

000,

102,

102,

102,

102,

060,

024,

000

000,

196,

198,

214,

214,

254,

066,

000

250

DATA

000,

102,

060,

024,

024,

060,

102,

000

000,

102,

060,

024,

024,

024,

024,

000

000,

124,

012,

024,

048,

096,

124,

000

000,

030,

024,

024,

024,

024,

030,

000

260

DATA

000,

000,

096,

048,

024,

012,

006,

000

000,

120,

024,

024,

024,

024,

120,

000

000,

024,

060,

090,

024,

024,

024,

000

000,

000,

000,

000,

000,

000,

000,

255

270

DATA

000,

000,

220,

246,

245,

246,

220,

000

000,

000,

060,

102,

126,

102,

102,

000

000,

000,

124,

096,

124,

102,

124,

000

000,

000,

106,

106,

108,

108,

126,

006

280

DATA

000,

000,

060,

108,

108,

108,

254,

196

000,

000,

126,

096,

124,

096,

126,

000

000,

000,

124,

214,

214,

124,

016,

000

000,

000,

062,

048,

048,

048,

048,

000

290

DATA

000,

000,

102,

060,

024,

060,

102,

000

000,

000,

102,

102,

110,

118,

120,

000

000,

024,

102,

102,

110,

118,

102,

000

000,

000,

102,

108,

120,

108,

102,

000

300

DATA

000,

000,

030,

054,

054,

054,

102,

000

000,

000,

066,

102,

126,

102,

102,

000

000,

000,

102,

102,

126,

102,

102,

000

000,

000,

060,

102,

102,

102,

060,

000

310

DATA

000,

000,

126,

102,

102,

102,

102,

000

000,

000,

062,

102,

062,

054,

102,

000

000,

000,

124,

102,

102,

124,

096,

000

000,

000,

060,

102,

096,

102,

060,

000

320

DATA

000,

000,

126,

024,

024,

024,

024,

000

000,

000,

102,

102,

062,

006,

060,

000

000,

000,

214,

214,

124,

214,

214,

000

000,

000,

124,

102,

124,

102,

124,

000

330

DATA

000,

000,

096,

096,

124,

102,

124,

000

000,

000,

198,

198,

246,

222,

246,

000

000,

000,

060,

102,

012,

102,

060,

000

000,

000,

198,

214,

214,

214,

254,

000

340

DATA

000,

000,

120,

012,

060,

012,

120,

000

000,

000,

198,

214,

214,

214,

255,

003

000,

000,

102,

102,

062,

006,

006,

000

060,

066,

153,

161,

161,

153,

066,

060

Числа в строках DATA напечатаны друг под другом для удобства чтения. Вы же можете набирать их так, как Вам удобно.

Теперь о "встраивании" загружаемого символьного набора в программу MF 09. После того, как символьный набор будет записан на ленту, поступаем следующим образом. Разместим его непосредственно перед основным блоком кодов "MF09CODE" CODE 57328,8208 с адреса 57328-768-56560. Значение переменной CHARS тогда будет равно:56560-256=56304.

Младший и старший байты CHARS: 56304-256*INT(56304/256)=240 INT (56304/256)=219

Далее делаем:

CLEAR 56559

LOAD "znak" CODE 56560,768

LOAD "MF09CODE" CODE 57328,8208

И записываем готовую программу на ленту:

SAVE "MF09 R/L" CODE 56560,8976

Теперь изменяем программу-загрузчик "MF LOADER", заменив CLEAR 57327 на CLEAR 56559.

Изменения, производимые в основной Бейсик-программе. Добавляем строки, переключающие основной и альтернативный символьные наборы

8 POKE VAL "23606",VAL "240": POKE VAL "23607", VAL "219": RETURN : REM RUS

9 POKE VAL "23606", NOT PI : POKE VAL "23607",VAL "60": RETURN : REM lat

Изменяем другие строки, подставляя в нужные места GO SUB 8 или GO SUB 9 и изменив начальный адрес и длину основного блока кодов:

1 GO SUB VAL "8": GO TO USR VAL "58285"

4020 GO SUB VAL "9": SAVE C$(TO VAL "10") DATA F$(): GO SUB VAL "8": GO TO USR R

4030 GO SUB VAL "9": SAVE C$(TO VAL "10") LINE VAL "4035": SAVE "MF09 R/L" CODE VAL "56560", VAL "8976": GO SUB VAL "8": GO TO USR R

4035 LOAD "MF09 R/L" CODE: GO TO PI/PI

Остальные строки оставляем без изменения.

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

3. Перевод программы на русский язык.

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

Рассмотрим подробно процесс перевода программы на русский язык на примере программы MF 09. Приобретенный опыт Вы сможете использовать для перевода других программ.

В машинных кодах процедуры вывода текстовых сообщений на экран могут быть самыми различными, но в любом случае сама строка символов, выводимая на экран, находится внутри программы, надо только найти ее и изменить коды символов, находящихся там, занося другие значения хотя бы при помощи РОКЕ.

Для работы можно воспользоваться любой программой-монитором, которая есть под рукой. А можно за несколько минут набрать нужную программу на Бейсике.

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

ПРОГРАММА-МОНИТОР

1 BORDER 7: PAPER 7: INK 0: CLS: GO SUB 6: GO TO 100

2 CLEAR 50000

3 LOAD ""CODE

4 GO TO 1

5 GO SUB 9: INPUT "FILENAME"; N$

6 SAVE N$ LINE 2: SAVE N$ CODE 56560,8976

7 STOP

8 POKE 23606,240: POKE 23607, 219: RETURN : REM rus

9 POKE 23606,0: POKE 23607,60: RETURN : REM lat

10 LET B=PEEK A: LET C$=CHR$ B

15 IF B<32 THEN LET C$="?"

20 RETURN

100 INPUT "ADDRESS: ";N

200 FOR A=N TO 65535

210 REM

220 GO SUB 10

230 INPUT (TAB 0;A; TAB 8; B;TAB 13;c$;TAB 23);C$: IF c$<>"" THEN POKE A,CODE C$

231 REM INPUT (TAB 0: A; TAB 8; B; TAB 13; C$; TAB 23); LINE C$: IF C$<>"" THEN POKE A,VAL

C$

240 GO SUB 10

250 PRINT TAB 0; A; TAB 8;B; TAB 13; c$;

300 NEXT A

В строке 15 непосредственно перед знаком вопроса надо нажать "INV. VIDEO" (CAPS SHIFT+4), a сразу же после знака вопроса "TR. VIDEO" (CAPS SHIFT+3).

REM в строке 231 набран после набора всей строки, в последнюю очередь.

После того, как Вы наберете эту программу, сделайте RUN 2 и загрузите с магнитофона коды "MF09 R/L" с пристыкованным русско-латинским символьным набором. После окончания загрузки программа выполнит переключение на этот символьный набор и запросит адрес с которого хотим просматривать содержимое памяти компьютера. Пока введите "STOP" (SYMBOL SHIFT+A) и "ENTER" и поговорим подробнее о самой программе-мониторе.

Здесь вам уже знакомы некоторые фрагменты: строки 8 и 9 - переключатели шрифтов (в программе проставлены в нужных местах GO SUB 8 и GO SUB 9). Для сохранения результатов Вашего труда Вы периодически будете делать RUN 5 - это запись на ленту программы-монитора и кодов MF 09 в том состоянии, до которого Вы дошли. После того, как сделаете RUN 5, программа запросит имя файла для записи. Можете задавать 1, 2, 3... и т.д.

Строки 10, 15, 20 - это вспомогательная подпрограмма, присваивающая значения переменным в соответствии с содержимым ячейки памяти. Строка 15 предохраняет от вывода на экран управляющих символов, имеющих коды с 0 по 31. Если встретится такой символ, то на экране будет инверсно напечатан знак "?". Так Вы сможете различать управляющий символ и настоящий знак вопроса, которые тоже будут встречаться в тексте.

Строка 210 зарезервирована для организации поиска нужной информации, к ней мы еще обратимся позже.

Строки 230 и 231 очень похожи. В строке 231 стоит REM и она, таким образом выключена. Строка 230 выдает на экран адрес ячейки памяти, код, содержащийся в ней и символ, соответствующий этому коду; далее - в кавычках - ожидается ввод символа, код которого надо записать в эту ячейку. Это удобно при замене текстовых сообщений, так как ввод осуществляется непосредственно буквой, на место того символа, который мы видим, измененный текст тут же отображается на экране. Удобно также и то, что переключившись на загружаемый символьный набор программы "MF09 R/L", мы будем видеть текст в том виде, каким он будет в готовой программе. В режиме курсора [L] - печатаем русские буквы, а в режиме [С] (CAPS LOCK) - латинские. Действуют также регистры "EXT. MODE" и "GRAPH".

Вводить новый текст надо по одной букве, не забывая после каждого символа нажимать "ENTER", а также ставить "пробелы" между словами. Если Вы ничего не хотите менять, то просто нажимайте "ENTER" для перехода к следующей ячейке. Для того чтобы, остановить программу, надо нажать "КУРСОР ВЛЕВО" (SYMBOL SHIFT+5), затем "STOP" и "ENTER". Потом опять RUN или GO TO 100 для работы с новыми адресами. Если же Вы увидели, что допустили ошибку при вводе, то остановите программу, сделайте GO TO 200 -программа стартует без запроса с того адреса, который Вы вводили последний раз. Нажимая "ENTER", подойдите к тому месту, где допущена ошибка.

Теперь поэкспериментируйте с подготовленными программами, а в следующем выпуске ZX-РЕВЮ мы доведём до конца рассказ о том, как выполнить полную русификацию программы MASTERFILE 09.




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Тема - Russian ZX: история создания Российского спектрума.
Мозаика - Как играть в сетевой вариант игры "Laser Squad". Коды уровней к игре "Fire Gear".
Открытие - Програмирование музыкального процессора AY 3-8910.

В этот день...   29 марта