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

User Tag List

Страница 3 из 8 ПерваяПервая 1234567 ... ПоследняяПоследняя
Показано с 21 по 30 из 74

Тема: Осваиваем Hi-Tech C v3.09 для CP/M

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

    По умолчанию

    Цитата Сообщение от Alcoholics Anonymous Посмотреть сообщение
    Hitech C v7.50 очень редко производит более быстрый код, чем z88dk/sdcc во всех испытаниях я сделал, так что я хотел бы, чтобы скомпилировать двоичный для вас попробовать.

    Вы можете увидеть результаты некоторых тестах мы запускаем, в том числе Dhrystone 2.1 и Whetstone 1.2, здесь: http://www.z88dk.org/wiki/doku.php?i...#dhrystone_2.1

    Alcoholics Anonymous, can I download an "official" build of zsdcc (z88-sdcc) for Windows? Or, I must patch and rebuild it manually?

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

    По умолчанию

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Не, вру. z88dk тоже имеет модификатор __preserves_regs, он оттуда в SDCC и пришёл. Но неясно качество такой оптимизации...
    Я вижу его влияние на сгенерированный код; это небольшая, но она есть. Есть много вещей, которые имеют небольшое влияние, но когда вы добавляете их все, вы в конечном итоге с чем-то намного лучше.

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


    I see its impact in the generated code; it is small but it is there. There are a lot of things that have a small impact but when you add them all up, you end up with something a lot better.
    [свернуть]


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

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Alcoholics Anonymous, can I download an "official" build of zsdcc (z88-sdcc) for Windows? Or, I must patch and rebuild it manually?
    Yes you can. We build binaries for windows and mac osx. Linux users have to build it themselves.

    You can grab the latest by downloading a nightly build ( http://nightly.z88dk.org/ ). These packages are complete and are built every night and will contain the latest changes and built binaries. Click on the "z88dk-win32-latest.zip" link right at the top and unzip/install as described here: https://www.z88dk.org/wiki/doku.php?...:front#windows

    If you have set up github, we don't put the binaries in z88dk/bin but you can copy the binaries from z88dk/bin in the download above and paste them into your github/z88dk/bin directory. Set the environment variables as described in the install instructions link above and you should be ok to compile.

    After setting up the environment variable ZCCCFG and the path to point at z88dk/bin, you can compile out of a command prompt.

    Some hints:

    Translate to assembler for zx:

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

    --opt-code-size is optional
    Change -vn to -v if you want to see what the compiler is doing
    Add --c-code-in-asm if you want to see C statements interspersed with the output asm
    Don't forget --fsigned-char if you want chars to be signed by default
    Add -lm if using floats (use float_t or double_t instead of float or double to get rid of warnings)

    Equivalent with sdcc:

    sdcc -mz80 -S --max-allocs-per-node200000 --opt-code-size test.c

    Add --reserves-regs-iy to be exactly equivalent to the z88dk compile but this may worsen sdcc's output.
    Add -lm if using floats.
    Don't forget --fsigned-char if you want chars to be signed by default


    An asm translation will only show the C code translated. Library code is rooted here: https://github.com/z88dk/z88dk/tree/...c/_DEVELOPMENT and there is an EXAMPLES directory there with some programs to try (compile lines at top of .c)
    Последний раз редактировалось Alcoholics Anonymous; 19.01.2017 в 21:33.

  3. #23
    Guru Аватар для Totem
    Регистрация
    13.12.2007
    Адрес
    Архангельск
    Сообщений
    2,189
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    11
    Поблагодарили
    11 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Alcoholics Anonymous, What about "banked" memory for "ZX 128 computers" ? I know, its very difficult
    for example
    http://www.softools.com/zilogwinide.htm

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

    Ты слыхал как грузится Flyshark ?! нет, совсем не тот, что на дискете...а Flyshark, тот самый блин Flyshark...тот ,что был когда то на кассете...
    zx spectrum 48 issuse 6a, Ленинград-1, zx spectum 128 +2 grey,Пентагон-128, ZXM-Phoenix 5.02 ( assembly)

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

    По умолчанию

    Цитата Сообщение от Totem Посмотреть сообщение
    Alcoholics Anonymous, What about "banked" memory for "ZX 128 computers" ? I know, its very difficult
    for example
    http://www.softools.com/zilogwinide.htm
    Yes we are heading in that direction. z80asm, z88dk's assembler / linker, is actively developed.

    Right now, with a little work, you can manually generate bankswitched programs. Not as easy as doing it automatically as you still have to manually decide what goes where but the z88dk tools will help you to solve many of the difficulties. You can place code and data in specific memory banks easily (the c compilers can only place code and rodata but we will fix that; the current workaround is to define variables with correct section assignment from a separate asm file). You can get the tools to output a list of defines for all public functions and data and use that as a reference when doing cross banking calls. The tools support command-line ordered linking; in other words you can change the address of common functions depending on what part of the project is being compiled. So, for example, if you put printf in one bank then -g when printf is compiled will give its address. Then you can create a trampoline in the common area that changes banks, calls that printf, restores banks and returns. For all banks not containing printf, you would compile against another set of defines that would do something like "defc printf = 0x8000 ; printf trampoline" so that calls to printf from other banks go through the trampoline code and there you have a cross bank call.

    But for most cases, 128 programming is much simpler -- you have extra data in the extra banks or you have code in the extra banks that does not call across banks. And this can be done now very easily. Pietro bros is an example that puts the AY code and sound effects into a separate 128 bank.

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


    Да, мы движемся в этом направлении. z80asm, z88dk в ассемблер / линкер, активно развивается.

    Прямо сейчас, с небольшим количеством работы, вы можете вручную сгенерировать bankswitched программы. Не так просто, как это делать автоматически, как вам все равно придется вручную решить, что идет туда, куда но и z88dk инструменты помогут вам решить многие трудности. Вы можете разместить код и данные в отдельных банках памяти легко (с-компиляторы могут только размещать код и rodata, но мы исправим это, текущий обходной путь заключается в определении переменных с правильным назначением раздела из отдельного файла ASM). Вы можете получить инструменты для вывода списка определяет для всех государственных функций и данных, а также использовать его в качестве эталона при выполнении перекрестных банковских вызовов. Инструменты поддержки командной строки заказал связь; другими словами, вы можете изменить адрес общих функций в зависимости от того, какая часть проекта составляется. Так, например, если вы положили Printf в одном банке, то -g при компиляции Printf даст свой адрес. После этого вы можете создать трамплин в общей зоне, которая изменяет банки, вызовы, которые Printf, восстанавливает банки и возвращается. Для всех банков, не содержащих Printf, ты скомпилировал бы против другого набора устанавливает, что бы сделать что-то вроде "defc Printf = 0x8000; Printf батут", так что вызовы PRINTF от других банков пройти через код батут и там у вас есть вызов перекрестного банка ,

    Но в большинстве случаев, 128 программирование намного проще - у вас есть дополнительные данные в дополнительных банках или у вас есть код в дополнительных банках, которые не звонят по банкам. И это может быть сделано сейчас очень легко. Пьетро Bros является примером, который помещает код AY и звуковые эффекты в отдельный 128 банка.
    [свернуть]

  5. #25
    Guru Аватар для Totem
    Регистрация
    13.12.2007
    Адрес
    Архангельск
    Сообщений
    2,189
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    11
    Поблагодарили
    11 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    .

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

    Цитата Сообщение от Alcoholics Anonymous Посмотреть сообщение
    you can manually generate
    Are You used softools's compiler ?
    Ты слыхал как грузится Flyshark ?! нет, совсем не тот, что на дискете...а Flyshark, тот самый блин Flyshark...тот ,что был когда то на кассете...
    zx spectrum 48 issuse 6a, Ленинград-1, zx spectum 128 +2 grey,Пентагон-128, ZXM-Phoenix 5.02 ( assembly)

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

    По умолчанию

    Цитата Сообщение от Totem Посмотреть сообщение
    .
    Are You used softools's compiler ?
    No I haven't. I have only read about it online and in the paper you linked.

    The automatic linking of bankswitched programs is something we would like to do but it will take some more development and thought. Soft Tool only had to deal with one memory model - the z180's - which it then applied to the z80. We have a more complicated case in that there are machines with varying memory map, some with holes in the middle of ram, and varying banking schemes. We also have to keep an eye on recent C standard propositions -- there is an embedded technical report that specifies how banked variables and functions can be accessed from C. So a solution has to be more general and the pieces for that will come together after we've got a smooth way to do the banking manually. Once the manual banking is down we will have to work on the linker to optimally assigned code and data to require the least amount of memory and least amount of bankswitching given a target's specified memory map.

    ---

    Нет у меня нет. Я только читал об этом в Интернете и в статье вы связаны между собой.

    Автоматическое связывание bankswitched программ является то, что мы хотели бы сделать, но это займет еще некоторое развитие и мысль. Soft Tool только приходилось иметь дело с одной модели памяти, - установка Z180 - который он затем применяется к z80. У нас есть более сложный случай в том, что есть машины с различной картой памяти, некоторые с отверстиями в середине барана, и различные банковские схемы. Мы также должны следить за последних стандартных С предложениями - есть встроенный технический отчет, который определяет, как накренился переменные и функции могут быть доступны из C. Таким образом, решение должно быть более общим и куски для, которые придут вместе после того, как у нас есть плавный способ сделать банковские операции вручную. После того, как руководство банковского вниз мы будем работать над линкера оптимально присвоен код и данные требуют наименьшего количества памяти и наименьшее количество bankswitching учитывая указанную карту памяти, который цели.

  7. #27
    Guru Аватар для Totem
    Регистрация
    13.12.2007
    Адрес
    Архангельск
    Сообщений
    2,189
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    11
    Поблагодарили
    11 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Alcoholics Anonymous, its fоr eхample, 30 days free, its zilog party, are you never used ZDS?
    Ты слыхал как грузится Flyshark ?! нет, совсем не тот, что на дискете...а Flyshark, тот самый блин Flyshark...тот ,что был когда то на кассете...
    zx spectrum 48 issuse 6a, Ленинград-1, zx spectum 128 +2 grey,Пентагон-128, ZXM-Phoenix 5.02 ( assembly)

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

    По умолчанию

    Цитата Сообщение от Totem Посмотреть сообщение
    Alcoholics Anonymous, its fоr eхample, 30 days free, its zilog party, are you never used ZDS?
    For my 30 days I am waiting until I have a large set of benchmarks to run. I'd like to spend that time taking a look at code quality.

    I do have ZDS 3.68 but I have never been able to compile anything. The package they offer for download is missing dlls (z180.dll for me) and the support has no idea what I am talking about. I think it is too old for Zilog to care anymore Have you managed to get ZDS 3.68 to work at all?


    Для моих 30 дней я жду, пока я не большой набор тестов для запуска. Я хотел бы провести это время взглянуть на качество кода.

    У меня есть АРС 3,68, но я никогда не был в состоянии собрать что-нибудь. Пакет, который они предлагают для скачивания отсутствует DLLs (z180.dll для меня) и поддержка понятия не имеет, о чем я говорю. Я думаю, что слишком стар для Zilog, чтобы заботиться больше Вы сумели получить АРС 3,68 работать

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

    По умолчанию

    Продолжаем. Мне удалось собрать минимальную подсистему ZXDev3, которая работает с Hi-Tech C v3.09 вместо SDCC. С неизменным рантаймом в виде cret, ncsv и indir смирился (его не вырезает даже оптимизатор). Правда, я слегка переписал CSV.AS, убрал оттуда обязательное сохранение регистра IY для каждой процедуры (пусть сама решает, сохранять ли его). И собрал в библиотеку LIBC2.LIB

    Странное дело, но похоже, что каждая функция в момент входа в неё держит на стеке сохранённое значение IX (а в случае немодифицированного CSV.AS и IY тоже) с самого верху. То есть, чтобы добраться до параметров, обычное:

    Код:
                POP  HL
                POP  BC
                PUSH BC
                PUSH HL
    у меня не срабатывает. Нужен какой-то хитрый способ описания ассемблерных функций? Или мириться с тем, что возвращаться надо не по RET, а по JP cret? Плюс иметь затруднённый доступ к аргументам? Как же быть?

    HelloHTC3.zip

    Код функции печати строки PRSTR у меня сейчас такой:
    Код:
    void Basic_PRSTR_C_ROM_fastcall (unsigned char *str) {
    #  asm
                LD   IY, 5C3AH
                POP  IX ; Без этого слетает. А в случае стандартного LIBC.LIB нужен и POP IY
                POP  HL
                POP  BC
                PUSH BC
                PUSH HL
    PRSTRstd$:  LD   A, (BC)
                OR   A
                RET  Z
                RST  16
                INC  BC
                JR   PRSTRstd$
    #  endasm
    }

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

    По умолчанию

    Какой будет аналог этого кода в Hi-Tech C v3.09 ? Просьба не писать наобум, а давать только рабочий код.

    Код:
    #define Basic_Init() __asm di __endasm
    Вот так не работает:

    Код:
    #  define Basic_Init() /**/ \
    #asm \
      DI  \
    #endasm
    ( напоминаю, что в хайтек Си решётку можно ставить только в первой колонке строки )

Страница 3 из 8 ПерваяПервая 1234567 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Осваиваем микрокомпьютер (1 и 2 ч.)
    от kas29 в разделе Пресса
    Ответов: 2
    Последнее: 06.02.2020, 01:27
  2. Видеоподкаст: "Old Gold Tech"
    от unbeliever в разделе Разный софт
    Ответов: 1
    Последнее: 12.06.2010, 13:41

Ваши права

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