Forth на msp430g2553

Вдохновленный Каллисто и освежая память о том, что такое Форт и с чем его едят, набрёл на это.

The TI LaunchPad with 4E4th on it. 16K FLASH - 8K Forth and 8K for your own apps. You only need TI's G2 LaunchPad with the MSP430G2553,
download our 4E4th-IDE, prepare the LaunchPad connection, plug in the USB, flash the LaunchPad, and there we go!

Посколько под рукой валялся msp430 launchpad, решил сразу попробовать (далее всё из-под Ubuntu Linux):

1. Прошиваем лаунчпад (4E4th is based on MSP430 CamelForth version 0.3 written by B. J. Rodriguez for the MSP430F1611Tini430 board. Link):

mspdebug rf2500 "prog 4e4th.a43"

2. Запускаем терминал:

screen /dev/ttyACM0

3. Кнопка RESET на лаунчпаде, Форт выдает строку в терминал:

4E4th R0.34 Apr 28 2012|110001110 Cold

4. Выключаем зеленый и красный светодиоды:

red cclr ok 
green cclr ok 

5. Пишем программы вычисления квадрата и суммы квадратов:

: SQUARED DUP * ; ok
: SUM-OF-SQUARES SQUARED SWAP SQUARED + ; ok

6. Проверяем работу:

3 SQUARED . 9 ok
3 4 SUM-OF-SQUARES . 25 ok

7. Напишем программу мигания светодиодами лаучнпада и запустим ее:

DECIMAL ok
: blink BEGIN
red cset green cclr 100 MS
red cclr green cset 100 MS
KEY? UNTIL ; ok
blink ok

8. Запишем программу во флэш-память микроконтроллера, чтобы при включении или после сброса программа запускалась:

' blink APP ! SAVE

9. Вкусностей там очень много: запись и чтение портов "железа", битовые операции и т.п. PDF-ка с полным глоссарием слов здесь.
---------------------------------------------
Ценители труЪ олдскула оценят возможность заливки исходников (чтобы не набивать программу руками) из-под терминальных программ.

Проект опенсорсный.

Форт - мощная штука, если уметь ей пользоваться. 8 Кбайт места для программы на Форте это серьезно. Таким образом, эта 5-долларовая платка может стать полноценными "мозгами" для роботоприложений. Если приделать беспроводной удлиннитель СОМ-порта, то можно удаленно программировать робота.

На тесте "Счастливые билеты" этот микро-Форт показал замечательные результаты для 6-значных билетов: 29 секунд! Для сравнения там таблица с результатами для современных программируемых калькуляторов (от 5 минут до полутора суток). Конечно, это таки целочисленный Форт, написанный на Асме и работающий на 8 мегагерцах 16-битного RISC процессора, но, тем не менее. Для многих приложений целочисленности достаточно.

Метки публикаций: 
Undefined

Комментарии

«Билеты» будут просто летать в целочисленном-то Форте на машинном коде.

Кстати, в 4E4th хорошо работает .S — вершина стека находится справа. У меня всё не доходят руки написать такую же .S для Каллисто.

Если кто будет писать «Билеты» для Каллисто, там цикл FOR NEXT вместо DO LOOP

В ядре уже имеются слова I J для счётчиков двух вложенных циклов, но K L M N придётся определять самим. Значения счётчиков находятся в стеке возвратов, на разной глубине.

UPDATE. На Каллисто 0.7.1б слово .S работает также, вершина стека справа.

AtH wrote: «Билеты» будут просто летать в целочисленном-то Форте на машинном коде.

Да, 40 сек (msp430g2553 at 8MHz) vs. 92 минуты в мк161. Быстрее в 138 раз

---------------------------
Истина где-то рядом
aldebaran.ru/author/samurov_vitaliyi/kniga_dozvonitsya_do_devyi/

Поэтому имеет смысл раскрыть обращение W77LE516P к индикатору и ускорить появление Каллисто в машинном коде. Там только последний шаг или два остался, по переводу кода с AVR на 8052.

Мой приоритет этой весной — работа над Каллисто 1.0, чтобы у владельцев ЭКВМ был надёжный ЯВУ на время написания встроенной версии. Да и работающий прототип языка важен, когда мы займёмся деталями машинной реализации.

Встроенная Каллисто не будет быстрее в 138 раз. Во-первых, разрядность другая. Во-вторых, мы всё же калькулятор делаем, с достойной математикой на плавучке. А не самого быстрого в мире жонглёра целыми числами. :-)

Плавучка с хорошей точностью всегда будет съедать быстродействие. Но ведь наша цель не впечатлять умы количеством инструкций в секунду, а повысить быстродействие расширяемого входного языка (того самого, где «бесконечный» стек, имена переменных, структурные IF и прочие учтённые мною пожелания владельцев) с «удовлетворительно» до «отлично».

Будет такая же скорость, как на МК-161 — уже хорошо.

Вот такую же систему red green хотелось бы разработать для «Электроники МК-161».

