(c) Командин И.Г., г.Калуга И снова я хочу предложить несколько своих (и не только своих) программок в раздел "Этю- ды". 1. Для начала, по традиции, предлагаю одну довольно простую процедурку проявления картинки. Эта программа как бы вытягивает картинку, расположенную по ад- ресу BUFF, из центра экрана к краям. Процедура коррумпирует картинку в памяти, поэтому пов- торный ее вызов сработает как процедура гашения, утягивающая картинку за края экрана. 140. ORG 40000 BUFF EQU 50000 ENT LD DE,BUFF-16384 LD C,128 LOOP2 LD HL,#400F LD B,192 LOOP1 PUSH BC PUSH HL ADD HL,DE LD B,16 L1 RL (HL) DEC HL DJNZ L1 POP HL PUSH HL LD B,16 L2 RL (HL) DEC HL DJNZ L2 POP HL INC HL PUSH HL ADD HL,DE LD B,16 L3 RR (HL) INC HL DJNZ L3 POP HL LD B,16 L4 RR (HL) INC HL DJNZ L4 LD BC,15 ADC HL,BC POP BC DJNZ LOOP1 DEC C JR NZ,LOOP2 LD HL,BUFF+6144 LD DE,22528 LD BC,768 LDIR RET 2 2. Следующая процедура - до- вольно интересный FADE-OUT эф- фект. Картинка как будто бы пос- тепенно разрывается посредине экрана и уходит за его края. 140. ;(C) ZX-MANIACS ; ORG 40000 ENT LD HL,#400F LD B,1 LOOP1 PUSH HL PUSH BC CALL SLIDE POP BC POP HL INC B LD A,B CP 192 JR NZ,LOOP1 LD HL,#480F LD B,128 LOOP2 PUSH BC LD B,128 PUSH HL CALL SLIDE POP HL POP BC DJNZ LOOP2 RET SLIDE PUSH BC PUSH HL PUSH HL LD B,16 XOR A L1 RL (HL) DEC HL DJNZ L1 POP HL INC HL XOR A LD B,16 L2 RR (HL) INC HL DJNZ L2 POP HL CALL DOWN POP BC DJNZ SLIDE RET DOWN INC H LD A,H AND 7 RET NZ LD A,L ADD A,32 LD L,A RET C LD A,H SUB 8 LD H,A RET 2 3. Ну а теперь пришла пора самого интересного. Нижеприве- денная программа является основ- ной причиной написания данной статьи. Это довольно красивый, на мой взгляд, графический пик- сельный эффект, который я назвал FOUNTAIN. Действие его заклю- чается в следующем: посередине нижней кромки экрана появляется 250 точек, которые разлетаются в разные стороны по разнообразным параболическим траекториям. Как только какая-либо из точек ка- сается нижней границы экрана, она вновь появляется в центре с новой "запрограммируемой" траек- торией. Таким образом создается эффект постоянно работающего фонтана. Наиболее ярко и красиво процедура смотрится при следую- щих установках: BORDER 0 : PAPER 0 : INK 7 : BRIGHT 1 : POKE 23624,71 Идея программы возникла при просмотре ENLIGHT-овской демон- страшки ZY-ZY, за что огромное спасибо ее авторам. Также я хо- тел бы поблагодарить А.Астафьева за статью о получении случайных чисел - одним из его ПСЧ-генера- торов я воспользовался в своей программе. 140. ;FONTAIN ;(C) ZX-MANIACS ;BY KOMANDIN ILYA ;SPECIAL FOR INFORCOM ; ORG 40000 ENT LD HL,COORDS LD B,250 M1 CALL RND AND 7 ADD A,120 LD (HL),A INC HL LD (HL),0 INC HL CALL RND AND 15 INC A LD (HL),A INC HL CALL RND AND 7 SUB 3 LD (HL),A INC HL DJNZ M1 LOOP LD HL,COORDS LD B,250 M2 PUSH BC PUSH HL LD C,(HL) INC HL LD B,(HL) LD A,191 SUB B PUSH HL CALL 8880 LD B,A LD A,7 SUB B ADD A,A ADD A,A ADD A,A ADD A,134 LD (RPX),A DEFB #CB RPX NOP POP HL INC HL LD B,(HL) DEC HL LD A,(HL) ADD A,8 LD (HL),A INC HL INC HL LD B,(HL) DEC HL DEC HL DEC HL LD A,(HL) ADD A,B LD (HL),A LD C,(HL) INC HL LD B,(HL) LD A,191 SUB B PUSH HL CALL 8880 LD B,A LD A,7 SUB B ADD A,A ADD A,A ADD A,A ADD A,198 LD (SPX),A DEFB #CB SPX NOP POP HL LD A,(HL) OR A JR NZ,PASS LD (HL),0 DEC HL CALL RND AND 7 ADD A,120 LD (HL),A INC HL INC HL CALL RND AND 15 INC A LD (HL),A INC HL CALL RND AND 7 SUB 3 LD (HL),A PASS POP HL POP BC INC HL INC HL INC HL INC HL DJNZ M2 LD HL,22496 LD DE,22497 LD BC,31 LD (HL),0 LDIR LD A,#7F IN A,(#FE) RRA JP C,LOOP RET RND LD DE,0 LD A,D ADD A,#77 LD D,A RLC E ADD A,E LD E,A LD (RND+1),DE RET COORDS DEFS 100 2 4. Ну вот и все о моих прог- раммах. Далее я предлагаю нес- колько процедур моего друга и второго члена группы ZX-MANIACS Черебаева Андрея. Первая программа - FADE-OUT эффект, имитирующий выключение телевизора. 140. ;(C) CHEREBAEV ANDREY ; ORG 40000 ENT LD HL,#5820 LD DE,#5ADF LD B,11 LOOP1 PUSH BC LD B,32 LOOP PUSH BC LD (HL),127 LD BC,#0020 SBC HL,BC LD (HL),0 ADC HL,BC INC HL EX DE,HL LD (HL),127 ADC HL,BC LD (HL),0 SBC HL,BC DEC HL EX DE,HL POP BC DJNZ LOOP POP BC HALT DJNZ LOOP1 LD HL,#595F LD B,32 LOOP2 INC L LD (HL),0 DJNZ LOOP2 LD B,16 LD HL,#5980 LD DE,#599F XOR A LOOP3 LD (HL),A INC L LD (DE),A DEC E HALT DJNZ LOOP3 LD B,8 LD A,63 LD HL,#598F LOOP4 LD (HL),A SUB 9 HALT HALT HALT HALT HALT DJNZ LOOP4 RET 2 Вторая процедура "зажигает" картинку, действуя абсолютно противоположно предыдущей. Эти две программки удобно использо- вать вместе. 140. ;(C) CHEREBAEV ANDREY ; ORG 40000 BUFF EQU 50000 ENT LD HL,22528 LD (HL),0 PUSH HL POP DE INC DE LD BC,767 LDIR LD HL,BUFF LD DE,16384 LD BC,6144 LDIR LD B,8 XOR A LD HL,#598F LOOP4 LD (HL),A ADD A,9 HALT HALT HALT HALT HALT DJNZ LOOP4 LD B,16 LD HL,#598F LD DE,#5990 LD A,127 LOOP3 LD (HL),A DEC L LD (DE),A INC E HALT DJNZ LOOP3 LD HL,#595F LD DE,#59A0 LD B,11 LOOP1 PUSH BC LD B,32 LOOP PUSH BC LD (HL),127 LD BC,#0020 ADC HL,BC CALL PUT SBC HL,BC DEC HL EX DE,HL LD (HL),127 LD BC,#0020 SBC HL,BC CALL PUT ADC HL,BC INC HL EX DE,HL POP BC DJNZ LOOP POP BC HALT DJNZ LOOP1 LD HL,BUFF+6144 LD DE,#5800 LD BC,768 LDIR RET PUT PUSH HL PUSH DE LD DE,BUFF-16384 ADC HL,DE LD A,(HL) POP DE POP HL LD (HL),A RET 2 Ну и наконец третья процеду- ра - это "ремейк" широко извес- тной программы плавной прорисов- ки картинки сверху вниз по ли- ниям (см. например, ZX РЕВЮ 1-2 за 1996г.). В новой версии прог- раммы картинка выводится однов- ременно с атрибутами, отчего эф- фект заметно выигрывает. 144. 10;(C) CHEREBAEV ANDREY 20; & KOMANDIN ILYA 30; 40 ORG 40000 50 ENT 60 BUFF EQU 50000 70 LD HL,22528 80 LD (ATTR),HL 90 XOR A 100 LD B,24 110 LOOP PUSH BC 120 LD B,8 130 LOOP1 PUSH BC 140 PUSH AF 150 LD C,0 160 CALL 8880 170 EX DE,HL 180 LD HL,BUFF-16384 190 ADC HL,DE 200 LD BC,32 210 LDIR 220 POP AF 230 INC A 240 POP BC 250 HALT 260 DJNZ LOOP1 270 LD DE,(ATTR) 280 LD HL,BUFF-16384 290 ADC HL,DE 300 LD BC,32 310 LDIR 320 LD (ATTR),DE 330 POP BC 340 DJNZ LOOP 350 RET 360 ATTR DEFW 0 2 В вышеприведенном варианте программы сначала порциями по 8 линий выводится монохромное изображение, а затем на него на- кладываются атрибуты. Если же Вам необходим обратный эффект (например, если фон в Вашей кар- тинке неизменен, а все атрибу- ты - INK), то просто переставьте строки 270-320 в новое место между строками 110 и 120. * * *