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

C--
http://board.kolibrios.org/viewtopic.php?f=33&t=495
Страница 14 из 14

Автор:  0CodErr [ Вс июл 16, 2017 6:02 pm ]
Заголовок сообщения:  Re: C--

Но в данном случае почему-то они как раз вставились.
Хотя судя по линкер-скрипту после .bss ничего не должно быть.
Получается, что вставились именно нули из .bss.
И действительно, Section length у .bss = 0x714C0 = 453 Kb

Хм.. попробовал в линкер-скрипте не пихать всё в одну секцию, а вынести .bss отдельно:
Спойлер: Показать
Код:
PATH_SIZE    =  1024;
PARAMS_SIZE  =   256;
STACK_SIZE   =  1024;

SECTIONS{
  .all : AT(0){
    LONG(0x554e454D);
    LONG(0x31305445);
    LONG(1);
    LONG("main");
    LONG(end);
    LONG(end + PATH_SIZE + PARAMS_SIZE + STACK_SIZE);
    LONG(end + PATH_SIZE + PARAMS_SIZE + STACK_SIZE);
    LONG(end + PATH_SIZE);
    LONG(end);
    *(.text) *(.text$*)
    *(.rdata) *(.rdata$*)
    *(.data) *(.data$*)
  }
  .bss : {*(.bss)}
  end = .;
  /DISCARD/ : {*(.eh_frame)} 
}

В результате выходной размер стал 112 Kb.

Всё же, чтобы работало правильно нужно использовать данные не из заголовка в kolibri.h, а из линкер-скрипта.

Автор:  akron1 [ Вс июл 16, 2017 6:43 pm ]
Заголовок сообщения:  Re: C--

Да это всё вообще неважно. Всё равно нулевые данные прекрасно сжимаются.

Автор:  Leency [ Сб авг 26, 2017 10:56 pm ]
Заголовок сообщения:  Re: C--

Компилятор С--

C-- | CMM | Си минус минус (для поиска)

Вложения:
c--.7z [392.58 КБ]
81 скачивание

Автор:  0CodErr [ Ср сен 06, 2017 12:45 am ]
Заголовок сообщения:  Re: C--

А кто-нибудь пробовал делать библиотеки для KolibriOS на С--?
Это ведь очень просто. Пример библиотеки из 3-ёх ничего не делающих функций:
Код:
dword EXPORTS[] = {#szProc1, #Proc1,
                   #szProc2, #Proc2,
                   #szProc3, #Proc3,
                          0,      0};

char szProc1[] = "Proc1\0";
char szProc2[] = "Proc2\0";
char szProc3[] = "Proc3\0";

void Proc1(){}
void Proc2(){}
void Proc3(){}
и вот так собирается:
Код:
C-- test.c-- /w32 /sobj
LINK -edit test.obj

Только почему-то у полученного объектного файла SizeOfStringTable = 0.
Непонятно, из-за чего именно так(из-за самого С-- или уже после конвертации).
Мой CoffDump viewtopic.php?f=9&t=3577, конечно, ругается на это, а вот другие утилиты почему-то нет.
Вот что написано в документации по этому поводу:
Цитата:
5.6. COFF String Table

Immediately following the COFF symbol table is the COFF string table. The position
of this table is found by taking the symbol table address in the COFF header and
adding the number of symbols multiplied by the size of a symbol.

At the beginning of the COFF string table are 4 bytes that contain the total size (in
bytes) of the rest of the string table. This size includes the size field itself, so that
the value in this location would be 4 if no strings were present.

Following the size are null-terminated strings that are pointed to by symbols in the
COFF symbol table.
То есть, как минимум там должно быть 4. И в CoffDump есть проверка
Код:
If SizeOfStringTable < 4 Then Exit;
Получается, что всё-таки файл не совсем валидный.

Автор:  0CodErr [ Ср сен 06, 2017 1:15 am ]
Заголовок сообщения:  Re: C--

