Оберон-клуб «ВЄДАsoft»

Твердыня модульных языков
Текущее время: 21 дек 2024, 18:03

Часовой пояс: UTC + 2 часа




Начать новую тему Ответить на тему  [ Сообщений: 11 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Подсистема XDev/DosDev
СообщениеДобавлено: 05 июн 2013, 10:36 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Приступил к реализации новой целевой платформы — DOS, 16 бит. В качестве бэк-энда использую свободный компилятор Borland Turbo C 2.01. Если интересно, то вот пример ASCII, а также смотрите скрипты, как всё устроено, как делать библиотеки и производить компиляцию/сборку EXE для DOS.

В дальнейшем будем добавлять новые библиотеки и биндинги к готовым Си-библиотекам для использования их в Оберон-программах. Возможно, будет реализована подсистема Dos32Dev для разработки под 32-битный защищённый режим DOS, основанная на компиляторе DJGPP.

Подсистема DosDev не будет работать под любой 64-битной Windows, поскольку DOS-компилятор вызывается прямо из Windows. Может быть под 64-биткой удастся реализовать вызов компилятора через DosBox, надо пробовать. Если вам это удастся, поделитесь, пожалуйста, решением.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Подсистема XDev/DosDev
СообщениеДобавлено: 05 июн 2013, 17:09 
Не в сети
Администратор
Аватара пользователя

Сообщения: 273
Откуда: Россия
Zorko писал(а):
Подсистема DosDev не будет работать под любой 64-битной Windows, поскольку DOS-компилятор вызывается прямо из Windows. Может быть под 64-биткой удастся реализовать вызов компилятора через DosBox, надо пробовать. Если вам это удастся, поделитесь, пожалуйста, решением.
Теоретически это возможно. Нужно написать файл конфигурации DOSBOX с нужными командами в разделе [autoexec]. Тогда при запуске DOSBOX c этим конфигурационным файлом команды выполнятся.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Подсистема XDev/DosDev
СообщениеДобавлено: 05 июн 2013, 20:16 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Да, я тоже думаю, что всё получится с Win 64, было бы желание!

Тем временем продолжаю дорабатывать DosDev. Добавил библиотеки CmdLine, Strings и Math, примеры CmdLnTst и Kubik. Последний собрался без каких-либо изменений в коде. :) А при разработке его даже не думалось ни о каком DOS'е. В этом чую силу единостильных библиотек для различных платформ. Я тут прикинул, что утилиту MakeZX тоже можно будет без изменений с одного исходника собрать не только для DOS, а даже и для Спектрума! При условии, что для TR-DOS будет реализована работа с файлами согласно интерфейсам XDev/Files. Затык произойдёт только в одном месте программы:
Код: "OBERON"
  1. data: ARRAY 65536 OF Platform.BYTE; (* ZX Spectrum binary data. *)
Ну нельзя в Спеке выделить столько непрерывной памяти. Но, опять же, если изменить алгоритм, чтобы занимал меньше памяти (а это возможно, если реализовать позиционирование при записи файлов), тогда нет проблем. Вот это мощь и сила, да? :)

Конечно MakeZX слишком узко специализирована, чтобы быть хорошим примером кроссплатформенности Оберонов, но уже хоть что-то. Кстати, её и для .NET/JVM собрать можно, если понадобится. :) С помощью GPCP.

Слегка не нравится большой размер генерируемых EXE-шников. Кубик для DOS получился 17,2 Кб. Но это проблемы Turbo C 2.01 (или его библиотек).


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Подсистема XDev/DosDev
СообщениеДобавлено: 28 июн 2013, 00:13 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
После некоторых опытов обнаружил, что работа с библиотеками Turbo C страдает теми же проблемами, что и в SDCC/TinyC. Это странно, так как при работе в DOS с его 640 кб памятью не разбрасывались, но, видимо, где-то глубоко в идеологии Си укоренился порочный подход в подключении к исполняемым файлам неиспользуемых частей кода. И пусть в некоторых компиляторах для обхода проблемы есть выход (например, в GCC есть волшебный ключик), мы боремся с проблемой только одним универсальным для всех Си-компиляторов способом — утилитой smartlib, которую я доработал для коротких имён 8.3 файлов MS-DOS.

Теперь Кубик весит около 10 кб. Может ещё можно как-то сократить? Помнится, игра Bolder Dash, собранная тем же Turbo C, весила 16 кб, но там же кода было насколько больше!

Или дело в Turbo C++ (который всем подряд так просто скачать на сайте Embarcadero не дают)?


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Подсистема XDev/DosDev
СообщениеДобавлено: 27 авг 2013, 20:01 
Не в сети
Администратор
Аватара пользователя

