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

User Tag List

Страница 33 из 38 ПерваяПервая ... 293031323334353637 ... ПоследняяПоследняя
Показано с 321 по 330 из 377

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

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

    По умолчанию

    Спасибо. Про __z88dk_callee и __z88dk_fastcall не разбирал.

    Собственно, можно и так, только переделывать дофига. На самом деле, я знаю, что у меня там много не оптимального. Ну и фиг с ним пока что)

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

    А в случае атрибута __z88dk_fastcall, компилятор вообще не будет использовать стек, только регистр L (или пару HL в случае двухбайтового аргумента).
    А если аргументов 5 или 6 ? Тогда как?

  2. #322
    Guru Аватар для Shiny
    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,154
    Записей в дневнике
    38
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    31
    Поблагодарили
    18 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Сишники, а насколько сложно собрать сей исходник?
    Вложения Вложения

  3. #323
    Veteran Аватар для Oleg N. Cher
    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,640
    Спасибо Благодарностей отдано 
    2,180
    Спасибо Благодарностей получено 
    137
    Поблагодарили
    103 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от SfS Посмотреть сообщение
    > А в случае атрибута __z88dk_fastcall, компилятор вообще не будет использовать стек, только регистр L (или пару HL в случае двухбайтового аргумента).
    А если аргументов 5 или 6 ? Тогда как?
    Модель __z88dk_fastcall сейчас допускает только один аргумент. Что конечно жаль. Я говорил с Элвином по поводу маленько это доработать, но им неинтересно.

    Цитата Сообщение от Шынни Посмотреть сообщение
    Сишники, а насколько сложно собрать сей исходник?
    Для Спека т.е.? Тут будет более уместным не "собрать", а "переписать заново".

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

    Притом реализуя задействованные процедуры на ассемблере.

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

    По умолчанию

    Цитата Сообщение от Шынни Посмотреть сообщение
    Сишники, а насколько сложно собрать сей исходник?
    Ну если всё остальное дашь кроме одного файла - можно и собрать попробовать) Там половины типов нет. Заголовочников нет. Описания типов нет. Так что только догадываться что значит тип "final" например. И тип ли это вообще.

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

    По умолчанию

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    если лениво по каким-то причинам юзать модель __z88dk_callee, которая заслуживает всяческого уважения.
    а в чём вообще смысл использования этой модели? я засунул эту модель в код, собрал. смотрю, результат вообще ничем не отличается от того, что было до этой модели. т.е. передача аргументов такая же. как и до этого. байт в байт, строка в строку. зачем мне лишние записи в исходнике тогда? может и есть какие то особенности использования этой модели, я об этом не знаю, оно не очевидно и в целом мало полезно.
    SDCC юзает для выравнивания стека в подобных случаях INC SP/DEC SP.
    именно из-за этого стек и уплывает при использовании "pop hl:ex (sp),hl ". я не поленился и для теста поменял пару функций на "это". в результате второй вызов функции привёл к зависанию программы.
    здесь много параметров, для них явно не хватает регистров общего назначения.
    эээх. ну понятно. что все аргументы лягут на стек, далее конечно можно и наверно было бы удобнее гонять индексные регистры, однако, переключиться на альтернативный набор регистров религия не позволяет?
    __z88dk_fastcall, компилятор вообще не будет использовать стек, только регистр L (или пару HL в случае двухбайтового аргумента).
    а ты точно проверял как это работает? оно хорошо, когда передать нужно 1 аргумент в 1 байт или 2 байта или два аргумента по 1 байту. как только данных становится больше, чем 2 байта, эта модель перестаёт работать.
    Только для __z88dk_callee.
    насколько я вижу по коду, эта модель не работает с аргументами, не кратными 2 байтам. 1 лишний байт снимается со стека, из-за этого стек уплывает. всё потому, что компилятор юзает лишние inc sp/dec sp. но про это я уже когда то давно говорил (в сравнении с хайтехом).
    0A заповедей:
    I. Не удаляй каталог свой.
    II. Не удаляй до времени ни одного файла.
    III. Не кради файлы.
    IV. Не желай программы ближнего своего.
    V. Почитай BDOS и BIOS как родителей своих ...
    ---
    Sprinter resurrect:
    Telegram
    Discord
    Repo
    Forum

  6. #326
    Guru Аватар для Shiny
    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,154
    Записей в дневнике
    38
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    31
    Поблагодарили
    18 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от SfS Посмотреть сообщение
    Ну если всё остальное дашь кроме одного файла - можно и собрать попробовать) Там половины типов нет. Заголовочников нет. Описания типов нет. Так что только догадываться что значит тип "final" например. И тип ли это вообще.

    в том-то и беда, что нет. Извечная беда Си - кинуть сырок без заголовков.

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

    По умолчанию

    Цитата Сообщение от Шынни Посмотреть сообщение
    в том-то и беда, что нет. Извечная беда Си - кинуть сырок без заголовков.
    Это не беда С. Это беда кидателей сырков без заголовков)

  8. #328
    Veteran Аватар для Oleg N. Cher
    Регистрация
    24.08.2007
    Адрес
    Днепропетровская обл.
    Сообщений
    1,640
    Спасибо Благодарностей отдано 
    2,180
    Спасибо Благодарностей получено 
    137
    Поблагодарили
    103 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

    Смотри. С моделью __z88dk_callee вызывающей стороне не нужно вытаскивать аргументы из стека. Если ты этого у себя не воспроизвёл, значит мало и по верхушкам ковырялся. То есть имеем профит на вызывающей стороне.

    На вызываемой стороне с моделью __z88dk_callee профит есть для кодовых процедур. Я тебе показывал как двумя-тремя командами вытаскивать аргументы. Это кардинально отличается от того, что предлагал ты.

    Я говорю об очень очевидных вещах. Если есть желание спорить дальше, тут медицина бессильна.

    Цитата Сообщение от Sayman Посмотреть сообщение
    именно из-за этого стек и уплывает при использовании "pop hl:ex (sp),hl ". я не поленился и для теста поменял пару функций на "это". в результате второй вызов функции привёл к зависанию программы.
    Мне всё труднее сдерживаться от ругательств. Ну ассемблерщики, хоть вы ему скажите?

    Всё говорит о том, что ты менял на "это" без должного понимания того, что ты делаешь. А в ZXDev такой код много лет уже работает. И тебе любой ассемблерщик на пальцах это докажет. Вернее, не тебе, а кому-то умному. :-)

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

    Цитата Сообщение от Sayman Посмотреть сообщение
    а ты точно проверял как это работает? оно хорошо, когда передать нужно 1 аргумент в 1 байт или 2 байта или два аргумента по 1 байту. как только данных становится больше, чем 2 байта, эта модель перестаёт работать.
    Я точно проверял как это работает.
    Мда, доказывать сишнику преимущества Оберона после того, как ему нельзя доказать преимуществ Си...

    Опять же, всякая модель хороша для своей цели. А там, где у тебя перестаёт работать или работает плохо, у кого-то другого поумнее - всё хорошо. Например, я умею передавать два однобайтовых аргумента под видом двухбайтового и в модели __z88dk_fastcall.

    Цитата Сообщение от Sayman Посмотреть сообщение
    насколько я вижу по коду, эта модель не работает с аргументами, не кратными 2 байтам.
    Работает с одним лишненьким inc sp. Который выполняется быстро.

    Цитата Сообщение от Sayman Посмотреть сообщение
    (в сравнении с хайтехом).
    А твой тупой хайтех вообще неэкономно использует и стек, и регистры.

    И вообще жалею, что с тобой разговор затеял. Вот ей-богу, некоторых лучше вообще игнорить, пусть несут пургу сколько угодно.

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

    По умолчанию

    Я говорю об очень очевидных вещах. Если есть желание спорить дальше, тут медицина бессильна
    я ни с кем не спорю. ты прибежал в тему и начал кому-то что-то доказывать, хотя тебя об этом не просили. Тебе что-то в sdcc no-init не нравится? исходники на git`е, бери да комить, что не так?
    Работает с одним лишненьким inc sp. Который выполняется быстро.
    видимо ты и сам не знаешь как оно работает, а других учить пытаешься. inc sp при заворачивании аргументов на стек, думаю логично предположить, что при обратном действии нужно делать dec sp, не?
    А твой тупой хайтех вообще неэкономно использует и стек, и регистры.
    Ооо всё, началось. Ты и 5 минут не работал с хайтехом, а несёшь какую-то дичь в его адрес.
    доказывать сишнику преимущества Оберона после того, как ему нельзя доказать преимуществ Си...
    закусывать надо! Никому здесь твой оберон не интересен, хорош уже бредить!

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

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

    По умолчанию

    Строго говоря, все эти __z88dk_fastcall отдают деревней. Лет сто как принято объявлять при вызове параметр (или локальную переменную) "register" и тогда он/она передается компилятором не на стеке, а в регистре/регистрах. Именно так общепринято делают все нормальные компиляторы (в т.ч. и hiTech C), при этом при вызове можно сколько угодно переменных объявить как register, но компилятор загрузит в регистры столько их сколько позволяет платформа, а остальные пускай и так объявленные передаст стеком. Это дает совместимость исходников для всех платформ и нет никаких ограничений по количеству или разрядности параметров, например тот же hiTech C генерируя с такого общего исходника код Z80 позволяет только один регистр процессора задействовать, для 8086 уже 3 регистра и т.д.

    И это, Олег, все помнят ваш прошлогодний каминаут на тему "я ленив но заносчив и поэтому все с чем не разобрался - виноват hiTech C", так что давайте меньше экспрессии в заявлениях или вникайте в детали (что даст аналогичный эффект).

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

    PS. У hiTech C (по крайней мере v3.09 каким пользуюсь я) безусловно больше ограничений чем у современного SDCC, но он, извините, написан в сжатые сроки и при царе горохе (и как написан!), работает в 64кб под CP/M, а не в 64Гб под виндой 30 лет спустя (из которых первые 15 лет тем SDCC пользоваться было нельзя не заплевав монитор)
    Лучше сделать и жалеть, чем не сделать и жалеть.

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

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

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

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

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

Ваши права

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