Системные программы для ZX-Spectrum 128K 1969 г.

THE LAST WORD 2 - дополнение ко 2-ой версии программы TLW. Введение русского шрифта в редактор.


ДОПОЛНЕНИЕ 2. ВВЕДЕНИЕ РУССКОГО ШРИФТА

В РЕДАКТОР

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

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

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

Наибольшую трудность при введении дополнительного шрифта представляет
нестандартный генератор символов, позволяющий получать вместо стандартных 32-х
символов в строке 40, 48, 60, 80 символов.

Работа генератора символов при печати 40... 80 знаков

Стандартное изображение символа представляет из себя шаблон размером 8x8
пикселей и задается с помощью 8 байт. Рассмотрим, например, как изображается
буква А.

Каждой строке этого шаблона соответсвует один байт, состоящий из 8 бит. Так, для
первой строки этого шаблона (первого байта) включенными являются биты 4, 3,2, 1,
а для второй строки биты 5 и 1.

В этом случае первый байт равен:

2л4+2З+2уч2+2уч 1 - 16 + 8 + 4 + 2 - 30, а второй:

2^5+2^1 -32 + 2 -34

В редакторе текстов TLW в режиме 40 знаков для каждого символа выделяется
шаблон шириной 6 пикселей, в режиме 48-5 пикселей, в режиме 60-4 пикселя и в
режиме 80 - всего 3 пикселя на каждый символ. Изображение на экране символа,
имеющего нестандартную ширину, выполняется в три приема. Рассмотрим их на
примере печати той же буквы А в режиме 48 знаков в строке.

1. На первом этапе выполняется нормальная печать буквы А в отведенном для нее
знакоместе.

2. Затем в изображении буквы "вырезаются" три лишние столбца, чтобы осталось
необходимых 5 пикселей по ширине символа. Пусть это будут столбцы 4, 3, 0. В

программе "вырезание" столбцов выполняется просто выключением всех пикселей,
находящихся в этих столбцах. Тогда изображение буквы примет следующий вид:

В итоге вы получаете изображение буквы А, имеющее в ширину 5 пикселей.
Следующая буква будет начинаться в следующем знакоместе экрана размером 8x8,
но после операций "вырезания" столбцов и сдвига влево перейдет частично в
знакоместо буквы А и т.д.

Таким образом, для режима 40 знаков из стандартного изображения необходимо
вырезать 2 столбца, для режима 60-4 столбца и для режима 80-5 столбцов.

Чтобы программа знала, какие столбцы можно вырезать в каждой букве, она имеет
две таблицы. Длина кадой - по 96 байт (т.к. шрифт содержит 96 символов). Первая
таблица служит для режимов 40 и 48 и находится в адресах с 63100 по 63195, а втора я
- для режимов 60 и 80 и находится в адресах с 63198 по 63293. Поскольку эти таблицы
являются одномерными, то правильнее их назвать не таблицами, а векторами.

Т.к. изображение цифр, знаков препинания и символа "пробел" при переходе с
латинского шрифта на русский не меняются, вам придется вносить изменения только
в ячейки:

с 63133 по 63195 для 1-го вектора и

с 63231 по 63293 для 2-го вектора.

—шшшшшмяшшшшш+яшшшшшяшяяшшшшшш—шшя—шя—ш—.шшшшшшшя—^шш

Номера вырезаемых столбцов для каждой буквы задаются в этих векторах
однобайтным числом. Так, например, если для какой-то буквы в режиме 48 вы хотите,
чтобы вырезались столбцы 4, 5, 0, то в соответствующей ячейке 1 -го вектора надо
поместить число 49т.к. 2/v5+2/v4+2/v0-32+16+1-49.

Если же вам надо, чтобы в режиме 80 для какой-то буквы вырезались столбцы 7,
5, 4, 3,0, то в соответствующей ячейке 2-го вектора должно храниться число 185, т.к.

2/v7+2/v5+2/v4+2/v3+2/v0 - 128 + 32 + 16 + 8 + 1 - 185

Введение русского шрифта

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

В редакторе TLW этот метод не срабатывает, т.к. редактор сам, из своего машинного
кода обращается к шрифту, не прибегая для этой цели к услугам системной
переменной CHARS. Изменить это обращение можно внесением изменения в
машинный код по адресам 63661 и 63662 командой РОКЕ.

