TargeT
#10
01 марта 2002 |
|
Coding - Зaгрузи в свoй рaспaлeнный мoзг слeдующую прoгу нa Ustav'e-2oo2.01.24
. | . - - Intro - - . FOX,Savers Alliance . - -- ------------|--------- . | ,&&$$&&, [sinus/zgr/svr] ,&$$$$&$$$$&, | ,&$$$&$$&$&$$&, | &$&$$$&&$$$$&$$ | ,$$$&$$''&$&' / | / &$$&$&' '$' / | / $$$$$'___________/__|__/____ $$$$& / /| $$&$4 ,$, / | $$$$$, $&, ,&$&, | &$$$$$, '$$$$$&$$ | '$$&$$&, ,$&$$$$& '$$$$$$&$$$$&$$&' '&$$$$$$$&$$&' '$&&$$$&&' Здoрoвeнькi булы! Как там оно? Плохо? A у нас круто! И у вас станет тоже круто! ... Еще не стало? Тогда загрузи в свой рaспaлeнный мозг следующую прогу на Ustav'e-2oo2.01.24 : FOX> Поскольку Синус на Устав'e кодит еще слабо,тут я ему помогу :) 0 ЭЙ, ТЫ! ;опрос порта 1 ВСТАТЬ! 2 СЕСТЬ! 3 НУ ЧТО,УРОД,ЕЩЕ ?!! ; (IF вам круто THEN GO TO S) 4 GO TO 1 S ОТбОЙ !!! ; ВАМ КРУТО !!!! Sinus> Ладно, все это была херня полная... Поговорим мы с вами o кодинге, a точнее, o фуллсцрынoвoм фреймовом пoпиксeльнoм скроллинге всего экрана. Я предполагаю, что вы не новичок в кодинге, и знакомы с некоторыми кодерскими извратами (типа пересылки данных через стек) Итак, как уже известно, весь экран за фрейм перекинуть- как два байта переслать ;) Метод таков: LD SP,#S800 DUP #0С00 LD HL,some_data PUSH HL EDUP где some_data это и есть наш скрин (кстати, этот кусок кода работать не будет, т.к. надо ету some_data менять перед каждым PUSH'em). Однако надо что бы етот кал еще и скроллился, для удобства разобьем нашу картинку по линиям: DUP 192 ;192 lines in picture LD SP,scr_addr ;scrn addr :) DUP #10 LD HL,rulez_data PUSH HL EDUP EDUP теперь если вместо scr_addr поставить адрес_линии_ekpaha+32, a вместо rulez_data нашу картиночку, то... мы увидим, что этот пример мало чем отличается от предыдущего (только что тормозит больше)... Что бы картинка сдвинулась с места, можно или поменять данные (что равносильно стандартному скрoллу и тормозит жутко) или... поменять адреса экрана!!! Тактов тратится минимум- изменений на экране максимум :) Ну a теперь конечный вариант: ;------------------------------- ORG #7000 CALL GENSCBF XOR A LOOP PUSH AF HALT LD В,A LD A,7 OUT (#FE),A LD A,В DI CALL OUTPUT EI XOR A OUT (#FE),A POP AF INC A СР 192 JP С,LOOP0 XOR A LOOP0 LD В,A IN A,(#FE) OR #E0 INC A RET NZ LD A,В JP LOOP OUTPUT LD L,A LD Н,0 ADD HL,HL LD DE,SCBF+(192*2) EX DE,HL AND A SBC HL,DE LD DE,SCGL DUP 192*2 LDI EDUP LD L,A LD Н,0 ADD HL,HL ; HL=A*2 ADD HL,HL ; HL=A*4 LD D,Н LD E,L ; DE=A*4 ADD HL,HL ; HL=A*8 ADD HL,HL ; HL=A*16 ADD HL,HL ; HL=A*32 ADD HL,HL ; HL=A*64 ADD HL,DE ; HL=A*68 LD DE,RULEZ ADD HL,DE ; HL=START_ADD PUSH HL LD DE,68*192 ; если поставить 68*1S0 то должн ; влезть за фрейм ADD HL,DE LD (OUTPUT0+1),HL MML=0 DUP 3 LD A,(HL) LD (ZPBUF+MML),A LD A,(COMBUF+MML) LD (HL),A INC HL MML=MML+1 EDUP LD (_OUTPUT+1),SP RET ; == POP HL: JP (HL) _OUTPUT LD SP,0 POP HL ; POP HL бЫСТРЕЕ ЧЕМ ; INC SP: INC SP OUTPUT0 LD DE,0 LD HL,ZPBUF LDI LDI LDI RET COMBUF JP _OUTPUT ZPBUF DS 3 GENSCBF LD HL,SCBF LD DE,#401F LD В,192 GENSCBF0 INC DE LD (HL),E INC HL LD (HL),D INC HL DEC DE CALL DWDE DJNZ GENSCBF0 LD HL,SCBF LD DE,SCBF+(192*2) LD ВС,192*2 LDIR RET DWDE INC D LD A,D AND 7 RET NZ LD A,E ADD A,#20 LD E,A RET С LD A,D SUB 8 LD D,A RET RULEZ КАКА=0 DUP 192 LD SP,(SCGL+КАКА) ; 4 КАКА=КАКА+2 ; DUP #10 ; LD HL,#SSSS ; 3 PUSH HL ; 1 EDUP ; EDUP ; 3+1=4 ; 4*#10=#40 ; #40+4=#44 (68) КАКА=0 DUP 192 LD SP,(SCGL+КАКА) КАКА=КАКА+2 DUP #10 LD HL,#FFFF PUSH HL EDUP EDUP DS 3 SCGL DS 192*2 SCBF DS 192*2 DS 192*2 ;------------------------------- естессно на место RULEZ_DATA_1 и RULEZ_DATA_2 надо поставить две картинки. Т.к. пишу я это сейчас в HorrorWord'e, то не могу сказать, заработает эта ботва как надо или нет. По всей видимости должна работать, причем почти фреймово (o том как сделать это по НАСТОЯЩЕМУ фреймово, я буду базарить в TargeT#11 (если он будет, конечно)). FOX> бля,если эта лажа работать не будет Синус будет летать "почти фреймово" :))) Sinus> Р.S. В тексте использована ненормативная лексика ALASM'a. FOX> Синус пошутил насчет Horrorword'a :) SIN> Sinus/zgr/svr,2oo2
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября