(c) Коновалов Д., г.Тверь
1. Очень маленькая (15 байт,
57 тактов) процедура расчета ад-
реса в файле атрибутов. Коорди-
ната Y в регистре E, X в регис-
тре D.
140.
LD A,E
RRCA
RRCA
RRCA
LD L,A
AND 31
OR 88
LD H,A
LD A,L
AND 252
OR D
LD L,A
2
2. А вот программа, скролли-
рующая заданное окно на 1 пиксел
вправо.140.
ORG 40000
LD A,(HGT)
LD C,A
LD HL,(Y)
START PUSH HL
LD A,L
AND 7
RRCA
RRCA
RRCA
ADD A,H
LD H,L
LD L,A
LD A,H
AND #18
OR #40
LD H,A
LD B,8
ST PUSH HL
PUSH BC
LD A,(LEN)
LD B,A
AND A
ST1 RR (HL)
INC HL
DJNZ ST1
POP BC
POP HL
INC H
DJNZ ST
POP HL
INC L
DEC C
RET Z
JR START
Y DEFB 0
X DEFB 0
LEN DEFB 10 ;ширина окна
HGT DEFB 10 ;высота окна
2
Программа не проверяет, выхо-
дит ли окно за пределы экрана.
Чтобы скроллинг происходил на 4
пиксела, нужно внести следующие
изменения: AND A заменить на XOR
A, RR (HL) заменить на RRD.
3. Эта программа предназначе-
на для очистки заданного окна
экрана. Делает она это следую-
щим образом: одна пиксельная ли-
ния скроллируется вправо, другая
влево, затем снова вправо и т.д.
140.
ORG 40000
LD A,(HGT)
LD C,A
LD HL,(Y)
START PUSH HL
LD A,L
RRCA
RRCA
RRCA
ADD A,H
LD H,L
LD L,A
LD A,H
AND #18
OR #40
LD H,A
LD B,4
ST PUSH BC
LD A,(LEN)
LD B,A
AND A
ST1 RR (HL)
INC HL
DJNZ ST1
AND A
LD A,(LEN)
LD B,A
DEC HL
INC H
ST2 RL (HL)
DEC HL
DJNZ ST2
INC HL
POP BC
INC H
DJNZ ST
POP HL
INC L
DEC C
RET Z
JR START
Y DEFB 0
X DEFB 0
LEN DEFB 10
HGT DEFB 10
2
Данная процедура не очистит
все окно - она делает всего один
проход. Для полной очистки окна
ее нужно циклически вызывать из
другой программы.
4. И последняя процедура.
Она выводит на экран картинку из
буфера по адресу 41000. Картин-
ка как бы "выезжает" из левого
края экрана к правому, после че-
го перебрасываются атрибуты.
140.
ORG 40000
LD B,64
ST LD C,192
LD DE,16384
LD HL,41000
RUN PUSH BC
LD C,2
XOR A
WORK LD B,32
LOOP RRD
INC HL
DJNZ LOOP
EX DE,HL
DEC C
JR NZ,WORK
POP BC
OR A
DEC C
JR NZ,RUN
DJNZ ST
LD DE,22528
LD HL,47144
LD BC,768
LDIR
RET
2
О себе: мне 15 лет, увлекаюсь
адвентюрными и стратегическими
играми.
Также Даниэль просит напеча-
тать его адрес для любителей
адвентюр: 170004, г.Тверь-4,
ул.Строителей, д.8, корпус 2,
кв.121, Коновалову Даниэлю.
Прим. ред.: И вот опять следует напом-
нить об оптимизации программ. В конце про-
грамм 2 и 3 стоит последовательность ко-
манд:
RET Z
JR START
Но будет лучше заменить ее на:
JR NZ,START
RET
В чем же разница? А в том, что второй
вариант работает быстрее, потому что в
первом варианте команда RET Z выполняется
столько раз, сколько и весь цикл, а во
втором - один раз. Конечно, здесь это не
играет особой роли, но представьте себе,
что цикл выполняется не 10, а, скажем,
10000 раз. Тут уже эти 5 тактов выльются в
большие потери времени.
* * *