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

User Tag List

Страница 37 из 38 ПерваяПервая ... 333435363738 ПоследняяПоследняя
Показано с 361 по 370 из 377

Тема: Ищу Си для Z80

  1. #361
    Moderator
    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    4,577
    Спасибо Благодарностей отдано 
    61
    Спасибо Благодарностей получено 
    106
    Поблагодарили
    92 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

    Некоторые из моих поделок тут: https://github.com/serge-404

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

  3. #362
    Master
    Регистрация
    27.01.2005
    Сообщений
    905
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    176
    Поблагодарили
    142 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Генерится из двух бинарных файлов. Отсюда и ограничение на адрес загрузки кратный 256

  4. #363
    Guru Аватар для Sayman
    Регистрация
    16.02.2006
    Адрес
    Новосибирск
    Сообщений
    3,277
    Спасибо Благодарностей отдано 
    17
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    54 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Релоцируемые исполняемые файлы были ещё в MPM (многопользовательская цпм). Там такая же таблица 256 байт в конце файла. так что ничего нового не изобретено.
    0A заповедей:
    I. Не удаляй каталог свой.
    II. Не удаляй до времени ни одного файла.
    III. Не кради файлы.
    IV. Не желай программы ближнего своего.
    V. Почитай BDOS и BIOS как родителей своих ...
    ---
    Sprinter resurrect:
    Telegram
    Discord
    Repo
    Forum

  5. #364
    Master
    Регистрация
    27.01.2005
    Сообщений
    905
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    176
    Поблагодарили
    142 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Sayman Посмотреть сообщение
    Релоцируемые исполняемые файлы были ещё в MPM (многопользовательская цпм). Там такая же таблица 256 байт в конце файла. так что ничего нового не изобретено.
    1. Таблица столько байт, сколько надо. Не обязательно 256.
    2. Адрес загрузки кратен 256 (например 0x8000, 0x8100, 0xC200 и так далее).
    3. Целью было не "изобрести", а реализовать возможность загрузки библиотек.

  6. #365
    Veteran Аватар для Oleg N. Cher
    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,616
    Спасибо Благодарностей отдано 
    2,199
    Спасибо Благодарностей получено 
    141
    Поблагодарили
    107 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А вот как бы вы предложили связать SDCC и движок типа Nirvana, привязанный к определённому адресу в памяти?

    [скомпилированный Си-код] [00 00 00 много нулей 00 00 00] [Nirvana]

    Си-код растёт, уменьшая размер пустого блока нулей.

    Самое простое, что можно придумать - загружать код и движок отдельными блоками - LOAD ""CODE 2 раза.

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

    Может есть ещё какие-то варианты? (хочется только один LOAD ""CODE)

  7. #366
    Veteran
    Регистрация
    26.11.2013
    Адрес
    г. Новосибирск
    Сообщений
    1,042
    Спасибо Благодарностей отдано 
    934
    Спасибо Благодарностей получено 
    227
    Поблагодарили
    122 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Может есть ещё какие-то варианты? (хочется только один LOAD ""CODE)
    После загрузки раздвинуть блоки LDIR-ом.
    Или другие, более продвинутые методы упаковки.

  8. #367
    Guru Аватар для Sayman
    Регистрация
    16.02.2006
    Адрес
    Новосибирск
    Сообщений
    3,277
    Спасибо Благодарностей отдано 
    17
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    54 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    А вот как бы вы предложили связать SDCC и движок типа Nirvana, привязанный к определённому адресу в памяти?

    [скомпилированный Си-код] [00 00 00 много нулей 00 00 00] [Nirvana]

    Си-код растёт, уменьшая размер пустого блока нулей.

    Самое простое, что можно придумать - загружать код и движок отдельными блоками - LOAD ""CODE 2 раза.

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

    Может есть ещё какие-то варианты? (хочется только один LOAD ""CODE)
    Думаю, что тут поможет только подход аля evosdk. ДУмаю, что в любом случае без изменений тут не обойтись. Придётся в исходники лезть и править вызов тех функций, которые будут распиханы по страницам.
    0A заповедей:
    I. Не удаляй каталог свой.
    II. Не удаляй до времени ни одного файла.
    III. Не кради файлы.
    IV. Не желай программы ближнего своего.
    V. Почитай BDOS и BIOS как родителей своих ...
    ---
    Sprinter resurrect:
    Telegram
    Discord
    Repo
    Forum

  9. #368
    Veteran Аватар для Oleg N. Cher
    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,616
    Спасибо Благодарностей отдано 
    2,199
    Спасибо Благодарностей получено 
    141
    Поблагодарили
    107 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Reobne Посмотреть сообщение
    После загрузки раздвинуть блоки LDIR-ом.
    Или другие, более продвинутые методы упаковки.
    Да, так можно. Заодно и упаковать код - хорошая мысль.

  10. #369
    Master Аватар для s_kosorev
    Регистрация
    19.06.2014
    Адрес
    г. Харьков, Украина
    Сообщений
    731
    Спасибо Благодарностей отдано 
    6
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    15 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Может есть ещё какие-то варианты?
    Если линкер SDCC нормально поддерживает секции с абсолютным адресом, можно бинарник конвертнуть в rel формат и линковать как и все остальное,
    Описать точки входа и создать хидер

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

    Для совсем прозрачного, нужна прослойка с маршалингом параметров

  11. #370
    Moderator
    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    4,577
    Спасибо Благодарностей отдано 
    61
    Спасибо Благодарностей получено 
    106
    Поблагодарили
    92 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    А вот как бы вы предложили связать SDCC и движок типа Nirvana, привязанный к определённому адресу в памяти?

    [скомпилированный Си-код] [00 00 00 много нулей 00 00 00] [Nirvana]

    Си-код растёт, уменьшая размер пустого блока нулей.

    Самое простое, что можно придумать - загружать код и движок отдельными блоками - LOAD ""CODE 2 раза.

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

    Может есть ещё какие-то варианты? (хочется только один LOAD ""CODE)
    Это будет сильно зависеть от того какая используется ОС (ну или хотя бы окружение) и особенностей компилятора. Там ведь не только С-код растет в область нулей, с ним то как раз проще всего. Обычно выше кода еще размещается куча, рост и освобождение которой в процессе выполнения кода конечно можно просчитать, но довольно муторно. А навстречу куче с верхнего предела пользовательской области растет стек который в таком случае тоже надо бы по-хорошему контролировать (или просчитать).

    Поэтому например в CP/M лет пятьдесят назад было принято такие "драйвера" загружать так. В начале адресного пространства стояло 2 JMP на начало (огрубляю для упрощения) BIOS и BDOS ОС (их ставила ОС - она занимала верхние адреса ОЗУ). С-код при своей инициализации по ним всегда определял верхнюю границу пользовательской памяти и далее назначал кучу и стек. Т.е. было достаточно перед стартом C-кода под потолком пользовательского ОЗУ (т.е. ниже реального начала ОС) разместить тот "драйвер" (который включает в начале своего кода JMP BDOS; JMP BIOS) и переназначить те 2 адреса в начале адресного пространства на переходы в начале кода "драйвера". Далее при старте С-кода всё происходило само и не было никаких привязок ни к размеру пользовательского ОЗУ, ни к размеру того "драйвера", ни к размеру C-кода, ни необходимости чего-то просчитывать: С-процессу тупо либо хватало места в ОЗУ, либо нет (т.е. при достаточности ОЗУ никогда ничего ни на что не наползало).
    Последний раз редактировалось Error404; 05.06.2018 в 11:41.
    Лучше сделать и жалеть, чем не сделать и жалеть.

    Некоторые из моих поделок тут: https://github.com/serge-404

Страница 37 из 38 ПерваяПервая ... 333435363738 ПоследняяПоследняя

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

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

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

Ваши права

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