Skip to content

Simple Forth-like language compiler for ARM Cortex-M architecture

Notifications You must be signed in to change notification settings

ssyp-ru/ssyp16-ws17

Repository files navigation

Мастерская #17. : ЛШЮП ( -- ) ЛЕТНЯЯ ЮНЫХ ПРОГРАММИСТОВ ШКОЛА ;

Целью работы данной мастерской было освоение низкоуровневого программирования под микроконтроллеры архитектуры ARM Cortex. Для этого была реализована простая Forth-машина с трансляцией программы в машинный код (наборы инструкций Thumb/Thumb2). В связи с нехваткой времени и ограничениями платформы совместимость с языком Forth реализована лишь частично.

Платформой для разработки была выбрана тестовая плата TI EK-TM4C123GXL с микроконтроллером TI TM4C123GH6PM.

Реализованные возможности

- Подключение по UART
- Интерпретация кода, полученного через UART-терминал
- Компиляция новых слов в процедурный шитый код
- Хранение скомпилированной программы во внутренней flash-памяти

Подключение

При подключении к ПК отладочная плата эмулирует интерфейс RS-232. Режим подключения — 9600 бод, восьмибитные посылки с одним стоповым битом, контроль потока отключён. Этот же интерфейс выведен на контакты PA1, PA0 c логическими уровнями 1 - +3.3V, 0 - 0V.

Словарь

Текущая версия проекта поддерживает следующий набор слов:

- `:, ;` - включает и выключает режим компиляции
- `::` – включает режим компиляции слова времени выполнения
- `( )` - ограничивает комментарий
- `+, -, /, *, %, /%` - операции сложения, вычитания, умножения, деления,
остатка от деления для 32-битных беззнаковых целых
- `.` - вывод беззнакового целого
- `&, |, ^, &&, ||` - побитовые и логические булевы функции
- `<, >, ==, >=, <=` - операции сравнения
- `DUP, CDUP` — дублирует значение на вершине  стека данных/стека управления
- `ROT, CROT` – производит вращение трёх элементов (3 2 1 → 1 3 2) на вершине
стека данных/стека управления
- `SWAP, CSWAP` – обменивает местами два верхних элемента на вершине стека
данных/стека управления
- `DROP, CDROP` – удаляет верхний элемент со стека данных/стека управления
- `OVER` — дублирует второй сверху элемент стека данных на вершину стека
данных
- `@` – извлекает из памяти на стек данных значение по адресу, лежащему
на вершине стека данных.
- `!` – помещает по адресу, лежащему на вершине стека данных, значение,
лежащее на стеке данных следующим
- `R>, R<` – переносит одну ячейку со стека управления на стек данных или
наоборот
- `IF` – (только в режиме компиляции) обозначает начало блока ветвления,
завершающег ося словом `THEN`. Условие ветвления берётся с вершины стека данных
- `ELSE` — (только в режиме компиляции) Завершает блок ветвления и начинает
альтернативный ему блок.
- `THEN` – (только в режиме компиляции) Завершает блок ветвления.
- `DO` – (только в режиме компиляции) Начинает тело цикла со счётчиком.
Начальное и  конечное значения счётчика снимаются с вершины стека данных.
- `LOOP` – (только в режиме компиляции) Завершает тело цикла со счётчиком.
- `I, J` – (только в теле цикла) Помещают текущее значения счётчика
внутреннего (`I`) или следующего за ним (`J`) цикла на стек данных.
- `RECURSE` – (только в режиме компиляции) Производит рекурсивный вызов
компилируемого слова.

Контакты

dmitry.e.gorbunov(at)gmail.com

About

Simple Forth-like language compiler for ARM Cortex-M architecture

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published