Для латинского шрифта в этих ячейках содержится значение 0 и 61,
соответственно. Для русского шрифта надо подставить свои числа. Например, если вы
хотите, чтобы русский шрифт начинался с адреса 30000, то вам надо заслать числа:

РОКЕ 63661, 48: РОКЕ 63662,117

обратите внимание что 117*256+48 - 30000.

При возврате же на латинский шрифт нада естественно опять восстановить
исходные значения.

Соответствие между буквами ЛАТ и РУС алфавитов

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

В компьютерах "спектрум" принят американский стандарт кодов ASCII, согласно
которому за каждым кодом от 32 до 127 закреплен определенный символ. Коды от 0
до 31 - служебные и управляющие, коды от 128 до 255 этот стандарт не устанавливает,
здесь каждая фирма может разместить то, что хочет. Синклер разместил коды
графических символов (от 128 до 143), графику пользователя (от 144 до 164) и так
называемые токены ключевых слов (от 165 до 255). Так, например, код 239 - это токен
LOAD, а код 248 - SAVE. Кстати именно благодаря этому при нажатии одной клавиши
в программу вводится сразу все ключевое слово и его не надо набирать по буквам.

В России коду ASCII соответствует код КОИ-7/НО. Он содержит знаки латинского
алфавита. Имеется также код КОИ-7/Н1, содержащий знаки русского алфавита.
Многие принтеры кроме латинского имеют и русский шрифт, работают в этих
стандартах и могут гибко из программы с помощью кодов управления принтеров
переключаться с латинского шрифта на русский и наоборот. Поэтому, наиболее
удобно при адаптации редактора сразу установить такое же соответствие между
латинской клавиатурой и русскими буквами, какое существует между стандартами
КОИ-7/ИО и КОИ-7Н1.

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

В соответствии с этой таблицей ваша задача при создании русского шрифта
обеспечить, чтобы например 47-м шаблоном вместо шаблона буквы "Q" стоял шаблон
буквы "Я", а вместо "q" - "я" и т.д.

Конструкция букв русского алфавита

Поскольку в результате "вырезания" нескольких столбцов буквы приобретают не
вполне приемлемый вид, целесообразно загружаемый шрифт готовить специально с
учетом того, что столбцы будут вырезаться. Так, например, буквы не должны иметь
никаких декоративных элементов, желательно избегать закруглений. Наиболее
удобно пользоваться для подготовки шрифта специализированными программами,
например, графическим редактором "ARTSTUDIO", но для тех, кто таких программ
не имеет, остается загрузить шрифт вручную с клавиатуры. Можете» например,
загрузить наш шрифт. Для этого наберите и запустите (RUN) нижеприведенную
программу. Когда она отработает, выгрузите сформированный шрифт на ленту. Этот
блок кодов расположен, начиная с адреса 30000 (запомните этот адрес) и имеет длину
768 байт (96 символов по 8 байт).

10 FOR 1-1 то 768

20 READ А

30 РОКЕ (29999+1),А

40 NEXT I

50 SAVE "RUS" CODE 30000,768

100 DATA 0,0,0,0,0,0,0,0

101 DATA 0,16,16,16,16,0,16,0

102 DATA 0,36,36,0,0,0,0,0

103 DATA 0,36,126,36,36,126,36,0

104 DATA 0,8,62,40,62,10,62,8

105 DATA 0,98,100,8,16,38,70,0

106 DATA 0,16,40,16,42,68,58,0

107 DATA 0,8,16,0,0,0,0,0

108 DATA 0,4,8,8,8,8,4,0

109 DATA 0,32,16,16,16,16,32,0

110 DATA 0,0,20,8,62,8,20,0

111 DATA 0,0,8,8,62,8,8,0

112 DATA 0,0,0,0,0,8,8,16

113 DATA 0,0,0,0,62,0,0,0

114 DATA 0,0,0,0,0,24,24,0

115 DATA 0,0,2,4,8,16,32,0

116 DATA 0,60,70,74,82,98,60,0

117 DATA 0,24,40,8,8,8,62,0

118 DATA 0,60,66,2,60,64,126,0

