Вход

Просмотр полной версии : Нужен компилятор си, простой в использовании



Kakos_nonos
24.02.2012, 20:36
Здравствуйте!
Подскажите пожалуйста си компилятор, который работает на ПК, и генерирует код для Spectrum'a.
Я нащёл несколько разных, но не разобрался, как с ними работать.
Подскажите, какой лучше, и ещё чтобы можно было так: написать код, и, нажав несколько клавиш, получить tap или sna файл, который можно запустить эмулятором.
Заранее спасибо!

jerri
24.02.2012, 20:47
посмотри (http://zx.pk.ru/showthread.php?t=18186) для спека нативных с компилеров и нет толком

Eltaron
24.02.2012, 23:10
Здравствуйте!
Подскажите пожалуйста си компилятор, который работает на ПК, и генерирует код для Spectrum'a.
sdcc, iar ewz80
sdcc - бесплатный, кроссплатфоменный и опенсурсный
iar код генерит получше (не так любит все адресовать через индексные регистры, например)


написать код, и, нажав несколько клавиш, получить tap или sna файл, который можно запустить эмулятором.
С этим проблемы, компилятор - он под проц, а не под архитектуру компа.
z88dk что-то там околоспектрумское вроде бы умеет

Andrew771
24.02.2012, 23:43
http://zx.pk.ru/showthread.php?t=17698

Kakos_nonos
25.02.2012, 11:07
Спасибо всем, присмотрелся к ccz80.
Кто-нибудь пользовался, как он?

DimkaM
25.02.2012, 11:39
z88dk
самая большая подборка готовых либ. Самый простой. Куча Компилируемых примеров. Самый богатый насчёт мануалов, вики, форум потдержки.
Минус -генерит код в полтора раза больше чем в иаре.
И будь осторожен с преобразованием типов указателей, а то бывает плющит его от этого.

Освоишся переползёшь на иар.

---------- Post added at 10:39 ---------- Previous post was at 10:37 ----------


sdcc, iar ewz80
"Хелло ворд!" на них боюсь не сделаешь

Eltaron
25.02.2012, 14:23
"Хелло ворд!" на них боюсь не сделаешь
ну да, всю библиотеку придется писать самому, кто спорит

---------- Post added at 16:23 ---------- Previous post was at 15:53 ----------

Однако ничего сложного ;)


void initscr() __naked;
void putchar(char ch) __naked;
void printf(char* text);

void main()
{
initscr();
printf("Hello, world!");
}

void initscr() __naked
{
__asm
push af
push bc
ld a, #2
call #0x1601
ld b, #0x18
call #0x0E44
ld a, #0x16
rst #0x10
xor a
rst #0x10
rst #0x10
pop bc
pop af
ret
__endasm;
}

void putchar(char ch) __naked
{
__asm
rst #0x10
ret
__endasm;
}

void printf(char* text)
{
while (*text != 0)
putchar(*text++);
}




sdcc --code-loc 0x9c40 --no-std-crt0 -mz80 hello.c
hex2bin hello.ihx

получаем hello.bin, грузим в эмуль с 9c40, randomize usr 40000, вуаля!
попутно вспомнил, чем еще раздражает sdcc - решетками # перед числами в асме. Мозг отказывается воспринимать такие числа не как hex

Valen
25.02.2012, 17:48
попутно вспомнил, чем еще раздражает sdcc - решетками # перед числами в асме. Мозг отказывается воспринимать такие числа не как hex
Да, есть такая бяка.
Поэтому использую sdcc asm, только для маленьких inline кусочков асм кода.
Если нужно кодить на асме много, просто юзаю другой асм компилятор (с более удобным синтаксисом) и затем уже линкую скомпиленный асмом бинарь к бинарю sdcc.

Eltaron
25.02.2012, 18:32
затем уже линкую скомпиленный асмом бинарь к бинарю sdcc.
а как, руками? там форматы все какие-то самописные и ни с чем не совместимые вроде бы

Valen
25.02.2012, 19:18
а как, руками? там форматы все какие-то самописные и ни с чем не совместимые вроде бы
Да, руками бинарники объединяю.
(например, вызываю bin2c для асмовского бинарника и потом просто #include в sdcc Си файл или же загружаю файл асмовского бинарника, при старте программы)

Andrew771
25.02.2012, 21:52
Спасибо всем, присмотрелся к ccz80.
Кто-нибудь пользовался, как он?
Легок в использовании, но генерирует очень не оптимальный код.

Eltaron
26.02.2012, 11:57
Да, руками бинарники объединяю.
(например, вызываю bin2c для асмовского бинарника и потом просто #include в sdcc Си файл или же загружаю файл асмовского бинарника, при старте программы)
Вариант, но ведь так теряется вся полезная инфа - положение глобальных переменных, имена, адреса функций...

DimkaM
27.02.2012, 09:25
В плане интеграции с асмом, лучше всех z88dk(sccz80).
так же, по желанию, умеет юзать бейсик48 калькулятор для сокращения кода.


Однако ничего сложного
hello word в ccz80:
#include <stdio.h>

main()
{
printf("%cHello world!\n",12);
}
батник
zcc +zx -lndos -create-app -o hello hello.cпечатает символами шириной 6pix

Oleg N. Cher
25.03.2012, 14:55
sdcc - бесплатный, кроссплатфоменный и опенсурсный
iar код генерит получше (не так любит все адресовать через индексные регистры, например)
Может быть iar код генерил получше, пока в SDCC не улучшили кодогенератор? http://sourceforge.net/apps/trac/sdcc/wiki/Philipp%27s%20TODO%20list


С этим проблемы, компилятор - он под проц, а не под архитектуру компа.
Точно.

z88dk – богатые библиотеки для Спектрума, более чем средненькая кодогенерация. Но испанцы для своих "высокоуровневых" разработок под Спек юзают, насколько я знаю, именно его.

SDCC – кодогенерация не идеальная, но очень хорошая. Ручного кодирования на асме не заменит. Хороший кандидат на портирование и использование под ним библиотек от z88dk (и создание для SDCC же и новых).

ZXDev – разработка для Спектрума на ПЯТИ языках с самой лучшей в мире кодогенерацией: http://zx.pk.ru/showthread.php?t=18472

DimkaM
01.04.2012, 15:42
на ПЯТИ языкахТолько вот ни русского ни украинского я в доках не увидел.

А так как Вы сначала переводили доки с украинского на английский, а мне придётся переводить их на русский, то ой.