Сообщения: 273
Откуда: Россия
Zorko писал(а):
Подсистема DosDev не будет работать под любой 64-битной Windows, поскольку DOS-компилятор вызывается прямо из Windows. Может быть под 64-биткой удастся реализовать вызов компилятора через DosBox, надо пробовать. Если вам это удастся, поделитесь, пожалуйста, решением.
Мне удалось запустить turboC -компилятор через Dosbox на 64-разрядной Windows 7. Разумеется это возможно и в 32-разрядной ОС и в Windows XP, так что желающие могут попробовать. Кстати, виртуальная Dos-машина Dosbox может оказаться полезной не только потому, что старые Dos-приложения иначе не запустить.
1) Скачиваем Dosbox, устанавливаем и при необходимости настраиваем, хотя базовые возможности доступны сразу после установки без особых настроек.
2)Скачиваем и устанавливаем Turbo C 201. Поскольку инсталятор - это тоже dos-приложение, устанавливать придется через Dosbox. Но у меня этот компилятор был установлен еще в Windows XP, так что я просто скопировал все его файлы в DosDev\Bin\TC201\.
3)А вот теперь нужно переделать батники DosDev\Bin\compile.bat и DosDev\Bin\build.bat. Для обеспечения большей гибкости решил не прописывать в каждом файле путь к dosbox, а создать файл параметров DosDev\Bin\config.cfg. В нём пока единственная строчка, указывающая файл для запуска dosbox (c полным путем):
Код: "BAT"
set dosbox="C:\Program Files (x86)\DOSBox-0.74\DOSBox.exe" 
В дальнейшем можно добавить в этот файл дополнительные команды.

Сами батники compile.bat и build.bat изменяем так, чтобы они вначале выполнили команды из config.cfg, потом проверили существование переменной окружения dosbox. Если такая переменная задана, то компилятор и созданные программы запускаем через файл, на который она указывает. Если такой переменной нет, то компилятор и приложения запускаем непосредственно.
Такой подход позволит быстро подключить\отключить dosbox изменением строки всего в одном файле. Для отключения удалите строку set dosbox="C:\Program Files (x86)\DOSBox-0.74\DOSBox.exe" из файла параметров config.cfg или задайте ее как
    set dosbox=
или закройте комментарием
    REM set dosbox="C:\Program Files (x86)\DOSBox-0.74\DOSBox.exe"

Вот так выглядит мой файл DosDev\Bin\compile.bat
Код: "BAT"
@FOR /F "tokens=*" %%f in (..\bin\config.cfg) do  %%f
@SET PATH=..\BIN\TC201\BIN
@SET Lib=..\Lib
@SET This=%CD:~-3%
 
IF /%dosbox%==/ GOTO :nodosbox
%dosbox% -c "mount c .." -c "c:" -c "cd %This%" -c "path %PATH%" -c "tcc -1 -O -d -f87 -Z -I..\BIN\TC201\INCLUDE -IOBJ -L..\BIN\TC201\LIB -I%Lib% -c %1.c" -c "@IF errorlevel 1 PAUSE" -c EXIT
EXIT
 
:nodosbox
tcc -1 -O -d -f87 -Z -I..\BIN\TC201\INCLUDE -IOBJ -L..\BIN\TC201\LIB -I%Lib% -c %1.c
@IF errorlevel 1 PAUSE

А это файл DosDev\Bin\build.bat
Код: "BAT"
@FOR /F "tokens=*" %%f in (..\bin\config.cfg) do  %%f
@SET PATH=..\BIN\TC201\BIN
@SET Lib=..\Lib
@SET This=%CD:~-3%
 
IF /%dosbox%==/ GOTO :nodosbox
%dosbox% -c "mount c .." -c "c:" -c "cd %This%" -c "path %PATH%" -c "tcc -1 -O -d -f87 -Z -I..\BIN\TC201\INCLUDE -L..\BIN\TC201\LIB -IOBJ -I%Lib% %Lib%\DOSDEV.LIB %1.c" -c "@IF errorlevel 1 PAUSE" -c EXIT
IF EXIST %1.exe MOVE %1.exe ..
@CLS
%dosbox% -c "mount c .." -c "c:" -c "%1.exe" -c PAUSE -c EXIT
EXIT
 
:nodosbox
tcc -1 -O -d -f87 -Z -I..\BIN\TC201\INCLUDE -L..\BIN\TC201\LIB -IOBJ -I%Lib% %Lib%\DOSDEV.LIB %1.c
@IF errorlevel 1 PAUSE
@IF EXIST %1.exe MOVE %1.exe ..
@CLS
 