119 DATA 0,60,66,12,2,66,60,0

120 DATA 0,8,24,40,72,126,8,0

121 DATA 0,126,64,124,2,66,60,0

122 DATA 0,60,64,124,66,66,60,0

123 DATA 0,126,2,4,8,16,16,0

124 DATA 0,60,66,60,66,66,60,0

125 DATA 0,60,66,66,62,2,60,0

126 DATA 0,0,0,16,0,0,16,0

127 DATA 0,0,16,0,0,16,16,32

128 DATA 0,0,4,8,16,8,4,0

129 DATA 0,0,0,62,0,62,0,0

130 DATA 0,0,16,8,4,8,16,0

131 DATA 0,60,66,4,8,0,8,0

132 DATA 0,0,72,84,116,84,72,0

133 DATA 0,0,56,72,72,120,72,0

134 DATA 0,48,64,112,72,72,120,0

135 DATA 0,0,72,72,72,72,120,8

136 DATA 0,48,8,120,72,72,120,0

137 DATA 0,0,48,72,120,64,56,0

138 DATA 0,0,56,84,84,56,16,0

139 DATA 0,0,120,64,64,64,64,0

140 DATA 0,0,72,48,48,48,72,0

141 DATA 0,0,72,88,104,72,72,0

142 DATA 0,16,72,88,104,72,72,0

143 DATA 0,0,72,80,96,80,72,0

144 DATA 0,0,56,72,72,72,72,0

145 DATA 0,0,68,108,84,84,68,0

146 DATA 0,0,72,72,120,72,72,0

147 DATA 0,0,48,72,72,72,48,0

148 DATA 0,0,120,72,72,72,72,0

149 DATA 0,0,56,72,72,56,72,0

150 DATA 0,0,112,72,72,112,64,0

151 DATA 0,0,48,72,64,72,48,0

152 DATA 0,0,124,16,16,16,16,0

153 DATA 0,0,72,72,120,8,120,0

154 DATA 0,0,84,56,16,56,84,0

155 DATA 0,0,120,72,120,72,120,0

156 DATA 0,0,64,112,72,72,112,0

157 DATA 0,0,68,116,76,76,116,0

158 DATA 0,0,120,8,56,8,120,0

159 DATA 0,0,84,84,84,84,124,0

160 DATA 0,0,48,72,24,72,48,0

161 DATA 0,0,84,84,84,84,124,4

162 DATA 0,0,72,72,56,8,8,0

163 DATA 0,0,96,56,40,40,56,0

164 DATA 0,92,84,116,84,84,92,0

165 DATA 0,56,72,72,120,72,72,0

166 DATA 0,120,64,120,72,72,120,0

167 DATA 0,72,72,72,72,72,120,8

168 DATA 0,56,72,72,72,72,120,72

169 DATA 0,120,64,120,64,64,120,0

170 DATA 16,124,84,84,84,124,16,0

171 DATA 0,120,64,64,64,64,64,0

172 DATA 0,72,48,48,48,48,72,0

173 DATA 0,72,72,88,104,72,72,0

174 DATA 16,72,72,88,104,72,72,0

175 DATA 0,36,40,48,48,40,36,0

176 DATA 0,56,72,72,72,72,72,0

177 DATA 0,68,108,84,68,68,68,0

178 DATA 0,72,72,120,72,72,72,0

179 DATA 0,48,72,72,72,72,48,0

180 DATA 0,120,72,72,72,72,72,0

181 DATA 0,56,72,72,120,40,72,0

182 DATA 0,120,72,72,120,64,64,0

183 DATA 0,120,64,64,64,64,120,0

184 DATA 0,124,16,16,16,16,16,0

185 DATA 0,72,72,72,120,8,56,0

186 DATA 0,84,84,84,56,84,84,0

187 DATA 0,120,72,120,72,72,120,0

188 DATA 0,64,64,120,72,72,120,0

189 DATA 0,68,68,116,76,76,116,0

190 DATA 0,120,8,8,56,8,120,0

191 DATA 0,84,84,84,84,84,124,0

192 DATA 0,48,72,24,8,72,48,0

193 DATA 0,84,84,84,84,84,124,4

194 DATA 0,72,72,72,120,8,8,0

195 DATA 60,66,153,161,161,153,66,60

