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

User Tag List

Страница 43 из 43 ПерваяПервая ... 3940414243
Показано с 421 по 428 из 428

Тема: Ищу желающих выступить в роли программиста

  1. #421
    Member Аватар для Dwa83
    Регистрация
    31.12.2017
    Адрес
    г. Реж
    Сообщений
    155
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    34
    Поблагодарили
    17 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Какая интересная вещь получается(либо я что-то криво делаю стеком).
    1) Перекидка ldir = 145147 (21 на байт)

    2) Перекидка функцией через стек и с циклом = 118526 (17,148 на байт)
    (пара BC из основного набора не используется, инднксные регистры используются)

    Скрытый текст

    Код:
    ld	(S_SRC1+1),hl	;16
    	ld	(S_DST1+1),de	;20
    	ld	(SAVE_SP+1),sp	;20
    
    	ld	b,215		;7
    
    S_SRC1	ld	sp,0		;10
    	pop	hl		;10
    	pop	de		;10
    	pop	af		;10
    	pop	ix		;14
    	pop	iy		;14
    	exx			;4
    	pop	hl		;10
    	pop	de		;10
    	pop	bc		;10
    	ld	(S_SRC2+1),sp	;20	= 122
    	
    S_DST1	ld	sp,0		;10
    	push	bc		;11
    	push	de		;11
    	push	hl		;11
    	exx			;4
    	push	iy		;15
    	push	ix		;15
    	push	af		;11
    	push	de		;11
    	push	hl		;11
    
    	ld	hl,32		;10
    	add	hl,sp		;11
    	ld	(S_DST2+1),hl	;16	= 147 | +122 = 269
    	
    S_SRC2	ld	sp,0
    	pop	hl	
    	pop	de	
    	pop	af	
    	pop	ix
    	pop	iy
    	exx	
    	pop	hl	
    	pop	de	
    	pop	bc	
    	ld	(S_SRC1+1),sp
    	
    S_DST2	ld	sp,0
    	push	bc	
    	push	de	
    	push	hl	
    	exx	
    	push	iy
    	push	ix
    	push	af	
    	push	de	
    	push	hl	
    	
    	ld	hl,32
    	add	hl,sp	
    	ld	(S_DST1+1),hl	;269 * 2 = 538
    
    				;551 * 214 + 546 = 118460
    				;+66 = 118526   (17,148 на байт)
    	djnz	S_SRC1		;13/8
    	
    SAVE_SP	ld	sp,0
    [свернуть]


    3) перекидка ldi = 115714 (16,741 на байт)

    Скрытый текст

    Код:
    	ld	b,0	;7
    
    cs_cyc	ld	c,255	;7	;уменьшается в ldi
    	ldi		;16
    	ldi
    	ldi
    	ldi
    	ldi
    	ldi
    	ldi
    	ldi
    	ldi
    	ldi
    	ldi
    	ldi
    	ldi
    	ldi
    	ldi
    	ldi
    	ldi
    	ldi
    	ldi
    	ldi
    	ldi
    	ldi
    	ldi
    	ldi
    	ldi
    	ldi
    	ldi		;439
    
    	djnz	cs_cyc	;13/8
    [свернуть]


    Получается, что медленнее не стало. Мне только казалось. Даже быстрее. Значим мой способ со стеком - кривой-косой, а я криворучка).

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

  3. #422
    Veteran Аватар для nzeemin
    Регистрация
    20.12.2005
    Адрес
    Москва
    Сообщений
    1,996
    Спасибо Благодарностей отдано 
    1,062
    Спасибо Благодарностей получено 
    1,224
    Поблагодарили
    478 сообщений
    Mentioned
    15 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Dwa83 Посмотреть сообщение
    Получается, что медленнее не стало. Мне только казалось. Даже быстрее.
    Вместо ix либо iy использовать af' - выигрыш 4+4 на pop/push, 16 на строку, 3440 на 215 строк.
    118526 - 3440 = 115086

  4. #423
    Member Аватар для Dwa83
    Регистрация
    31.12.2017
    Адрес
    г. Реж
    Сообщений
    155
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    34
    Поблагодарили
    17 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от nzeemin Посмотреть сообщение
    118526 - 3440 = 115086
    Выигрыш не очень ощутим, 628 тактов всего, а с ldi код попроще получается. Я вот ещё не помню exx меняет ли AF на AF', или нужно использовать ex AF,AF'? Если второй вариант, то ещё такты на смену пары понадобятся, и ещё раз посчитать разницу придётся.

    Посмотрел щас:
    Применяя команду EXX, нужно также помнить, что она переключает на альтернативный набор не все семь регистров, а только 6: BC, DE и HL
    Так что плюс на минус..
    Последний раз редактировалось Dwa83; 20.11.2020 в 15:35.

  5. Этот пользователь поблагодарил Dwa83 за это полезное сообщение:

    nzeemin (20.11.2020)

  6. #424
    Guru
    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    13,774
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    143
    Спасибо Благодарностей получено 
    1,179
    Поблагодарили
    775 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Dwa83 Посмотреть сообщение
    не помню exx меняет ли AF на AF'
    нет
    .....
    как вариант (более медленные) индексные регистры можно использовать для обозначения источника/приёмника
    ld sp,ix ; откуда
    ld sp,iy ; куда

    ну и такты удобнее считать допустим в отладчике unreal`a.
    ставим BreakPoint`ы начало/конец процедуры.
    при срабатывание второго TimeDelta (внизу слева) покажет кол-во тактов между ними
    Последний раз редактировалось goodboy; 20.11.2020 в 15:42.

  7. #425
    Banned
    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,841
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    658
    Поблагодарили
    512 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Dwa83 Посмотреть сообщение
    pop iy ;14
    в случае с фиксированными адресами
    использование ix iy не оправданно а только жрет дополнительное время

    Код:
    ;самый быстрый вариант
    ld sp,nnnn	;10	3	;
    pop hl		;10	1	
    pop de		;10	1	;
    pop bc		;10	1
    pop af		;10	1	
    exx		;4	1
    pop hl		;10	1
    pop de		;10	1
    pop bc		;10	1
    
    ld sp,nnnn	;10	3
    push bc		;11	1
    push de		;11	1
    push hl		;11	1
    exx		;4	1
    push af		;11	1
    push bc		;11	1
    push de		;11	1
    push hl		;11	1
    		;175/14	22/14
    		;12,5t	1,57 b	(1,5714285714285714285714285714286)
    
    
    
    ld sp,nnnn	;10	3
    pop hl		;10	1
    pop de		;10	1
    pop bc		;10	1
    pop af		;10	1
    exx		;4	1
    pop hl		;10	1
    pop de		;10	1
    pop bc		;10	1
    pop ix		;14	2
    pop iy		;14	2
    
    ld sp,nnnn	;10	3
    push iy		;15	2
    push ix		;15	2
    push bc		;11	1
    push de		;11	1
    push hl		;11	1
    exx		;4	1
    push af		;11	1
    push bc		;11	1
    push de		;11	1
    push hl		;11	1
    		;233/18	30/18	;1,6666666666666666666666666666667
    		;12,944	1,666	;12,944444444444444444444444444444
    						;21,57.	7,766.	0,1287.
    ;----------------------------------------------------
    - - - Добавлено - - -

    не уверен будет ли это так же для твоего варианта с циклом

    - - - Добавлено - - -

    кстате я тут расписал про радужные перспективы и немножко прозевал
    тк почему то представил кидалку несколько не так...

    можно конечно подумать и все разгребсти и выкрутиться
    на обработчике прерываний стек придется переставлять теперь обязательно (в принципе это элементарно)
    да и наверно понадобиться на обработчике востанавливать поврежденные данные
    и как бы это еще переодически не артифактило

  8. #426
    Member Аватар для Dwa83
    Регистрация
    31.12.2017
    Адрес
    г. Реж
    Сообщений
    155
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    34
    Поблагодарили
    17 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от goodboy Посмотреть сообщение
    как вариант (более медленные) индексные регистры можно использовать для обозначения источника/приёмника
    ld sp,ix ; откуда
    ld sp,iy ; куда

    ну и такты удобнее считать допустим в отладчике unreal`a.
    ставим BreakPoint`ы начало/конец процедуры.
    при срабатывание второго TimeDelta (внизу слева) покажет кол-во тактов между ними
    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    в случае с фиксированными адресами
    использование ix iy не оправданно а только жрет дополнительное время
    Я просто решил, что даже их использование будет быстрее чем ldi с циклом, и чёто не проверил. Да и получилось(за исключением bc, который как раз на счётчик нужен) ровно 16 байт(вдвойне - 32). Насчёт анреала, там разбираться по новой придётся в новом эмуляторе а пока не охота. После того, как пытался доделать игру до 17 числа, мне спек весь моск высосал. Надо отдохнуть, сделать перерыв. Например на 6502 пока переключиться, поразбираться.

    - - - Добавлено - - -

    Интересно как там делали игры(на практике), используя 3 с половиной регистра, хочу компиль доделать всё-таки.

    - - - Добавлено - - -

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    ;самый быстрый вариант
    Я так понимаю это дофига раз повторить надо будет, тогда придётся процедуру пихать в другую страницу, а низя(при работе с переменными экранами), в данный момент мы может быть должны в подключенную страницу и перекидывать. А в основной памяти уже почти места нет.
    У меня прога была с 32768, но место стало поджимать, когда уровни дорисовывать начал(там чем детальнее, тем больше разрастается), передвинул на адрес 25000(ну так, почти наобум), ещё 7кб выкроилось. В итоге при загрузке с 25000 (+18331 байт занимает вся игра с данными) до 43331 игра. 5821 байт ещё осталось, да ито с 48640 идёт таблица адресов прерываний, итого 5309 свободно - развернутая процедура с захардкожеными значениями скорее всего не влезет.

  9. #427
    Banned
    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,841
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    658
    Поблагодарили
    512 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Dwa83, а у тебя бывают ситуации когда перекидывается весь экран без смещения и перерисовки столбцов?

    - - - Добавлено - - -

    Цитата Сообщение от Dwa83 Посмотреть сообщение
    Получается, что медленнее не стало. Мне только казалось. Даже быстрее. Значим мой способ со стеком - кривой-косой, а я криворучка).
    это пушо игры кидающие буфер стеком
    хранят буфер вверх ногами
    и там нет потерь на плюсовании 32

    - - - Добавлено - - -

    в общем я прикинул проще оставить с ldi

    самый легкий вариант по весу будет жрать 15,785714285714285714285714285714 такта / байт
    при этом потребуется 1 байт кода на 1 байт пересылки
    то есть 6К на процедуру а их видимо тебе нужно 2...

    - - - Добавлено - - -

    слегка оптимизировал твою кидалку
    теперь дето 114315
    16,625218150087260034904013961606 такта на байт

    Код:
    		
    	ld	(S_SRC1+1),hl	;16
    	ld	(S_DST1+1),de	;20
    	ld	(SAVE_SP+1),sp	;20
    
    	ld	iyl,191		;11
    
    S_SRC1	ld	sp,0		;10
    	pop	hl		;10
    	pop	de		;10
    	pop	bc		;10
    	pop	af		;10
    
    	exx			;4
    	ex	af,af'		;4
    	
    	pop	hl		;10
    	pop	de		;10
    	pop	bc		;10
    	pop	af		;10
    	
    	pop	ix
    	
    	
    	ld	(S_SRC2+1),sp	;20	=
    	
    S_DST1	ld	sp,0		;10
    
    	push	ix
    	
    	push	af
    	push	bc		;11
    	push	de		;11
    	push	hl		;11
    	
    	ex	af,af'
    	exx			;4
    
    	push	af		;11
    	push	bc		;11
    	push	de		;11
    	push	hl		;11
    
    	ld	hl,36		;10
    	add	hl,sp		;11
    	ld	(S_DST2+1),hl	;16	= 147 | +122 = 269
    	
    S_SRC2	ld	sp,0
    	pop	hl	
    	pop	de	
    	pop	bc
    	pop	af	
    
    	exx	
    	ex	af,af'
    	
    	pop	hl	
    	pop	de	
    	pop	bc	
    	pop	af
    	
    	pop	ix
    	
    	ld	(S_SRC1+1),sp
    	
    S_DST2	ld	sp,0
    
    	push	ix
    	
    	push	af
    	push	bc	
    	push	de	
    	push	hl	
    	
    	ex	af,af'
    	exx	
    
    	push	af	
    	push	bc
    	push	de	
    	push	hl	
    	
    	ld	hl,36
    	add	hl,sp	
    	ld	(S_DST1+1),hl	;269 * 2 = 538
    
    				;551 * 214 + 546 = 118460
    				;+66 = 118526   (17,148 на байт)
    				
    	dec iyl			;8
    	jp nz,	S_SRC1		;10
    	
    SAVE_SP	ld	sp,0
    - - - Добавлено - - -

    но для экономии времени и нервов лучше наверно оставить ldi
    Последний раз редактировалось NEO SPECTRUMAN; 20.11.2020 в 19:20.

  10. #428
    Member Аватар для Dwa83
    Регистрация
    31.12.2017
    Адрес
    г. Реж
    Сообщений
    155
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    34
    Поблагодарили
    17 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Dwa83, а у тебя бывают ситуации когда перекидывается весь экран без смещения и перерисовки столбцов
    только в том случае, когда мы не нажали ни в лево ни в право(есть ещё вариант, когда нажали и влево и вправо, тогда и источник и приёмник сдвинутся на 1, в результате изображение не сдвинется вообще.)

Страница 43 из 43 ПерваяПервая ... 3940414243

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

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

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

Похожие темы

  1. с Днем Программиста!
    от goblinish в разделе Поздравления
    Ответов: 17
    Последнее: 16.09.2015, 02:04
  2. С Днём компьютерщика и программиста !
    от Хорошист в разделе Поздравления
    Ответов: 4
    Последнее: 17.02.2013, 05:54
  3. С Днём компьютерщика и программиста !
    от Хорошист в разделе Новости
    Ответов: 5
    Последнее: 17.02.2013, 05:54
  4. Ищу желающих написать программу для ВИДЕО-игры
    от ALKO в разделе Программирование
    Ответов: 26
    Последнее: 17.02.2012, 15:07

Ваши права

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