С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Если честно, тоже думаю что довольно таки редко-нужная вещь, но раз выбралось чуток ненужного времени, добавлю прожорливый по памяти и тактам вариант, который не ломает стек и соответственно не требует запрета прерываний и не занимает ix.
Минус - много места на каждый слот (програмка) и для сохранения полного регистра AF тратит больше тактов, но если сохранять только A без флагов, то даже меньше чуть (если учитывать инициацию IX).
Проверять лень, могу и ошибаться.Код:sl_end jp .ret ; 10 .ret ret ; начальный переход на команду RET ; нужен для первого запуска ; макросы создания слотов - каждый слот - программа MACRO reg_slotF ; AF,HL,DE,BC call sl_end ; 17+10+103 ld hl,.sv ; 10 ld (sl_end+1),hl ; 16 1 ld hl,#0000 ; af ; 10 push hl ; 11 2 ld hl,#0000 ; 10 3 ld de,#0000 ; 10 4 ld bc,#0000 ; 10 pop af ; 10 ret ; 10 / 227 .sv ld (2_B+1),hl ; 16 push af ; 11 pop hl ; 10 ld (1_B+1),hl ; af ; 16 ld (3_B+1),de ; 20 ld (4_B+1),bc ; 20 ret ; 10 /103 ENDM ; 41 bytes for slot , 227 cycles MACRO reg_slot ; A,HL,DE,BC call sl_end ; 17+10+79 ld hl,.sv ; 10 ld (sl_end+1),hl ; 16 1 ld a,#00 ; 7 2 ld hl,#0000 ; 10 3 ld de,#0000 ; 10 4 ld bc,#0000 ; 10 ret ; 10 / 179 .sv ld (1_B+1),a ; 13 ld (2_B+1),hl ; 16 ld (3_B+1),de ; 20 ld (4_B+1),bc ; 20 ret ; 10 /79 ENDM ; 36 bytes for slot , 179 cycles ;; пример использования ; создание слотов sl1 reg_slotF sl2 reg_slot sl3 reg_slot ; первичное заполнение (если нужно) - не переключает слот, портит hl для режима с AF ... call sl1.sv ... call sl2.sv ... call sl3.sv ... ; переключение на слот ... call sl1 ; 17 + 227 = 244 cycles ... call sl3 ; 17 + 179 = 196 cycles ...
p.s. Да, при первичном заполнении HL портится ))
p.s.2. Ага, обшибся таки !!!- вроде поправил, но это не точно )
p.s.3. Точно неточно. Смещения попутал. Ещё раз поправил ))
Последний раз редактировалось Dart Alver; 07.09.2025 в 20:30. Причина: опять поправил
jim(07.09.2025)
Не очень понял. Вызов слота записывает текущие значения в программу текущего слота и вызывает значения из выбранного. Методом слот.sv можно записать текущие значения регистров в программу нужного слота не меняя текущего, но текущий hl - портится для варианта с сохранением флагов.
Ну так должно работать если я опять не ошибся ))
jim(23.09.2025)
Согласен что редко ) Но имеет право быть. Просто попробовать писать в таком стиле и применение найдется.
Заманчиво иметь неограниченное количество регистров ))
К примеру:
Имеем N экземпляров объектов которые нужно изменять на протяжении времени
Основной цикл
{
set1 ; состояние 1
; какие то изменения
...
setN ; состояние N
; аналогично
}
Последний раз редактировалось jim; 07.09.2025 в 17:55.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)