Внимание! Это временный неофициальный архив старой версии форума Полигон Призраков, созданный сочувствующим форуму участником. Этот сайт просуществует лишь до тех пор, пока администрация Полигона не сдержит своё обещание и не откроет официальный архив по адресу old.sannata.org.

Полигон-2

Форум о старых компьютерах

Объявление форума

Если пользуетесь личными сообщениями и получили по электронной почте оповещение о новом письме, не отвечайте, пожалуйста, почтой. Зайдите на форум и ответьте отправителю через ЛС.

Полигон-2 »   Старый софт »   GNU-компилятор под DOS
RSS

GNU-компилятор под DOS

<<Назад  Вперед>> Печать
 
F0lken
Advanced Member


Всего сообщений: 762
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
7 нояб. 2006
Уважаемые коллеги!
Знаю я, что есть такой djgpp компилятор для DOS, который можно активно пользовать для портирования софта.
У меня есть такой вопрос: а никому не удавалось ли заставить работать кросс компилятор на любом юниксе, у которого target-платформа i386-pc-msdosdjgpp ?
Два дня собирал под дебианом - в результате - vanilla версии не собираются, порты дебиана собираются, но не умеют быть кросс-компиляторами, если целевая система не linux. Короче, понимается только цель i386, которая потом транслируется в i386-linux-gnu, а вышеописанная цель игнорируется.

Мысль следующая, наладить кросс-компилятор для ms-dos, дабы компилироваться на современной платформе, а бинарники тянуть уже на dos.

И второй вопрос вдогонку - SDL (simple direct media layer) библиотека для DOS есть ли в природе ?
0leg
Advanced Member


Откуда: Город-герой Тула
Всего сообщений: 1991
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
6 окт. 2007
F0lken,
> аставить работать кросс компилятор на любом юниксе, у которого target-платформа i386-pc-msdosdjgpp
Про это есть статья, по-моему она входит в комплект поставки djgpp. Заставить его работать можно, об этом были упоминания (довольно давно) в списке рассылки freedos-user (или -devel? Не помню). Интересно даже стало, ночером попробую собрать...

> SDL (simple direct media layer) библиотека для DOS есть ли в природе ?
Нет. http://www.bttr-software.de/forum/board_entry.php?id=5839
alecv
Advanced Member


Откуда: Санкт-Петербург
Всего сообщений: 5545
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
5 окт. 2004
F0lken а cross binutils собираются ?
alecv
Advanced Member


Откуда: Санкт-Петербург
Всего сообщений: 5545
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
5 окт. 2004
Собрал binutils-2.19 стандартные $ ./configure --target=i386-msdosdjgpp --prefix=/opt/cross-i386-msdosdjgpp
$ make install
$ export PATH=$PATH:/opt/cross-i386-msdosdjgpp/bin

Написал Hello World в AT&T синтаксисе (чтобы страшнее было ;) ) в принципе gas gонимает и интел синтаксис: $ cat hello.S
        .text
        .globl  start
        .code16
        .arch   i8086

start:  movw    $hello, %dx
        movw    $9,%ax
        int     $0x21

        int     $0x20

        .data

hello:  .ascii  "Hello, World!\13\10$"

Оно компилится и линкуется:
$ i386-msdosdjgpp-as -a -o hello.o hello.S
$ i386-msdosdjgpp-ld -o hello.exe hello.o

Но к сожалению добавляет туда DOS-extender "go32" и EXE-шник получается 3Кб, хотя EXE-шник выглядит правильно, начинается с MZ.

Попробовать негде, только если qemu с Free-DOS поставить ;)
F0lken
Advanced Member


Всего сообщений: 762
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
7 нояб. 2006
Спасибо про инфу про SDL.
По поводу DJGPP - тоже нашел инструкцию по сборке
http://www.delorie.com/howto/d...vised.html
Правда там компилятор не собирается =). Известный баг, если собирать более старшей версией. Вобщем идея такая, что нужно брать все совсем последнее и мысленно апгрейдить инструкцию.
Там же в конце (и в начале) есть инструкция, как создавать нормальные exe-файлы.

