nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 21 Jan 2021 17:25



Reply to topic  [ 78 posts ]  Go to page Previous  1, 2, 3, 4, 5, 6  Next
Solid C - компилятор Си для Спринтера 
Author Message
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19321
Location: Silicon Valley
Reply with quote
Post 
если просто нужен кросс-компилятор си для спринтера - бери z88dk - там спринтер был поддержан в своё время

ну или мой Sprinter SDK бери - не си, но близко ;)

_________________
:eugeek: https://twitter.com/Shaos1973


24 May 2012 12:00
Profile WWW
Doomed
User avatar

Joined: 11 Dec 2003 15:34
Posts: 407
Reply with quote
Post 
Sayman wrote:
я так и не понял, под какой страндарт си этот компилятор расчитан. пример кода:
Code:
#include <stdio.h>

void panic0(s)
char *s;
{
    printf("\nError: ");
    printf(s);
    printf("\n");
}

main(argc,argv)
int argc;
char *argv[];
{
     if(argc<2) panic0("Need some arguments.");
}


всё. у компилятора рвёт крышу. выдаёт неразумные ошибки об отсутствии скобок, о том что есть недекларированные
переменные и вапще с десяток ошибок. однако в компиляторе HiTechC и на пц в VC всё прекрасно собирается.
пример простой, но...


Гонишь. Это корректный вариант. Только что проверил на Спринтере - все Ok, нет никаких ошибок.

А вариант Шаоса Солид не понимает, выдаст кучу ошибок. В папке примеров компилятора есть си-сорцы. Ах да, я забыл,
это не твоя метода, знакомиться с инструментами, которыми пользуешься. Видимо ты привык так - взял сторонние сишные сорцы,
например юниксов, и без усилия (вообще всякого) собрал их... на 8-ми битке, а иначе, если не собирается - ф топку :)
Любителям подобной халявы лучше сменить тематику интересов.
Кста, я тебе подскажу (и не обращай внимания, что об этом в доке написано, ее же читать придется), для "чужих" си-сорцев (написанных не для Солида)
есть опция "-k" для cc1.exe. В каких-то случаях может выручить.

Пример Шаоса:
Code:
#include <stdio.h>

void panic0(char *s)
{
    printf("\nError: ");
    printf(s);
    printf("\n");
}

main(int argc, char **argv)
{
     if(argc<2) panic0("Need some arguments.");
}



P.S. Еще не надоело похваляться "своим" Хайтек-Си, который "все прекрасно собирает" ?. Уже на зубах навязло твое пустое словоблудие,
потому как к Спринтеру-то какое отношение он имеет ?. Солид, в плане генерации кода, на ступеньку выше будет всех сишных компиляторов,
имеющихся на данное время на 8-ми битках. Сравни асм-листинги после твоего Хайтек-Си и от Солида. Вот и тебе "пример простой, но..."


P.S.S
Quote:
Может кто погонять компилятор си по ссылке ниже?
в цпм он был слегка известен как microgenSF 5.17. это его кросс версия, вроде современная (автор прислал).
раньше я его не видел, даже цпмную версию.
https://www.dropbox.com/s/6f3v8g5l3pwj7 ... e.zip?dl=0


А чего, сам не можешь оценить выдаваемые асм-листинги ? Вот и узнаешь качество компилятора.

_________________
Vasil Ivanov
vasil-i@yandex.ru


09 Nov 2014 03:05
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19321
Location: Silicon Valley
Reply with quote
Post 
Печально, что солид это K&R...

_________________
:eugeek: https://twitter.com/Shaos1973


09 Nov 2014 14:32
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19321
Location: Silicon Valley
Reply with quote
Post 
Vasil Ivanov wrote:
Солид, в плане генерации кода, на ступеньку выше будет всех сишных компиляторов,
имеющихся на данное время на 8-ми битках. Сравни асм-листинги после твоего Хайтек-Си и от Солида. Вот и тебе "пример простой, но..."


а солид умеет юзать регистры проца как часто используемые переменные?

и вообще какой-нибудь компилятор сей для z80 это умеет делать?

_________________
:eugeek: https://twitter.com/Shaos1973


09 Nov 2014 16:31
Profile WWW
Doomed
User avatar

Joined: 11 Dec 2003 15:34
Posts: 407
Reply with quote
Post 
Shaos wrote:
Vasil Ivanov wrote:
Солид, в плане генерации кода, на ступеньку выше будет всех сишных компиляторов,
имеющихся на данное время на 8-ми битках. Сравни асм-листинги после твоего Хайтек-Си и от Солида. Вот и тебе "пример простой, но..."


