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.




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

Похожие статьи:
Железо - CDROM в ваш дом: документация по ATAPI(IDE) CD-ROM
Проза - Чрезвычайное происшествие. А. и Б. Стругацкие
MY SPEKK - У мeня Скорпион. Жёлтый, турбированный. Корпус сeрый от Корвeта.
Звук - Идеи Megus'а по поводу трекера для AY/YM.
Вступление - От авторов.

В этот день...   8 мая