User Tag List

Показано с 281 по 290 из 377

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

Древовидный режим

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

    Регистрация
    21.05.2006
    Адрес
    Canada
    Сообщений
    78
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от aviator Посмотреть сообщение
    На базе LLVM например. Почему бы и нет. Фронтенд - подмножество Си, модифицируем существующий. Бэкэнд - пишем. Зачем писать всю инфраструктуру с нуля?
    А EWZ80 "отбился" по деньгам уже давно. Но всё равно цену будут задирать. Это есть "кровавый энтерпрайз"...
    1700 евро не намного больше, чем за неделю до двух заработной платы недели для опытного программиста.

    LLVM не очень хорошо подходит для генерации программ для 8-битных целей, как есть. Много работы было бы сделать, чтобы получить что-то хорошее из него. Вы можете взять его (и я надеюсь, что вы делаете!), Но есть причина, почему LLVM-z80 связанные проекты томился в течение многих лет.

    Скрытый текст


    1700 Euro is not much more than a week to two week's wages for an experienced programmer.

    LLVM is not well suited to generating programs for 8-bit targets as-is. A lot of work would have to be done to get something good out of it. You are welcome to take it up (and I hope you do!) but there is a reason why LLVM-z80 related projects have languished for years.
    [свернуть]


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

    Всегда используйте ночную сборку. Проект очень активен, так что частые обновления. Установить инструкции здесь. При загрузке окна или OSX строит, они включают в себя zsdcc двоичные файлы; Для Linux вам придется скомпилировать zsdcc от источника, если вы хотите использовать SDCC.

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

    Библиотека и драйверы настраиваются на линии компиляции так, чтобы получить минимально возможное бинарное зависит от того, что вы пытаетесь собрать. Если у вас есть тестовая программа, которую вы хотите попробовать, может быть, поделитесь им здесь, так что я могу предложить и объяснить линию компилирования для него.

    Эта линия компиляции:

    Скрытый текст


    The tools and libraries are much more varied and customizable in z88dk -- there is not just one compile command.

    Always use the nightly build. The project is very active so there are frequent updates. Install instructions are here. If you download the windows or osx builds, they include zsdcc binaries; for linux you would have to compile zsdcc from source if you want to use sdcc.

    There is a technical overview of how the new part of z88dk works here. This is for an embedded target, that is a generic z80 machine, on which the spectrum target is built. Although compiling for the spectrum is a little bit different, the concepts discussed carry over.

    The library and drivers are customizable on the compile line so to get the smallest possible binary depends on what you are trying to compile. If you have a test program you want to try, maybe share it here so I can suggest and explain a compile line for it.

    This compile line:
    [свернуть]


    zcc +zx -vn -startup=31 -clib=sdcc_iy -SO3 --max-allocs-per-node200000 --opt-code-size test.c -o test -create-app --list


    компилирует "test.c" в файл .TAP с использованием SDCC, как компилятор с оптимизацией оказалось высоким. "startup = 31" выбирает лучевую трубку без Printf / Scanf водителей, "SO3" включает агрессивные правила глазок "opt-code-size" позволяет правила сокращения размера кода, которые особенно эффективны для кода с использованием 32-битного INT / 64-бит INT / поплавки (также попробовать без него, особенно для маленьких программ), "create-app" просит z88dk сделать файл .TAP, "list" просит, чтобы показать с исходные файлы переведены на ассемблере (она будет создавать "test.c.lis"). Если вы делаете поплавки, добавьте "-lm". Изменить "-vn" на "-v", чтобы увидеть все шаги ZCC принимает для компиляции программы.

    Если вы хотите, чтобы остановить при сборке перевода, добавить "-a":

    Скрытый текст


    will compile "test.c" to a .tap file using sdcc as compiler with optimization turned high. "startup=31" selects a crt without printf/scanf drivers, "SO3" turns on aggressive peephole rules, "opt-code-size" enables code size reduction rules which are particularly effective for code using 32-bit int/64-bit int/floats (also try without it especially for small programs), "create-app" asks z88dk to make a .tap file, "list" asks to show the c source files translated to asm (it will create "test.c.lis"). If you are doing floats, add "-lm". Change "-vn" to "-v" to see all the steps zcc is taking to compile the program.

    If you want to stop at assembly translation, add "-a":
    [свернуть]


    zcc +zx -vn -a -startup=31 -clib=sdcc_iy -SO3 --max-allocs-per-node200000 --opt-code-size test.c

    Я нахожу полученный ASM файл "test.c.asm" более удобным для чтения. Это хорошее место, чтобы исследовать разрастание кода.

    Выходной двоичный для приведенного выше составляет около 508 байт. То есть, потому что есть куча инициализации там, код вставляется для успешного возвращения в основной и так далее.

    Если добавить следующие прагмами в верхней части файла test.c:

    Скрытый текст


    I find the resulting asm file "test.c.asm" more readable. This is a good place to investigate code bloat.

    The output binary for the above is about 508 bytes. That is because there is a heap initialization in there, code is inserted for successful return to basic and so on.

    If you add the following pragmas to the top of your test.c file:
    [свернуть]


    #pragma output REGISTER_SP = -1 // do not change the value of SP at startup
    #pragma output CRT_ON_EXIT = 0x10001 // on program exit, enter an infinite loop
    #pragma output CLIB_MALLOC_HEAP_SIZE = 0 // do not create a heap for malloc
    #pragma output CLIB_STDIO_HEAP_SIZE = 0 // do not create a heap for stdio FILE*
    #pragma output CLIB_FOPEN_MAX = -1 // no FILEs can be created

    не изменяет значение SP при запуске
    при выходе из программы, войти в бесконечный цикл
    не создают кучу для malloc
    не создают кучу для STDIO FILE*
    ни один файл не может быть создан

    вы будете уменьшить размер кода дополнительно. (Смысл прагмах описан здесь и здесь).

    С этим добавил, выходной двоичный составляет около 66 байт.

    Скрытый текст



    you will shrink the size of the code further. (The meaning of the pragmas is described here and here).

    With these added, the output binary is about 66 bytes.
    [свернуть]
    Последний раз редактировалось Alcoholics Anonymous; 05.01.2017 в 21:10.

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

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

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

Ваши права

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