User Tag List

Страница 5 из 8 ПерваяПервая 12345678 ПоследняяПоследняя
Показано с 41 по 50 из 75

Тема: SwapSet

  1. #41

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

    По умолчанию

    Вернемся к сути:
    SwapSet — изоляция регистров на Z80

    Идея эксперимента: реализовать механизм изоляции регистров и создания виртуальных наборов регистров на Z80

    Суть метода:
    • Каждый набор регистров ("сет") хранится в памяти как блок из 8 байт (AF, BC, DE, HL).
    • Команда
      Код:
      SwapSet
      сохраняет текущие значения регистров в активный блок и загружает значения из нового блока.
    • Таким образом, вместо push/pop или обращения к стеку мы получаем мгновенную изоляцию контекстов.


    Плюсы:
    • Неограниченное количество наборов регистров (ограничение только по памяти).
    • Простое переключение между контекстами по имени:
      Код:
      ld ix, SetName
      call SwapSet
    • Локальные регистры изолированы: функция работает в своём наборе, не трогая основной.
    • Возможность прямой передачи аргументов в регистры нового сета без обращения к памяти:
      Код:
      ld ix, FunctionSet
      call SwapSet
      ld hl, arg1
      ld de, arg2
      call Function


    Минусы:
    • Медленнее по тактам, чем классический push/pop.
    • Задействует индексный регистр IX.
    • Увеличенный код вызова (
      Код:
      ld ix, ...; call SwapSet
      ).


    Применимость:
    • Эксперименты с архитектурой Z80.
    • Альтернативное структурирование кода без жёсткой привязки к стеку.
    • Потенциальная основа для байткод-машины с полной изоляцией контекстов.


    Пример использования:
    Код:
    ld ix, MainSet
    call SwapSet         ; активируем основной набор
    
    ld ix, FunctionSet
    call SwapSet         ; переключаемся на набор функции
    ld hl, arg1
    ld de, arg2
    call Function        ; вызов функции с аргументами в регистрах
    
    ld ix, MainSet
    call SwapSet         ; возвращаемся к основному набору
    Последний раз редактировалось jim; 23.09.2025 в 20:19.
    Like a bright light on the ХORIZON
    Shining so bright, he'll get you flying

  2. #42

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

    По умолчанию

    товарищ ниппер, смотрите, пока не касаемся факта что свя эта тема бред. В начале вам культурно намекали что функционал бесполезен чуть более чем полностью, культурно так как умение расставлять команды в рабочие (но не всегда нужные) последовательности это уважаемый всеми скилл. Но вы упорно, в припадке маниакального бреда, пытаетесь доказать что белое это фиолетовое. Отсюда и реакция, вы просто всем доказали что ничего тяжелее... ничего сложнее примеров из как написать игру 92года не писали. Остановитесь, ладно я известный кретин и бездельник, вялый тоже не особо продуктивен, но LW это авторитет для всех тут, поверьте у него релиженого кода нам столько за всю пенсию не написать. Прислушайтесь что говорят люди с опытом, гланды через горло не просто так вырезают сотни лет.

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

    LW(16.09.2025)

  3. #43

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

    По умолчанию

    ладно, понятно, никогда не сдавайся, позорься до конца!

  4. #44

    Регистрация
    26.09.2009
    Адрес
    г. Красноярск
    Сообщений
    3,198
    Спасибо Благодарностей отдано 
    40
    Спасибо Благодарностей получено 
    128
    Поблагодарили
    103 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jim Посмотреть сообщение
    Любой нестандартный подход рассматривается как ересь, людьми которые привыкли писать в своей парадигме.
    Я не критикую классические стандартные подходы, я лишь попытался предложить поэкспериментировать, сломать косность и включить фантазию.
    С подключением!
    Программно-аппаратная архитектура z80 (ноги которого растут из i8080) в целом, и zx-spectrum в частности - не особо располагает к параллельному программированию.
    Максимум - квазипараллельная многозадачность, за счёт прерываний. Где сама висящая на этом прерывании программа, должна заботиться о сохранении/восстановлении набора регистров, которые она использует при своем выполнении.
    ....
    Очевидной наглядности и удобства, хранение значений в виртуальных наборах регистров - я не вижу. Банальная задача обмена данными между значениями виртуальных регистров из разных наборов - превращается в перекладывание из одного кармана в другой.
    Суета - ради суеты.
    Когда есть, но не знаешь где - это все равно, что нету.

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

    jim(16.09.2025)

  5. #45

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

    По умолчанию

    Цитата Сообщение от null_device Посмотреть сообщение
    С подключением!
    Программно-аппаратная архитектура z80 (ноги которого растут из i8080) в целом, и zx-spectrum в частности - не особо располагает к параллельному программированию.
    Максимум - квазипараллельная многозадачность, за счёт прерываний. Где сама висящая на этом прерывании программа, должна заботиться о сохранении/восстановлении набора регистров, которые она использует при своем выполнении.
    ....
    Очевидной наглядности и удобства, хранение значений в виртуальных наборах регистров - я не вижу. Банальная задача обмена данными между значениями виртуальных регистров из разных наборов - превращается в перекладывание из одного кармана в другой.
    Суета - ради суеты.
    Вот это уже по существу! )) Спасибо!

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

    А как насчет подхода, не как к многозадачности, а именно изоляции регистров для каждого участника вычислений (функции или даже методы, локальные переменные)? Для всех юнитов свой собственный набор изолированный от других, именно когда возникает необходимость обмена данными и появляется "перекладывание из кармана в карман".

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

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

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

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

    В обычном коде на Z80:

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

    Если регистров мало, приходится тщательно следить, кто что использует — легко ошибиться.

    С изолированными функциями:

    Каждая функция имеет свой виртуальный набор регистров, например блок памяти на 8 байт для AF, BC, DE, HL.

    При входе в функцию выполняется SwapSet — текущие регистры сохраняются в активный набор, загружаются регистры функции.

    Функция работает так, будто у неё есть собственные регистры, полностью независимые от остального кода.

    После завершения вызывается обратный SwapSet — регистры возвращаются в прежнее состояние.

    Плюсы такого подхода

    Изоляция: Никакие изменения внутри функции не трогают регистры других функций.

    Чистый код: Нет постоянного PUSH/POP внутри функций, код проще читать.

    Предсказуемость: Функция полностью управляет своим контекстом.

    Модульность: Легко переносить функции в другие проекты, не ломая основной код.

    Минусы

    Скорость: Переключение контекста через SwapSet медленнее обычного PUSH/POP.

    Память: Каждый набор регистров занимает место в RAM.

    Управление: Нужно продумывать, как передавать данные между контекстами.

    Применение

    Сложные процедуры, где важна чистота кода, а не каждый такт.

    Функции с большим количеством локальных данных (например, игровые объекты или драйверы устройств).

    Экспериментальные архитектуры на Z80, прототипы байткод-машин с изоляцией контекстов.

    Проще говоря: это как иметь свои «личные регистры» для каждой функции, почти как классы на Z80, только без полноценного ООП.

    P.S.
    Подумал как раз: Изолированная функция не обязана возвращать результат. Это может быть функционал "под капотом". К примеру как функция ядра. Она работает но мы видим эту работу лишь косвенно.
    Последний раз редактировалось jim; 17.09.2025 в 00:50.
    Like a bright light on the ХORIZON
    Shining so bright, he'll get you flying

  6. #46

    Регистрация
    20.12.2006
    Адрес
    Minsk
    Сообщений
    375
    Спасибо Благодарностей отдано 
    24
    Спасибо Благодарностей получено 
    28
    Поблагодарили
    22 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от null_device Посмотреть сообщение
    Максимум - квазипараллельная многозадачность, за счёт прерываний. Где сама висящая на этом прерывании программа, должна заботиться о сохранении/восстановлении набора регистров, которые она использует при своем выполнении.




    Рабочий вариант - делал для AVR когда-то очень давно на ассемблере - работало как часики)))

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

    jim(17.09.2025)

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

  8. #47

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

    По умолчанию

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

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

    Цитата Сообщение от jim Посмотреть сообщение
    Применимость:

    Эксперименты с архитектурой Z80.
    Альтернативное структурирование кода без жёсткой привязки к стеку.
    Потенциальная основа для байткод-машины с полной изоляцией контекстов.
    Архитектуру Z80 вы ни на грамм не изменили увы. Привязка к стеку чуть уменьшилась, но цена пока что великовата будет. Байт-код машина - кто и зачем её делать будет и как бы при таком раскладе её бейсик по эффективности не превзошёл, но тут конечно только код покажет которого нет.

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

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

    jim(17.09.2025)

  9. #48

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

    По умолчанию

    Цитата Сообщение от Dart Alver Посмотреть сообщение
    Так по сути то и обсудили - идея не пошла в массы ))
    а я бы так не сказал. (тролли - это не массы). но мы еще увидим

    Цитата Сообщение от Dart Alver Посмотреть сообщение
    Эксперименты это хорошо, но они однако требуют какого-то результата. Пока результат никакой.
    хотя бы концепция изолированных функций. осталось проверить на практике )


    Цитата Сообщение от Dart Alver Посмотреть сообщение
    Архитектуру Z80 вы ни на грамм не изменили увы. Привязка к стеку чуть уменьшилась, но цена пока что великовата будет. Байт-код машина - кто и зачем её делать будет и как бы при таком раскладе её бейсик по эффективности не превзошёл, но тут конечно только код покажет которого нет.
    байткод машину я уже разрабатываю. есть старый прототип и он явно быстрее BASIC. архитектуру железо я и не претендую изменить, можно изменить лишь традиционный подход.


    Цитата Сообщение от Dart Alver Посмотреть сообщение
    Пока что вы из кармана в карман из поста в пост перекладываете одни и те же аргументы и один и тот же код. Развития не наблюдается , библиотеки тоже. Будет что-либо весомое в формате кода, тогда и можно будет обсуждать, а пока это рассуждение на тему как запрячь в сани сферического коня в вакууме, если конь воображаемый а сани нарисованные ))
    сам код очень простой. единственно что можно уже будет добавить примеры с теми же функциями. ну возможно я или кто то оптимизирует SwapSet который все так ругают за прожорливость))

    В любом случае, спасибо огромное за внимание к проекту!)
    Последний раз редактировалось jim; 17.09.2025 в 02:41.
    Like a bright light on the ХORIZON
    Shining so bright, he'll get you flying

  10. #49

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

    По умолчанию

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

  11. #50

    Регистрация
    26.09.2009
    Адрес
    г. Красноярск
    Сообщений
    3,198
    Спасибо Благодарностей отдано 
    40
    Спасибо Благодарностей получено 
    128
    Поблагодарили
    103 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jim Посмотреть сообщение
    .В обычном коде на Z80:

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

    Если регистров мало, приходится тщательно следить, кто что использует — легко ошибиться.

    С изолированными функциями:

    Каждая функция имеет свой виртуальный набор регистров, например блок памяти на 8 байт для AF, BC, DE, HL.

    При входе в функцию выполняется SwapSet — текущие регистры сохраняются в активный набор, загружаются регистры функции.

    Функция работает так, будто у неё есть собственные регистры, полностью независимые от остального кода.

    После завершения вызывается обратный SwapSet — регистры возвращаются в прежнее состояние.
    Если мне не изменяет склероз, под капотом з80 - имеется штатный функционал для переключения на встроенный в чип, альтернативный набор регистров, и обратно (две команды на ассемблере).
    Для большинства задач - этого более чем, достаточно.
    Когда есть, но не знаешь где - это все равно, что нету.

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

    jim(23.09.2025)

Страница 5 из 8 ПерваяПервая 12345678 ПоследняяПоследняя

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

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

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

Ваши права

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