Vitamin проделал как-то большую работу, протестировал несколько компиляторов: http://zx.pk.ru/showthread.php?t=4110&page=8
Vitamin проделал как-то большую работу, протестировал несколько компиляторов: http://zx.pk.ru/showthread.php?t=4110&page=8
Есть надежда, что когда-нибудь SDCC достигнет очень высокого уровня оптимизации, и тогда юзеры ZXDev смогут воспользоваться этими плодами. Кстати, IAR C к ZXDev тоже можно прицепить.
Библиотеки, которые мы можем разработать, также можно будет использовать и с IAR, и с SDCC, и с ZXDev. Есть смысл сосредоточиться на библиотеках, а не спорить в который раз какой Си-компилер лучше.
Принимаются идеи насчёт библиотек. Принимается код. Также буду рад пообщаться голосом с товарищами из Украины про ZXDev да и вообще про Спек. Скидывайте в ЛС № мобильного. Skype нет по техническим причинам. :)
1-2
http://sdcc.sourceforge.net/mediawik.../Z80_code_size
IAR выигрывает у SDCC два с лишним только в одном случае - на умножении 32-битных чисел.
Вот ругают SDCC обычно те , которые его не юзали вообще (либо в последнее время). Ведь даже по ссылке сходить и почитать - это ж непомерный труд ...
И совсем не знают, что там как минимум два очень рульных добавления было сделано, за последние 7-8 месяцев.
Первое, это новый оптимизатор распределения регистров, именно для z80.
Второе, это поддержка банков памяти для переменных Си программы.
Сравнение с другими z80 компилерами давно, лежит (и обновляется) по ссылке, которая постом выше есть.
Valen, никто SDCC не ругает. Просто в недоумение иногда приводит код выдаваемый этим самым SDCC. Но все знают что над SDCC ведется работа и когда нибудь компилятор достигнет уровня IAR.
Мне в целом нравится стратегия работы над SDCC. Филипп обещал сделать передачу параметров в регистрах. Просто это сложный участок работ, к которому он не решается приступить.
Сейчас в SDCC/ZXDev можно применять параметры в регистрах, но только если это константы. В связи с желанием оптимизировать ASCII дальше вспомнилась идея, которую как-то высказал vinxru, условно назовём её "впрыскиванием" (POKE'ing) параметров в тело процедуры. Я хотел выиграть так ещё несколько байтов. Получилось вот что:
Чтобы было понятно: параметр "впрыскивается" в тело процедуры Console_WriteCh_ROM_poke по смещению 10.Код:_main_start::
_main:
;ASCII.c:20: ASCII_n = 96;
ld hl,#_ASCII_n + 0
ld (hl), #0x60
;ASCII.c:21: do {
00101$:
;ASCII.c:22: Console_WriteCh((CHAR)((96 - ASCII_n) + 32));
ld hl,#_Console_WriteCh_ROM_poke
ld bc,#0x000A
add hl,bc
ex de,hl
ld hl,#_ASCII_n
ld a,#0x80
sub a, (hl)
ld (de),a
call _Console_WriteCh_ROM_poke
;ASCII.c:23: ASCII_n -= 1;
ld iy,#_ASCII_n
dec 0 (iy)
;ASCII.c:24: } while (!(ASCII_n == 0));
ld a,(#_ASCII_n + 0)
or a, a
jr NZ,00101$
;ASCII.c:25: __FINI;
ret
_main_end::
Но SDCC сгенерил, увы, вот такой код:Код:#define __POKE(addr,val) (*(unsigned char*) (addr) = (val))
#define Console_WriteCh(ch) __POKE((int)Console_WriteCh_ROM_poke+10,ch); Console_WriteCh_ROM_poke()
убив на корню все возможные выиграши. Я игрался с глобальной меткой (по адресу которой хотел POKE'ать параметр), с __at() (которая, увы, понимает только константный адрес, а не метку). Может и можно что-то сделать, но сдаётся мне, лучше всего будет направить новый feature request Филиппу. Вот так и предлагаю делать оптимизацию. Заодно Филиппу будет стимул, что он не варится в своём соку, а его труд востребован и ожидаем. Это многого стоит.Код:ld hl,#_Console_WriteCh_ROM_poke
ld bc,#0x000A
add hl,bc
это всё геморно для рядового пользователя. Нужно так: ввел исходник на Обероне, нажал одну кнопку, он скомпилировался в асмовский файл. Если, Олег, ты сделаешь эту кнопку, то будут пользователи.
Как он это сделает, если SDCC не допилен, для повсеместного использования? Вообще, ZXDev видится пока, только как предложение для допиливания SDCC до приемлемого уровня.
Вопрос в другом: кто будет это делать? Те для кого асм сложно не смогут этого, тем для кого он не сложен это не нужно. Дилемма, однако :-/
Да оно там так и есть, написал код, нажал ф12 и всё запустилось. Транслировалось в си, потом в асм, ассемблировалось и в тап.
В смысле не допилен? На SDCC как минимум построен тулчейн для написания игр под пентеву (EVO SDK), на котором уже сделано несколько законченных игр.
Проблема в том, что он генерирует не самый оптимальный код. Но даже сейчас этот код намного лучше кода, который генерирует самый популярный компилятор для zx-разработки, zcc из z88dk. А на нём весь миллион игр от Mojon Twins написан, между прочим.