Как оказалось, формат coff тоже поддерживается.
Только нужно указать вот такие ключи:
Код:
C-- test.c-- /w32 /sobj /COFF
Создался coff файл с двумя секциями ".codedat" и ".version".
Так что, выходит, что конвертировать не обязательно. Только нужно учитывать, что имя секции другое.
А если указать просто:
Код:
C-- test.c--  /COFF
То тогда coff не создастся(как можно было подумать), а создастся приложение MS-DOS "test.com".

Автор:  Siemargl [ Ср сен 06, 2017 8:14 am ]
Заголовок сообщения:  Re: C--

Я тестировал совместимость
viewtopic.php?f=33&t=3418

Прямо сейчас примеров нет под рукой, но особых проблем не было.

Автор:  0CodErr [ Ср сен 06, 2017 2:51 pm ]
Заголовок сообщения:  Re: C--

Да, действительно, формат COFF для библиотек был выбран очень удачно — чуть ли не каждый инструмент может создать COFF.
А для PE DLL бывает нужен ещё и линкер.
Что же касается
Цитата:
невозможно собрать из нескольких объектных файлов одну библиотеку
существует утилита elf2coff. Можно попробовать из нескольких COFF сделать ELF, а потом из полученного ELF сделать один COFF.

Автор:  0CodErr [ Ср сен 13, 2017 4:10 pm ]
Заголовок сообщения:  Re: C--

Решил ещё попробовать использовать функции из masm32lib.

Здесь есть проблема: masm декорирует stdcall-функции.

Попробовал объявлять так
Код:
extern WINAPI ""
{
   _FloatToStr@12 ;
}

но такая конструкция всё равно не заработала