В языке МК команды рисования это больше надстройка над железкой индикатора. По хорошему команды рисования должны идти от того, как удобно рисовать человеку.

Создатель Форта в colorForth немного приблизился к идеалу, который хотелось бы видеть на Каллисто. Вот это красивое определение из colorForth мне запомнилось (блок №30 отсюда):

: logo
show black screen
800 710 blue box
600 50 at 1024 620 red box
200 100 at 700 500 green box
text cf keyboard ;

Как в 4e4th Форте почистить стек?

в GForth для этого есть CLEARSTACK, а тут что-то не нашел
http://www.forth-ev.de/repos/4e4th/Release0.34/Doc/Glossary_functional.pdf

---------------------------
Истина где-то рядом
aldebaran.ru/author/samurov_vitaliyi/kniga_dozvonitsya_do_devyi/

На Каллисто стек очищает команда !SP

В некоторых Фортах эта команда называется SP!

В диалоговом режиме достаточно набрать любое слово, которого нет в словаре. Форт выдаст сообщение об ошибке, а стек очистится.

UPDATE. Посмотрел pdf'ку. В этом Форте sp! инициализирует SP числом с вершины стека. Это число берётся из s0 — но означает s0 переменную, где хранится дно стека (как в Каллисто) или адрес этого дна, тут уже надо смотреть самим. Итого один из двух вариантов:

: !sp   s0   sp! ;
: !sp   s0 @ sp! ;

Я так понял, что работает первый вариант:
4E4th R0.34 Apr 28 2012|110001110 Cold
: !sp s0 sp! ; ok
1 2 3 4 5 ok
.S 1 2 3 4 5 ok
!sp ok
.S ok

---------------------------
Истина где-то рядом
aldebaran.ru/author/samurov_vitaliyi/kniga_dozvonitsya_do_devyi/

А еще вопрос - как организовать 6 вложенных циклов?
10 0 DO i n1
10 0 DO i n2
...
10 0 DO i n6
LOOP
LOOP
...
LOOP

Так ?

---------------------------
Истина где-то рядом
aldebaran.ru/author/samurov_vitaliyi/kniga_dozvonitsya_do_devyi/

Примерно так.

Можно использовать промежуточные переменные n1 n2… n6. Но ни в одной из программ, с которыми сравниваем, такого нет.

Поэтому лучше посмотреть на определения слов I и J (если исходники открыты) и дать такие же определения для слов K L M N, после чего в главном слове решения использовать I J K L M N для доступа к счётчикам всех 6 вложенных циклов.

Я сейчас как раз займусь разработкой слова K для Каллисто, на основе I и J :-)

А как организовать 32-битную переменную в 4E4th ?

---------------------------
Истина где-то рядом
aldebaran.ru/author/samurov_vitaliyi/kniga_dozvonitsya_do_devyi/

Что-нибудь вроде этого разве не подходит:

 : 2VARIABLE  ( -- )  CREATE 2 CELLS ALLOT ;

Похоже, что идея выжать всё из дешёвой платки с RISC-процессором будоражит умы. Вот голландцы подтянулись:

noForth
is an interactive 16-bit stand-alone forth for MSP430.
...
noForth C,V
is functionally equivalent to the previous version (noForth 1210, october 2012). We made noForth still more robust and we made some space saving internal changes: the kernel takes less space and compiling a program is more space efficient now.
This is nice especially for the smaller 16kB processors.

Why C,V ?
Because noForth C,V comes in two variants:

noForth C, Compact, for the smaller 16kB flash processors.
noForth V, with Vocabularies, for larger flash memories.
However, noForth C can be used in the larger flash memories and noForth V in the smaller ones. To get an idea of the differences between C and V, see noforth cv words.pdf

Ссылка на launchpad nForth docs.

---------------------------
Истина где-то рядом
aldebaran.ru/author/samurov_vitaliyi/kniga_dozvonitsya_do_devyi/

Слово APP понравилось. Спасибо за него!

Уже думаю о переименовании AUTOEXEC в Каллисто. Слово APP в разы короче и сейчас широко известно в России. Количество народа, знающих по MS-DOS'у слово AUTOEXEC, только уменьшается.

Кстати Amforth для Atmega-328p более демократичен, достаточно купить Ардуино Уно или её эквивалент.

Да, при 4.5 евро с бесплатной доставкой за аналог Уно демократичней платформу, наверное, сложно найти

---------------------------
Истина где-то рядом
aldebaran.ru/author/samurov_vitaliyi/kniga_dozvonitsya_do_devyi/

На Ардуино даже контроллеры ЧПУ делают, интерпретатор g-кодов прямо в прошивке, есть круговая интерполяция, правда только по двум осям.

И порог вхождения в Ардуины очень низок - замигать светодиодом, послать строку в СОМ-порт

---------------------------
Истина где-то рядом
aldebaran.ru/author/samurov_vitaliyi/kniga_dozvonitsya_do_devyi/