Дополнительные сведения

Создатели программы тне LAST WORD по-видимому сочли неудовлетворительной
конфигурацию некоторых букв шрифта, находящегося в ПЗУ компьютера и встроили

специальные процедуры для изображения букв "А" - код 97, "D" - код 68, "Y" - код 89.
При переходе на русский шрифт эти процедуры надо отключить:

РОКЕ 63669,250: РОКЕ 63676,250: РОКЕ 63683,250

а при возврате к латинскому шрифту - подключить снова:

РОКЕ 63669,97: РОКЕ 63676,68: РОКЕ 63683,89

Качество отображения символов в режиме 80 знаков в строке далеко не
удовлетворительное для латинского шрифта, а для русского - еще хуже. Изобразить
буквы Ж, Ш, Щ, Ы, Ю и т.п. шириной в 3 пикселя конечно невозможно. Поэтому этот
режим может применяться только для прикидочного взгляда на сформированную
страницу текста, а основная работа призводится в режимах 40 и 48 знаков.

Порядок переделки программы на русский шрифт

1. Загрузите фирменную программу TLW2.

2. Па вопрос о том, подключен ли принтер, ответьте "N". После этого на экране
появится рабочее окно редактора.

3. Перейдите в режим 40 знаковв строке (режим Е +"V"). На экране появится
запрос VIDEO: дайте в ответ число 40. Выйдите в бейсик (режим Е + "В"). Теперь
можно вносить изменения в программу.

4. Чтобы обеспечить место для изменений дайте прямую команду CLEAR 31000.
Если вы этого не сделаете, то начиная с какого-то момента программа откажется
принимать те изменения, которые вы в нее вводите. Теперь в строке 30 поднимите
адрес RAMTOP, задаваемый оператором CLEAR до 31000. Это нужно для того, чтобы,
во-первых разместить русский шрифт, начиная с адреса 30000, а во-вторых потому,
что размер бейсиковской части программы существенно увеличится после внесения
предлагаемых дополнений, а для этого надо освободить место.

Далее в строке 30 поместите команду на загрузку русского шрифта,
сформированного ранее.

Строка 30 примет вид:

30 CLEAR VAL 31000: GO SUB VAL 100: PRINT LOAD "TLW2XODE:

LOAD "RUSXODE 30000,768: GO TO VAL 1000

5. Строки 40, 70, 80 предназначенные для работы с микродрайвом, можете
удалить, если у вас его нет.

6. Строка 60 предназначена для выгрузки настроенной программы на ленту.
Внесите в нее изменения с тем, чтобы выгружался и встроенный русский шрифт.

60 SAVE TLW2XODE VAL 50000, VAL 15535:
/ SAVE "RUSXODE 30000,768: GO TO VAL 90

7. В строке 3000, которая инициализирует программу, введите два новых
параметра L и R. Это номера строк, в которых начинается переделка шрифта:

L - 7000 - русский шрифт.

R - 8000 - латинский шрифт.

3000 LET R-7000: LET L/-8000: RANDOMIZE USR VAL 52410

8. Введите новые семитысячные строки, обеспечивающие печать русскими
буквами:

7000 REM

7010 REM *** RUSSIAN LETTERS ***

7020 REM

Ввод 1 -го вектора для вырезания столбцов.

7030 RESTORE 7500

7040 FOR 1-63133 TO 63195
7050 READ A
7060 POKE I,A
7070 NEXT I

Ввод 2-го вектора для вырезания строк

7080 RESTORE 7600
7090 FOR 1-63231 ТО 63293
7100 READ А
7110 POKE I, А
7120 NEXT I

Подключение русского шрифта

7130 РОКЕ 63661,48:РОКЕ 63662,117

Отключение процедур изображения символов "A", "Y", "D"

7140 РОКЕ 63669,250:РОКЕ 63670,250:РОКЕ 63683,250
Первый вектор

7500 DATA 131,7,7,7,7,7
7510 DATA 131,7,7,7,7,7,7
7520 DATA 131,7,7,7,7,7,7
7530 DATA 131,7,131,7,7,131,7
7540 DATA 131,7,131,7,7,131
7550 DATA 7,7,7,7,7,131
7560 DATA 7,7,7,7,131,7,131
7570 DATA 7,7,7,131,7,7,131
7580 DATA 7,131,7,7,131,7,131
7590 DATA 7,131,7
Второй вектор

