ZXNet эхоконференция «code.zx»


тема: библиотека.



от: Aleksey Malov
кому: All
дата: 30 Mar 2000
Приветствую тебя, All!

Вот что лично я думаю по поводу сабжа:

1. Он нужен. Если не мне, то кому-нибудь точно. Сам я могу написать практически
все, что мне на данный момент нужно, но поделиться своим опытом готов со всеми,
а тем более узнать чего-нибудь нового.

2. Слать п/п в виде дампа, по-моему, бесполезно, т.к. именно наличие текста
дает возможность начинающему разобраться с алгоритмом работы, и, при
возможности, улучшить ее.

3. Слать п/п надо в виде обычного ассемблерного текста, желательно избегать
применения особенностей синтаксиса разичных ассемблеров, типа:
exa, rept, dup, и т.п.
если нужно, можно заменить директивы типа dup, на комментарий: повторить
столько-то раз

4. Хватит спорить над одними и теми же вопросами. Сразу решите: быть или не
быть? И шлите плод своего мараз... Тфу, блин, гениального разума.

Сам же я, дабы не слыть голословным, кину на днях в эху нечто, отличное от
процедуры печати спрайтов.

Желаю вам здоровья, счастья и творческих узбеков.
Aleksey Malov aka VIVID/Brainwave.

от: Aleksey Malov
кому: All
дата: 31 Mar 2000
Приветствую тебя, All!

Вместо того, чтобы там спорить над сабжем, причем над теми же вопросами, что и
месяц назад, лучше бы кинули полезную информацию в том же количестве, что и
бесползную - было бы пользы гораздо больше.

Hу ладно, дабы не быть похожим на вас, кидаю очень быструю процедуру
построения окружностей при помощи алгоритма имени Малова Алексея ;)
Процедура написана так, чтобы без проблем адаптировать ее под любой
ассемблер, разве что xh и xl на hx и lx.

Скорость процедуры следующая: на Scorpion'e (69886 tacts per int) за 1 frame
строится окружность радиусом 113.

************* начало *****************

;таблицы для построения точек, можно переместить в любой адрес, кратный 256.
ADRTB EQU #C000 ;[#200]
ADRTB2 EQU ADRTB+#200 ;[#800]

ORG #6000
ENT $
CALL INIT;инициализация таблиц для построоения точек
;демонстационная процедура вывода окружностей
DRAWING HALT
LD A,7
OUT (254),A
;координаты центра
LD BC,#6080
;и радиус
LD A,#71
CALL CIRCLE
XOR A
OUT (254),A
LD A,#7F
IN A,(254)
RRCA
JR C,DRAWING
RET

