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

User Tag List

Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 27

Тема: ACK (Amsterdam Compiler Kit) для Вектора и 8080 вообще

  1. #1
    Guru Аватар для svofski
    Регистрация
    20.06.2007
    Адрес
    С.-Петербург
    Сообщений
    4,116
    Спасибо Благодарностей отдано 
    795
    Спасибо Благодарностей получено 
    658
    Поблагодарили
    403 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию ACK (Amsterdam Compiler Kit) для Вектора и 8080 вообще

    ACK оказался не так уж и страшен. Собирается очень быстро и легко, компилирует почти нормальный Си (и еще кучу языков). uIP пришлось совсем чуть чуть подправить, но в общем можно сказать заработало из коробки.

    Демо того же IoT-вебсервера, что был на ZPU, на сей раз в нативном исполнении:


    Пухлость присуствует: нативный UIP.COM — 37003, тот же самый UIP.COM в варианте ZPU — 25488 это вместе с виртуальной машиной. Зато у ACK для CP/M практически полноценный комплект стандартных библиотек, printf() итд, работа с файлами.

    Забавно, что целочисленный Мандельброт работает в 3 раза медленней, чем на ZPU, потому что там int32. sizeof(int) в нем 2 и долговязая арифметика тормозная.
    Больше игр нет

  2. Эти 6 пользователя(ей) поблагодарили svofski за это полезное сообщение:

    ivagor (30.12.2020), mastermind (05.01.2021), Oleg N. Cher (29.12.2020), PPC (04.01.2021), tnt23 (30.12.2020)

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

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

    По умолчанию

    ACK собирает под 8080, а не только под Z80? Интересно, не знал.

    А на Модуле-2 там же тоже можно писать?

  5. #3
    Guru Аватар для svofski
    Регистрация
    20.06.2007
    Адрес
    С.-Петербург
    Сообщений
    4,116
    Спасибо Благодарностей отдано 
    795
    Спасибо Благодарностей получено 
    658
    Поблагодарили
    403 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Oleg N. Cher, можно, но я пробовал только Си. Именно 8080 (среди прочих, список таргетов там внушительный). Ссылка на всякий случай https://github.com/davidgiven/ack
    Больше игр нет

  6. Эти 2 пользователя(ей) поблагодарили svofski за это полезное сообщение:

    L Juriy (30.12.2020), Oleg N. Cher (29.12.2020)

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

    По умолчанию

    Тогда-с ждём игр под 8080-платформы на Модуле-2, раз на Обероне не хотите ;-)

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

    По умолчанию

    Цитата Сообщение от svofski Посмотреть сообщение
    ACK оказался не так уж и страшен. Собирается очень быстро и легко, компилирует почти нормальный Си (и еще кучу языков). uIP пришлось совсем чуть чуть подправить, но в общем можно сказать заработало из коробки.

    Пухлость присуствует: нативный UIP.COM — 37003, тот же самый UIP.COM в варианте ZPU — 25488 это вместе с виртуальной машиной.
    нативный Hitech-C: httpd.com 19кб
    единственно, у меня был переписан printf для вывода только на экран (минус потоки STD), что сокращает бинарь на пару килобайт
    ну и понятно, код Z80. Но любая операция с int32 - call в библиотеку (для чего была мысль опцией оптимизировать это в однобайтовые рестарты). Но работало с int32 достаточно быстро, по крайней мере FAT32 (который на int32 весь) не шибко тормозил
    Последний раз редактировалось Error404; 29.12.2020 в 22:27.
    Лучше сделать и жалеть, чем не сделать и жалеть.

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

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

    По умолчанию

    Hitech-C не собирает под 8080.

  10. #7
    Guru Аватар для svofski
    Регистрация
    20.06.2007
    Адрес
    С.-Петербург
    Сообщений
    4,116
    Спасибо Благодарностей отдано 
    795
    Спасибо Благодарностей получено 
    658
    Поблагодарили
    403 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    У меня эквивалент httpd.com еще с четырьмя килами дополнительных картинок и скриптов, но все равно понятно, что z80 дает возможность сгенерить код покомпактней. Тем не менее меня интересует именно 8080. Какой объем из этого — printf() итд я не знаю, потому что пока не нашел, как ack генерить map.

    Доки вообще
    http://tack.sourceforge.net/olddocs.html

    Про генерацию кода для 8080
    http://tack.sourceforge.net/olddocs/i80.html
    Больше игр нет

  11. Эти 2 пользователя(ей) поблагодарили svofski за это полезное сообщение:

    L Juriy (30.12.2020), Oleg N. Cher (29.12.2020)

  12. #8
    Activist Аватар для PPC
    Регистрация
    01.03.2011
    Адрес
    Stamford
    Сообщений
    335
    Спасибо Благодарностей отдано 
    46
    Спасибо Благодарностей получено 
    42
    Поблагодарили
    18 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Здорово! Я когда-то очень давно лет с 10 или более назад глядел на ACK, но потом что-то меня отвлекло и - не взялся.
    Интересно поглядеть на то, как выглядит фрейм стека при вызове функции. Я тут недавно копался с Aztec C, пришёл в ужас. У них там процедура .csave для якобы уменьшения количества кода в стеке, это адъ. То, что она запихивает <BC> типа регистровую переменную, это норм. Но потом она образует фрейм для локальных данных за которым пихает предыдущий <SP> и адрес функции для размотки по выходу. Причём эта вся байда вызывается даже если нет локальных переменных: с нулями для оффсетов хотя достаточно было бы просто сделать pop b; ret; по выходу. Вот, где замедление...
    Ну и да сканеры форматного ввода/вывода жуть сколько занимают. Я сразу отказался. Написал свой собственный консольный небуферизированный вывод без переадресации устройств: cputs, putch, getche плюс всякие putdec, putlx (для long) практически через прямые вызовы CP/M BIOS/BDOS по желанию. Только это сразу 4К сэкономило. А если всю conio на асме написать, наверное ещё кил можно срезать.

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

    По умолчанию

    Цитата Сообщение от PPC Посмотреть сообщение
    Интересно поглядеть на то, как выглядит фрейм стека при вызове функции.
    Не стОит ожидать здесь чуда. Всё-таки Си есть Си: косвенная адресация, прицел на рекурсию со всеми вытекающими.

    Я вот придумал для нереэнтерабельных функций такой механизм передачи параметров:

    Код:
    #define Func(a, b, c) par1 = a; par2 = b; par3 = c; Func_Impl();
    где par1-par3 глобальные переменные, доступ к которым осуществляется эффективнее (прямая адресация), чем к стековым (косвенная адресация; для Z80 чаще всего через (IX+n) или (IY+n) ). А реализация функции Func_Impl() достаёт параметры из этих глобальных переменных и сама может вообще не иметь фрейма (на практике она его всё равно имеет - для работы с локальными переменными. Правда, в SDCC можно выключить фрейм для функции модификатором __naked).

    Это несколько громоздко записывается, но даёт неплохой код, что особенно важно для проца 8080.

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

    P.S. В SDCC для асмовых функций есть возможность записывать такие переменные-параметры прямо в машкод функции. Пример описания такой переменной (Pt3Player_mode) можно посмотреть здесь:


  14. #10
    Activist Аватар для PPC
    Регистрация
    01.03.2011
    Адрес
    Stamford
    Сообщений
    335
    Спасибо Благодарностей отдано 
    46
    Спасибо Благодарностей получено 
    42
    Поблагодарили
    18 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Oleg N. Cher Посмотреть сообщение
    Не стОит ожидать здесь чуда. Всё-таки Си есть Си: косвенная адресация, прицел на рекурсию со всеми вытекающими.
    [COLOR="silver"][SIZE=1]
    Ну я совсем чуда и не ждал как-бы, видимо просто не совсем точно выразился. Я, скорее, хочу надеяться на наличие у ACK оптимизатора, который сможет эффекивно выбрасывать ненужное в определённых ситуациях. Один из частных примеров (отсутствие локальных данных, когда стек можно пихать навалом на фрейм вызова) я уже привёл. Это очень простая для оптимизатора ситуация, почему Manx её не сделал, мне до конца не ясно. Видимо, настолько в восторге были от факта что удалось портировать yacc парсер на 8080, что об остальном позабыли.

    Понятно, что лучший способ нивелировать фрейм на вызываемой стороне - это link register либо что-то типа 8086 инструкций ENTER/LEAVE. Но за неимением такового нужен гибкий генератор входного/выходного кода. На это и уповаю.

    Просто для 8080, в отличие от z80, совсем нет более-менее современных С компиляторов, всё K&R. Насколько я могу понять, ACK клэймит совместимость c X3.159. Я не смотрел, какая цифра после 159, надеюсь 26 или выше. Но в любом случае, это уже ANSI.

    Тут на форуме winxru делал ANSI-совместимый кросс-компилятор, но кажется забросил. Замечательно, что svofski поднял тему ANSI-совместимых альтернатив. Язык C-это наше всё - самое то быстро писать CP/M-совместимые утилиты, даже если там вообще 0 оптимизаций. PL/I меня лично как-то меньше привлекает несмотря на то что да, код он сгенерит эффективней чем C.

Страница 1 из 3 123 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 10
    Последнее: 15.02.2020, 12:36
  2. Форк SDCC для процессора 8080
    от Oleg N. Cher в разделе Вектор
    Ответов: 49
    Последнее: 25.09.2019, 15:20
  3. Ответов: 3
    Последнее: 21.09.2018, 18:28
  4. Ассемблер для 8080
    от shoorick в разделе Разное
    Ответов: 26
    Последнее: 13.02.2016, 14:30
  5. An 8080/Z80 C Compiler
    от breeze в разделе Программирование
    Ответов: 1
    Последнее: 18.08.2005, 06:54

Ваши права

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