(с) Александр Лавров г.Тольятти.
280
RET
В ZX РЕВЮ 96/3 были да
290 UP2
LD
A,8
ны два скроллинга
экрана (автор
300
ADD
A,H
Вадим Куликов). Эти процедуры
310 320
LD JR
H,A NXTU
можно ускорить,
если заменить
внугренний цикл (строки с 90 по 130) на LDIR и поменять расчет
SCROLL DOWN 10 (c) A.Lavrov
адреса следующей линии.
20 from NEW STANDARD
Идея
использовать ылк в
30
ORG
40000
процедурах
скроллинга взята из
40
LD
DE,#57E0
книги "Как
написать игру для ZX
50
LD
HL,#56E0
Spectrum"
(часть
2-ая) фирмы
60
LD
A, 191
"Питер"
70 DW1
LD
ВС,32
SCROLL UP
80
PUSH
HL
10 (с) A. Lavrov from
90
LDIR
20 NEW STANDARD
100
POP
DE
30
ORG
40000
110
LD
H,D
40
LD
DE,#4000
120
LD
L.E
50
LD
HL,#4100
130
DEC
H
60
LD
А, 191
140
EX
AF.AF'
70UP1
LD
ВС.32
150
LD
A.H
80
PUSH
HL
160
AND
#07
90
LDIR
170
XOR
#07
100
POP
DE
180
JR
Z.DW2
110
LD
H,D
190 NXTD
EX
AF.AF'
120
LD
L,E
200
DEC
A
130
INC
H
210
JR
NZ.DW1
140
EX
AF.AF'
220
RET
150
LD
A,H
230 DW2
LD
A,H
160
AND
#07
240
ADD
A, 8
170
JR
NZ.NXTU
250
LD
H,A
180
LD
A,H
260
LD
A.L
190
SUB
8
270
SUB
#20
200
LD
H,A
280
LD
L.A
210
LD
A, #20
290
JR
NC.NXTD
220
ADD
A,L
300
LD
L,#E0
230
LD
L,A
310
LD
A,H
240
JR
C.UP2
320
SUB
8
250 NXTU
EX
AF.AF'
330
LD
H,A
260
DEC
A
340
JR
NXTD
270
JR
NZ.UP1
Скорость скроллинга должна увеличится почти вдвое. Правда, нарушена синхронность, если использовать процедуры в паре. Т.е. процедура SCROLL DOWN работает медленнее чем SCROLL UP А именно, в каждой установке новой линии на 2 такта, новой строки на 10 тактов и нового сегмента на 2 такта дольше.
Для скроллинга окна надо изменить часть процедуры SCROLL DOWN (для SCROLL_UP это не требуется), вставив такие строки:
280 JR C.DW3
285 LD L,A
290 JR NXTD
295 DW3 LD A,L 300 OR #E0
305 LD L.A
Количество перемещаемых строк (пиксельных) задается в строке 60, в А. Адрес верхнего левого или нижнего левого углов, как и раньше в DE, строка 40. Ширина окна (в знакоместах) в ВС, строка 70.
Чтобы процедуры сами рассчитывали начальный адрес в HL, надо заменить строки 50 и 60 в обоих процедурах, и поставить метку в строку 110: 50 LD А,п
количество пиксельных линий + 1 60 JR s ; метка в строке 110.