@..\%1.exe
@PAUSE
В этих файлах вначале выполняются команды из config.cfg и задаются необходимые переменные окружения. Затем, в зависимости от наличия dosbox, либо компилятор и созданная программа запускается через Dosbox, либо как раньше - непосредственно.

В начале я долго не мог понять, почему dosbox срабатывает через раз - то не запускается компилятор, то он не может создать exe, то этот экзешник "не найден", хотя вроде бы на месте. Оказалось, что виноват мой антивирус. Хотя я когда-то прописал необходимые разрешения и для dosbox и для blackbox, но антивирусу показалась очень подозрительной такая хитрая механика запуска через батник :) Проблема ушла после добавления батников в доверенные.

Оставшиеся проблемы. В момент запуска батников текущей папкой является папка, содержащая с-файлы (DosDev\Obj). Чтобы компилятор смог найти эти си-исходники, а пути ..\BIN\TC201 или ..\Lib обработались правильно, в Dosbox мы должны зайти в ту же самую папку. Но как это сказать Dosbox? Там своя файловая система (так реальный каталог DosDev монтируется в Dosbox-ий виртуальный диск С:). Вначале я просто ставил команду -c "cd OBJ", но это позволяло откомпилировать только файлы из каталога OBJ. Потом придумал использовать @SET This=%CD:~-3%, но это позволит обработать файлы из каталога в имени которого РОВНО 3 СИМВОЛА! Легкого пути как решить эту проблему пока не придумал. Можно конечно средствами батника присвоить @SET This= "часть %CD% от последней \ до конца строки", но готовой функции для этого я не знаю, а исхитряться с батниковскими циклами лень. :) Пусть пока будут 3-символьные каталоги, тем более что в DosDev стандартно только такие и есть.

_________________
А кроме того, я думаю, что корFORген должен быть разрушен!


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Подсистема XDev/DosDev
СообщениеДобавлено: 29 авг 2013, 20:52 
Не в сети
Администратор
Аватара пользователя

Сообщения: 273
Откуда: Россия
Добавил в файл конфигурации DosDev\Bin\config.cfg еще одну строчку - параметры DOSBox. Например, это может выглядеть так
Код: "BAT"
set DOSBox="C:\Program Files (x86)\DOSBox-0.74\DOSBox.exe"  
set DOSBoxOpt="-noconsole"
Параметр -noconsole убирает лишнее консольное окошко DOSBox. Можно также скопировать из пользовательского каталога (в Windows 7 это "C:\Documents and Settings\имяпользователя\AppData\Local\DOSBox") файл конфигурации dosbox-0.74.conf, например, в DosDev\Bin, изменить в нем параметры DOSBox специально для работы с XDev и подключить его при помощи параметра
set DOSBoxOpt="-noconsole -conf ..\BIN\dosbox-0.74.conf"
Но для использования строки параметров, конечно же, надо изменить файлы

DosDev\Bin\compile.bat
Код: "BAT"
@FOR /F "tokens=*" %%f in (..\bin\config.cfg) do  %%f
@SET PATH=..\BIN\TC201\BIN
@SET Lib=..\Lib
@SET This=%CD:~-3%
@SET dosboxopt=%dosboxopt:~1,-1%
 
IF /%dosbox%==/ GOTO :nodosbox
%dosbox% %dosboxopt% -c "mount c .." -c "c:" -c "cd %This%" -c "path %PATH%" -c "tcc -1 -O -d -f87 -Z -I..\BIN\TC201\INCLUDE -IOBJ -L..\BIN\TC201\LIB -I%Lib% -c %1.c" -c "@IF errorlevel 1 PAUSE" -c EXIT
EXIT
 
:nodosbox
tcc -1 -O -d -f87 -Z -I..\BIN\TC201\INCLUDE -IOBJ -L..\BIN\TC201\LIB -I%Lib% -c %1.c
@IF errorlevel 1 PAUSE

и DosDev\Bin\build.bat
Код: "BAT"
@FOR /F "tokens=*" %%f in (..\bin\config.cfg) do  %%f
@SET PATH=..\BIN\TC201\BIN
@SET Lib=..\Lib
@SET This=%CD:~-3%
@SET dosboxopt=%dosboxopt:~1,-1%
 
