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


тема: PIX >addr speedUP



от: Знахарь
кому: All
дата: 08 May 2006
Hello, All Есть процедурка PIX_ADDR DE,HL (call pix_addr) - YXpix DE > $адр HL, А - bit offset LD A,E ;B DE YX AND A ;B HL $addr RRA SCF RRA AND A RRA XOR E AND #F8 XOR E LD H,A ;H LD A,D RLCA RLCA RLCA XOR E AND #C7 XOR E RLCA RLCA LD L,A LD A,D AND 7 RET Короче, всё как обычно. А вот теперь предложения по ускорению и/или использованию только 1 рег. т.е. в данном примере - YXpix DE > $адр HL а надо чтоб - YXpix DE > $адр DE Только желательно с конкр. примерами и замерами.

от: Знахарь
кому: All
дата: 08 May 2006
Hello, key-jee Ага. Ясно, но дело не в ex de,hl а в как бы работе только с 1 рег-ом т.е. на входе в de -> манипуляции с тем же de и результат в том же de. Таблица... гм... а как тогда это всё будет выглядеть в целом и сколько прироста даст ?

от: Иван Петухов
кому: All
дата: 08 May 2006
Hello, Знахарь Можно создать табличку на 2 сектора, где хранятся адреса всех крайних точек, а затем пользоваться такой нехитрой процедуркой: ┌─- code ─── ld a,l and 7 ld (end-1),a ; save offset xor l rrca rrca rrca ld l,h ld h,table or (hl) inc h ld h,(hl) ld l,a ld a,0 ; restore offset end; └──; code ─── Hа практике не проверял, что 'сходу' придумалось то и написал, но вроде должно работать. вообще-то процедуру можно с'оптимизировать на 4 такта и 1 байт, если входные параметры будут не вида H = y, L = x (как обычно принято на спеке), а наоборот, то есть H = x, а L = y. Hу а если нужно работать с de, то ex de,hl в начале и в конце процедуры.

от: Иван Петухов
кому: All
дата: 08 May 2006
Hello, Знахарь > Ага. Ясно, но дело не в ex de,hl а в как бы работе только с 1 рег-ом > т.е. на входе в de -> манипуляции с тем же de и результат в том же > de. Я не понял в чём проблема. :smile; EX; DE,HL можно поставить первой командой в процедуре, а затем ещё перед RET на выходе тогда и hl не попортится (хотя и поюзается).. Прирост скорости примерно 20 тактов на один вызов.. генератор таблицы примитивен, можно даже твоей процедурой воспользоваться :smile; Да; и у elfh вариант неплохой, только hl портит и табличка занимает килобай памяти (4 сектора) А если ещё и точку рисовать не надо (а только координаты узнать), то рутина шустрее ещё на 14 тактов, но нужно будет ещё и генератор таблиц перемухлевать.. :wink; Вообще-то; и вправду хорошая процедура.

от: Wladimir Bulchukey
кому: All
дата: 09 May 2006
Hello, key-jee http://zx.pk.ru/showthread.php?t=2823 Похожая тема.

от: Знахарь
кому: All
дата: 11 May 2006
Hello, Wlodek Эээххх... Т.е. со старых добрых времен "точки за 73 такта" ничего не изменилось / ускорилось ?

от: Doctor Max
кому: All
дата: 02 Jun 2006
Hello, Знахарь Hу почему же, в те же старые добрые я использовал вот такую процедуру: ┌─- CODE ─── LD H,#80 ;7 LD A,(HL) ;7 INC H ;4 LD B,(HL) ;7 INC H ;4 LD L,C ;4 OR (HL) ;7 LD C,A ;4 INC H ;4 LD A,(BC) ;7 OR (HL) ;7 LD (BC),A ;7 └── CODE ─── Итого 69 тактов. Если адрес таблицы держать в регистре E, то первая строка заменяется на: LD H,E и получаем ускорение на 3 такта

от: TomCaT
кому: All
дата: 02 Jun 2006
Hello, key-jee key> EX DE,HL можно поставить первой командой в процедуре, а затем ещё key> перед RET на выходе тогда и hl не попортится (хотя и поюзается).. key> Прирост скорости примерно 20 тактов на один вызов.. Hе совсем, после LD H, A ; H Идет LD A, D Что будет работой с одним регистром, хоть с D, хоть с H, в случае если одну пару не изменять. Вот -- таблица !




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

Похожие статьи:
Памятка кодера - законы кодинга.
Хит-Парад - Десятка самых популярных программ в Чайковском.
Горячий привет - Привет сегодня посылается от хакеров спектрумовских (в нашем лице) хакерам IВМ'овским.
Разное - перспективы ПО. Чёрный Ворон - 2, Зеркало, Mega Tetris 2000.
События - правила предстоящего Ростовского демопати Paradox 2002.

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