User Tag List

Страница 60 из 113 ПерваяПервая ... 565758596061626364 ... ПоследняяПоследняя
Показано с 591 по 600 из 1128

Тема: ЭТЮДЫ

  1. #591

    Регистрация
    23.12.2006
    Адрес
    Славный город Самара
    Сообщений
    484
    Спасибо Благодарностей отдано 
    135
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    12 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Destr Посмотреть сообщение
    А оно что, не съест такты?
    Т.е. эти <ветвление по результату сравнения (CF)> В ЛЮБОМ СЛУЧАЕ ПРОИСХОДЯТ.
    Неважно внутри процедуры (как твой пример) или после (как мой)
    Так это ж уже использование результатов сравнения, а не само сравнение. Ты, совершенно, прав.
    Ну что, - мы, таки, молодцы?

    Теперь надо утвердить две процедуры: самую быструю и самую короткую.
    Последний раз редактировалось Sergey; 11.02.2015 в 22:33.
    С уважением,
    Gris / Red Triangle.
    _____________________________________
    ZX-EVO/TS-Labs config/NGS/HDD/SD-card
    Amiga A1200/Blizzard 1230@50/32/60GB
    Amiga A1200/Apollo 1260@66/32/60GB
    UnAmiga (C5) AGA GM7123 VideoDAC

  2. #592

    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,822
    Спасибо Благодарностей отдано 
    274
    Спасибо Благодарностей получено 
    122
    Поблагодарили
    95 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sergey Посмотреть сообщение
    Ну что, - мы, таки, молодцы?
    Ты молодец.
    Если бы тему не поднял я бы не решился пихать в этюды (а уж тем более ломать башку над оптимумом)
    (так бы и юзал то что вначале привёл в пример. правда до тех пор пока не пришла пора мою 3д оптимизить. пока что я пишу так, навскидку лишь-бы работало, скорость буду выжимать потом)
    А на счёт короткости - забей, никому байт не помешает (ну не сможешь ты заюзать 1024 процедуры. да ещё чтоб в каждой байт сэкономить и килобайт получить. это не так делается)
    Последний раз редактировалось Destr; 11.02.2015 в 22:37.

  3. #593

    Регистрация
    23.12.2006
    Адрес
    Славный город Самара
    Сообщений
    484
    Спасибо Благодарностей отдано 
    135
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    12 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Destr Посмотреть сообщение
    ...так бы и юзал то что вначале привёл в пример. правда до тех пор пока не пришла пора мою 3д оптимизить...
    Искренне рад оказаться полезным

    ---------- Post added at 23:57 ---------- Previous post was at 23:46 ----------

    Итог. Сравнение двух 16-битных чисел со знаком.
    Вход: HL = число №1, DE = число №2.
    Выход: CF=1 - число в HL меньше; CF=0 - число в DE меньше или равно HL.
    Самая короткая процедура (7 байт, 33/37 тактов, средн.35 тактов), автор Destr:
    Код:
            LD A,H     ; 4
            XOR D      ; 4
            JP P,CHD   ; 10
            EX DE,HL   ; 4
    CHD     SBC HL,DE  ; 15
            <ветвление по результату сравнения (CF)>
    Самая быстрая процедура (10 байт, 34/33 такта, средн.33,5 такта), авторы Destr, Sergey:
    Код:
            LD A,H     ; 4
            XOR D      ; 4
            JP P,CHD   ; 10
    	ld a,e	; 4
    	sub l	; 4
    	ld a,d	; 4
    	sbc a,h ; 4
    	<ветвление по результату сравнения (CF)>
    CHD     SBC HL,DE  ; 15
    	<ветвление по результату сравнения (CF)>
    Последний раз редактировалось Sergey; 11.02.2015 в 23:05.
    С уважением,
    Gris / Red Triangle.
    _____________________________________
    ZX-EVO/TS-Labs config/NGS/HDD/SD-card
    Amiga A1200/Blizzard 1230@50/32/60GB
    Amiga A1200/Apollo 1260@66/32/60GB
    UnAmiga (C5) AGA GM7123 VideoDAC

  4. #594

    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,822
    Спасибо Благодарностей отдано 
    274
    Спасибо Благодарностей получено 
    122
    Поблагодарили
    95 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sergey Посмотреть сообщение
    Самая быстрая процедура (10 байт, 34/33 такта, средн.33,5 такта)
    Есть ещё ньюанс - зачастую ветвления нет.
    Нужен только флаг С
    Рабочий пример:
    Код:
    	LD HL,арг1:LD DE,арг2:CP_HLDE:RL C
    	LD HL,арг3:LD DE,арг4:CP_HLDE:RL C
    	LD A,C:AND 3:RET Z:CP 3:SCF:RET Z
    Где CP_HLDE - наш макрос сравнения.
    В последней строчке - принимается решение по выходу в зависимости от результатов двух сравнений.
    Вот и посчитай как это всё умедлится если юзать ветвления.

    ---------- Post added at 23:55 ---------- Previous post was at 23:40 ----------

    (+20 тактов, ого!)
    Последний раз редактировалось Destr; 11.02.2015 в 23:44.

  5. #595

    Регистрация
    23.12.2006
    Адрес
    Славный город Самара
    Сообщений
    484
    Спасибо Благодарностей отдано 
    135
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    12 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Destr Посмотреть сообщение
    +20 тактов, ого!
    Нет пределов совершенству
    С уважением,
    Gris / Red Triangle.
    _____________________________________
    ZX-EVO/TS-Labs config/NGS/HDD/SD-card
    Amiga A1200/Blizzard 1230@50/32/60GB
    Amiga A1200/Apollo 1260@66/32/60GB
    UnAmiga (C5) AGA GM7123 VideoDAC

  6. #596

    Регистрация
    12.02.2014
    Адрес
    г. Арзамас
    Сообщений
    6,123
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Заглохла темка. Прочитал про dither 2x2, вышел вот такой набор:


    Интересно, как использовать набор как чанки 4х4, и есть ли смысл заниматься?

  7. #597

    Регистрация
    26.03.2008
    Адрес
    Питкяранта
    Сообщений
    1,822
    Спасибо Благодарностей отдано 
    274
    Спасибо Благодарностей получено 
    122
    Поблагодарили
    95 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от denpopov Посмотреть сообщение
    Интересно, как использовать набор как чанки 4х4, и есть ли смысл заниматься?
    Вообще некратный, тяжко что-либо делать с ним.
    Ну демомакеры конечно юзают такое, а вот для чего-либо другого - вряд-ли смысл есть...
    На ум приходит только "размывание" экрана, ну типа как Untouchables (там квадратиками, а можно эти чанки заюзать...)

  8. #598

    Регистрация
    12.02.2014
    Адрес
    г. Арзамас
    Сообщений
    6,123
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Destr Посмотреть сообщение
    Вообще некратный, тяжко что-либо делать с ним.
    глупость сказал, да?

  9. #599

    Регистрация
    12.02.2014
    Адрес
    г. Арзамас
    Сообщений
    6,123
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Написал программу генерации лабиринта, алгоритм взят Здесь

    Идея заглохла - как показать на экране, оставлю код здесь.
    Код:
    	device zxspectrum128
            ORG #6400
    begin
    bw: db 1,2,4,8
    bx: db 0,0,1,-1
    by: db -1,1,0,0
    
    runi:
    
    PLOTTBL EQU #6000
     ld sp,$FFE0
     call FORMER
    
     ld de,$0101
     call ma
    
     ld hl,$5800,de,$5801,bc,767,(hl),7:ldir
    
     jr $
    ma:
    ;  a(x,y)=1;a[p] := True;           {make a path}
     call PLOT
     ld a,(bc):or (hl):ld (bc),a
    Repeat:
     ld ix,bw;    d=0;{check For allowable directions}
    ;D=y,E=x
    ;up
    ;    If y>2 And a(x,y-2)=0:d+1:EndIf
     ld a,d
     cp 2
     jr c,test2
     push de
     dec d,d
     call PLOT
     pop de
     jr nz,test2
     ld a,ixl:or 1:ld ixl,a
    test2:
    ;;down
    ;    If y<190 And a(x,y+2)=0:d+2:EndIf
     ld a,d
     cp 190
     jr nc,test4
     push de
     inc d
     inc d
     call PLOT
     pop de
     jr nz,test4
     ld a,ixl:or 2:ld ixl,a
    test4:
    ;;right
    ;    If x<>253 And a(x+2,y)=0:d+4:EndIf
     ld a,e
     cp 253+1
     jr z,test8
     push de
     inc e
     inc e
     call PLOT
     pop de
     jr nz,test8
     ld a,ixl:or 4:ld ixl,a
    test8:
    ;;left
    ; If x>2 And a(x-2,y)=0:d+8:EndIf
     ld a,e
     cp 2
     jr c,test_e
     push de
     dec e
     dec e
     call PLOT
     pop de
     jr nz,test_e
     ld a,ixl:or 8:ld ixl,a
    test_e:
    
     ld a,ixl:or a:ret z
    ;    If d <> 0
    ;      Repeat;              {choose a direction that's legal}
    ;        i = Random(4);
    ;      Until (d &(1<<i));
     ld b,bw/256
    cho_dir:
     call random
     and 3
     ld c,a
     ld a,(bc)
     and ixl
     jr z,cho_dir
    
    ;     a(x+bx(i),y+by(i) )=1;;;;a[p + b[i]] := True; {make a path}
    ; push ix
     ld ixl,c
     push de
     ld a,e:add a,(ix+4):ld e,a
     ld a,d:add a,(ix+8):ld d,a
     call PLOT
     ld a,(bc):or (hl):ld (bc),a
    ; ei:halt
    ;     m(x+bx(i)*2,y+by(i)*2);;m(p + 2 * b[i]);     {recurse}
     ;pop de
     ld a,e:add a,(ix+4):ld e,a
     ld a,d:add a,(ix+8):ld d,a
     call ma
     pop de
    ; pop ix
     jp Repeat
    ;    EndIf
    ;  Until d = 0;            {Until stuck}
    
    random:
    R1:LD C,$15+3
    R2:LD A,#70
     ADD A,C:LD C,A
     LD (R1+1),A
    R3:LD A,#FD
     SUB C:LD C,A,(R2+1),A
     RRCA:LD (R3+1),A
     RET
    
    FORMER  LD DE,#4000,BC,#8000,L,E
    FLP1    LD H,high PLOTTBL
            LD (HL),D:INC H:LD (HL),E:INC H
            LD (HL),C:INC H:LD (HL),B
            RRC B
            LD A,C:ADC A,0:LD C,A
    FBR1    INC D:LD A,D:AND 7
            JR NZ,FNXT:LD A,E:ADD A,32
            LD E,A:JR C,FNXT
            LD A,D:SUB 8:LD D,A
    FNXT    INC L:JR NZ,FLP1
            LD HL,PLOTTBL+#C0,BC,#3F
            LD DE,HL:INC E
            LD (HL),0:LDIR
            RET
    ;-----------ставим точку на DE------------------------
    PLOT:;    PUSH HL,BC
     LD H,HIGH PLOTTBL,L,D,B,(HL):INC H
     LD A,(HL),L,E:INC H:OR (HL)
     INC H:LD C,A,A,(BC)
     and (hl)
     ;OR (HL):LD (BC),A
    ;        POP BC,HL
     RET
    
    end
    	display /d,end-begin
    	savesna "!void.sna",runi;begin

  10. #600

    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,866
    Спасибо Благодарностей отдано 
    328
    Спасибо Благодарностей получено 
    310
    Поблагодарили
    234 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    denpopov, тебе алгоритм нужен? или для общего развития выкладываешь?
    С уважением,
    Jerri / Red Triangle.

Страница 60 из 113 ПерваяПервая ... 565758596061626364 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Этюды: как бы написать поизящнее.
    от AndTorp в разделе Программирование
    Ответов: 5
    Последнее: 17.03.2008, 00:43
  2. Ответов: 0
    Последнее: 18.08.2006, 22:40
  3. Этюды: печать шрифтом 5x5...
    от breeze в разделе Программирование
    Ответов: 12
    Последнее: 27.03.2005, 05:21

Метки этой темы

Ваши права

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