Если с полного нуля, то это происходит так
Ручками в машинных кодах пишется прото-транслятор и прошивается в девайс. В машинных кодах так же подготавливается парсер для текста (используется язык Си или Форт). Загружается текст будущего компилятора и инструментария тоже в образ «прошивки» или подгружается позже, когда девайс готов принимать внешние команды по последовательному терминалу.
После запуска прото-транслятора в девайсе методом bootstap'а создаётся нормальный компилятор и окружение программной среды: редактор и анализатор исходного кода, отладчик, профайлер, линкер. Далее на самом девайсе дорабатывается связное ПО для связи машина-машина и программно-аппаратный комплекс объединяется в сеть с другими машинами.
Сейчас в основном используется кросс-компиляция, когда инструментальное ПО разрабатывается на обычных компьютерах (даже то, которое имеет другой тип архитектуры процессора), подготавливается загрузочный образ операционной системы и её окружения, и тем или иным способом всё это переносится на устройство хранения (жёсткий диск или flash-память) будущего устройства.
Компилятор любого языка можно написать на Бейсике, не говоря уж о других скриптовых языках. Всё дело в сложности выражения.
Как работают компьютерные программы?