А под netbsd есть отдельный порт в pkgsrc... Который все это собирает и делает.
alecv
Advanced Member


Откуда: Санкт-Петербург
Всего сообщений: 5545
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
5 окт. 2004
F0lken В этой доке описывается как запустить этот самый EXE-шник, со встроенным DJGPP/GO32 и где взять его запчасти (DPMI сервер). А как сделать "чистый" EXE, без DPMI, я не нашел.

Похоже с помощью стандартного ld для --target=i386-msdosdjgpp не получится изготовить стандартный .EXE, но вроде как можно делать .COM файлы.
alecv
Advanced Member


Откуда: Санкт-Петербург
Всего сообщений: 5545
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
5 окт. 2004
Сделал MS-DOS .COM файл.
$ i386-msdosdjgpp-as -a=hello.lst -o hello.o hello.S
$ i386-msdosdjgpp-ld -Ttext 0x100 -Map hello.map --oformat binary -o hello.com hello.o

hello.map и hello.lst генерятся для красоты. Формат - настоящий COM, то есть в файле первые 0x100 байт пропущены, а все смещения как будто он загрузился с 0x100.
00000000 BA 00 02 B8 │ 09 00 CD 21 │ CD 20 90 90 │ 90 90 90 90 ?..?..?!? ......
00000010 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 ................
00000020 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 ................
00000030 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 ................
00000040 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 ................
00000050 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 ................
00000060 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 ................
00000070 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 ................
00000080 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 ................
00000090 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 ................
000000A0 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 ................
000000B0 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 ................
000000C0 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 ................
000000D0 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 ................
000000E0 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 ................
000000F0 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 ................
00000100 48 65 6C 6C │ 6F 2C 20 57 │ 6F 72 6C 64 │ 21 0B 08 24 Hello, World!..$
00000110 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 ................
00000120 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 │ 00 00 00 00 ................
...

hello.com получается 768 байт т.к. в скрипте линкера имеются два ". = ALIGN (0x200)". Если переписать скрипт, то можно генерить короткие COM-файлы.

Теперь можно и GCC пробовать. ;)
0leg
Advanced Member


Откуда: Город-герой Тула
Всего сообщений: 1991
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
6 окт. 2007
У мну всё нормально собралось. GCC 4.3.3, Binutils 2.19.1, djcxr204.zip (компилил по инструкции из него). Дистр — Slackware 12.2 (GCC 4.2.4, binutils 2.18.50.0.9.20080822).Только вот я gcc32s2.zip не использовал. И часть файлов пришлось после установки перенести руками в правильные места.
alecv
Advanced Member


Откуда: Санкт-Петербург
Всего сообщений: 5545
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
5 окт. 2004
0leg"Hello World" EXE на C сколько занимает (после strip) ? Не пробовал избавиться от go32 ?
0leg
Advanced Member


Откуда: Город-герой Тула
Всего сообщений: 1991
Рейтинг пользователя: 0


Ссылка


Дата регистрации на форуме:
6 окт. 2007
alecv,
> колько занимает (после strip) ?
52736 байт. То же самое, но скомпейлированное линуховым ГЦЦ под линух занимает 2752 байта...

> Не пробовал избавиться от go32 ?
Пока нет.
<<Назад  Вперед>> Печать
Полигон-2 »   Старый софт »   GNU-компилятор под DOS
RSS

0 посетителей просмотрели эту тему за последние 15 минут
В том числе: 0 гостей, 0 скрытых пользователей

Последние RSS
[Москва] LIQUID-Акция. Сливаются разъемы CF
МС7004 и 7004А на AT и XT
Пайка термотрубок
Проммать s478 PEAK 715VL2-HT ( Full-Size SBC)
Подскажите по 386 материке по джамперам.

Самые активные 5 тем RSS