stm32BASIC

Эта платка, валяющаяся без дела, таки "жгла карман" :)

В общем, отряхнул пыль со старого гит-репозитория с stm32BASIC. Не пришлось ничего менять в мэйкфайле и конфигурации - процессор того же семейства:

  • STLink и USBtoUART подцеплены проводами
    новая таблетка
  • Заливка бинарника при помощи OpenOCD
    заливка
  • Консоль serial терминала
    консоль

Исходник

#include <libopencm3/stm32/rcc.h>
#include <libopencm3/stm32/gpio.h>
#include <libopencm3/stm32/usart.h>
 
const char gimmick[] =
"         __           ________   __________  ____  ________  __\r\n"\
"   _____/ /_____ ___ |__  /__ \\ / ____/ __ \\/ __ \\/_  __/ / / /\r\n"\
"  / ___/ __/ __ `__ \\ /_ <__/ // /_  / / / / /_/ / / / / /_/ /\r\n"\
" (__  ) /_/ / / / / /__/ / __// __/ / /_/ / _, _/ / / / __  /\r\n"\
"/____/\\__/_/ /_/ /_/____/____/_/    \\____/_/ |_| /_/ /_/ /_/\r\n";
 
const char ver[] = "stm32 FORTH, v.0.10";
 
int main(void)
{
    clock_setup();
    usart_setup();
 
    comm_puts(gimmick);
    comm_puts(ver);
    xprintf("\r\n");
 
    return 0;
}

В общем, даже в такой 7-евровой конфигурации можно начинать портировать что угодно - ввод и вывод на терминал работает

Си это так себе для Форта. Ассемблер нужен. Желательно чистый, безо всяких прологов и библиотек — они добавляются позже, на уровне исходного кода. Кстати, туда получается ВК-6 засунуть?

Если его немножечко подпилить, добавив несколько регистров функций, то Каллисто под ним запустится. Я не пробовал, но под eMKatic работает.

Вывод, конечно, будет в графическом виде, а не текстовом. И ввод с клавиш, а не входного потока. В идеале, конечно, это надо с клавиатурой и индикатором связать, добавить bcd-библиотеку, файловую систему… зато Каллисто выйдет из новосибирской песочницы.

161eForth умеет работать по RS-232. Но он ещё не готов, да и нет в ВК-6 регистров функций ни для последовательного порта, ни для прерываний. Портировать его смысла нет. В нём нет плавучки, а обычный eForth для ARM существует. Разве что будут интересны мои структуры данных, ускоряющие поиск.

и не так редко :)

Forth в проектах на https://github.com/search?utf8=%E2%9C%93&q=forth&type=
Forth в проектах на https://sourceforge.net/directory/?q=Forth
есть и ещё площадки размещения проектов, как https://bitbucket.org/

P.S. Но, конечно, в первую очередь можно смотреть на реализованные Форты с использованием ассемблера.
Для ARM Сortex популярен Mecrisp-Stellaris http://mecrisp.sourceforge.net/

Из одного из последних Форт на Си собирал для Windows BigForth :)

Форт на Си — извращение, нивелирующее достоинства Форта. Си нужен разве что для раскрутки Форта, как в Gforth. Достойных сишных Фортов нет, только «смотрите, даже у меня получилось!!1». Писал же совсем недавно об этом.

Это примерно как Каллисто поверх ЯМК. Но я извращаюсь не от хорошей жизни, а от закрытости уровня ассемблера. И получаю бонусом совместимость с архитектурой ЭКВМ, как и где бы её ни реализовали — хоть на айфоне. Плюс примитивы пишутся на языке МК, который понимает больше народу, чем ассемблер.

На ассемблере придётся всего несколько примитивов реализовать! Вот здесь можно найти уже готовый eForth для ARM, там примитивов всего немножко:
http://forth.org/OffeteStore/OffeteStore.html

какие возможности Форта реализованного на Си сильно уменьшают значимость такого Форта? :)

P.S. Например такой реализации Форта http://www.forth.org.ru/news/stm32f105MultiAdapter#0

Накладные расходы Си при вызове функций. То самое, о чём говорил Чак Мур на 11 странице:

https://ia800107.us.archive.org/25/items/1murCharlZXIntervYuPoFortYazyku...

К слову, код на картинке, да и по ссылке на репозиторий, мало напоминает Си. Он больше напоминает неумение писать на чистом ассемблере, в условиях хорошо знакомых сишных инструментов. Но часть слов реализована на Си, что работает гирями на ногах.

Я в таких условиях писал форт-ассемблер и генерировал образ прошивки в СПФ, см. черновики Каллисто-2.

STM32eForth720 for STM32 F4 Discovery, 2014

This eForth is for STM32F407 chip on STM32 F4 Discovery Kit from STMicroelectronics. This chip has 1 MB flash memory, 192 KB of RAM, and a ton of interesting IO devices. It is no longer an ARM7 chip, but a THUMB2 chip. STMeForth720 is optimized for the new environment.

http://forth.org/OffeteStore/2165_stm32eForth720.zip

Это похоже? Есть ещё

ADuCeForth for Analog Devices ADuC702x, 2005

Based on an Analog Devices’ ADuC7020, which includes a 32-bit ARM7 microcontroller and a host of peripheral devices, including ADC, DAC, 8 KB RAM and 92 KB flash. eForth is downloaded to flash through an UART port. It is an excellent platform using Forth to develop real time industrial applications.

http://forth.org/OffeteStore/2152_ADuCcompiler520.zip

SAM7eF for Atmel AT91SAM7X256, 2008

This eForth system runs on an Olimax development board with a 132x132 color LCD display. AT91SAM7 is an ARM7 microcontroller with 256 KB of flash and 64 KB of RAM, from Atmel. eForth boots from flash and copies itself to RAM and run from it. It is the first microcontroller for eForth that you don’t have to worry about memory.

http://forth.org/OffeteStore/2153_sam7ef.zip

Это более мощные чипы, чем тот, что в моем примере.

ВК6, может, влезет

Статьи «Начальная загрузка Каллисто» и «Адресный интерпретатор» могут помочь переносу под ARM. Дальше идут слова, на Вики подробное описание каждого слова — на случай, если с чем-нибудь возникнут сложности.

Вот здесь написал подробней:
https://pmk.arbinada.com/ru/node/1475