Вопрос или проблема
Я ищу C кросс-компилятор и эмулятор для 16-битного процессора, который работает под Linux. Я предпочел бы, чтобы целевой процессор был 8086 с FreeDOS или на Dosemu (в этом случае найти эмулятор не проблема). Одним из ограничивающих факторов является то, что он должен поддерживать 64-битную арифметику.
Цель состоит в том, чтобы портировать и протестировать некоторый код, который в настоящее время нацелен на 32-битные встроенные системы, на 16-битные системы, для которых у меня нет легкого доступа к инструментам разработки и эмуляторам. Код в основном переносим, за исключением того, что предполагается, что int
— это 32 бита, так что любой 16-битный целевой процессор подойдет для тестирования непрерывной интеграции.
Ограничения:
- Компилятор и эмулятор должны работать под Linux в автоматизированной среде сборки и тестирования.
- В эмуляторе мне нужно иметь возможность запускать свою программу и получать данные на вход и выход. Мне понадобились бы либо базовая операционная система, либо какой-то код, который можно подключить к моей программе для реализации серийного или файлового ввода-вывода (желательно оба, но как долго у меня есть способ предоставить тестовые данные и получить результаты, это должно быть в порядке). DOS (на 8086) было бы хорошо, потому что вокруг него уже есть существующие инструменты, но это не обязательное условие.
- Программное обеспечение должно быть бесплатным для использования. Лицензия, не позволяющая распространять бинарные файлы, произведенные компилятором, будет приемлема (мне нужны бинарные файлы только для внутреннего тестирования). Лицензия, запрещающая любое коммерческое использование, сейчас мне не подойдет (хотя, возможно, позже я получу одобрение на покупку).
-
Компилятор должен поддерживать следующие функции:
- 8-битный
char
- 16-битный
int
- Идеально C99, но если нет, то хотя бы 64-битные целые числа (
uint64_t
). - Чем больше предупреждений о размерах целых чисел, тем лучше, так как этот код изначально не был написан для 16-битной цели.
- 8-битный
Open Watcom C/C++ (старый сайт, ветка v2 поддерживает 16-битные x86 цели, включая DOS. Он может создавать исполняемые файлы, которые работают в Dosbox. Он бесплатный. Он поддерживает C (до C99, как минимум включая stdint.h
и long long
), C++ и Fortran.
В конечном итоге я использовал это для своего проекта, но всего на короткий срок, потому что вскоре после этого мне удалось получить доступ к реальной целевой платформе. Так что я не могу прокомментировать обширность его предупреждений.
Ответ или решение
Для разработки приложений на 16-битных платформах, таких как 8086, без доступа к традиционным средствам разработки и эмуляторам, есть несколько вариантов компиляторов и эмуляторов, которые можно использовать из среды Linux. В ответ на ваш запрос наилучшим вариантом является использование Open Watcom C/C++.
Open Watcom C/C++
Open Watcom – это свободно распространяемый компилятор, который поддерживает 16-битные x86 цели, включая системы DOS. Вот подробное описание его возможностей:
-
Поддержка платформы:
- Open Watcom может создавать исполняемые файлы для DOS, которые также могут работать в эмуляторах, таких как DOSBox или DOSEMU. Это значительно упрощает тестирование кода в условиях, приближенных к реальности.
-
Лицензирование:
- Open Watcom является свободным проектом, что позволяет вам использовать его для внутренних разработок. Лицензия разрешает использование и модификацию, но не ограничивает коммERCIAL использование, что соответствует вашим требованиям.
-
Поддержка языка C:
- Compiler поддерживает C до стандарта C99 и включает заголовочные файлы для работы с 64-битными целыми числами (
uint64_t
). Также предоставляются все основные типы данных, включая 8-битные символы (char
) и 16-битные целые числа (int
).
- Compiler поддерживает C до стандарта C99 и включает заголовочные файлы для работы с 64-битными целыми числами (
-
Предупреждения о размерах целых чисел:
- Хотя на момент написания общего описания глубокая проверка предупреждений может варьироваться, Open Watcom предлагает множество настроек компиляции, которые могут помочь вам выявить потенциальные проблемы с совместимостью типов.
-
Поддержка ввода-вывода:
- Так как для работы с данными вам потребуется файловый или последовательный ввод-вывод, вы можете использовать стандартные функции ввода-вывода из библиотеки C. Для более специализированных задач может потребоваться самостоятельная реализация функций чтения из файла или взаимодействия с последовательными портами.
Эмуляция
Для эмуляции 16-битной среды вы можете использовать:
-
DOSEMU: Это отличный эмулятор, который позволяет запускать DOS-программы на современных системах Linux. Он достаточно прост в установке и настройке, что позволяет вам легко интегрировать его в автоматизированные процессы сборки и тестирования.
-
DOSBox: Это еще один популярный эмулятор для запуска старых DOS-программ. Он прост в установке и предоставляет многие функции, которые могут быть полезны при тестировании 16-битного кода.
Заключение
Используя Open Watcom в сочетании с DOSEMU или DOSBox, вы сможете создать эффективную и производительную среду для разработки и тестирования вашего кода, портированного на 16-битные системы. Эти инструменты вместе удовлетворяют вашим требованиям по лицензированию, поддержке необходимого языка программирования, а также позволяют гибко работать с вводом и выводом данных.
Для дополнительной информации и поддержки вы можете ознакомиться с документацией Open Watcom на их официальном сайте или GitHub-репозитории.