а солид умеет юзать регистры проца как часто используемые переменные?

и вообще какой-нибудь компилятор сей для z80 это умеет делать?


Кусок из фидошной эхи (былые времена):
======================================
в Hi-Tech C для PC есть
- глобальное распределение регистров и
- передача аргументов в регистрах
(этих фич нет в варианте для CPM)

MSX-C/SOLID-C: кроме того, что есть в Hi-Tech имеет:
- нерекурсивные ф-ции
- распределение регистров с помощью PUSH/POP
======================================

Кусок из доки Солид Си:
==============================================
Одной из целей разработки компилятора MSX-C было создание инструментального средства, которое позволяяет писать и саму операционную систему, и программное обеспечение для ЭВМ. Для достижения этой цели в кодогенератор введены различные дополнительные средства.Так, разработаны средства автоматического распределения регистров. Благодаря этим средствам, которые впервые внедрены в компиляторе для микро-ЭВМ, удалось существенно повысить эффективность объектного кода. В результате этих мероприятий стало возможным писать на высоко-уровневом языке, которым является Си, даже системы, работающие в условиях жестких ограничений по памяти и реальному масштабу времени. При этом почти полностью устранена необходимость программирования на Ассемблере.
==============================================

Уверен, что переменные не всегда будут попадать в регистры (только для самых простых случаев), обязательно будут переменные и в ячейках памяти. Регистров мало, а передавать нужно много чего и данный компилятор не настолько умен, чтобы удивить кодеров, пишущих на асме. Ессно с ручной оптимизацией все эти компиляторы все-равно не стоит сравнивать. Поэтому считаю, что для 8-ми биток самым оптимальным вариантом будет инструмент типа "C--", можно одновременно писать к примеру lzw-алгоритмы и boot-загрузчики :)

_________________
Vasil Ivanov
vasil-i@yandex.ru


10 Nov 2014 10:15
Profile
Maniac

Joined: 05 Oct 2009 20:44
Posts: 211
Location: 212.164.105.5
Reply with quote
не то, чтобы некропостинг, но всё таки:
Code:
Еще не надоело похваляться "своим" Хайтек-Си, который "все прекрасно собирает"

тут следует задать встречный вопрос - а ваш Солид умеет в 32 бита? нет, не умеет. и с этим огромным минусом можно просто хоронить данный компилятор.
т.е. в рамках CP/M этот компилятор может и был бы хорош, но у нас тут и файлы могут быть больше мегабайта и сектора 32бита. не имея 32х битной логики и арифметики пилить на таком инструменте что-либо просто не возможно. банально тот же fdisk пролетает мимо данного компилятора. большие файлы тоже не прогрузить "нахрапом" (особенно когда по размеру файла нужно вычислять кол-во выделяемой памяти) и т.д. а так, хайтех древний под цпм тоже умеет "распределять" по регистрам, но через директиву register, т.е. вручную.


29 Oct 2020 00:07
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
а солид умеет юзать регистры проца как часто используемые переменные?
и вообще какой-нибудь компилятор сей для z80 это умеет делать?

Извините, что вмешиваюсь, но мне этот вопрос тоже очень интересен...

Я вот тут декомпилировал до исходника некий разрекламированный Best_C, и, честно говоря, был в полном
ужасе от того, как он компилирует - всё в основном пихает в стек и работает через стек.
Про то, чтобы "юзать регистры проца как часто используемые переменные" - и рядом нет.

Поэтому как-то в другую сторону меня качнуло - посмотреть на компилятор PL/M.
Он вроде как поумнее компилирует код, по сравнению с тем-же Best_C.
Но смысл компилятора С в некоторой переносимости программ, хотя... попадалась мне заметка Демина aka Begoon,
где он пишет, что z80 и i8080 в принципе весьма неудобные процы для создания эффективного компилятора С... :-?

_________________
iLavr


29 Oct 2020 11:50
Profile
Maniac