есть вариант пересобрать masm32.lib с помощью masm-совместимого uasm(http://www.terraspace.co.uk/uasm.html)
у uasm есть ключик для отключения декорирования stdcall-функций
Код:
-zt<0|1|2>           Set STDCALL symbol decoration: 0=No name decoration,
                     1=No '@size' suffix for functions, 2=Full (default)
в самом masm я такой возможности не обнаружил

тогда в make.bat из папки masm32\m32lib для masm32.lib надо будет заменить эту строку
Код:
\masm32\bin\ml /c /coff @ml.rsp
на эту
Код:
uasm32 /c /coff /zt0 @ml.rsp


Всё успешно собралось.
Если вдруг кому надо
Вложение:
masm32lib(builded_with_uasm).7z [29.11 КБ]
30 скачиваний
Это всего лишь пересобранная версия, так что, Windows-специфичные функции(FrameWindow, DisplayIcon, ...) работать не будут.

Вот такой код вполне работает
Спойлер: Показать
Код:
// Import from KolibriOS.lib:
extern void  stdcall ThreadTerminate();
extern dword stdcall LoadLibrary(char* Path);
extern dword stdcall GetProcAddress(dword hLib; char* ProcName);
// Import from masm32.lib:
extern void  stdcall FloatToStr(double fpin, char* szDbl);

dword hConsole;

void stdcall (*ConsoleInit)(dword WndWidth, WndHeight, ScrWidth, ScrHeight; char* Caption);
void stdcall (*ConsoleExit)(dword bCloseWindow);
void stdcall (*Write)(char* string);

#define PI (double)3.14159265359
#define E  (double)2.71828182846

void Main(){
  char buf[20];

  hConsole    = LoadLibrary("/sys/lib/console.obj");
  ConsoleInit = GetProcAddress(hConsole, "con_init");
  ConsoleExit = GetProcAddress(hConsole, "con_exit");
  Write       = GetProcAddress(hConsole, "con_write_asciiz");

  ConsoleInit(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, "Test");

  FloatToStr(1.5, #buf);        Write(#buf); Write("\n");
  FloatToStr(-13.42, #buf);     Write(#buf); Write("\n");
  FloatToStr(2.71e2, #buf);     Write(#buf); Write("\n");
  FloatToStr(0.1234E-13, #buf); Write(#buf); Write("\n");
  FloatToStr(PI, #buf);         Write(#buf); Write("\n");
  FloatToStr(E, #buf);          Write(#buf); Write("\n");

  ConsoleExit(0);
  ThreadTerminate();
}
только похоже, что вывод PI и E был короче, чем double.
Спойлер: Показать
Вложение:
masm32lib.PNG
masm32lib.PNG [ 3.03 КБ | 911 просмотров ]
вероятно, C-- не поддерживает double в полной мере.

Размер получился немного больше, так как, судя по map-файлу кроме fptoa также был включен atofp из-за того что там находится функция PowerOf10.

Может, что-то можно было ещё у C-- или у LD подкрутить, чтобы обойтись без пересборки masm32.lib.

Но в любом случае есть возможность использовать код из masm32.lib
У масм-совместимого uasm там, кстати, даже такой ключик есть
Код:
-Zne                 Disable syntax extensions not supported by Masm
Для сборки примера также нужна KolibriOS.lib, взять её можно в теме Delphi7 examples viewtopic.php?f=33&t=3469
Вложение:
test(masm32lib).7z [1.03 КБ]
28 скачиваний

Автор:  Leency [ Вс мар 11, 2018 8:18 pm ]
Заголовок сообщения:  Re: C--

Пусть тут полежит. Компилятор С--, FASM, kpack.exe, kunpack.exe.

Вложения:
cmm.7z [573.15 КБ]
18 скачиваний

Автор:  mkostoevr [ Пн мар 12, 2018 8:07 pm ]
Заголовок сообщения:  Re: C--

Leency писал(а):
Пусть тут полежит. Компилятор С--, FASM, kpack.exe, kunpack.exe.


Просто не могу не поблагодарить.

Спасибо!

Автор:  Leency [ Ср апр 11, 2018 1:37 pm ]
Заголовок сообщения:  Re: C--

Get_8bit_raw
by Veliant для Windows

Приложение предназначено для создания 8 битных картинок для Си приложений.

1. открываем картинку в любом продвинутом редакторе (у меня XnView) и сохраняем ее как RAW.
2. запускаем Get_8bit_raw.exe и выбираем созданный raw

=> На выходе получается 8 битный RAW и текстовый документ с палитрой.

Вложения:
Get_8bit_raw.zip [157.78 КБ]
4 скачивания
raw8b.png
raw8b.png [ 9.91 КБ | 174 просмотра ]

Автор:  0CodErr [ Ср апр 11, 2018 3:24 pm ]
Заголовок сообщения:  Re: C--

Leency писал(а):
картинок для Си приложений
Тебе нужен bmp2xpm.

Например, есть online: https://convertio.co/ru/bmp-xpm/
  • выбрать файл
    Спойлер: Показать
    Вложение:
    1.PNG
    1.PNG [ 50.39 КБ | 166 просмотров ]
  • нажать кнопку преобразовать
    Спойлер: Показать
    Вложение:
    2.PNG
    2.PNG [ 32.64 КБ | 166 просмотров ]
  • подождать и нажать кнопку скачать
    Спойлер: Показать
    Вложение:
    3.PNG
    3.PNG [ 31.53 КБ | 166 просмотров ]
Полученный xpm выглядит вот так:
Спойлер: Показать
Код:
/* XPM */
static char *_8ffa8066002482ad77f006dad8f6103[] = {
/* columns rows colors chars-per-pixel */
"120 88 16 1 ",
"  c black",
". c #800000",
"X c #008000",
"o c #808000",
"O c navy",
"+ c #800080",
"@ c #008080",
"# c #808080",
"$ c #C0C0C0",
"% c red",
"& c green",
"* c yellow",
"= c blue",
"- c magenta",
"; c cyan",
": c gray100",
/* pixels */
"                                                                                                                        ",
"                                                                                                                        ",
"                                                                                                                        ",
"                                                                                                                        ",
"                                                                                                                        ",
"                                                                                                                        ",
"                                                                                                                        ",
"                                                                            $#o#                                        ",
"                                                                     $    $o**#   ##ooooooo##                           ",
"                                                                    ##   #***o$##o******oo#                             ",
"                                                                   ##  #o**** o*******o#$                               ",
"                                                                  #o$ #*****oo******o#                                  ",
"                                                                 #*o$#*************ooo#                                 ",
"                                                                #** o******************o$                               ",
"                                                             ###o** ***************oooo*o$                              ",
"                                                            # #o******************o#  $###                    #+++      ",
"                                                           $o. ****oXX&XXXXoo**** oo                        #+---+$     ",
"                                                           #* o**oX&&&&&&&&&XXo**X###                     #+-----+      ",
"                                                          $oo *oX&XXXX&&&&&&&&Xo*o#                     # +-----+#      ",
"                                                          #**ooXX  $$##X&&&&&X###.#$                   #X#-----+#       ",
"                                                         $o**oX&&X#$##@@X&&&o########                $XXo*----++$##     ",
"                                                       $##**oX&&&X##*X;+.XX###########$             $X@o**#--+ ++--+    ",
"                                                       ##o**X&&&&X#**X;++ #############$           $@@o****-+++----+    ",
"                                                         **X&&&&&X#**o@;X ##############           #@Xo****+------+#    ",
"                                                      #o *oX&&&&&X#######################         #@@X*****------+#     ",
"                                                      #**oX&&&&&&&&##$$# ################        #@@X&&***#------#      ",
"                                                      o**X&&&&&&&&&&XXXX.###############.       $X@@X&&***------+       ",
"                                                      o*oX&&&&&&&&&&&&&X###o############.       #@@X&&&**#-----+        ",
"                                                      ooX&&&&&&&&&&&&&X.##..############.#     #X@XX&&&***----+         ",
"                ###$                                  o &&&&&&&&&&&&&&X##..+.###########.     $X@@X&&&&****--#          ",
"               #o**o                                 $ X&&&&&&&&&&&&&X ## +++.##########.     #@@XX&&&&&***++           ",
"              #o****#                                #X&&&&&&&&&&&&&&X###..++ .########o.#   #X@@X&&&&&&&**+++++#       ",
"              o*****#                               $ &&&&&&&&&&&&&&&.####.+++ o#######$$$    @@ &&&&&&&**o-----#       ",
"             #******                                #X&&&&&&&&&&&&&&&.####.+#+.+.#o##       #@@XX&&&&&&****----+#       ",
"             #******#                              #&&&&&&&&&&&&&&&&& ##### ##+#+##        #X@@ &&&&&&&****#---+        ",
"             o*****o#                            $X&&&&&&&&&&&&&&&&&&Xo#####.+##+#        # @@X&&&&&&&&****---+$        ",
"            #****&&&#                           #X&&&&&&&&&&&&&&&&&&&& ######.+#+#       $ @@XX&&&&&&&&***---+#         ",
"            #**&&&&X$                          #X&&&&&&&&&&&&&&&&&&&&&&Xo#####o.++      $ @@@X&&&&&&&&&&**---+          ",
"            #&&&&&&X                         $#XXXX&&&&&&&&&&&&&&&&&&&&&X.######o..#   # @@@X&&&&&&&&&&&*#--+$          ",
"             &&@+--+        ##X####$        #XXX&&&XX&&&&&&&&&&&&&&&&&&&&&Xooo####$   #X@@@X&&&&&&&&&&&**+-+$           ",
"             &+----#      #XX&&&&&&XX##   #X&&&&&&&&X X&&&&&&&&&&&&&&&&&&&&&& $$    ##@@@@XX&&&&&&&&&&**+-+$            ",
"   $ $       ------#     #X&&&&&&&&&&&&X@XX&&&&&&&&&&& &&&&&&&&&&&&&&*&&&&&&&    $#X@@@@@@X&&&&&&&&&&*#--+##            ",
"  #o*o#      -----+#    #X&&&&&&&&&&&&&&&&&&&&&&&&&&&&XX&&&&&&&&&&&&**&&&&&&& ###X@@@@@@XX&&&&&&&&&&&*#+++-+#           ",
"  o****#    #-----+#   $X&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&*&**&*&**&&X@@@@@@@@@XX&&&&&&&&&&&&*#+---+$           ",
"  o*****#   #-----+#   #&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&o*&*&*&****&**&XX@@@@@@@@X&&&&&&&&&&&&&&*#---+$            ",
"  o*****&#  #+----+#   X&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&X&&&&&**o*&**********XX@@@@@@XX&&&&&&&&&&&&&&&*#--+              ",
"  o****&&o# $+-----#  #X&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&******&****&*&&&X@@@@XXX&&&&&&&&&&&&&&&&**+#               ",
"  #****&&&+$:+-----+  #&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*******&*&*&&&&&oXXXXXXXX&&&&&&&&&&&&&&&**#$                ",
"  #o***&&&-+:#+----+  X&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*******&*&&&&&&&o XXXXXXX&&&&&&&&&&&&&&o#$                  ",
"   .***&&@--+$+----+# X&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*****&&&&&&&&&&&&* XXXXXXX&&&&&&&&&&&&&&*#                   ",
"   #o**&&#--+##-----##X&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&XX******&&&&&&&&&&&&*XXXXXXXX&&&&&&&&&&&&&&##                   ",
"    #**&&+---+#+----+#X&&&&&&&&&&XX&&&&&&&&&&&&&&&&&&XXXX&*****&&&&oo&&&&&&&*oXXXXXXX&&&&&&&&&&&&X$                     ",
"     o*&&+----+ +----+X&&&&&&&&&&&XXXXXXXXXX&&&&XXXXXXXXXo***&*&&&&ooooo&&&&*oXXXXXXX&&&&&&&&&&&&#                      ",
"      X&&+-----+ ----+X&&&&&&&&&&&&XXXXXXXXXXXXXXXXXXXXXXo*&&&&&&&oooooo&&&&*oXXXXXXX&&&&&&&&&&&X$                      ",
"      $X&+------++---- &&&&&&&&&&&&&XXXXXXXXXXXXXXXXXX XX&&&&&&ooooooooo&&&&*oXXXXXXX&&&&&&&&&XXX                       ",
"  ##o#::X+-------++---+X&&&&&&&&&&&&&X XXXXXXXXXXXXXXXXXX&&&&&&**ooooooo&&&&&oXXXXXXX&&&&&&&&& &#                       ",
"  o***o#:#------------+ &&&&&&&&&&&&&&X XXXXXXXXXXXXXXXX&&&&&o******ooooo&&&&oXXXXXXX&&&&&&&&##X$                       ",
" #o****X###+-----------+X&&&&&&&&&&&&&&XXXXXXXXXXXXXXXX&&&&&&********oooo&&&&XXXXXXXX&&&&&&&o  $                        ",
"  o****&&++#++---------+ &&&&&&&&&&&&&&& XXXXXXXXXXXXX*&&&&&o*********ooo&&&&XXXXXXXX&&&X&&&#                           ",
"  #****&&+-++ +---------+&&&&&&&&&&&&&&&XXXXXXXXXXXXX**&&&&&**********oooo&&&XXXXXXXX&&& &&#                            ",
"   o***&&+---++++-------+X&&&&&&&&&&&&&&& XXXXXXXXXX**&&&&&&**********oooo&&&XXXXXXXX&&X &o                             ",
"    #o*&&#------+--------+&&&&&&&&&&&&&&&XXXXXXXXXX**&&&&&&***********ooooo&&XXXXX XX&&$##                              ",
"     $#&&#---------------+&&&&&&&&&&&&&&&XXXXXXXXX***&&&&o************ooooo&&oXXX  XXX$                                 ",
"       $##---------------+X&&&&&&&&&&&&&&XXXXXXXX***&&&&ooo***********ooooo&*oXXX$#XX$                                  ",
"         $#++------------+X&&&&&&&&&&&&&&XXXXXXXX**&&&&oooo**********ooooo&&*oXX#  #                                    ",
"            ##+++--------+&&&X&&&&X&&&&&&XXXXXXX&**&&&&ooooo*********ooooo&&*XX#                                        ",
"                $#+++----.&&&X&&&&X&XX&&&XXXXXXX**&&&&oooooooo*****oooooo&&**XX                                         ",
"               #+++++---+o**oo&&&&X&X&&&&XXXXXXX*&&&&&%%oooooooooooooooo&&&*o#                                          ",
"              #+--------+***o***&X&&X&&&&XXXXXXo*&&&&&%%ooooooooooooooo&&&**#                                           ",
"               #+------+o**o****oo&&X&&&&XXXXXX**&&&&o%%%ooooooooooooo&&&**o$                                           ",
"                 #+++++.**o****oo**oo&&&&XXXXXX**&&&&ooooo%oooooooooo&&&***o                                            ",
"                     $++*oo***oo***o****&XXXXXX**&&&&&&&o%%%%ooooooo&&&&**o#                        $#...#              ",
"                     #--+++**oo***oo****oXXXXXX**&&&&&&&&&&oo&&&&&&&&&&***#                       #.%%%.#               ",
"                    $+-+ ---+ ###*.o****oXXXXXX**&&&&&&&&&&&&&&&&&&&&&***o                     $#.%%%%.#                ",
"                    $ #$+--+#+---# o**** XXXXXX**********&&&&&&&&&&&****o                    #..%%%..#                  ",
"                        $+#  #++#  #++#o#XXXXXX************&&&*********o$                  #..%%%%.#                    ",
"                                    #++  $#XXXX**********o************o#                 #.%%%%%%%.##                   ",
"                     $###########$        $ . Xo******oooo***********o#                #.%%%%%%%.#####                  ",
"                  $#..%%%%%%%%%%%..###    ...............oo**ooo***o..#             $#.%%%%%..#                         ",
"               #...%%%%%%..%%%%%%%%%%%...#.oo............. .. .........#          $#.%%%%..#                            ",
"               $ %%%..##########..%%%%%%%..oo..oo..........:#.........oo#      $#..%%%%.#$                              ",
"                #..##             $#..%%%..oo.ooo.ooo...  #$ ......ooooo.#$###..%%%%%.#$                                ",
"                 #                    ####.oo..oo.ooo.%%%.......o..oo.oo....%%%%%%%.#$                                  ",
"                                          $.....o..oo.%%%%%%%%..oo.oo.oo..%%%%%%%.#$                                    ",
"                                            ###.##... ..%%%%%%.oo..o..o..%%%%%%.#                                       ",
"                                                   ### $######.oo.oo.o..%%%%.##                                         ",
"                                                              ..###### #####                                            ",
"                                                               $                                                        "
};

Автор:  pavelyakov [ Ср апр 11, 2018 3:48 pm ]
Заголовок сообщения:  Re: C--

Leency писал(а):
Get_8bit_raw
by Veliant для Windows

Приложение предназначено для создания 8 битных картинок для Си приложений.

1. открываем картинку в любом продвинутом редакторе (у меня XnView) и сохраняем ее как RAW.
2. запускаем Get_8bit_raw.exe и выбираем созданный raw

=> На выходе получается 8 битный RAW и текстовый документ с палитрой.

А есть консольный вариант?

Автор:  Leency [ Ср апр 11, 2018 8:03 pm ]
Заголовок сообщения:  Re: C--

Нет, но вообще такую программу несложно написать.

Автор:  Freeman [ Пт апр 13, 2018 10:14 am ]
Заголовок сообщения:  Re: C--

pavelyakov писал(а):
Leency писал(а):
Get_8bit_raw
1. открываем картинку в любом продвинутом редакторе (у меня XnView) и сохраняем ее как RAW.
2. запускаем Get_8bit_raw.exe и выбираем созданный raw

А есть консольный вариант?

На самом деле XnView умеет сохранять в xpm, и у него есть консольный вариант. По крайней мере раньше был, в старом XnView, который не на Qt. А в оконном XnView был пакетный исполнитель с интерактивным назначением действий и сохранением созданных скриптов.

Страница 14 из 14 Часовой пояс: UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/