ZX Review
#5-6
04 ноября 1997 |
|
Этиды - Расчет адреса в файле атрибутов. Программа скроллирования заданного окна на 1 пиксел вправо. Программа очистки заданного окна. Процедура вывода картинки из буфера.
(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 тактов выльются в большие потери времени. * * *
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября