ZX-Ревю 1997 №1-2 1997 г.

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




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Spectrum всё и ничто - будущее Speccy.
От идиоторов - управление в газете.
Игроскоп - Разбор игры "The Hunt For Red October".
Обратная связь - контакты редакции.
События - серпуховский фестиваль ParaDiGMus party 2003. Afterparty.

В этот день...   23 ноября