А где же твой гениальный метод swapset ? что, и без него может программа работать?
А где же твой гениальный метод swapset ? что, и без него может программа работать?
jim(23.09.2025)
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
а давайте сначала научимся правильно считать
не "~192", а "от 223" (не забываем стоимость вызова + еще, возможно, альтернативные)
не "~150", а может быть и намного меньше (сохранение не сразу, ранние проверки и выход)
эээ, минуточку! как это "несколько раз за программу"?
почему количество переключений "независимо от места" оказалось вдруг НАСТОЛЬКО ограничено?
что за новости, почему ВНЕЗАПНО стало нельзя иметь over 9000 "независимых мест" в секунду??
ломишься в открытую дверь, это всё и так уже есть
продолжение бессмысленной трескотнив каких единицах измеряется "ясность и надёжность архитектуры"?
и да, кстати, di в произвольном месте это лишний риск пропуска прерывания, всякие музончики пострадают - просто охренительная "надёжность"
не откажемся, потому что прерывания бывают нужны и сильно облегчают жизнь программисту, а рандомные мусорные вызовы - не нужны и не облегчают
снова мимо, контролируемые и не каждую
Прихожу без разрешения, сею смерть и разрушение...
Господи, ну что за глупости вы пишете!
Ну во первых Прерывание != сохранение+смена регистров. Обработка прерывания это цельный набор программ обслуживающий периферию и также могущий дополнительно выполнять какие-либо специфические задачи прописанные программистом. И оно запросто может утянуть и 2000 тактов и больше за 1 фрейм и это нормально (Может и меньше конечно, это что подвешено и для чего). Но суть то не в этом, а в том что сравнивать обработку прерывания с локальным сохранением регистров как минимум некорректно.
А во вторых - что значит несколько раз за программу ? Как это вообще согласуется с :
Т.е. скажем в небольшой ассемблерной програмке из 30-40 процедур SwapSet будет использовать максимум штуки 3 и то может быть раза 2 и то врят-ли ? Тогда о какой изоляции, модульности, предсказуемости кода вообще может идти речь, если во всех остальных функциях будут теже самые попы и пуши ?
Чтобы ваша так сказать "цель" выполнялась, больше половины процедур должны задействовать swapset, иначе нет смысла огород вообще городить.
Слишком много пафоса, вы сами пытаетесь доказать недоказуемое, а потом вопите что вас якобы троллят. Вот не надо никому ничего доказывать, не стройте из себя непризнанного гения, пишите реальные программы и всё само докажется, ну или не докажется но по крайней мере станет на свои места. ))
А про умение писать программы напомнило: "Чукча нечитательпрограммист - чукчаписательидеолог программирования"![]()
jim(23.09.2025)
Честно говоря думаю ниппер просто троллит, ну невозможно быть настолько тупым. Зачем тут тоже непонятно, площадка не та, возможно троллинг в телеграмчиках не вывозит. Непонятно только где доблестные бананаторы, перебанившие множество действительно увлеченных спектрумистов, иногда через чур эмоциональных, и не замечающих это. Простыни похожи на чатгпт, только нейросетка может написать что 40 тактов это 20 циклов лдира. Сама тема конечно забавная но никакого отношения к спектруму и к z80 не имеет, чисто стеб.
Мои проекты
Это не страницка в соцюсетях, и не личный канал в телеге, где неугодные посты ты можешь удалить.
Это форум, раз начал тему, будь готов к критике.
Так что с желанием видеть только хвалебные посты от "поклонников" неэффективного метода это не сюда.
Мои проекты
SoftLight(18.09.2025)
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
))Код: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
Прихожу без разрешения, сею смерть и разрушение...
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)