Board.KolibriOS.org
http://board.kolibrios.org/

Tiny C Compiler
http://board.kolibrios.org/viewtopic.php?f=45&t=565
Page 1 of 16

Author:  halyavin [ Sat Aug 19, 2006 3:16 pm ]
Post subject:  Tiny C Compiler

Выкладываю адаптацию этого компилятора для 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

Author:  andrew_programmer [ Sat Aug 19, 2006 10:08 pm ]
Post subject: 

Андрей,хорошую работу проделал!

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

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

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


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

Author:  halyavin [ Sun Aug 20, 2006 8:31 am ]
Post subject: 

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

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

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

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

Author:  halyavin [ Sun Aug 20, 2006 11:18 am ]
Post subject: 

Опс, забыл про лидирующие подчеркивания. Исправленный melibc.a можно взять здесь: http://shade.msu.ru/~msu-se/metccfix.zip
metcc.zip также перезалит.

Author:  andrew_programmer [ Sun Aug 20, 2006 1:50 pm ]
Post subject: 

>Не понял про портирование библиотеки - она уже под KolibriOS, куда ее еще портировать?

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

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

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


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

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

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


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


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

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

Author:  andrew_programmer [ Sun Aug 20, 2006 2:43 pm ]
Post subject: 

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

Author:  Serge [ Sun Aug 20, 2006 4:51 pm ]
Post subject: 

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

Author:  Ghost [ Sun Aug 20, 2006 5:43 pm ]
Post subject: 

Отличная работа! Осталось только параметры командной строки реализовать, а остальное (библиотеки) можно сделать на базе того что уже есть.
В дистрибутиве всего один пример, и то, помойму это проверка 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;
      }
   }
}

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

Author:  andrew_programmer [ Sun Aug 20, 2006 7:21 pm ]
Post subject: 

Serge

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


Ghost

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

Author:  vectoroc [ Mon Aug 21, 2006 9:06 am ]
Post subject: 

Незнаю почему пример Serge у меня не запустился ни в эмуляторе ни в реальной системе...

Author:  Veliant [ Mon Aug 21, 2006 9:18 am ]
Post subject: 

bug fix скачал?

Author:  vectoroc [ Mon Aug 21, 2006 9:57 am ]
Post subject: 

оо.. заработало.. всем спасибо

Author:  Ghost [ Mon Aug 21, 2006 10:03 am ]
Post subject: 

Ошибка в функции _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 ассемблера.

Author:  halyavin [ Mon Aug 21, 2006 10:55 am ]
Post subject: 

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

Author:  halyavin [ Mon Aug 21, 2006 10:57 am ]
Post subject: 

Либа компилится с помощью скрипта compile.js. Только там нужно в тексте подправить пути к компилятору С и ассемблера.

Page 1 of 16 All times are UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/