7600 DATA 171,167,167,167,167,167,171
7610 DATA 167,167,167,167,167,167,171
7620 DATA 167,167,167,167,167,167,199
7630 DATA 167,171,167,167,179,167,171
7640 DATA 167,171,167,151,155,167,167
7650 DATA 167,167,167,171,167,167,151
7660 DATA 151,211,167,171,167,167,167
7670 DATA 167,167,167,199,167,171,167
7680 DATA 167,169,167,171,167,171,167

7999 GO TO 3000

9. Введите новые восьмитысячные строки, обеспечивающие печать латинскими
буквами.

8000 REM

8010 REM *** ENGLISH LETTERS ***
8020 REM
Ввод 1 -го вектора

8030 RESTORE 8500
8040 FOR 1-63133 ТО 63195
8050 READ A

8060 POKE 1,А
8070 NEXT I
Ввод 2-го вектора

8080 RESTORE 8600
8090 FOR 1-63231 ТО 63293
8100 READ А
8110 РОКЕ 1,А
8120 NEXT I

Поключение латинского шрифта

8130 РОКЕ 63661,0: РОКЕ 63662,61
Подключение процедур печати символов "A'V'D'VY"

8140 РОКЕ 63669,97:РОКЕ 63676,68:РОКЕ 63683,89
Первый вектор

8500 DATA 137,13,13,13,25,13,13
8510 DATA 21,13,82,13,49,7,137
8520 DATA 13,13,13,37,25,13,35
8530 DATA 13,137,137,137,137,67,112
8540 DATA 131,7,131,7,73,25,69
8550 DATA 67,11,11,35,11,11,67
8560 DATA 67,67,35,131,11,11,11
8570 DATA 25,67,11,67,11,131,131
8580 DATA 131,11,67,82,49,70
Второй вектор

8600 DATA 185,185,185,185,185,185,185
8610 DATA 185,185,229,185,179,185,185
8620 DATA 157,185,185,173,185,185,199
8630 DATA 185,181,181,181,173,211,241
8640 DATA 199,143,199,248,211,157,217
8650 DATA 211,179,179,227,179,179,199
8660 DATA 211,203,227,227,179,179,179
8670 DATA 179,203,179,199,179,171,171
8680 DATA 179,179,199,229,227,203,227

10. Загрузите заранее подготовленный 768-байтный блок кодов, содержащий
русский шрифт.

LOAD ""CODE 30000,768

11. Теперь вы можете выгрузить созданную копию редактора на ленту командой
СО ТО 50.

12. Для проверки войдите в редактор командой СО ТО 3000.

13. Далее выполняйте выход из редактора в бейсик через (режим Е +"В"), а вход:
GO ТО R - в русский шрифт;

GO ТО L - в латинский шрифт;

заключение

1. Уважаемые товарищи и господа! Предлагаемый порядок введения
дополнительного шрифта был нами оттестирован после того, как была напечатана
предыдущая глава. Если вы с полным пониманием выполните все указания,
программа должна работать нормально. В то же время, к нам поступают сведения о
том, что на некоторых самодельных моделях компьютеров после переделки
программы после нормального старта и набора 2...3 букв компьютер зависает. Мы
используем только фирменные компьютеры, поэтому проверить эти сведения не
имеем возможности. Причина может быть не в программе, а в компьютере.

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

ДОПОЛНЕНИЕ 3. КРАТКОЕ ДОПОЛНЕНИЕ ПО TLW2+

Основным отличием этой версии программы от базовой является полная русифи-
кация команд, сообщений и хэдера. Программа может работать с несколькими шриф-
тами (как с латинскими, так и с русскими буквами). Переход на другой шрифт
осуществляется с помощью 'SYMBOL SHIFT+Г, после чего программа выдает запрос
номер шрифта. Необходимо выбрать один из 10 шрифтов.




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
ASCII - abstraction.
Интервью с... - интервью с Kristof/Serious Makers Group^Constellation.
Мыльница - об авторах журнала.
Сергей Щеглов - Замок: Часть 1
От авторов - Редакция.

В этот день...   4 мая