|
Этюды - процедура 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.
-
-
-
-
-
-
-
-
-
|
|