User Tag List

Показано с 1 по 10 из 75

Тема: SwapSet

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

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

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

    По умолчанию

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

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

  3. #2

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

    По умолчанию

    Если честно, тоже думаю что довольно таки редко-нужная вещь, но раз выбралось чуток ненужного времени, добавлю прожорливый по памяти и тактам вариант, который не ломает стек и соответственно не требует запрета прерываний и не занимает 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. Причина: опять поправил

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

    jim(07.09.2025)

  4. #3

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

    По умолчанию

    Цитата Сообщение от Dart Alver Посмотреть сообщение
    добавлю прожорливый по памяти и тактам вариант, который не ломает стек и соответственно не требует запрета прерываний и не занимает ix.
    Классный подход с самомодификацией! )) Мне нравится.
    Я так понимаю слоты можно переиспользовать изменяя значения в регистрах?
    Последний раз редактировалось jim; 21.09.2025 в 12:43.

  5. #4

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

    По умолчанию

    Цитата Сообщение от jim Посмотреть сообщение
    Я так понимаю слоты можно переиспользовать изменяя значения в регистрах?
    Не очень понял. Вызов слота записывает текущие значения в программу текущего слота и вызывает значения из выбранного. Методом слот.sv можно записать текущие значения регистров в программу нужного слота не меняя текущего, но текущий hl - портится для варианта с сохранением флагов.
    Ну так должно работать если я опять не ошибся ))

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

    jim(23.09.2025)

  6. #5

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

    По умолчанию

    Цитата Сообщение от Dart Alver Посмотреть сообщение
    но текущий hl - портится для варианта с сохранением флагов.
    Поэтому я пожертвовал ix для чистой записи состояния в сет.
    Можно еще расширить вариант и записывать вторые наборы ex af, af'/exx
    но это добавит тактов соответственно
    Последний раз редактировалось jim; 07.09.2025 в 17:35.

  7. #6

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

    По умолчанию

    Цитата Сообщение от jim Посмотреть сообщение
    Поэтому я пожертвовал ix для чистой записи состояния в сет.
    ну в моём случае это решается просто:

    push hl
    call слот.sv
    pop hl

    Цитата Сообщение от jim Посмотреть сообщение
    Можно еще расширить вариант и записывать вторые наборы ex af, af'/exx
    но это добавит тактов соответственно
    Оно даже этот вариант редко кому нужен, другие уж точно исключительно по необходимости.

  8. #7

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

    По умолчанию

    Согласен что редко ) Но имеет право быть. Просто попробовать писать в таком стиле и применение найдется.
    Заманчиво иметь неограниченное количество регистров ))
    К примеру:
    Имеем N экземпляров объектов которые нужно изменять на протяжении времени
    Основной цикл
    {
    set1 ; состояние 1
    ; какие то изменения
    ...
    setN ; состояние N
    ; аналогично
    }
    Последний раз редактировалось jim; 07.09.2025 в 17:55.

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

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

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

Ваши права

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