Board.KolibriOS.org

Official KolibriOS board
It is currently Tue Nov 19, 2019 6:13 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 231 posts ]  Go to page 1 2 3 4 516 Next
Author Message
 Post subject: Tiny C Compiler
PostPosted: Sat Aug 19, 2006 3:16 pm 
Выкладываю адаптацию этого компилятора для KolibriOS: http://shade.msu.ru/~msu-se/metcc.zip (работает под windows). Компиляция выполняется командой metcc.exe program.c melibc.a -oprogram. Просьба сишникам помочь с завершением стандартной библиотеки. Может ее стоит выложить на svn?


UPD by SoUrcerer: свежая версия здесь: viewtopic.php?f=45&t=565&p=44449#p44448


Top
   
 Post subject:
PostPosted: Sat Aug 19, 2006 10:08 pm 
Offline
User avatar

Joined: Thu May 19, 2005 4:43 pm
Posts: 896
Андрей,хорошую работу проделал!

Компилятор языка высокого уровня под Колибри мне очень нужен(не хочу писать под винду и линукс, а ассемблер далеко не все знают(язык высокого уровня для того мне нужен ,чтобы можно было проверить логику работы моей программы другим людям)).

Насколько я понимаю,для портирования сомого компилятора под Колибри необходимо до конца портировать стандартную библиотеку libc.
Переписать часть кода с учетом новых системных функций(58 заменить на 70 и некоторое другое).В той части кода,что сейчас присутствует,портированы почти все стандартные функции библиотеки libc.

А это случайно не та libc,что портировал Ярек ?


Думаю,что библиотеку нужно будет выложить на svn после её портирования(и компилятор тамже).
Вот только сишник из меня неахти,поэтому,к сожалению,помоч немогу.


Top
   
 Post subject:
PostPosted: Sun Aug 20, 2006 8:31 am 
andrew_programmer wrote:
А это случайно не та libc,что портировал Ярек?

Нет не та. У него лучше, но она слишком портируемая - там куча не нужных #if и #ifdef, поэтому в ней сложно разобраться (что мне и не удалось).
andrew_programmer wrote:
Думаю,что библиотеку нужно будет выложить на svn после её портирования(и компилятор тамже).

Не понял про портирование библиотеки - она уже под KolibriOS, куда ее еще портировать? Если имеется в виду завершение ее написания, то думаю это произойдет не скоро :( ... Да и какой смысл выкладывать на svn завершенные проекты :? ?
andrew_programmer wrote:
Вот только сишник из меня неахти,поэтому,к сожалению,помоч немогу.

А на чем ты пишешь?


Top
   
 Post subject:
PostPosted: Sun Aug 20, 2006 11:18 am 
Опс, забыл про лидирующие подчеркивания. Исправленный melibc.a можно взять здесь: http://shade.msu.ru/~msu-se/metccfix.zip
metcc.zip также перезалит.


Top
   
 Post subject:
PostPosted: Sun Aug 20, 2006 1:50 pm 
Offline
User avatar

Joined: Thu May 19, 2005 4:43 pm
Posts: 896
>Не понял про портирование библиотеки - она уже под KolibriOS, куда ее еще портировать?

Я имел ввиду замену в коде 58-ой функции функции на 70.

> Да и какой смысл выкладывать на svn завершенные проекты ?

А я думал,что раздел "скачать" предназначен для скачивания софта под Колибри.Оказалось,что почему-то нет.


>А на чем ты пишешь?

Всё завичит от того,для какой цели пишется программа.

1) Если код программы будут анализировать другие люди,то использую языки высокого уровня.Самой простой из тех,что я изредка использую, - это borland pascal.Но у него ограничения на размер используемой памяти.Если мне нужно работать с памятью большей чем 64 килобайта,то я использую си.А именно компилятор gcc.Но то ,как в си реализована работа с указателями - мне ОЧЕНЬ ненравиться.А ещё у си синтаксис дурацкий.А также у него размер кода получается большой и не очень быстрый.Поэтому использую его только когда деваться некуда.


2)Если пишу для души,то использую исключительно Ассемблер и исключительно операционную систему Колибри.90% того времени,что я провожу за компьютером - я провожу именно в Колибри.Я хочу чтобы,Колибри стала моей основной операционной системой.И насколько могу,вношу влад в её развитие.


P.S.
Существуют различные вкрсии паскаля кроме borland pascal.К примеру Free Pascal.Только скачивать 12 мегов - это для меня нереально много(и дорого и провайдер не позволяет).

Считается,что Ассемблер сложный язык программирования.А помоему наоборот - он самый простой(по синтаксису) язык программирования.Многие вещи в нём(к примеру работа с указателями) реализуется проще и понятней чем в си.


Top
   
 Post subject:
PostPosted: Sun Aug 20, 2006 2:43 pm 
Offline
User avatar

Joined: Thu May 19, 2005 4:43 pm
Posts: 896
Я своим предыдущим сообщением совсем не хотел сказать,что компилятор си под Колибри не нужен.Он ОЧЕНЬ даже нужен.Это позволит программистам,пишущим на си(таких сейчас немало) писать программы под Колибри.Они портируют многоплатформенные библиотеки(к примеру SDL) и тогда,можно будет спокойно писать программы под Колибри и при этом быть уверенным,что они будут так-же хорошо работать и на других платформах.


Top
   
 Post subject:
