Важная информация

User Tag List

Страница 3 из 4 ПерваяПервая 1234 ПоследняяПоследняя
Показано с 21 по 30 из 34

Тема: Оптимизация в HL

  1. #21
    Veteran
    Регистрация
    01.03.2005
    Адрес
    Новосибирск
    Сообщений
    1,979
    Спасибо Благодарностей отдано 
    69
    Спасибо Благодарностей получено 
    261
    Поблагодарили
    99 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jerri Посмотреть сообщение
    я же тебе дал способ пересчета?
    hl*#155
    потом взять старшие 16 бит и сделать +1
    drbars, а чего такое странное число? 149*3?
    Умножение сожрёт всю выгоду на коротких прямых.
    Странное число — максимальный размер буфера. Рациональное использование любого свободного кусочка.

    Цитата Сообщение от char Посмотреть сообщение
    первый inc hl заменить на inc l?
    Посчитал, первый inc hl можно заменить, он не попадает в границу.
    Последний раз редактировалось drbars; 18.08.2013 в 10:24.

  2. #22
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,752
    Спасибо Благодарностей отдано 
    263
    Спасибо Благодарностей получено 
    279
    Поблагодарили
    207 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    drbars, я к тому что у тебя максимальный размер линии 149 точек по вертикали
    С уважением,
    Jerri / Red Triangle.

  3. #23
    Activist
    Регистрация
    15.01.2005
    Сообщений
    201
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    7
    Поблагодарили
    7 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от drbars Посмотреть сообщение
    Посчитал, первый inc hl можно заменить, он не попадает в границу.
    ok, при размере буфера менее 2 секторов, граница переходится 1 раз, ежели наметить переход на команду ldi, тогда и оба inc hl получится заменить на inc l?

    ... видимо, с заменой cp h на cp l ...
    Последний раз редактировалось char; 18.08.2013 в 14:28.

  4. #24
    Veteran
    Регистрация
    01.03.2005
    Адрес
    Новосибирск
    Сообщений
    1,979
    Спасибо Благодарностей отдано 
    69
    Спасибо Благодарностей получено 
    261
    Поблагодарили
    99 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jerri Посмотреть сообщение
    drbars, я к тому что у тебя максимальный размер линии 149 точек по вертикали
    Игровое пространство 144 точки по вертикали.. буфер позволяет 149.

    ---------- Post added at 22:43 ---------- Previous post was at 22:29 ----------

    Цитата Сообщение от char Посмотреть сообщение
    ok, при размере буфера менее 2 секторов, граница переходится 1 раз, ежели наметить переход на команду ldi, тогда и оба inc hl получится заменить на inc l?
    ... видимо, с заменой cp h на cp l ...
    Не получится наметить, я уже максимально оптимизировал. Старший адрес как раз и проверяет, закончился ли буфер.

    85*3=255. Это значит что 2-ой INC HL попадает на границу. Если мы буфер на байт сдвинем, как из него выходить? L у нас может быть одинаковым 2 раза. Тут уже ничего не сделаешь.

    Не забывай ещё, что буфер строится от конца к началу, а востанавливается от начала к концу.
    Последний раз редактировалось drbars; 18.08.2013 в 19:49.

  5. #25
    Activist
    Регистрация
    15.01.2005
    Сообщений
    201
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    7
    Поблагодарили
    7 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от drbars Посмотреть сообщение
    Игровое пространство 144 точки по вертикали.. буфер позволяет 149.

    ---------- Post added at 22:43 ---------- Previous post was at 22:29 ----------



    Не получится наметить, я уже максимально оптимизировал. Старший адрес как раз и проверяет, закончился ли буфер.

    85*3=255. Это значит что 2-ой INC HL попадает на границу. Если мы буфер на байт сдвинем, как из него выходить? L у нас может быть одинаковым 2 раза. Тут уже ничего не сделаешь.

    Не забывай ещё, что буфер строится от конца к началу, а востанавливается от начала к концу.
    перепроверь, такой L будет только 1 раз (в конце), на проверку идет только 1 байт из трех.

    видимо, A=255

  6. #26
    Veteran
    Регистрация
    01.03.2005
    Адрес
    Новосибирск
    Сообщений
    1,979
    Спасибо Благодарностей отдано 
    69
    Спасибо Благодарностей получено 
    261
    Поблагодарили
    99 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от char Посмотреть сообщение
    перепроверь, такой L будет только 1 раз (в конце), на проверку идет только 1 байт из трех.
    видимо, A=255
    Ты от конца считаешь?

    Пример:
    Начало буфера #7E40
    Конец буфера +1 = #8000

    заполняем стеком по 3 байта.

    LD SP,#8000

    повтор N раз
    PUSH AF
    INC SP
    PUSH HL

    куда придётся граница 256-го?

  7. #27
    Activist
    Регистрация
    15.01.2005
    Сообщений
    201
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    7
    Поблагодарили
    7 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ld sp,#7fff

    выйдет только по этому адресу

    #7eff на проверку не попадает, только #00 будет сравниваться с A (предыдущий же был #FD)

  8. #28
    Veteran
    Регистрация
    01.03.2005
    Адрес
    Новосибирск
    Сообщений
    1,979
    Спасибо Благодарностей отдано 
    69
    Спасибо Благодарностей получено 
    261
    Поблагодарили
    99 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от char Посмотреть сообщение
    ld sp,#7fff

    выйдет только по этому адресу

    #7eff на проверку не попадает, только #00 будет сравниваться с A (предыдущий же был #FD)
    Ок, теперь восстанавливаем в обратном порядке:

    А = #80
    HL = начало буфера.

    Код:
    RES_LN	LD E,(HL)
    	INC L
    	LD D,(HL)
    	INC HL
    	LDI
    	CP H
    	JP NZ,RES_LN
    	RET
    Что будет если А = #7F ?

  9. #29
    Activist
    Регистрация
    15.01.2005
    Сообщений
    201
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    7
    Поблагодарили
    7 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ok, при размере буфера менее 2 секторов, граница переходится 1 раз, ежели наметить переход на команду ldi, тогда и оба inc hl получится заменить на inc l?

    ... видимо, с заменой cp h на cp l ...
    sp=#7fff
    ...
    заполнили буфер
    ...

    a=#ff

    ...
    ldi
    cp l
    jp nz,RES_LN


    L при сравнении с A будет #ff только в конце.

  10. #30
    Veteran
    Регистрация
    01.03.2005
    Адрес
    Новосибирск
    Сообщений
    1,979
    Спасибо Благодарностей отдано 
    69
    Спасибо Благодарностей получено 
    261
    Поблагодарили
    99 сообщений
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от char Посмотреть сообщение
    sp=#7fff
    ...
    заполнили буфер
    ...

    a=#ff

    ...
    ldi
    cp l
    jp nz,RES_LN


    L при сравнении с A будет #ff только в конце.
    Ладно, уговорил. Внесу fix.

Страница 3 из 4 ПерваяПервая 1234 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Оптимизация Амиги 1230/50 под мр3
    от Alex2 в разделе Amiga
    Ответов: 52
    Последнее: 10.01.2017, 01:23
  2. оптимизация форума
    от SMT в разделе Форум
    Ответов: 33
    Последнее: 04.04.2005, 13:18

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •