User Tag List

Страница 6 из 8 ПерваяПервая ... 2345678 ПоследняяПоследняя
Показано с 51 по 60 из 75

Тема: SwapSet

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    05.06.2022
    Адрес
    г. Минск, Беларусь
    Сообщений
    27
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    9
    Поблагодарили
    7 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А где же твой гениальный метод swapset ? что, и без него может программа работать?

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

    jim(23.09.2025)

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

  3. #2

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,963
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    319
    Спасибо Благодарностей получено 
    312
    Поблагодарили
    236 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jim Посмотреть сообщение
    Давайте посмотрим на цифры.
    а давайте сначала научимся правильно считать

    Цитата Сообщение от jim Посмотреть сообщение
    1. Разовый overhead
    Параметр Прерывание SwapSet
    Время переключения ~150 тактов ~192 такта
    не "~192", а "от 223" (не забываем стоимость вызова + еще, возможно, альтернативные)
    не "~150", а может быть и намного меньше (сохранение не сразу, ранние проверки и выход)

    Цитата Сообщение от jim Посмотреть сообщение
    2. Суммарный overhead
    Параметр Прерывание SwapSet
    Частота вызова 50 раз/сек (кадр) или 1000+ раз/сек (таймер) Несколько раз за программу
    Суммарные траты 7 500 тактов/сек (50 Гц) или 150 000 тактов/сек (1 кГц) ~1000 тактов за всё время работы

    Здесь всё очевидно: прерывания стабильно «съедают» тысячи тактов каждую секунду, SwapSet же — копейки за весь прогон программы.
    эээ, минуточку! как это "несколько раз за программу"?
    почему количество переключений "независимо от места" оказалось вдруг НАСТОЛЬКО ограничено?
    что за новости, почему ВНЕЗАПНО стало нельзя иметь over 9000 "независимых мест" в секунду??

    Цитата Сообщение от jim Посмотреть сообщение
    Цель SwapSet
    SwapSet — не для tight loop и не для экономии каждого такта. Его задача:
    • изолировать функции друг от друга;
    • дать каждой задаче «свои регистры»;
    • сделать код предсказуемым и модульным.
    ломишься в открытую дверь, это всё и так уже есть

    Цитата Сообщение от jim Посмотреть сообщение
    Цена в 192 такта оправдана, если цель — ясность и надёжность архитектуры.
    продолжение бессмысленной трескотни в каких единицах измеряется "ясность и надёжность архитектуры"?
    и да, кстати, di в произвольном месте это лишний риск пропуска прерывания, всякие музончики пострадают - просто охренительная "надёжность"

    Цитата Сообщение от jim Посмотреть сообщение
    Если 192 такта в SwapSet — это «слишком дорого», тогда давайте для честности все дружно откажемся и от прерываний.
    не откажемся, потому что прерывания бывают нужны и сильно облегчают жизнь программисту, а рандомные мусорные вызовы - не нужны и не облегчают

    Цитата Сообщение от jim Посмотреть сообщение
    Ведь там вообще неконтролируемые тысячи тактов уходят каждую секунду.
    снова мимо, контролируемые и не каждую
    Прихожу без разрешения, сею смерть и разрушение...

  4. #3

    Регистрация
    10.01.2010
    Адрес
    Смоленская обл.
    Сообщений
    556
    Спасибо Благодарностей отдано 
    187
    Спасибо Благодарностей получено 
    197
    Поблагодарили
    100 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jim Посмотреть сообщение
    2. Суммарный overhead
    Параметр Прерывание SwapSet
    Частота вызова 50 раз/сек (кадр) или 1000+ раз/сек (таймер) Несколько раз за программу
    Суммарные траты 7 500 тактов/сек (50 Гц) или 150 000 тактов/сек (1 кГц) ~1000 тактов за всё время работы

    Здесь всё очевидно: прерывания стабильно «съедают» тысячи тактов каждую секунду, SwapSet же — копейки за весь прогон программы.
    Господи, ну что за глупости вы пишете!

    Ну во первых Прерывание != сохранение+смена регистров. Обработка прерывания это цельный набор программ обслуживающий периферию и также могущий дополнительно выполнять какие-либо специфические задачи прописанные программистом. И оно запросто может утянуть и 2000 тактов и больше за 1 фрейм и это нормально (Может и меньше конечно, это что подвешено и для чего). Но суть то не в этом, а в том что сравнивать обработку прерывания с локальным сохранением регистров как минимум некорректно.

    А во вторых - что значит несколько раз за программу ? Как это вообще согласуется с :
    Цитата Сообщение от jim Посмотреть сообщение
    4. Цель SwapSet
    SwapSet — не для tight loop и не для экономии каждого такта. Его задача:
    • изолировать функции друг от друга;
    • дать каждой задаче «свои регистры»;
    • сделать код предсказуемым и модульным.

    Цена в 192 такта оправдана, если цель — ясность и надёжность архитектуры.
    Т.е. скажем в небольшой ассемблерной програмке из 30-40 процедур SwapSet будет использовать максимум штуки 3 и то может быть раза 2 и то врят-ли ? Тогда о какой изоляции, модульности, предсказуемости кода вообще может идти речь, если во всех остальных функциях будут теже самые попы и пуши ?
    Чтобы ваша так сказать "цель" выполнялась, больше половины процедур должны задействовать swapset, иначе нет смысла огород вообще городить.

    Цитата Сообщение от jim Посмотреть сообщение
    давайте, я не буду ничего доказывать вам. если вопрос в моем умении/неумении писать программы то вам не сюда. здесь мой ислледовательский проект. если есть что предложить, милости просим. а устраивать баттлы программистов, можете для этого создать свою отдельную тему.
    Слишком много пафоса, вы сами пытаетесь доказать недоказуемое, а потом вопите что вас якобы троллят. Вот не надо никому ничего доказывать, не стройте из себя непризнанного гения, пишите реальные программы и всё само докажется, ну или не докажется но по крайней мере станет на свои места. ))

    А про умение писать программы напомнило: "Чукча не читатель программист - чукча писатель идеолог программирования"

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

    jim(23.09.2025)

  5. #4

    Регистрация
    31.01.2007
    Адрес
    Москва
    Сообщений
    810
    Спасибо Благодарностей отдано 
    11
    Спасибо Благодарностей получено 
    77
    Поблагодарили
    59 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Честно говоря думаю ниппер просто троллит, ну невозможно быть настолько тупым. Зачем тут тоже непонятно, площадка не та, возможно троллинг в телеграмчиках не вывозит. Непонятно только где доблестные бананаторы, перебанившие множество действительно увлеченных спектрумистов, иногда через чур эмоциональных, и не замечающих это. Простыни похожи на чатгпт, только нейросетка может написать что 40 тактов это 20 циклов лдира. Сама тема конечно забавная но никакого отношения к спектруму и к z80 не имеет, чисто стеб.

  6. #5

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,963
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    319
    Спасибо Благодарностей получено 
    312
    Поблагодарили
    236 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от krt17 Посмотреть сообщение
    Честно говоря думаю ниппер просто троллит, ну невозможно быть настолько тупым. Зачем тут тоже непонятно, площадка не та,
    или же платформа не та - полагаю, что столь нестандартно-сумрачный гений больше пригодился бы на БК
    Прихожу без разрешения, сею смерть и разрушение...

  7. #6

    Регистрация
    05.09.2007
    Адрес
    Орск
    Сообщений
    1,071
    Спасибо Благодарностей отдано 
    269
    Спасибо Благодарностей получено 
    1,245
    Поблагодарили
    370 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    вот опять
    про лдир тс оперативно удалил строчку из своего поста

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

    Цитата Сообщение от krt17 Посмотреть сообщение
    Простыни похожи на чатгпт
    чуть другой чат бот, но сути не меняет
    Цитата Сообщение от jim Посмотреть сообщение
    Ради прикола попросил LeChat придумать применение моему методу. Потом просто передумал публиковать.

  8. #7

    Регистрация
    05.09.2007
    Адрес
    Орск
    Сообщений
    1,071
    Спасибо Благодарностей отдано 
    269
    Спасибо Благодарностей получено 
    1,245
    Поблагодарили
    370 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Это не страницка в соцюсетях, и не личный канал в телеге, где неугодные посты ты можешь удалить.
    Это форум, раз начал тему, будь готов к критике.

    Так что с желанием видеть только хвалебные посты от "поклонников" неэффективного метода это не сюда.

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

    SoftLight(18.09.2025)

  9. #8

    Регистрация
    31.03.2005
    Адрес
    Новосибирская область
    Сообщений
    128
    Спасибо Благодарностей отдано 
    28
    Спасибо Благодарностей получено 
    8
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Just for those who are interested!
    Bots (Haters), please do not disturb!!!


    Код:
    ////	ExtSwapSet.asm
    //	v.2.0
    //	9/21/2025
    //
    //	Needs 8 bytes per structure:
    //
    //	RegSet	dw	0	//AF
    //		dw	0	//BC
    //		dw	0	//DE
    //		dw	0	//HL
    //	End
    //
    //	The CurrentSet variable must be initialized
    //	prior to first use for the mechanism to function correctly.
    //
    
    InitSwapSet
    	ld	ix,RegSet0+8
    	ld	(CurrentSet),ix
    	ld	ix,RegSet0
    
    //in ix- register set address
    
    SwitchContext
    SwapSet	di
    	ld	(StoreSP),sp
    //SaveSet
    	ld	sp,(CurrentSet)	// Current Set StackEnd
    	push	hl
    	push	de
    	push	bc
    	push	af
    //LoadSet
    	ld	sp,ix		//Address New Set
    	pop	af
    	pop	bc
    	pop	de
    	pop	hl
    	ld	(CurrentSet),sp
    
    	ld	sp,(StoreSP)
    	ei
    	ret
    
    //------------------------------------------------
    
    SwapSet0	ld	ix,RegSet0
    	jr	SwapSet
    
    SwapSet1	ld	ix,RegSet1
    	jr	SwapSet
    
    SwapSet2	ld	ix,RegSet2
    	jr	SwapSet
    
    SwapSet3	ld	ix,RegSet3
    	jr	SwapSet
    
    
    //------------------------------------------------
    //Setters:
    
    PutA	ld	(ix+1),a
    	ret
    
    PutBC	ld	(ix+2),c
    	ld	(ix+3),b
    	ret
    
    PutDE	ld	(ix+4),e
    	ld	(ix+5),d
    	ret
    
    PutHL	ld	(ix+6),l
    	ld	(ix+7),h
    	ret
    
    //---------------------------------------
    	MACRO	Put_A
    	ld	(ix+1),a
    	ENDM
    
    	MACRO	Put_B
    	ld	(ix+3),b
    	ENDM
    
    	MACRO	Put_C
    	ld	(ix+2),c
    	ENDM
    
    	MACRO	Put_D
    	ld	(ix+5),d
    	ENDM
    
    	MACRO	Put_E
    	ld	(ix+4),e
    	ENDM
    
    	MACRO	Put_H
    	ld	(ix+7),h
    	ENDM
    
    	MACRO	Put_L
    	ld	(ix+6),l
    	ENDM
    
    	MACRO	Put_BC
    	ld	(ix+3),b
    	ld	(ix+2),c
    	ENDM
    
    	MACRO	Put_DE
    	ld	(ix+5),d
    	ld	(ix+4),e
    	ENDM
    
    	MACRO	Put_HL
    	ld	(ix+7),h
    	ld	(ix+6),l
    	ENDM
    
    //---------------------------------------
    
    //Getters:
    
    GetA	ld	a,(ix+1)
    	ret
    
    GetBC	ld	c,(ix+2)
    	ld	b,(ix+3)
    	ret
    
    GetDE	ld	e,(ix+4)
    	ld	d,(ix+5)
    	ret
    
    GetHL	ld	l,(ix+6)
    	ld	h,(ix+7)
    	ret
    //---------------------------------------
    
    	MACRO	Get_A
    	ld	a,(ix+1)
    	ENDM
    
    	MACRO	Get_B
    	ld	b,(ix+3)
    	ENDM
    
    	MACRO	Get_C
    	ld	c,(ix+2)
    	ENDM
    
    	MACRO	Get_D
    	ld	d,(ix+5)
    	ENDM
    
    	MACRO	Get_E
    	ld	e,(ix+4)
    	ENDM
    
    	MACRO	Get_H
    	ld	h,(ix+7)
    	ENDM
    
    	MACRO	Get_L
    	ld	l,(ix+6)
    	ENDM
    
    	MACRO	Get_BC
    	ld	b,(ix+3)
    	ld	c,(ix+2)
    	ENDM
    
    	MACRO	Get_DE
    	ld	d,(ix+5)
    	ld	e,(ix+4)
    	ENDM
    
    	MACRO	Get_HL
    	ld	h,(ix+7)
    	ld	l,(ix+6)
    	ENDM
    
    //---------------------------------------
    Init
    SaveSet	ld	(ix+0),0
    	ld	(ix+1),a
    	ld	(ix+2),c
    	ld	(ix+3),b
    	ld	(ix+4),e
    	ld	(ix+5),d
    	ld	(ix+6),l
    	ld	(ix+7),h
    	ret
    //---------------------------------------
    Return
    LoadSet	di
    	ld	(StoreSP),sp
    	ld	sp,ix
    	pop	af
    	pop	bc
    	pop	de
    	pop	hl
    	ld	sp,(StoreSP)
    	ei
    	ret
    
    Return2
    LoadSet2	ld	a,(ix+1)
    	ld	c,(ix+2)
    	ld	b,(ix+3)
    	ld	e,(ix+4)
    	ld	d,(ix+5)
    	ld	l,(ix+6)
    	ld	h,(ix+7)
    	ret
    
    StoreSP	dw	0
    CurrentSet	dw	RegSet0+8
    
    //---------------------------------------
    RegSet0	dw	0	//AF
    	dw	0	//BC
    	dw	0	//DE
    	dw	0	//HL
    
    RegSet1	ds	8
    RegSet2	ds	8
    RegSet3	ds	8
    Код:
    	org	0x8000
    
    	jp	main
    
    	include	"conio32.asm"
    	include	"math.asm"
    	include	"ExtSwapSet.asm"
    fnt	incbin	"slim.fnt"
    
    //Isolated putch:
    
    IPutch	push	af
    	push	bc
    	push	de
    	push	hl
    	call	putch
    	pop	hl
    	pop	de
    	pop	bc
    	pop	af
    	ret
    
    
    //---------------------------------------
    
    main	ld	hl,fnt
    	call	setfont
    	ld	a,0x07
    	call	setcolor
    	call	clrscr
    
    
    	ld	a,"A"
    	ld	b,"B"
    	ld	c,"C"
    	ld	d,"D"
    	ld	e,"E"
    	ld	h,"H"
    	ld	l,"L"
    	ld	ix,TestSet1
    	call	SaveSet
    
    	ld	a,"0"
    	ld	b,"1"
    	ld	c,"2"
    	ld	d,"3"
    	ld	e,"4"
    	ld	h,"5"
    	ld	l,"6"
    	ld	ix,TestSet2
    	call	SaveSet
    
    //Print Registers
    //Classical solution:
    
    //A
    	call	IPutch
    //B
    	ld	a,b
    	call	IPutch
    //C
    	ld	a,c
    	call	IPutch
    //D
    	ld	a,d
    	call	IPutch
    //E
    	ld	a,e
    	call	IPutch
    //H
    	ld	a,h
    	call	IPutch
    //L
    	ld	a,l
    	call	IPutch
    	call	putcr
    
    
    //Print Registers
    //SwapSet method:
    
    	ld	ix,TestSet1
    //A
    	call	LoadSet
    	call	putch
    //B
    	call	LoadSet
    	ld	a,b
    	call	putch
    //C
    	call	LoadSet
    	ld	a,c
    	call	putch
    //D
    	call	LoadSet
    	ld	a,d
    	call	putch
    //E
    	call	LoadSet
    	ld	a,e
    	call	putch
    //H
    	call	LoadSet
    	ld	a,h
    	call	putch
    //L
    	call	LoadSet
    	ld	a,l
    	call	putch
    	call	putcr
    
    
    	ld	ix,TestSet2
    	call	LoadSet
    
    
    //Print Registers
    //Using Getters:
    
    	ld	ix,TestSet1
    //A
    	call	GetA
    	call	putch
    //B
    	call	GetBC
    	ld	a,b
    	call	putch
    //C
    	call	GetBC
    	ld	a,c
    	call	putch
    //D
    	call	GetDE
    	ld	a,d
    	call	putch
    //E
    	call	GetDE
    	ld	a,e
    	call	putch
    //H
    	call	GetHL
    	ld	a,h
    	call	putch
    //L
    	call	GetHL
    	ld	a,l
    	call	putch
    	call	putcr
    
    //Print Registers
    //Using Macro for Getters:
    
    	ld	ix,TestSet2
    //A
    	Get_A
    	call	putch
    //B
    	Get_B
    	ld	a,b
    	call	putch
    //C
    	Get_C
    	ld	a,c
    	call	putch
    //D
    	Get_D
    	ld	a,d
    	call	putch
    //E
    	Get_E
    	ld	a,e
    	call	putch
    //H
    	Get_H
    	ld	a,h
    	call	putch
    //L
    	Get_L
    	ld	a,l
    	call	putch
    	call	putcr
    
    	ret
    
    
    //Sets
    TestSet1	ds	8
    TestSet2	ds	8
    Последний раз редактировалось jim; 21.09.2025 в 16:47.
    Like a bright light on the ХORIZON
    Shining so bright, he'll get you flying

  10. #9

    Регистрация
    31.03.2005
    Адрес
    Новосибирская область
    Сообщений
    128
    Спасибо Благодарностей отдано 
    28
    Спасибо Благодарностей получено 
    8
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Код:
    	org	0x8000
    
    	jp	main
    
    	include	"conio32.asm"
    	include	"math.asm"
    	include	"ExtSwapSet.asm"
    fnt	incbin	"slim.fnt"
    
    //---------------------------------------
    
    main	ld	hl,fnt
    	call	setfont
    	ld	a,0x07
    	call	setcolor
    	call	clrscr
    
    
    	ld	a,"H"
    	ld	b,"E"
    	ld	c,"L"
    	ld	d,"L"
    	ld	e,"O"
    	ld	ix,TestSet1
    	call	SaveSet
    
    	ld	a,"W"
    	ld	b,"O"
    	ld	c,"R"
    	ld	d,"L"
    	ld	e,"D"
    	ld	h,"!"
    	ld	ix,TestSet2
    	call	SaveSet
    
    //Print Registers
    //Using Macro for Getters:
    
    	ld	ix,TestSet1
    //A
    	Get_A
    	call	putch
    //B
    	Get_B
    	ld	a,b
    	call	putch
    //C
    	Get_C
    	ld	a,c
    	call	putch
    //D
    	Get_D
    	ld	a,d
    	call	putch
    //E
    	Get_E
    	ld	a,e
    	call	putch
    	call	putcr
    
    
    	ld	ix,TestSet2
    //A
    	Get_A
    	call	putch
    //B
    	Get_B
    	ld	a,b
    	call	putch
    //C
    	Get_C
    	ld	a,c
    	call	putch
    //D
    	Get_D
    	ld	a,d
    	call	putch
    //E
    	Get_E
    	ld	a,e
    	call	putch
    //H
    	Get_H
    	ld	a,h
    	call	putch
    	call	putcr
    
    	ret
    
    
    //Sets
    TestSet1	ds	8
    TestSet2	ds	8
    ))
    Последний раз редактировалось jim; 23.09.2025 в 19:27.
    Like a bright light on the ХORIZON
    Shining so bright, he'll get you flying

  11. #10

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,963
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    319
    Спасибо Благодарностей получено 
    312
    Поблагодарили
    236 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Прихожу без разрешения, сею смерть и разрушение...

    Эти 3 пользователя(ей) поблагодарили Lethargeek за это полезное сообщение:

    cafedead(24.09.2025), jerri(22.09.2025), SoftLight(21.09.2025)

Страница 6 из 8 ПерваяПервая ... 2345678 ПоследняяПоследняя

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

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

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

Ваши права

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