Оберон-клуб «ВЄДАsoft» https://zx.oberon.org/forum/ |
|
Подсистема XDev/DosDev https://zx.oberon.org/forum/viewtopic.php?f=54&t=115 |
Страница 1 из 2 |
Автор: | Zorko [ 05 июн 2013, 10:36 ] |
Заголовок сообщения: | Подсистема XDev/DosDev |
Приступил к реализации новой целевой платформы — DOS, 16 бит. В качестве бэк-энда использую свободный компилятор Borland Turbo C 2.01. Если интересно, то вот пример ASCII, а также смотрите скрипты, как всё устроено, как делать библиотеки и производить компиляцию/сборку EXE для DOS. В дальнейшем будем добавлять новые библиотеки и биндинги к готовым Си-библиотекам для использования их в Оберон-программах. Возможно, будет реализована подсистема Dos32Dev для разработки под 32-битный защищённый режим DOS, основанная на компиляторе DJGPP. Подсистема DosDev не будет работать под любой 64-битной Windows, поскольку DOS-компилятор вызывается прямо из Windows. Может быть под 64-биткой удастся реализовать вызов компилятора через DosBox, надо пробовать. Если вам это удастся, поделитесь, пожалуйста, решением. |
Автор: | Saferoll [ 05 июн 2013, 17:09 ] |
Заголовок сообщения: | Re: Подсистема XDev/DosDev |
Zorko писал(а): Подсистема DosDev не будет работать под любой 64-битной Windows, поскольку DOS-компилятор вызывается прямо из Windows. Может быть под 64-биткой удастся реализовать вызов компилятора через DosBox, надо пробовать. Если вам это удастся, поделитесь, пожалуйста, решением. Теоретически это возможно. Нужно написать файл конфигурации DOSBOX с нужными командами в разделе [autoexec]. Тогда при запуске DOSBOX c этим конфигурационным файлом команды выполнятся.
|
Автор: | Zorko [ 05 июн 2013, 20:16 ] |
Заголовок сообщения: | Re: Подсистема XDev/DosDev |
Да, я тоже думаю, что всё получится с Win 64, было бы желание! Тем временем продолжаю дорабатывать DosDev. Добавил библиотеки CmdLine, Strings и Math, примеры CmdLnTst и Kubik. Последний собрался без каких-либо изменений в коде. А при разработке его даже не думалось ни о каком DOS'е. В этом чую силу единостильных библиотек для различных платформ. Я тут прикинул, что утилиту MakeZX тоже можно будет без изменений с одного исходника собрать не только для DOS, а даже и для Спектрума! При условии, что для TR-DOS будет реализована работа с файлами согласно интерфейсам XDev/Files. Затык произойдёт только в одном месте программы: Код: "OBERON"
Конечно MakeZX слишком узко специализирована, чтобы быть хорошим примером кроссплатформенности Оберонов, но уже хоть что-то. Кстати, её и для .NET/JVM собрать можно, если понадобится. С помощью GPCP. Слегка не нравится большой размер генерируемых EXE-шников. Кубик для DOS получился 17,2 Кб. Но это проблемы Turbo C 2.01 (или его библиотек). |
Автор: | Zorko [ 28 июн 2013, 00:13 ] |
Заголовок сообщения: | Re: Подсистема XDev/DosDev |
После некоторых опытов обнаружил, что работа с библиотеками Turbo C страдает теми же проблемами, что и в SDCC/TinyC. Это странно, так как при работе в DOS с его 640 кб памятью не разбрасывались, но, видимо, где-то глубоко в идеологии Си укоренился порочный подход в подключении к исполняемым файлам неиспользуемых частей кода. И пусть в некоторых компиляторах для обхода проблемы есть выход (например, в GCC есть волшебный ключик), мы боремся с проблемой только одним универсальным для всех Си-компиляторов способом — утилитой smartlib, которую я доработал для коротких имён 8.3 файлов MS-DOS. Теперь Кубик весит около 10 кб. Может ещё можно как-то сократить? Помнится, игра Bolder Dash, собранная тем же Turbo C, весила 16 кб, но там же кода было насколько больше! Или дело в Turbo C++ (который всем подряд так просто скачать на сайте Embarcadero не дают)? |
Автор: | Saferoll [ 27 авг 2013, 20:01 ] |
Заголовок сообщения: | Re: Подсистема XDev/DosDev |
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 или задайте ее как
Вот так выглядит мой файл DosDev\Bin\compile.bat Код: "BAT" @FOR /F "tokens=*" %%f in (..\bin\config.cfg) do %%f А это файл DosDev\Bin\build.bat Код: "BAT" @FOR /F "tokens=*" %%f in (..\bin\config.cfg) do %%f В начале я долго не мог понять, почему 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 стандартно только такие и есть. |
Автор: | Saferoll [ 29 авг 2013, 20:52 ] |
Заголовок сообщения: | Re: Подсистема XDev/DosDev |
Добавил в файл конфигурации DosDev\Bin\config.cfg еще одну строчку - параметры DOSBox. Например, это может выглядеть так Код: "BAT" set DOSBox="C:\Program Files (x86)\DOSBox-0.74\DOSBox.exe" set DOSBoxOpt="-noconsole -conf ..\BIN\dosbox-0.74.conf" Но для использования строки параметров, конечно же, надо изменить файлы DosDev\Bin\compile.bat Код: "BAT" @FOR /F "tokens=*" %%f in (..\bin\config.cfg) do %%f и DosDev\Bin\build.bat Код: "BAT" @FOR /F "tokens=*" %%f in (..\bin\config.cfg) do %%f |
Автор: | Zorko [ 24 сен 2013, 13:23 ] |
Заголовок сообщения: | Re: Подсистема XDev/DosDev |
Прекрасно сделано, Олег! Молоток. Все предложения одобряю и закоммитил, сам сегодня потестил под 64-битной виндой. Всё отлично работает, даже с антивирусом Avira проблем нет. Чуть оптимизировал build.bat, чтобы DosBox запускался не два раза (для компиляции и исполнения), а один. Более того, способ пригодится для вызова DJGPP из-под 64 бит виндоус. Наш соотечественник Максим Феоктистов разработал способ производства сверхкомпактных бинарников для Windows, который использует GCC для DOS32 (DJGPP) и линкер собственной разработки. Его Small HTTP server разработан с помощью этой технологии и имеет очень компактный размер. Я попробовал метод Максима и очень впечатлён результатами. В итоге решил его добавить в WinDev, но нужно сперва разработать механизм переключения компиляторов, тогда их в каждой подсистеме может быть несколько, предлагая пользователю на выбор любую из реализованных схему трансляции. Для WinDev это могут быть Ofront + целевые компиляторы TCC, MINGW, MINGW64, DJGPP и т.п. Для ZXDev можно даже попробовать реализовать дополнительную схему трансляции с помощью нового таргета — z88dk |
Автор: | Saferoll [ 24 сен 2013, 18:39 ] |
Заголовок сообщения: | Re: Подсистема XDev/DosDev |
Zorko писал(а): Все предложения одобряю и закоммитил, сам сегодня потестил под 64-битной виндой. Всё отлично работает, даже с антивирусом Avira проблем нет. Может быть по умолчанию отключить запуск через DOSBox? Для этого достаточно в файле DosDev\Bin\config.cfg заREMить одну строчкуКод: "BAT" REM set DOSBox="C:\Program Files (x86)\DOSBox-0.74\DOSBox.exe" |
Автор: | Zorko [ 24 сен 2013, 19:00 ] |
Заголовок сообщения: | Re: Подсистема XDev/DosDev |
Согласен, поправил. Кстати, хочу попутно заметить, что большой размер сгенеренных этой версией TurboC EXE-шников значительно сокращается если не использовать stdio.h (это подтверждается пустым примером DosDev/Mod/Empty.Mod => EMPTY.EXE = 2,28 Кб), таким образом можно сэкономить на размере если вместо использования stdio.h реализовать свой собственный низкоуровневый ввод-вывод. |
Автор: | Saferoll [ 24 сен 2013, 21:24 ] |
Заголовок сообщения: | Re: Подсистема XDev/DosDev |
Zorko писал(а): Чуть оптимизировал build.bat, чтобы DosBox запускался не два раза (для компиляции и исполнения), а один. Олег, а ты проверял эту оптимизацию? Попробуй удали созданный exe-файл из DosDev\ и из DosDev\Obj и пересоздай его по F12-Build. У меня это не работает, потому что DOSBox не может выполнить "@IF EXIST %1.exe MOVE %1.exe ..". В DOSBox набор команд проще.
|
Страница 1 из 2 | Часовой пояс: UTC + 2 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |