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

User Tag List

Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя
Показано с 11 по 20 из 25

Тема: Атрибутный Fade in/Fade out

  1. #11
    Veteran Аватар для Sinus
    Регистрация
    29.01.2005
    Адрес
    Belarus, Grodno
    Сообщений
    1,279
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    кстати, а вот может взять и посчитать сколько тактов (хотя бы примерно, по бордюру) занимают эти маленькие фэйдилки?
    у меня просто нет времени, а было бы интересно

    Добавлено через 1 минуту
    ну уж все равно ИМХА будет занимать меньше чем твой плюс табличка
    вообще если flash не используется, то табличка может занимать 128 байт, и 21 байт сама процедура (можно сократить ещё если использовать JR а не JP, но будет медленнее)
    Последний раз редактировалось Sinus; 08.08.2008 в 00:02. Причина: Добавлено сообщение
    [target] [zemu] [js8x] [pouet] KAY-1024, 5''FDD, 3''FDD, HDD

  2. #12
    Guru Аватар для rasmer
    Регистрация
    20.01.2005
    Адрес
    Саранск
    Сообщений
    2,195
    Записей в дневнике
    2
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sinus Посмотреть сообщение
    вообще если flash не используется, то табличка может занимать 128 байт, и 21 байт сама процедура (можно сократить ещё если использовать JR а не JP, но будет медленнее)
    1) при чомтут флэш если он даже не успеет мигнуть... так что флэш в расчот можно не брать ВООБЩЕ
    2.
    PHP код:
    LOOP DUP 32
         LD A
    ,(DE)
         
    LD L,A
         LDI
         EDUP 
    какой тут нафиг 21 байт?
    Мои интры: [Kukarachess][Super boot rmx][tRUSHE MOSAIc][BLAZE]
    Мои игры: [Overload][Removal]

    Список игр для ZX-Spectrum: [2015] [2014]

  3. #13
    Veteran Аватар для Sinus
    Регистрация
    29.01.2005
    Адрес
    Belarus, Grodno
    Сообщений
    1,279
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    DUP убери, и будет 21
    [target] [zemu] [js8x] [pouet] KAY-1024, 5''FDD, 3''FDD, HDD

  4. #14
    dig out your soul Аватар для scl^mc
    Регистрация
    26.01.2005
    Адрес
    Russia, Ulianovsk
    Сообщений
    5,424
    Записей в дневнике
    6
    Спасибо Благодарностей отдано 
    53
    Спасибо Благодарностей получено 
    30
    Поблагодарили
    19 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sinus Посмотреть сообщение
    а нахрена в вышеприведённой процедуре?
    это копипаст, если что
    'SONGS FROM CRUEL WORLD' IS REMASTERED!
    unmilky sky and other albums is here
    speccy merchandise

    we can dance beneath the fireflies on an empty road
    there is the light that never goes out... (the smiths)
    если кто-то что-то как-то, то вот моя аська - 371432992

  5. #15
    Veteran Аватар для GriV
    Регистрация
    18.02.2005
    Адрес
    Набережные Челны
    Сообщений
    1,574
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Самая правильная и быстрая процедура была из терминатора, на которой столько копьев ревюшники сломали.
    первой была в этюдах (номер 3 от 94 г):
    Код:
      
                DI
                LD BC,#0000
                LD D,#5B
    AGAIN
                LD HL,#5800
    NEXT_A 
                LD A,(HL)
                CP С
                JR Z,NEXT_B
                DEC (HL)
    NEXT_B
                INC HL
                LD A,H
                CP D
                JR NZ,NEXT_A
                DJNZ AGAIN
                EI
                RET
    длина:

    номер 4 за 94 (цитата из терминатора):
    Код:
                LD B,7
    L4
                HALT
                LD HL,SPEED
    L0
                DEC HL
                LD A,L
                OR H
                JR NZ,L0
                LD HL,22528 
    L3
                LD A,(HL)
                AND 56
                JR Z,L1
                SUB 8
    L1
                LD C,A
                LD A,(HL)
                AND 7
                JR Z,L2
                DEC A
    L2
                OR C
                LD (HL),A
                INC HL
                LD A,H
                CP 91
                JR NZ,L3
                DJNZ L4
                RET
    честно говоря замучало, но листинги приводились именно так - с десятичными значениями круглых в общем то чисел, привожу тут авторские версии.

    номер 6 за 94г:
    Код:
                LD B,8
                LD C,#C7
    LOOP
                LD A,C
                SUB 8
                LD (COM),A
                LD C,A
                LD HL,22528
                LD DE,768
    L1
                LD A,(HL)
                DEFB #C9  ; тут собирается команда res n,(hl)
    COM
                DEFB 0
                LD (HL),A
                INC HL
                DEC DE
                LD A,D
                OR E
                JR NZ,L1
                PUSH BC
                LD BC,#1800
    L2
                DEC BC
                LD A,B
                OR C
                JR NZ,L2
                POP BC
                DJNZ LOOP
                RET
    Длина: 40 байт

    номер 2 за 95г.:
    Код:
                EI
                LD E,255
    L1
                LD HL,22528
                LD BC,768
                AND A
                RR E
    L2
                LD A,(HL)
                XOR E
                AND E
                XOR E
                LD (HL),A
                INC HL
                DEC BC
                LD A,B
                OR C
                JR NZ,L2
                LD B,4
    L3
                HALT
                DJNZ L3
                XOR A
                CP E
                JR NZ,L1
                RET
    длина: 33 байта

    общий недостаток всех процедур: что отдельно ведётся адрес и отдельно ведётся счётчик. О чём собственно указано в ревю номер 3 того же года. то есть окончание становится вида:
    Код:
                INC HL
                LD A,H
                CP #5B
                JR NZ,L2
    и уходят все связанные с DE операции.
    Далее, можно оптимизировать принцип гашения - убрать регистр маски, просто сдвига вправо с потерей вытесненного бита. В результате получается совсем короткая процедура, но от редакции:
    Код:
    PAUSE      EQU 4
                LD B,8
    L1
                LD HL,#5800
    L2
                SRL (HL)
                INC HL
                LD A,H
                CP #5B
                JR NZ,L2
                LD C,PAUSE
    L3
                HALT
                DEC C
                JR NZ,L3
                DJNZ L1
                RET
    длина: 22 байта

    лучшая читательская процедура - длина 24 байта, оптимизация достигнута изменением расположения фрагмента задержки:
    Код:
    PAUSE      EQU 4
                LD B,%01111111
    L1
                LD L,PAUSE
    L3
                HALT
                DEC L
                JR NZ,L3
                LD H,#58
    L2
                LD A,(HL)
                AND B
                LD (HL),A
                INC HL
                LD A,H
                CP #5B
                JR NZ,L2
                SRL B
                JR C,L1
                RET
    номер 4 от 95г.:
    Код:
    PAUSE      EQU 4
    CLRSCR
                LD C,127
    L1
                LD HL,23295
    L2
                LD A,(HL)
                AND C
                LD (HL),A
                DEC HL
                BIT 3,H
                JR NZ,L2
                LD B,PAUSE
    L3
                HALT
                DJNZ L3
                RRC C
                JR C,L1
                RET
    длина: 23 байта

    номер 5 от 95г.:
    Код:
    PAUSE      EQU 5
                LD C,#FF
    L1
                LD H,#5A
    L2
                LD A,(HL)
                AND C
                LD (HL),A
                DEC HL
                BIT 2,H
                JR Z,L2
                SRL C
                RET NC
                LD B,PAUSE
    L3
                HALT
                DJNZ L3
                JR L1
    в этой процедуре используется пара HL на уменьшение, благодарая чему не портится (как при увеличении) лишняя область памяти, кроме того не задаётся содержимое регистра L (собственно длина 22 байта), ведь всё равно этот первый бит отдаётся на мерцание (которое редко используется и находиться должно в нижней части экрана), и кроме того при повторном проходе он будет обнулён.

    далее процедура от редакции (длина 21 байт):
    Код:
    PAUSE      EQU 5
                LD C,#FF
    L3
                LD B,PAUSE
    L2
                LD H,#5A
    L1
                LD A,(HL)
                AND C
                LD (HL),A
                DEC HL
                BIT 3,H
                JR NZ,L1
                DJNZ L2
                SRL C
                JR C,L3
                RET
    Эта процедура не зависит от прерываний (EI|DI), так как задержка происходит не через HALT а посредством многократных проходов с одним и тем же байтом-маской.

    тут видимо была поставлена большая жирная если не точка, то точка с запятой точно, потому что следующая гасилочка была только в 4-5 от 96г.:
    Код:
    PREPARE
                LD HL,DAL_TBL
    PREP_T
                LD A,L
                AND 7
                JR Z,$+3
                DEC A
                LD E,A
                LD A,L
                AND #38
                JR Z,$+4
                SUB 8
                OR E
                LD (HL),A
                INC L
                JR NZ,PREP_T
    FADEOUT
                LD D,DAL_TBL/256 ; старший байт расположения таблицы DAL_TBL, сама таблица должна быть по ровному адресу
                LD B,7
    W_RAY
                HALT
                LD HL,#5800
    ATR_DEC
                LD E,(HL)
                LD A,(DE)
                LD (HL),A
                INC HL
                LD A,H
                CP #5B
                JR C,ATR_DEC
                DJNZ W_RAY
                RET
    DAL_TBL
                DEFS 256
    длина самого вывода (начинается с метки FADEOUT) - 20 байт, что само по себе рекордно, правда требуется навесок в виде процедуры подготовки данных (DAL_TBL), кроме того это "правильная" процедура вывода - она гасит как в терминаторе, а не упрощённо по битам.

    и тут же процедура-рекордсмен, того же автора, длина аж 19 байт (опять же исключая процедуру подготовки), тоже по терминаторскому алгоритму:
    Код:
    PAL_TBL     EQU 0-(256*8)
    FADEOUT
                LD D,PAL_TBL/256 ; старший байт расположения таблицы DAL_TBL, сама таблица должна быть по ровному адресу
    W_RAY
                HALT
                LD H,#5A
    ATR_DEC
                LD E,(HL)
                LD A,(DE)
                LD (HL),A
                DEC HL
                BIT 3,H
                JR NZ,ATR_DEC
                INC D
                JR NZ W_RAY
                RET
    
    PREPARE
                LD HL,PAL_TBL
                LD BC,#800
    FILL_T
                LD A,L
                AND 7
                JR Z,$+3
                DEC A
                LD E,A
                LD A,L
                AND #38
                JR Z,$+4
                SUB 8
                OR E
                LD (HL),A
                CPI
                JP PE,FILL_T
                RET
    Биты рулят лучше байтов, байты рулят шустрее!
    View, Звук, Цвет

  6. #16
    Guru Аватар для newart
    Регистрация
    19.01.2005
    Адрес
    Санкт-Петербург
    Сообщений
    11,439
    Спасибо Благодарностей отдано 
    192
    Спасибо Благодарностей получено 
    145
    Поблагодарили
    61 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А к чему такая
    Цитата Сообщение от GriV Посмотреть сообщение
    Самая правильная и быстрая процедура была из терминатора, на которой столько копьев ревюшники сломали.
    первой была в этюдах (номер 3 от 94 г):
    C Fade Out действительно все просто, другое дело Fade In...

  7. #16
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  8. #17
    Veteran Аватар для GriV
    Регистрация
    18.02.2005
    Адрес
    Набережные Челны
    Сообщений
    1,574
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    самый лучщий набор зажигалок был в моей View. (смотрите подпись или ищите на zx.da.ru). Код приложен. Я выдёргивал все эти зажигалки из тех же ревюшек, де факто перебрал все какие мог, это лучшие.

    Ага, забыл добавить. Там названия зажигалок SCR1, SCR2,... SCR8.
    В программе они по рандомайзу запускаются. Где картинка должна лежать очевидно переменная BUFF. Оттуда она дёргается. Большинство зажигалок привязаны к ровным адресам картинки, поэтому адреса для BUFF брать кратные #200.
    Вложения Вложения
    Последний раз редактировалось GriV; 10.08.2008 в 11:26.
    Биты рулят лучше байтов, байты рулят шустрее!
    View, Звук, Цвет

  9. #18
    Master
    Регистрация
    20.01.2005
    Адрес
    Россия, Вологда
    Сообщений
    957
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Хоть бы рассказали, для таких неучей как я, принцип Треминатора что ли...
    axor/Perspective
    http://abzac.retropc.ru/

  10. #19
    Veteran Аватар для GriV
    Регистрация
    18.02.2005
    Адрес
    Набережные Челны
    Сообщений
    1,574
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ну у меня под рукой всегда ревюшки да и знаю я их почти наизусть :-)
    В отечественных "гасилках" "гасили" просто:
    ld b,#ff - маска гашения
    ...
    ld a,(hl)
    and b - нафигарили по маске
    ld (hl),a
    ...
    and a - сбросили флаг переноса
    rrc b - вставили его в старший бит, так и получается 255->127->63->...->3->1->0 - то есть 8 (или 9) циклов.
    ...
    jr nz,start

    то есть сразу уйдёт флеш, потом яркость, потом фон, потом чернила.

    в терминаторе было круче
    там было хитрое гашение - там учитывалось что атрибуты идут последовательно, вначале гашение чернил, потом (раз в цикл гашения чернил) гашение фона, делается простым уменьшением байта атрибута. Какие то объекты сразу "погаснут" так как их атрибут сразу станет 0, какие то будут достаточно долго (у которых включена яркость и фон). Итого максимум 256 циклов (djnz в оригинальном алгоритме при установке B в 0).

    Даже на ходу соптимизировав код терминатора можно получить такое:
    Код:
                LD DE,#0001
                LD B,D
    AGAIN
                LD HL,#5AFF
    NEXT_A 
                LD A,(HL)
                SUB E
                ADC A,D
                LD (HL),A
    NEXT_B
                DEC HL
                BIT 2,H
                JR Z,NEXT_A
                HALT
                DJNZ AGAIN
                RET
    Длина - 20 байт :-)
    Можно на 1 байт сколбасить (19 байт по терминаторскому алгоритму!!!), сделав LD H,#5B вместо LD HL,#5AFF. Всё равно идёт на уменьшение, всё равно проверка идёт на Bit 2,H, однако может испортиться область #5b00-#5bff (так как L может быть равной и 255), однако не надо никаких буферов и предварительных подготовок.

    Особое внимание на конструкцию
    Код:
                SUB E
                ADC A,D
    Её нужно трактовать как
    Код:
                SUB 1
                ADC A,0
    Она уменьшает аккумулятор на 1 но не меньше 0.
    Биты рулят лучше байтов, байты рулят шустрее!
    View, Звук, Цвет

  11. #20
    Veteran Аватар для GriV
    Регистрация
    18.02.2005
    Адрес
    Набережные Челны
    Сообщений
    1,574
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Код:
                LD B,0
    AGAIN
                LD HL,#5AFF
    NEXT_A 
                XOR A
                ADD A,(HL)
                JR Z,$+3
                DEC (HL)
    NEXT_B
                DEC HL
                BIT 2,H
                JR Z,NEXT_A
                HALT
                DJNZ AGAIN
                RET
    19 байт :-) можно сократить до 18 сделав то самое LD A,#5B :-)
    Ревюшниками и не снилось :-) Правда а тактах чуток длиннее
    Биты рулят лучше байтов, байты рулят шустрее!
    View, Звук, Цвет

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

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

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

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

Ваши права

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