Joined: 05 Oct 2009 20:44
Posts: 211
Location: 212.164.105.5
Reply with quote
Solid C, конечно умеет передавать аргументы через стек. это очень здорово. согласно мануала, до трёх аргументов. для типа char использует A, E, C. Для типа int - HL, DE, BC. остальные аргументы через стек засылаются. и т.д.
далеко не все компиляторы умеют в регистры для z80. некоторые прям фанатеют от SDCC, а он регистры ненавидит. максимум что о н может, это передавать только 1 аргумент через регистр и то, не при помощи стандартной директивы register, а левыми (правыми) __z88dk_callee и подобной хернёй.
Хайтех для cp/m с регистрами работать не умеет совсем. однако версия под ms-dos уже этому обучена.
какие ещё компиляторы умеют передавать аргументы через регистры и далее с ними работать не через стек, точно даже не смогу подсказать.
Оригинальных исходников Solid C не существует. У Василия декомпиляция, как я понял (можно попробовать у него поклянчить). Сам же автор компилятора давно умер (к сожалению) не успев расшарить исходники.

кстати, i8080 куда хуже в плане кодогенерации, чем z80, т.к. более куцый.

кстати, Лавр, а где твой Спринтер? или его у тебя и не было никогда?

2Василий. возрадуйся, чел. Ты когда то прям желал компилятор C-- под z80. Вот он:
https://github.com/alemorf/zx_spectrum_ ... r/cmm_last


29 Oct 2020 23:50
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19321
Location: Silicon Valley
Reply with quote
Lavr wrote:
кстати, Лавр, а где твой Спринтер? или его у тебя и не было никогда?

Лавр у нас фанат Специалиста

_________________
:eugeek: https://twitter.com/Shaos1973


30 Oct 2020 01:58
Profile WWW
Maniac

Joined: 05 Oct 2009 20:44
Posts: 211
Location: 212.164.105.5
Reply with quote
ну ясно. спринтероводов нынче мало. все или сильно заняты или просто нет интереса. вот и ты своего никак запустить не можешь. жаль...


30 Oct 2020 02:57
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
Lavr wrote:
кстати, Лавр, а где твой Спринтер? или его у тебя и не было никогда?

Лавр у нас фанат Специалиста

Ну компилятору С это как бы немного безразлично должно быть.
И цпм на Специалисте есть и процессоры те же...

Вот не пойму никак одну простую вещь - если бы я писал компилятор, ничего об них не зная,
я бы сделал так: заготовил нужное количество функций в текстовом виде под соответствующие
операторы, а потом в процессе компиляции собирал эти функции в исходный файл по тексту исходника, не повторяясь
2 раза. После чего основной движок был бы текстовый шитый код, который вызывет эти функции, передавая им аргументы
через регистры или стек. Функции, естественно, должны быть реентабельные.
Всё что сформировано в текстовом виде - скомпилировать ассемблером.
Я с этой целью полез Форт декомпилировать, но он тоже не так делает... :-?

_________________
iLavr


30 Oct 2020 10:45
Profile
Maniac

Joined: 05 Oct 2009 20:44
Posts: 211
Location: 212.164.105.5
Reply with quote
когда то давно под i8080 был один компилятор сей, BDS C. запускался он из под цпм. поставлялся в комплекте с исходниками. вроде генерил код под i8080 и на нём же работал. но он не умеет в long и float.


01 Nov 2020 04:53
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Sayman wrote:
когда то давно под i8080 был один компилятор сей, BDS C. запускался он из под цпм. поставлялся в комплекте с исходниками.

Когда я потерпел неудачу с Best-C для "Специалиста", то поискал другой образец, как писать компилятор С.

И нашел я следующий проект: SMALL C
Quote:
SMALL C is a "C" language compiler that is available with source code. It is very easy to port to another CPU, and this has been done many times.

Там есть и такой вариант:
Quote:
SMALL C/Plus v1.0 : Small C V1.0 with structures/unions, floating point, and more. Runs on CP/M (61K TPA required). Generates a rather weird set of mnemonics but assembler is furnished.

Вот только времени заняться этим пока не нашлось... :-?

_________________
iLavr


01 Nov 2020 09:29
Profile
Maniac

Joined: 05 Oct 2009 20:44
Posts: 211
Location: 212.164.105.5
Reply with quote
SmallC это помойка. на его основе как раз и написаны такие компиляторы, как SDCC и Z88DK.
лучше на BDS C посмотри.
загляни сюда. если не заглядывал ранее: http://www.z80.eu/c-compiler.html


01 Nov 2020 10:08
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19321
Location: Silicon Valley
Reply with quote
SmallC упоминался на этом форуме в 2017:
http://www.nedopc.org/forum/viewtopic.php?f=72&t=17191

_________________
:eugeek: https://twitter.com/Shaos1973


01 Nov 2020 11:14
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 78 posts ]  Go to page Previous  1, 2, 3, 4, 5, 6  Next

Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.