PostPosted: Sun Aug 20, 2006 4:51 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Quote:
Но то ,как в си реализована работа с указателями - мне ОЧЕНЬ ненравиться.
Почему? Работать с указателями в Си намного проще чем в Паскале. Компилятор сам отслеживает размер данных при арифметических опреациях с указателями. Массивы и указатели - близнецы-братья что тоже очень удобно.


Top
   
 Post subject:
PostPosted: Sun Aug 20, 2006 5:43 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Mar 20, 2006 10:44 am
Posts: 557
Отличная работа! Осталось только параметры командной строки реализовать, а остальное (библиотеки) можно сделать на базе того что уже есть.
В дистрибутиве всего один пример, и то, помойму это проверка malloc`а. Если комуто интересно вот мой пример :
Code:
#include "stdio.h"
#include "string.h"
#include "mesys.h"

#define FONT0      0
#define FONT1      0x10000000

#define BT_NORMAL   0
#define BT_DEL      0x80000000
#define BT_HIDE      0x40000000
#define BT_NOFRAME   0x20000000

char header[]={" -= C demo programm. Compiled whith TCC 0.9.23 halyavin port =-   "};

void rotate_str(char *str){
   char tmp;
   int i;
   tmp = str[0];
   for(i = 1; str[i ]; i++)str[i - 1] = str[i];
   str[i - 1] = tmp;
}

void draw_window(){
   static int offs = 0;
   static int fcolor = 0;
   static int col = 0;
   
   _msys_window_redraw(1);
   _msys_draw_window(100, 100, 300, 120, 0xaabbcc, 2, 0x5080d0, 0, 0x5080d0);
   _msys_write_text(6 - offs, 8, fcolor | FONT0, header, strlen(header));
   _msys_draw_bar(1, 6, 5, 13, 0x05080d0);
   _msys_draw_bar(274, 6, 26, 13, 0x05080d0);
   _msys_make_button(300 - 19, 5, 12, 12, 1 | BT_NORMAL, 0x6688dd);
   _msys_window_redraw(2);

   offs = (offs + 1) % 6;
   if(!offs)rotate_str(header);
   
   fcolor += (col)?-0x80808:0x80808;
   if(fcolor > 0xf80000 || fcolor == 0)col = !col;
}

int main(int argc, char **argv){

   while(!0){
      switch(_msys_wait_for_event(10)){
      case 2:return 0;
         
      case 3:
         if(_msys_get_button_id() == 1)return 0;
         break;
         
      default:
         draw_window();
         break;
      }
   }
}

помойму здесь всё понятно. Удачи!


Top
   
 Post subject:
PostPosted: Sun Aug 20, 2006 7:21 pm 
Offline
User avatar

Joined: Thu May 19, 2005 4:43 pm
Posts: 896
Serge

У меня 100% образное мышление и от того,каким образом будет обозначаться объект(в данном случае указатели) ,зависит моё восприятие этого объекта.Синтаксис обозначения указателей,принятый в си,мне непросто понять(следовательно увеличивается время на разбирание кода).А вот синтаксис работы с указателями в паскале - для меня прост и легко понятен.А самый понятный для меня синтаксис указателей - это Ассемблерный.В общем всё это связано с особенностями мышления,которое у разных людей разное.


Ghost

Хороший пример.


Top
   
 Post subject:
PostPosted: Mon Aug 21, 2006 9:06 am 
Offline

Joined: Mon May 01, 2006 10:12 pm
Posts: 349
Незнаю почему пример Serge у меня не запустился ни в эмуляторе ни в реальной системе...


Top
   
 Post subject:
PostPosted: Mon Aug 21, 2006 9:18 am 
Offline

Joined: Thu Jan 26, 2006 8:47 pm
Posts: 284
bug fix скачал?


Top
   
 Post subject:
PostPosted: Mon Aug 21, 2006 9:57 am 
Offline

Joined: Mon May 01, 2006 10:12 pm
Posts: 349
оо.. заработало.. всем спасибо


Top
   
 Post subject:
PostPosted: Mon Aug 21, 2006 10:03 am 
Offline
Kernel Developer
User avatar

Joined: Mon Mar 20, 2006 10:44 am
Posts: 557
Ошибка в функции _msys_putimage, в файле draw_image.asm нужно добавить mov eax, 7 (кстати, как компилять либу ?). Временно я использовал такой код :
Code:
void _msys_putimage(int x, int y, int xsize, int ysize, void* image){
   asm("movl   8(%esp), %edx");
   asm("movl   16(%esp), %ecx");
   asm("shll   $16, %ecx");
   asm("shll   $16, %edx");
   asm("movw   20(%esp), %cx");
   asm("movw   12(%esp), %dx");
   asm("movl   24(%esp), %ebx");
   asm("movl    $7,%eax");
   asm("int   $0x40");
}

в tcc используется синтаксис AT&T ассемблера.


Top
   
 Post subject:
PostPosted: Mon Aug 21, 2006 10:55 am 
Ghost
Спасибо, нашел еще одну существенную ошибку - системные функции объявлены как stdcall, но они не освобождали стек. выкладываю новую версию melibc.a: http://shade.msu.ru/~msu-se/metccfix1.zip. Перезалил metcc.zip (там соотвественно исправлены глюки с неосвобождением стека).


Top
   
 Post subject:
PostPosted: Mon Aug 21, 2006 10:57 am 
Либа компилится с помощью скрипта compile.js. Только там нужно в тексте подправить пути к компилятору С и ассемблера.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 231 posts ]  Go to page 1 2 3 4 516 Next

All times are UTC+03:00


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 Limited