Важная информация

User Tag List

Страница 9 из 10 ПерваяПервая ... 5678910 ПоследняяПоследняя
Показано с 81 по 90 из 99

Тема: Вызов функций через RST

  1. #81
    Activist Аватар для captain cobalt
    Регистрация
    13.03.2005
    Адрес
    Пермь
    Сообщений
    294
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Дополнительные идеи:

    1. Добавить в модуль директивы выравнивания, чтобы он загружался например по адресу кратному 256.

    2. Пропатчивать не только непосредственными значениями, но и значениями, преобразованными по формуле. Формулы записывать в объектный файл модуля в обратной польской записи.

  2. #82
    Veteran Аватар для GriV
    Регистрация
    18.02.2005
    Адрес
    Набережные Челны
    Сообщений
    1,574
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от captain cobalt
    Дополнительные идеи:

    1. Добавить в модуль директивы выравнивания, чтобы он загружался например по адресу кратному 256.

    2. Пропатчивать не только непосредственными значениями, но и значениями, преобразованными по формуле. Формулы записывать в объектный файл модуля в обратной польской записи.
    Лучше это в отдельный тред отправить.
    Биты рулят лучше байтов, байты рулят шустрее!
    View, Звук, Цвет

  3. #83
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,259
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    85
    Поблагодарили
    36 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    2fk0. не буду тянуть баян с цитатами-ответами, влом. GriV можно сказать выразил витавшие в моем котелки мысли.

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



    Цитата Сообщение от captain cobalt
    Дополнительные идеи:

    1. Добавить в модуль директивы выравнивания, чтобы он загружался например по адресу кратному 256.

    2. Пропатчивать не только непосредственными значениями, но и значениями, преобразованными по формуле. Формулы записывать в объектный файл модуля в обратной польской записи.
    угу. п1. имхо можно решить, пожертвовав несколькими битами в конфигурационном байте (абсолютно без проблем). насчет п2. идея стоящая, но дело имхо немного упирается в сложность создания польской записи. если не ошибаюсь, в модулях для is-dos такое практиковалось. мож просветит кто, насколько успешно?

  4. #84
    Veteran Аватар для GriV
    Регистрация
    18.02.2005
    Адрес
    Набережные Челны
    Сообщений
    1,574
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Angry

    Народ! оффтоп пошёл!
    Биты рулят лучше байтов, байты рулят шустрее!
    View, Звук, Цвет

  5. #85
    Activist Аватар для fk0
    Регистрация
    18.02.2005
    Адрес
    St. Petersburg
    Сообщений
    415
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от GriV
    2fk0> я со многими твоими доводами согласен, а ты же с моими (и витаминовскими) доводами принципиально соглашаться не хочешь, даже не хочешь рассматривать варианты вызовов другого типа (?). Я ж написал уже в сравнительной таблице какие достоинства и недостатки того или иного метода - так что каждый в праве выбирать что он хочет. Я СЧИТАЮ (т.е. это IMHO) что все другие методы имеют право на жизнь, но именно постольку поскольку должна быть альтернатива - я же их предпочитаю не
    Проблема в том, что ты эту альтернативу выбираешь за других. В частности, за меня.

    Я указал, где считаю место альтернативным методам -- что-то
    очень специфическое по памяти (RST) или по-скорости (прямой CALL). Ибо и там и там имеет место экстремальная экономия
    какого-либо одного ресурса в ущерб всем остальным. Я не считаю
    такое решение приемлимым в общем случае. Вот и всё что я хочу
    сказать. Я не отвергаю такие решения для тех самых экстремальных
    случаев, я даже говорю, они могут существовать параллельно в рамках одного интерфейса, представимого тремя ортогональными
    понятиями: собственно интерфейс, метод доступа к функциям интерфейса, и соглашения о совместом использовании аппаратных
    ресурсов, передаче аргументов и т.п. Это просто разные вещи.
    Один и тот же интерфейс может иметь совершенно разные свойства
    по двум другим направлениям и это будет тот же самый интерфейс
    в плане функциональности, но другой интерфейс в том смысле, что
    может быть недоступен в какой-то программной среде. Впрочем
    об этом нужно писать отдельно, для чего лучше вынести в отдельную тему: http://zx.pk.ru/showthread.php?t=1950

    таким образом и выстрадал все плюсы и минусы системы, потому считаю что имею достаточно объективную точку зрения.
    Объективной точки зрения не существует.

  6. #86
    Activist Аватар для captain cobalt
    Регистрация
    13.03.2005
    Адрес
    Пермь
    Сообщений
    294
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Таблица JP работает неплохо, если речь идёт о прошивке ПЗУ.

    Теперь предположим, что мы хотим использовать таблицы JP и для вновь разрабатываемых модулей, предназначенных для работы в ОЗУ. Тогда каждому модулю понадобится таблица JP на его процедуры. Мы не можем каждому модулю для его таблицы JP назначить адрес, который не будет менятся всю оставшуюся жизнь. Значит таблицы JP должны быть перемещаемыми. А если они должны быть перемещаемыми, то потребуется пропатчивать все CALL-ы в эти таблицы. А если понадобится пропатчивать CALL-ы, то зачем нужны эти таблицы?

  7. #87
    Activist Аватар для fk0
    Регистрация
    18.02.2005
    Адрес
    St. Petersburg
    Сообщений
    415
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от captain cobalt
    Таблица JP работает неплохо, если речь идёт о прошивке ПЗУ.
    Это всё ровно наоборот. В ПЗУ как раз плохо по ряду других
    причин...

    Теперь предположим, что мы хотим использовать таблицы JP и для вновь разрабатываемых модулей, предназначенных для работы в ОЗУ. Тогда каждому модулю понадобится таблица JP на его процедуры. Мы не можем каждому модулю для его таблицы JP назначить адрес, который не будет менятся всю оставшуюся жизнь. Значит таблицы JP должны быть перемещаемыми. А если они должны быть перемещаемыми, то потребуется пропатчивать все CALL-ы в эти таблицы. А если понадобится пропатчивать CALL-ы, то зачем нужны эти таблицы?
    Ужас. Патчатся не CALL, а JP в самой таблицы. Суть в том, что
    сама программа статически скомпонована с этой таблицей,
    на этапе компиляции. Её адрес известен точно также, как адрес
    локально определённых, для данной программы, функций.
    А пропатчить одну таблицу всяко проще, чем все CALL, тем более
    что делается это одной инструкцией LDIR -- путём копирования
    точно такой же ещё одной таблицы, но статически скомпонованной
    с другой программой-библиотекой. Нужно лишь единожды перед
    запуском знать адрес где таблица в библиотеке и скопировать её
    поверх своей таблицы. Ну тут конечно возможны вариации, когда
    например, локальная таблица меньше библиотечной (включены
    только используемые функции) и копируются только адреса нужных
    функций.

  8. #88
    Activist Аватар для captain cobalt
    Регистрация
    13.03.2005
    Адрес
    Пермь
    Сообщений
    294
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вот именно. Адрес таблицы должен быть фиксированным.

    Это не особо мешает, если таблица одна единственная.
    Но что если таблиц две или больше?
    Кто выбирает адреса для таблиц?
    Что если независимые разработчики выберут пересекающиеся адреса?
    Распределять адреса централизованно? Но это получится make world.

    На оффтопиках действительно применяется этот способ. Таблица вместе с кодом лепится в одно целое. Но там команды CALL относительные, поэтому всегда показывают в таблицу независимо от того по какому адресу загрузили модуль. Но на Z80 нет относительных CALL, только короткие JR.

  9. #89
    Activist Аватар для fk0
    Регистрация
    18.02.2005
    Адрес
    St. Petersburg
    Сообщений
    415
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от captain cobalt
    Вот именно. Адрес таблицы должен быть фиксированным.
    "Относительно меня или вас?" (Ц)

    Он прекрасно фиксированный относительно каждой программы
    с которой КОПИЯ данной таблицы скомпонована. Понимаешь,
    КОПИЯ. Много их. Таблиц этих. Каждой программе -- своя. И ещё
    одна на библиотеку, СВОЯ КОПИЯ. Поэтому её адрес известен,
    как известен адрес любой процедуры в своей программе.

    Это не особо мешает, если таблица одна единственная.
    Но что если таблиц две или больше?
    Кто выбирает адреса для таблиц?
    Ассемблер. При компиляции.

    Что если независимые разработчики выберут пересекающиеся адреса?
    Тогда две программы не загрузить одновременно. Или две
    библиотеки. Потому пишите релоцируемый код. И таблица
    сама релоцируемой получится. КОПИЯ таблицы то-есть,
    локальная. А потом, когда всё будет загружено, информация
    из ГЛАВНОЙ ТАБЛИЦЫ, которая связана с программой функции
    которой вызываются через эту таблицы, должна быть скорпирована
    во ВТОРИЧНЫЕ ТАБЛИЦЫ, которые используются сторонними
    программами для вызова функций из библиотеки или программы
    с которой связана ГЛАВНАЯ ТАБЛИЦА. Что тут непонятного?

    На оффтопиках действительно применяется этот способ. Таблица вместе с кодом лепится в одно целое. Но там команды CALL относительные, поэтому всегда показывают в таблицу независимо от того по какому адресу загрузили модуль. Но на Z80 нет относительных CALL, только короткие JR.
    Я только что описал, как работает заменитель "относительных CALL". Именно это он и позволяет. Вызов по адресу известному
    относительно собственного программного модуля.

  10. #90
    Activist Аватар для captain cobalt
    Регистрация
    13.03.2005
    Адрес
    Пермь
    Сообщений
    294
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от fk0
    Тогда две программы не загрузить одновременно. Или две библиотеки.
    Это полный отстой и mustdie.

    Только по одной этой причине такой способ - "ф топку".

    А ещё при перекомпиляции библиотеки понадобиться перекомпилировать все зависимые программы.
    make world
    Тьфу.

    Лишь ПЗУ это не касается. ПЗУ всегда по одному адресу. И таблицу ему можно сделать по фиксированному адресу.
    Цитата Сообщение от fk0
    Потому пишите релоцируемый код. И таблица сама релоцируемой получится.
    Ну конечно.
    Каждый раз, прежде чем делать CALL нужно вычислять адрес, по которому делать этот CALL.
    Каковы накладные расходы на время выполнения этих вычислений и на память для хранения их кода?
    Не превышают ли они расходов на единовременное пропатчивание?

Страница 9 из 10 ПерваяПервая ... 5678910 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Подключение клона "Байт" к ТВ через RGB.
    от Surfin_Bird в разделе Изображение
    Ответов: 6
    Последнее: 11.03.2013, 16:59
  2. Ответов: 6
    Последнее: 09.12.2007, 22:02
  3. Ответов: 8
    Последнее: 01.05.2006, 01:38
  4. Принтер через 580ВВ55
    от Sonic в разделе Несортированное железо
    Ответов: 14
    Последнее: 08.06.2005, 09:26

Ваши права

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