IF /%dosbox%==/ GOTO :nodosbox
%dosbox% %dosboxopt% -c "mount c .." -c "c:" -c "cd %This%" -c "path %PATH%" -c "tcc -1 -O -d -f87 -Z -I..\BIN\TC201\INCLUDE -L..\BIN\TC201\LIB -IOBJ -I%Lib% %Lib%\DOSDEV.LIB %1.c" -c "@IF errorlevel 1 PAUSE" -c EXIT
IF EXIST %1.exe MOVE %1.exe ..
@CLS
%dosbox% %dosboxopt% -c "mount c .." -c "c:" -c "%1.exe" -c PAUSE -c EXIT
EXIT
 
:nodosbox
tcc -1 -O -d -f87 -Z -I..\BIN\TC201\INCLUDE -L..\BIN\TC201\LIB -IOBJ -I%Lib% %Lib%\DOSDEV.LIB %1.c
@IF errorlevel 1 PAUSE
@IF EXIST %1.exe MOVE %1.exe ..
@CLS
 
@..\%1.exe
@PAUSE


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Подсистема XDev/DosDev
СообщениеДобавлено: 24 сен 2013, 13:23 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Прекрасно сделано, Олег! Молоток. :)

Все предложения одобряю и закоммитил, сам сегодня потестил под 64-битной виндой. Всё отлично работает, даже с антивирусом Avira проблем нет.

Чуть оптимизировал build.bat, чтобы DosBox запускался не два раза (для компиляции и исполнения), а один.

Более того, способ пригодится для вызова DJGPP из-под 64 бит виндоус. Наш соотечественник Максим Феоктистов разработал способ производства сверхкомпактных бинарников для Windows, который использует GCC для DOS32 (DJGPP) и линкер собственной разработки. Его Small HTTP server разработан с помощью этой технологии и имеет очень компактный размер.

Я попробовал метод Максима и очень впечатлён результатами. В итоге решил его добавить в WinDev, но нужно сперва разработать механизм переключения компиляторов, тогда их в каждой подсистеме может быть несколько, предлагая пользователю на выбор любую из реализованных схему трансляции. Для WinDev это могут быть Ofront + целевые компиляторы TCC, MINGW, MINGW64, DJGPP и т.п. Для ZXDev можно даже попробовать реализовать дополнительную схему трансляции с помощью нового таргета — z88dk


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Подсистема XDev/DosDev
СообщениеДобавлено: 24 сен 2013, 18:39 
Не в сети
Администратор
Аватара пользователя

Сообщения: 273
Откуда: Россия
Zorko писал(а):
Все предложения одобряю и закоммитил, сам сегодня потестил под 64-битной виндой. Всё отлично работает, даже с антивирусом Avira проблем нет.
Может быть по умолчанию отключить запуск через DOSBox? Для этого достаточно в файле DosDev\Bin\config.cfg заREMить одну строчку
Код: "BAT"
REM set DOSBox="C:\Program Files (x86)\DOSBox-0.74\DOSBox.exe"  
set DOSBoxOpt="-noconsole"
Тогда в 32-разрядной ОС и в Windows XP компилятор будет запускаться непосредственно сразу после скачивания XDev (конечно нужно позаботиться о компиляторе TurboC). А у кого DOS-приложения не запускаются, тот может установить DOSBox и убрать REM (и поправить C:\Program Files (x86)\DOSBox-0.74\DOSBox.exe при необходимости). Кстати, в Windows XP или 32-разрядной Win7 тоже можно использовать DOSBox.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Подсистема XDev/DosDev
СообщениеДобавлено: 24 сен 2013, 19:00 
Не в сети
Аватара пользователя

Сообщения: 1019
Откуда: Днепропетровская обл.
Согласен, поправил. :)

Кстати, хочу попутно заметить, что большой размер сгенеренных этой версией TurboC EXE-шников значительно сокращается если не использовать stdio.h (это подтверждается пустым примером DosDev/Mod/Empty.Mod => EMPTY.EXE = 2,28 Кб), таким образом можно сэкономить на размере если вместо использования stdio.h реализовать свой собственный низкоуровневый ввод-вывод.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Подсистема XDev/DosDev
СообщениеДобавлено: 24 сен 2013, 21:24 
Не в сети
Администратор
Аватара пользователя

Сообщения: 273
Откуда: Россия
Zorko писал(а):
Чуть оптимизировал build.bat, чтобы DosBox запускался не два раза (для компиляции и исполнения), а один.
Олег, а ты проверял эту оптимизацию? Попробуй удали созданный exe-файл из DosDev\ и из DosDev\Obj и пересоздай его по F12-Build. У меня это не работает, потому что DOSBox не может выполнить "@IF EXIST %1.exe MOVE %1.exe ..". В DOSBox набор команд проще.


Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 2 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
© VEDAsoft Oberon Club