|
Этюды - процедура SPRITE OUT для вывода спрайтов с маской с точностью до пикселя.
|
Вторая процедура это SPRITE OUT для спрайтов с маской с точностью до пикселя. Она очень быстрая, хотя и учитывает переход через границу экрана. Если Вам этого не надо, ее можно ускорить. Даже применяя таблицы, увеличить ее скорость нельзя.
И еще у меня обращение к авторам "Этюдов" Если Вы начинающий, то не спешите в ZX РЕВЮ с первым же вариантом Вашей процедуры, оптимизируйте ее, думайте над ней так, чтобы голова трещала. Только так Вы станете человеком, который пишет отличные программы.
И еще пара слов об Ассемблерах. В частности, о MASM 1.1. Это очень удобный, очень быстрый любительский ассемблер, но не профессиональный. Профессио-
LD HL,#52E0 ; адрес линейки в экране
LD С, #80 ЕХХ
LD D.A ; в DE - остаток от
SUB 1 ; деления длины/256
EX AF.AF' CALL #562 ЕХХ
LOADL LD A,(HL) заполнение линейки
этюды
нальным является GENS (может быть GENIUS, но я не видел его), а MASM это лишь нечто вроде ZEUS для 128 кб. Профессиональный ассемблер должен иметь следующие качества:
• макросы (полноценные, а не как в MASM);
• условия трансляции;
• работа с принтером;
• обработка текста в один проход;
• и безусловно, родственный монитор с возможностью получе-
OR LD INC
С
(HL),A Н
|
ния исходного текста. |
LD |
(hl),A |
|
Теперь сама процедура: |
INC |
Н |
|
; (с) 1996 MAXIM LUPAN |
LD |
(HL),A |
|
LOADER Dl |
|
INC |
Н |
|
CALL |
3435 |
LD |
(HL),A |
|
очистка экрана |
|
RRC |
С |
|
LD |
HL.MES |
JR |
NC,LNEXT |
|
; текст по каналу # FD |
; следующее знакоместо |
|
PRLOOP LD |
a;(hl> |
INC |
L |
|
RST |
#10 |
LNEXT LD |
H,#52 |
|
INC |
HL |
LD |
A,E |
|
LD |
A,(HL) |
EXX |
|
|
INC |
A |
LD |
E.A |
|
JR |
NZ, PRLOOP |
LD |
(IX),L |
|
LD |
DE.17 |
сокращенный вариант ПЗУ |
|
; загрузка заголовка |
|
INC |
IX |
|
LD |
IX.LOADBF |
DEC |
DE |
|
SCF |
|
LD |
A,(#5C7) |
|
INC |
D |
; коррекция задержки, |
|
ех |
AF.AF' |
INC |
A |
|
DEC |
D |
; может быть и излишняя осторож |
|
CALL |
#562 |
ность? |
|
|
JR |
NC,ERROR |
LD |
B.A |
|
можно изменить |
|
CALL |
#5C8 |
|
LD |
IX,(LOADBF+13) |
ехх |
|
|
LD |
DE,(LOADBF+11) |
DJNZ |
LOADL |
|
LD |
A,D |
ERROR LD |
HL, 10072 |
|
ехх |
; выход в BASIC |
|
|
LD |
E.A |
ехх |
|
|
в E - длина/256 |
|
EI |
|
|
XOR |
A |
RET |
|
|
LD |
B,A |
MES DB |
22,0,12,"LOADIN |
в В - счетчик на 256 блоков
GM3f6,6,255
этюды
LOADBF DS 17
LENGTH OF OBJECT: #0082 (130)
SPROUT (с) 1996 MAXIM LUPAN в HL - адрес спрайта с чередованием маски данных в В - ширина в С - высота в D - Y (в пикселях) в Е - X (в пикселях)
|
SPROUT PUSH |
HL |
|
CALL |
ADRPIX |
|
вычесления адреса |
|
|
PUSH |
HL |
|
в экране |
|
|
LD |
HL,0 |
|
очистка участков |
|
|
LD |
(SOROL1 ),HL |
|
ролирования |
|
|
LD |
(SOROL1+2),HL |
|
LD |
(SOROL2),HL |
|
LD |
(SOROL2+2),HL |
|
SOFORM1 SCF |
|
|
создание маски |
|
|
RR |
L |
|
INC |
H |
|
RLCA |
|
|
JR |
NC.SOFORM1 |
|
DEC |
H |
|
LD |
A,L |
|
OR |
A |
|
RLA |
|
|
LD |
(SOMAS1 + 1),A |
|
LD |
(SODAT2+1 ),A |
|
CPL |
|
|
LD |
(SOMAS2+1),A |
|
LD |
(SODAT1 + 1),A |
|
LD |
A,#0F |
|
код команды RRCA |
|
|
BIT |
2,H |
|
JR |
Z.SORI6H |
|
LD |
A,H |
|
XOR |
7 |
|
INC |
A |
|
LD |
H,A |
|
LD |
A,7 |
|
; код команды RLCA |
|
|
SORI6H PUSH |
ВС |
; создание роллирующих
|
LD |
DE.SOROL1 |
|
участков |
|
|
LD |
BC.SOROL2 |
|
INC |
Н |
|
SOFORM2 DEC |
Н |
|
JR |
Z.SOEXIT |
|
LD |
(ВС),А |
|
LD |
(DE),A |
|
INC |
ВС |
|
INC |
DE |
|
JR |
SOFORM2 |
|
SOEXIT POP |
ВС |
|
POP |
HL |
|
POP |
DE |
|
SOEI6H PUSH |
ВС |
|
PUSH |
HL |
|
SOLOOP LD |
A,(DE) |
|
SOROL1 NOP |
|
|
ролирование маски |
|
|
NOP |
|
|
NOP |
|
|
NOP |
|
|
LD |
С,А |
|
PUSH |
HL |
|
SOMAS 1 OR |
0 |
|
AND |
(HL) |
|
; левая часть маски |
|
|
LD |
(HL),A |
|
LD |
А,# 1F |
|
INC |
L |
|
AND |
L |
|
JR |
NZ.SOCONT1 |
|
оценка перехода через |
|
LD |
A.L |
|
границу экрана с |
|
|
SUB |
#20 |
|
возвратом с другой |
|
|
LD |
L.A |
|
; стороны |
|
|
SOCONT1 LD |
А,С |
|
SOMAS2 OR |
0 |
|
AND |
(HL) |
|
правая часть маски |
|
|
LD |
(HL),A |
|
INC |
DE |
|
POP |
HL |
|
LD |
A.(DE) |
|
SOROL2 NOP |
|
ролирование данных
|
|
NOP |
|
|
|
NOP |
|
|
|
NOP |
|
|
|
LD |
C,A |
|
S0DAT1 |
AND |
0 |
|
|
OR |
(HL) |
|
|
LD |
(HL),A |
|
|
LD |
A,#1F |
|
|
INC |
L |
|
|
AND |
L |
|
|
JR |
NZ.SOCONT2 |
|
|
LD |
A,L |
|
|
SUB |
#20 |
|
|
LD |
L.A |
|
S0C0NT2 |
LD |
А,С |
|
S0DAT2 |
AND |
0 |
|
|
OR |
(HL) |
|
|
LD |
(HL),A |
|
|
INC |
DE |
|
|
DJNZ |
SOLOOP |
|
переход к следующему |
|
|
POP |
HL |
|
; знакоместу |
|
|
|
POP |
ВС |
|
|
CALL |
DOWNHL |
|
|
LD |
A,H |
|
; если вышел из экрана |
|
|
CP |
#58 |
|
, возврат |
|
|
|
|
RET |
NC |
|
|
DEC |
С |
|
|
JR |
NZ.SOEI6H |
|
; цикл по высоте |
|
|
|
RET |
|
|
ADRPIX |
LD |
A.E |
|
вычесление по |
|
|
|
RLCA |
|
|
координатам D-y Е-х |
|
|
RLCA |
|
|
; адреса HL |
|
|
|
RLCA |
|
|
и бита его положение |
|
|
LD |
C,A |
|
в байте)в А |
|
|
|
CPL |
|
|
|
OR |
#C7 |
|
|
LD |
(MODPIX+1),A |
|
|
LD |
A,L |
XOR D
AND #С7
XOR D RLCA RLCA
LD L.A
LD A.D
RRA
RRA
RRA
AND #18
XOR D
AND #F8
XOR D
ADD A, #40
LD H,A
XOR A
MODPIX SET 0,A RET
; подпрграмма DOWNHL стандартная
длина SPROUT #A1 (161)
длина ADRPIX #24 (36)
СОДЕРЖАНИЕ:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Форум-Игры - в разделе рассмотрены: Dun Darach, Murray Mause (Supercop), Wild West Seymour, Sim City, Hero Quest, Dizzy-Y, Apollo, Cliffhanger, Laser Squad, Movie, Elite, Where Time Stood Still, Sceptre, Carrier Command, Math Day.
-
-
-
-
-
-
-
-
-
|
|