Это правда что в Spectrum Expert (1, 2) была самая быстрая процедура рисования линии?
Если у кого-нибудь есть быстрее, то поделитесь кодом плиз.
(естественно, что установка точки включается в рисование линии)
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Самая быстрая процедура линии написана Alex Raider'ом. Исходники лежат в архиве ZX Open Source http://opensourcezx.untergrund.net/e..._misc_src.html
ээээ! ты что, в экспертовской генерится огромная процедура отрисовки! а у рэйдера нет. правда, у него чуть медленнее, самую малость.
ну, учитывая что я час назад сделал две тестовые проги и посчитал их размер (размер самих процедур отрисовки и генерации табличек + размер данных которые эти генерилки генерят) + сделал приблизительный замер скорости (по бордюру), то я уверен в том что говорю.
могу отправить SCL файл с этим всем добром
ELPH - ну не такая уж и огромная...
Нашел процедуру авторства Unwinder. Юзаю сам. Весьма быстро и хорошо. Требует 4кб памяти под таблицу и вызов MAK_PLO перед рисованием (заполнение таблицы)
Код:;----------------------------------------- LINE_R LD (STACK+1),SP ;ПРОЦЕДУРА РИСОВАНИЯ ЛИНИИ DI LD A,L ;В HL И DE НАХОДЯТСЯ КООРДИНАТЫ ТОЧЕК CP E JR NC,NO_EXCH EX DE,HL LD A,L NO_EXCH: SUB E LD C,A LD A,H SUB D JR C,DOWN_UP UP_DOWN: LD B,A ;РИСУЕМ ЛИНИЮ СВЕРХУ ВНИЗ LD H,58 ;LIN_ARR/512+2 LD L,D JP MISS ;----------------------------------------- DOWN_UP: NEG ;РИСУЕМ ЛИНИЮ СНИЗУ ВВЕРХ LD B,A LD H,59 ;LIN_ARR/512+3 LD A,191 SUB D LD L,A MISS: ADD HL,HL LD SP,HL LD H,'LIN_ARR LD L,D LD A,(HL) INC H LD D,(HL) INC H LD L,E ADD A,(HL) LD E,A INC H LD L,(HL) EX DE,HL LD A,B CP C JR NC,VERTIC HORIZON: DEFB 221 ;ГОРИЗОНТАЛЬНАЯ ЛИНИЯ (DX>DY) LD L,A DEFB 221 LD H,C LD B,C LD C,E LD A,B SRL A JR Z,END_LIN EX AF,AF' HORIZ0: LD A,(HL) OR C LD (HL),A EX AF,AF' DEFB 221 SUB L JR NC,HORIZ2 DEFB 221 ADD A,H POP DE ADD HL,DE HORIZ2: EX AF,AF' RRC C JR NC,HORIZ1 INC L HORIZ1: DJNZ HORIZ0 END_LIN: LD A,(HL) OR C LD (HL),A STACK: LD SP,0 EI RET ;----------------------------------------- VERTIC: DEFB 221 ;ВЕРТИКАЛЬНАЯ ЛИНИЯ (DY>DX) LD H,A DEFB 221 LD L,C LD C,E SRL A JR Z,END_LIN EX AF,AF' VERT0: LD A,(HL) OR C LD (HL),A EX AF,AF' DEFB 221 SUB L JR NC,VERT1 DEFB 221 ADD A,H RRC C JR NC,VERT1 INC L VERT1: EX AF,AF' POP DE ADD HL,DE DJNZ VERT0 JP END_LIN ;----------------------------------------- DEFB " * MEGA FAST LINE V1.0 BY UNWINDER'95 ;----------------------------------------- NEXT_DE: 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 ;----------------------------------------- MAK_PLO: LD HL,LIN_ARR LD DE,16384+32768 LD B,192 MAK_PL0: LD (HL),E INC H LD (HL),D DEC H INC L CALL NEXT_DE DJNZ MAK_PL0 LD HL,LIN_ARR+1023 LD A,1 MAK_PL1: LD (HL),A RLCA DEC L DJNZ MAK_PL1 DEC H LD A,31 MAK_PL2: LD B,8 MAK_PL3: LD (HL),A DEC L DJNZ MAK_PL3 DEC A JP P,MAK_PL2 MAK_LIN: LD IX,LIN_ARR+1024 LD HL,16384+32768 LD B,191 MAK_LI0: LD E,L LD D,H EX DE,HL CALL NEXT_DE EX DE,HL AND A SBC HL,DE LD (IX),L INC IX LD (IX),H INC IX ADD HL,DE DJNZ MAK_LI0 LD IX,LIN_ARR+1024+512 LD HL,22528-31+32768 LD B,191 MAK_LI1: LD E,L LD D,H CALL PREV_HL AND A SBC HL,DE LD (IX),L INC IX LD (IX),H INC IX ADD HL,DE DJNZ MAK_LI1 RET ;----------------------------------------- PREV_HL: DEC H LD A,H AND 7 CP 7 RET NZ LD A,L SUB 32 LD L,A RET C LD A,H ADD A,8 LD H,A RET ;----------------------------------------- LIN_ARR EQU 32768-4096
дык это на мой взгляд не корректный тест... В диагоналях то точнее будет, ведь она:
1. самая длинная линия
2. самая сложная в рисовании
Добавлено через 3 минуты
ой сдается мне, что по нынешним меркам это мега тормозная процедура...
"весьма быстро" относительно чего?
Давайте приводить тесты в у.е. т.е. в диагоналях. Сколько диагоналей за фрейм успевает нарисовать.
Также можно приводить пример вертикали, горизонтали и т.п.
Последний раз редактировалось himik; 20.08.2007 в 10:09. Причина: Добавлено сообщение
Himik's ZxZ/PoS-WT
Izhevsk. Russia. Planet 'Earth'. Sun system.
The Pusher. Crack music system.
Turbo-Sound at 1995 year.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)