.
|
. - - 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
Other articles: