(с) Вячеслав Мишуков, г.Северодвинск, 1996.
Процедура печати 42 символов в строке.
В ZX-РЕВЮ N5/95 на стр. 29 опубликована процедура печати 42 символов в строке (автор Дмитрий Сергеев).
Приведенная процедура обладает недостатком: выключаются пикселы, которые при работе процедуры не должны быть задействованы. Поскольку размер символа по горизонтали б точек, то справа от него в знакоместе 8x8 могут остаться 2,4 или б незанятых пиксельных столбцов, которые выключаются процедурой. Кроме того, если символ полностью по-
Dt^eniP 97/1
ЭТЮДЫ
местился в знакоместе 8x8 (прижат к левому или правому его краю), то следующее знакоместо 8x8 также очищается.
Во всем виновата процедура SCRL, расположенная в строках 137-167. Процедура печати будет работать корректно, если переписать подпрограмму SCRL в соответствии с листингом. Изменения коснулись фрагмента, формирующего изображение символа.
Восемь строк символа помещаются в экранную область памяти таким образом, чтобы изображение справа и слева от него не пострадало. Это достигается последовательным использованием операций XOR, AND, XOR. Такой метод подробно описан в книге ИНФОРКОМА "Элементарная графика" на стр. 94.
Применение операций XOR, AND, OR позволяет заменить отдельные биты в байте А на соответствующие биты байта В. Заменены будут только те биты, которые замаскированы в операции AND нулями.
В измененном варианте подпрограммы, параллельно со сдвигом байта шаблона символа, сдвигается маска для операции AND.
После внесения изменений длина процедуры увеличится. В какой-то степени увеличение объема можно скомпенсировать, удалив в исходном листинге строки 113, 114, 120, 121, 124, 125, 126, раскрыв подпрограмму SCRL. Но время, затрачиваемое на. вывод одного символа все же возрастет, поскольку увеличился главный цикл процедуры.
Листинг подпрограммы
SCRL с внесенными изменениями:
SCRL
SHIFT
LD |
А,(ВС) |
PUSH |
ВС |
PUSH |
AF |
LD |
DE,#FF03 |
XOR |
A |
LD |
C,A |
LD |
A,(NUM) |
LD |
B,A |
POP |
AF |
AND |
A |
RLA |
|
RL |
С |
SCF |
|
RL |
E |
RL |
D |
DJNZ |
SHIFT |
LD |
B.A |
LD |
A.(HL) |
XOR |
С |
AND |
D |
XOR |
С |
LD |
(HL),A |
INC |
HL |
LD |
A,(HL) |
XOR |
В |
AND |
E |
XOR |
В |
LD |
(HL),A |
DEC |
HL |
INC |
H |
POP |
ВС |
INC |
ВС |
LD |
A,(ST) |
DEC |
A |
LD |
(ST),A |
JR |
NZ.SCRL |
LD |
A,#08 |
LD |
(ST),A |
RET |
|
.....................ZX-PwiO УГ/1-2.....................................................