;процедура построения окружности
;нет проверки на выход точек за пределы экрана, если хотите, можете вставить
;B-Y,C-X,A-RADIUS
CIRCLE OR A ;окружности с нулевым радиусом не выводятся
RET Z
LD XH,A
;ставим точки слева,справа,снизу и сверху от центра
ADD A,C
LD H,ADRTB/256:LD L,B:LD D,(HL)
INC H:LD H,(HL):LD L,A:LD E,(HL)
INC H:LD A,(DE):XOR (HL);выводим точки по xor, если необходимо, то
;здесь и далее поставьте or (hl)
LD (DE),A
LD A,C
SUB XH
LD H,ADRTB/256:LD L,B:LD D,(HL)
INC H:LD H,(HL):LD L,A:LD E,(HL)
INC H:LD A,(DE):XOR (HL)
LD (DE),A
LD A,B
ADD A,XH
LD H,ADRTB/256:LD L,A:LD D,(HL)
INC H:LD H,(HL):LD L,C:LD E,(HL)
INC H:LD A,(DE):XOR (HL)
LD (DE),A
LD A,B
SUB XH
LD H,ADRTB/256:LD L,A:LD D,(HL)
INC H:LD H,(HL):LD L,C:LD E,(HL)
INC H:LD A,(DE):XOR (HL):LD (DE),A
LD XL,1
LD A,XH
EXX
ADD A,A
LD C,A
RRCA
DEC A
RET Z
LD B,1
EXA
;основной цикл построения оскужности
CIR1 EXA
DEC B ;КОМАНДЫ ДЛЯ ПЕРЕРАСЧЕТА
DEC B ;КООРДИНАТ ТОЧЕК
ADD A,B
JR C,OBHOD
DEC C
DEC C
ADD A,C
DEC XH
OBHOD EXA
EXX
;ПЕЧАТЬ ТОЧЕК
LD A,B
ADD A,XH
LD L,A
LD A,C
ADD A,XL
LD H,ADRTB/256:LD D,(HL):INC H
LD H,(HL):LD L,A:LD E,(HL):INC H
LD A,(DE):XOR (HL):LD (DE),A
LD A,B
ADD A,XH
LD L,A
LD A,C
SUB XL
LD H,ADRTB/256:LD D,(HL):INC H
LD H,(HL):LD L,A:LD E,(HL):INC H
LD A,(DE):XOR (HL):LD (DE),A
LD A,B
SUB XH
LD L,A
LD A,C
SUB XL
LD H,ADRTB/256:LD D,(HL):INC H
LD H,(HL):LD L,A:LD E,(HL):INC H
LD A,(DE):XOR (HL):LD (DE),A
LD A,B
SUB XH
LD L,A
LD A,C
ADD A,XL
LD H,ADRTB/256:LD D,(HL):INC H
LD H,(HL):LD L,A:LD E,(HL):INC H
LD A,(DE):XOR (HL):LD (DE),A
LD A,B
ADD A,XL
LD L,A
LD A,C
ADD A,XH
LD H,ADRTB/256:LD D,(HL):INC H
LD H,(HL):LD L,A:LD E,(HL):INC H
LD A,(DE):XOR (HL):LD (DE),A
LD A,B
SUB XL
LD L,A
LD A,C
ADD A,XH
LD H,ADRTB/256:LD D,(HL):INC H
LD H,(HL):LD L,A:LD E,(HL):INC H
LD A,(DE):XOR (HL):LD (DE),A
LD A,B
ADD A,XL
LD L,A
LD A,C
SUB XH
LD H,ADRTB/256:LD D,(HL):INC H
LD H,(HL):LD L,A:LD E,(HL):INC H
LD A,(DE):XOR (HL):LD (DE),A
LD A,B
SUB XL
LD L,A
LD A,C
SUB XH
LD H,ADRTB/256:LD D,(HL):INC H
LD H,(HL):LD L,A:LD E,(HL):INC H
LD A,(DE):XOR (HL):LD (DE),A
EXX
;проверка на окончание вывода
INC XL
LD A,XH
SUB XL
RET Z
DEC A
JP NZ,CIR1
EXX
;ставим 4 диагональные точки
LD A,B
ADD A,XL
LD L,A
LD A,C
ADD A,XL
LD H,ADRTB/256:LD D,(HL):INC H
LD H,(HL):LD L,A:LD E,(HL):INC H
LD A,(DE):XOR (HL):LD (DE),A
LD A,B
ADD A,XL
LD L,A
LD A,C
SUB XL
LD H,ADRTB/256:LD D,(HL):INC H
LD H,(HL):LD L,A:LD E,(HL):INC H
LD A,(DE):XOR (HL):LD (DE),A
LD A,B
SUB XL
LD L,A
LD A,C
ADD A,XL
LD H,ADRTB/256:LD D,(HL):INC H
LD H,(HL):LD L,A:LD E,(HL):INC H
LD A,(DE):XOR (HL):LD (DE),A
LD A,B
SUB XL
LD L,A
LD A,C
SUB XL
LD H,ADRTB/256:LD D,(HL):INC H
LD H,(HL):LD L,A:LD E,(HL):INC H
LD A,(DE):XOR (HL):LD (DE),A
RET
;инициализируем таблицы точек
INIT LD HL,ADRTB
LD DE,#4000
LD B,#C0
INIT1 LD (HL),D
INC H
LD A,L
RRA:RRA
AND #0E
ADD A,ADRTB2/256
LD (HL),A
DEC H
CALL DNDE
INC L
DJNZ INIT1
INIT10 LD (HL),B
INC L
JR NZ,INIT10
LD C,#80
LD H,ADRTB2/256-1
INIT11 INC H
INIT2 LD (HL),B
INC H
LD (HL),C
RRC C
JR NC,INIT3
INC B
RET Z
INIT3 INC L
JR Z,INIT11
DEC H
JR INIT2

DNDE INC D
LD A,D
AND 7
RET NZ
LD A,E
ADD A,32
LD E,A
RET C
LD A,D
SUB 8
LD D,A
RET
************* конец ***************************

Попробуйте оптимизнуть по скорости (может и получится).
По объему оптимизнуть несложно: выделите в подпрограмму процедуру печати
точек.

Hу а в следующий раз, дорогие мои телезрители, вас ожидает быстрая процедура
пострения закрашенных кругов.

Желаю вам здоровья, счастья и творческих узбеков.
Aleksey Malov aka VIVID/Brainwave.




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

Похожие статьи:
Развлечения - стихи и головоломки.
Проба пера - "Спайк в Тронсильвании" (новелла к игре).
Демопати - интерьвью взятое Kvazar на CC'999 у Александра Кандаурова/КАСИК.
Мозаика - Закончена работа по написанию новой DOOM'овидной игры "Return to Home 4". DemoBit'96 отменяется ...
Есть такое мнение! - Монахи под луной.

В этот день...   18 апреля