Forth на STM32F103C8T6 — настоящие динозавры не вымирают
Довольно-таки бесполезная для большинства читателей статья об очень старом языке программирования, созданном Чарльзом X. Муром в конце 1960-х — начале 1970-х и используемом до сих пор. И немного поиграем с Форт на STM32.
«The mistery of Yoda’s speech uncovered is:
Just an old Forth programmer Yoda was»
Йоды магистра тайна речи раскрыта:
Старым Форта программистом он просто был.
В конце 80-х годов мне в руки попала замечательная книжка Баранова С.Н. и Ноздрунова Н.Р. «Язык Форт и его реализации».
В то время мы в институте железнодорожного транспорта разрабатывали портативный тестер для БУВИПа (Блок управления выпрямительно-инверторным преобразователем) для электровозов ВЛ-80Р/ВЛ-85. По нынешним временам не особо портативный — весил килограмм 10. В основном за счет щелочных аккумуляторных батарей, которые были распространены на железной дороге, но легкими не были ни разу.
Была под руками ДВК-2М и был кросс-ассемблер для i8080. Программное обеспечение писали на ассемблере, компилятора С не было и взять было неоткуда. Как известно, в то время коммунисты запрещали интернет и даже сотовые телефоны :). Из клонов IBM в то время в нашем вычислительном центре была только ЕС-1022.
Книжка вдохновила настолько, что я написал свою целевую Форт кросс-систему. В итоге весь еще недописанный ассемблерный код был выкинут и переписан на Форте в рекордные сроки. Хорошего редактора для Форта не было, за несколько дней был написан Форт-ориентированный редактор для ДВК, у которого был даже экзотический в то время буфер копирования/вставки строк. Код занял чуть больше 3 килобайт.
Сам Форт занял в памяти контроллера на базе 8080 что-то в районе 8-9 килобайт без всяких оптимизаций (если не нужна интерпретация и выбросить заголовки слов, то система уталкивалась менее, чем в килобайт), а вся задача, включая интерпретатор Форт — около 14 килобайт, включая графический интерфейс на газоразрядном дисплее ГИП-1000 (100х100 точек).
В депо слесарям наш тестер очень не понравился.
Сначала они было вдохновились и повели нас на свежеотремонтированный электровоз. За минуту после подключения выяснилось, что ремонт, мягко говоря, некачественный. У БУВИП часть модулей резервируется, и электровоз будет ехать даже с неисправностями. Тут же выяснилось, что какой-то из резервированных модулей был дохлым после ремонта. Ну кому же такой тестер понравится?
После был еще один проект на Форте — управление подсыпкой глинозема в электролизную ванну на алюминиевом заводе. Там контроллер был на базе i8085 — не велика разница. Контроллеров было что-то в районе десятка, доступ к ним был уже организован по-взрослому — был в интранете свой сервер и удаленный доступ к контроллерам. Можно было модифицировать программное обеспечение и получать данные не бегая в цех. По тем временам было круто — об интернете уже были наслышаны, но не более того. Обходились Фидо.
Сканы со старых фотографий, если вы решите, что они сделаны в аду — не сильно ошибетесь. Дым из электролизера — это какие-то фториды, дождь над заводом шел слегка разбавленный плавиковой кислотой. В итоге все окна слегка растворялись этой кислотой и через несколько недель новое прозрачное стекло становилось матовым. Впрочем, фотографии больше 25 лет, все сильно изменилось.
Через пару десятков лет, когда все было давно и прочно забыто, Форт вылез снова.
Я работал в печальной памяти National Semiconductor, когда в одну микросхему кому-то пришло в голову встроить стековую машину — по сути дела очень усеченную Форт-машину. Готовой кросс-системы не было, но что-то мне удалось адаптировать за считанные дни, в основном время ушло на то, чтобы вспомнить, что есть Форт. Все свелось к небольшой модификации встроенного ассемблера.
Идею очень компактного стекового процессора для FPGA или ASIC со всеми исходниками вы можете найти здесь.
Теперь вы знаете, как сделать свой форт-процессор 🙂
Разных реализаций Форт-систем существует, как собак нерезаных. В большинстве своем они бесплатны.
Форт — довольно странный язык для тех, кто уже занимался программированием.
В нем, как в Библии — в начале было слово. В конце, впрочем, тоже. Все объекты в Форте — это слова. Постоянные, переменные, функции — это всего лишь слова. Еще у него есть два стека — стек данных и стек возвратов. Все делается через задний проход стек данных. Это определяет и способ записи операций — обратная польская запись.
Программирование на Форте — это просто расширение словаря добавлением новых слов.
Форт, как современный Python — не компилирующий язык, а интерпретирующий.
Чтобы умножить 2 на 2 и распечатать результат, нужно положить на стек оба операнда и вызвать функцию умножения и распечатки.
Выглядит это так:
2 2 * .
в итоге получите (удивительное дело, правда?):
4 ok.
Можно оформить это вычисление, как функцию:
: myfunc 2 2 * . ;
Теперь, чтобы получить результат, нужно просто вызвать функцию:
myfunc
4 ok.
Теперь ближе к телу. Для примера можно взять реализацию Mecrisp Forth отсюда.
Файл, скачиваемый по умолчанию, содержит реализацию Форта для десятка разных контроллеров MSP430 от Texas Instruments.
Скачивайте файл mecrisp-stellaris-#.#.#.tar.gz
# я заменил номер версии. В файле Mecrisp-stellaris реализации для Cortex — в районе сотни разных процессоров от разных фирм. Есть тонкость — USB этот Форт не поддерживает, только UART. Если связываться с переходниками лень, как мне, здесь добрый человек уже добавил USB для STM32F103C8T6.
Загрузите файл usb-common.bin. С usb-common.hex какой-то косяк с адресами, разбираться поленился.
Для загрузки используем дешевый клон ST-LINK.
Можно с сайта STMicroelectronics скачать, но он только для Windows. Мультиплатформенный Open source ST-Link tools можно скачать тут.
Больше почитать на великом могучем можно тут.
Теперь очищаем флеш память микроконтроллера на всякий случай
st-flash erase
и заливаем паршивку
st-flash write usb-common.bin 0x08000000
После сброса появляется USB Virtual COM Port:
lsusb
Bus 001 Device 050: ID 0483:5740 STMicroelectronics Virtual COM Port
Все, можно начинать играться. Команды и программы можно вводить вручную в любой терминалке. А можно прямо этой терминалкой загрузить программу из файла.
Краткий словарь для этой реализации Форта можно найти здесь.
Словарь Форта содержит слов 300 минимум. И исходный текст Форта, написанный на этом Форте — это лучшие примеры и лучшая документация.
Если не поморгать светодиодом, то тема, очевидно, будет не раскрыта.
Для доступа к портам используются слова, не входящий в основной словарь Форта — но что делать, не мы такие — жизнь такая.
: blink omode-pp pc13 io-mode! begin pc13 iox! 500 ms key? until ;
blink
Светодиодик будет менять свое состояния каждые полсекунды до тех пор, пока не будет нажата какая-нибудь клавиша.
Разберем, что тут понаписано
: начало определения
blink имя нового слова
omode-pp pc13 io-mode! инициализируем порт pc13 на вывод
begin начало цикла
pc13 iox! исключающее или порта pc13
500 ms задержка 500 мсек
key? нажата ли клавиша?
until продолжать цикл пока клавиша не нажата
; конец определения
Дублировать многочисленные книги и статьи я воздержусь, рассматривайте эту статейку как удочку, а не рыбу. Материалов по Форту очень много, он широко популярен в узких кругах 🙂
И, говорят, плох тот Форт-программист, кто не написал свой Форт. Это близко к истине, свою Форт систему написать легко, если понял, как она устроена. А устроена она не просто, а очень просто :). Особенно для того, кто до этого писал на ассемблере.
Обзор опубликован не в качестве документации или рекламы, а исключительно на правах мемуаров 🙂
- SSD накопитель Somnambulist - Black Dragon SATA III H650 на 240Гб (256Гб ?)
- Обзор смартфона Qin F21 Pro. Кому нужен смартфон с кнопками в 2022 году?
- Bluetooth гарнитура Link Dream NB-12, с микрофоном CVC 6.0
- Флешка USB-Lightning 128Gb
- Самодельный походный фильтр на 3д принтере.
- Bluetooth-термометр Xiaomi Mijia 2. «Умный дом» в походе.
- Перьевые ручки из Китая. (Не все ручки одинаково полезны.)
- Смарт-часы Samsung Galaxy Watch 4 Classic за $258.99
- Адаптер для SD-карты > PCMCIA для Mercedes Benz, Honda InterNavi и других.
- Чернила KOH-I-NOOR 50гр. синие

