Довольно-таки бесполезная для большинства читателей статья об очень старом языке программирования, созданном Чарльзом 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 \ продолжать цикл пока клавиша не нажата
; \ конец определения
Дублировать многочисленные книги и статьи я воздержусь, рассматривайте эту статейку как удочку, а не рыбу. Материалов по Форту очень много, он широко популярен в узких кругах :)
И, говорят, плох тот Форт-программист, кто не написал свой Форт. Это близко к истине, свою Форт систему написать легко, если понял, как она устроена. А устроена она не просто, а очень просто :). Особенно для того, кто до этого писал на ассемблере.
Обзор опубликован не в качестве документации или рекламы, а исключительно на правах мемуаров :)
Разбери ST-LINK и наклей каптоновый скотч на плату для изоляции. Часто выступающие элементы защищает от замыкания на корпус только тонкий слой лака на корпусе. А лак со временем протирается. И ST-LINK дохнет. Частенько вместе с подключенным МК.
Молодежи не понять как зарождалась цифровая электроника на микроконтроллерах. у них сразу был интернет и есть информация.
Нам древним первооткрывателям приходилось эту информацию добывать по крупицам из книг и журналов и методом проб и ошибок делать первые устройства.
А мы когда то писали на С-- (си минус-минус). Блин, до сих пор скучаю по нему.
Но и польская запись и сам форт нам не чужд — с них и начинали (ну почти)
И, да — книжки. если вы жили не в областном центре, можно было достать только по блату.
Именно поэтому я до сих пор храню на винте все, что ууекалось по фидо. Имидж ничто — информация — всё!
З.Ы. Книжки про Форт тоже попадались в руки в старину, но, к счастью, инфицирования не произошло… ASM есть царь! ;)
Я пронастольгитровал по своему первому компьютеру МК-61, который купил на сбережения со своей кровной стипендии.
Обратная польская запись, первые программы, первые игры, «Техника молодежи», Кон-тики, эх, где мои 16 лет!
Наири в нашем учебном заведении была сломана, но под конец обучения появились Роботроны 1715, CP\M я был один из главных главный по ним, но не долго!
Спасибо.
— Сегодня мы начинаем изучать фортран. Его название — это сокращение от «Formula translator», что переводится на русский как «Транслятор формул»
Йоды магистра речи тайна раскрыта:
Форта программистом старым был он просто.
;-)
он(был(старый(программист(Форт))*просто));
Т.е.
Форта программист старый просто был он
Remark
Форт-подобный язык сделал в интрпретаторе команд, на котором написана небольшая часть (защиты) программы, дабы ее нельзя было в-лоб взять 'идой'. Да и вырезать его нельзя, там не только защита, но и часть самой программы.
а как мы сутками вручную набивали 4 страничные коды из «радио»…
Думаю лет через 30 будут ностальжировать по современным языкам и ардуинам :)
И да, за фидо тоже отдельный плюсик.
— Меня видно?
— ет
еще про эту букву
ФИДО софт использовал для файловой почты на одном предприятии, где филиалы были в сёлах и кроме проводных телефонных линий там ничего не было. Когда пришел hyper.net от UMC, т.е. гривна за факт выхода в GPRS за день — фидоподобная сеть была упразднена в пользу обычной электронной почты…
2:5030/260.4
У меня — так нодлисты до сих пор лежат нетронутые. И у многих других. В те времена имя и фамилия ещё не были перс.данным :)
PS: Так ведь там ещё и телефоны городские, которые у многих сохранились…
Но свой адрес, звыняйте, выкладывать не буду.
Впрочем, сейчас у нас там всего два узла с опубликованными телефонами, из них один без веб-флагов. Да и кому в наши дни прозванивать диалап-то?
На /1957 когда-то был линк, 20 лет назад :/
Я забросил ФИДО лет 15 назад — уже тогда внешний канал через интернет был. Только по городу диалапом раздавал.
А я, во времена, когда дискеты были большими, а интернет маленьким, между цехами завода, где работал, построил натурально FTN-сетку на модемах, через местный телефон.
По сути, маленькое ФИДО, только без Голого деда. Сконфигурил T-Mail и из отделов в цеха файлы с техпроцессами и кодами перфолент летали само по себе. :)
Как ни странно, можно было даже примитивную игрушку написать — честно содрал с какой то брошурки, но даже однажды считал курсач по антеннам — мне это калькулятор вполне успешно решил трансцендентное уравнение.
А на форте не писал, хотя книжки встречались по нему.
Ну, в моей коллекции по чему только книжек не встречалось.
В том числе по языку, который должен был заменить все существующие на тот момент языки программирования — Ada, вот ждем, пока заменит… :)
с фидошниками и фортом.
donBaton жги дальше, очень интересно. Каждый пост как детектив с сюжетом, завязкой, развитием и развязкой.
Что касается «Программы для людей», то тут готов поспорить. Программы пишутся программистами для компьютеров, а людям эти программы нафиг не нужны — людям нужен результат работы программ, функционал, который они обеспечивают. И если этот результат мы получаем Чёрной магией, а не программой на С++ или ином языке, потребителю пофиг. Сейчас же, когда аппаратные ресурсы и мощности не те, что лет 30 назад, программисты слегка подохренели и порой полагают, что действительно программы для них, а не для заказчика. В результате тоннами выдают удобный программистам, но мало на что пригодный гoвHoкoд. Нет, я ни в коем случае не говорю, что все такие. Но, к сожалению, порой встречаются.
И моя мысль абсолютно верна, не понимаю, с чем вы спорите: чем понятнее исходник, тем более легко будет программу улучшать и сопровождать. Очевидно, что Фортовские приколы с инфиксом — далеки от сопровождаемости. Тут лучше Си.
Ну и мода и подходы меняются… Когда-то ООП считали панацеей, потом в функциональщину ударились, потом еще что-нибудь появится…