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, в случае если одну
пару не изменять.

Вот -- таблица !




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

Похожие статьи:
Юмор - что такое программист.
Новости - В Великих Луках появился Sprinter.
Сплошные приколы - Краткая инструкция мужу, как любить компьютер. С Ивановым шутки плохи. 7 анекдотов. Инструкция по технике безопасного секса.
Презентация - критика ZX-Format, Conver Commander v4.5 pro, MS-Pack 01.96, XAS-128, Sample Tracker v2.1.
ASCII - abstraction.

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