Перейти к содержанию
    

А вот бы на FORTH написать...

исходники spf, особенно compiler и asm.

 

Возможно стоит посмотреть на решения использования Spf4 для разных контроллеров.

 

на базисе spf Форт для MSP430

 

Возможно, у меня пока каша в голове.

Я пока представляю себе процесс следующим образом:

1. Делаю инлайн-(или кросс?)-ассемблер.

2. На основе него строю ядро таргет-системы.

3. На полученное ядро навешиваю остальное "мясо"

 

В разработке выше примерно так и сделано, за исключением, что выходные

бинарные коды формируются в файлы проекта для IAR ( что не обязательно )

 

В tinyboot для интеграции произвольного контроллера, в основном, необходимо

создать три модуля - дизасемблер, билдер ( некоторые отличия по функциональности от ассемблера),

и поддержку ядра.

 

P.S. Использовать, в полной, степени исходники SPF4 для MSP430 не получится, но как

вариант изучения возможной схемы можно.

В этом плане можно порекомендовать посмотреть разработку forkа spf4 от mOleg fork spf4

 

Полдня вчера исходники колупал, в некоторых местах понятно, некоторые - как китайская грамота...

 

У Форта почти нет ограничивающих факторов для конструирования программ:)

Изменено пользователем Kopa

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Возможно в Scite есть там специально добавляли поддержку Форт языка.

( узнать поподробнее можно на форуме поддержки разработки )

Посмотрел, замечательная вещь вместо вордпада, однако поддержка языков там на уровне подсветки синтаксиса, и форта нет

(есть nnCron), но при желании легко добавить свою конфигурацию подсветки.

MSP430 TARGET ! или

MSP430 TO TARGET

Да, точно.

 

выходные бинарные коды формируются в файлы проекта для IAR ( что не обязательно )

Не только не обязательно, а категорически нежелательно.

В крайнем случае под GCC

У Форта почти нет ограничивающих факторов для конструирования программ:)

Вот это и привлекает, причём для построения своей системы или изменения существующей не обязательно перелопачивать горы талмудов типа гнушных мануалов (mspgcc собрать так и ниасилил, видать не дорос пока...)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Только что вот наткнулся ещё на одну книжку (pdf)

типа сборной солянки из многих источников.

FORTH Spirit of Babylon, (С) RU FIG, Понятов Д.А.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Только что вот наткнулся ещё на одну книжку (pdf)

типа сборной солянки из многих источников.

FORTH Spirit of Babylon, (С) RU FIG, Понятов Д.А.

 

Раньше этот материал распологался здесь у Понятов Д.А.

( сейчас, похоже, url уже битый )

 

(mspgcc собрать так и ниасилил, видать не дорос пока...)

 

Можно собрать LCC для MSP с разным выходным кодом.

Правда оптимизатор там слабый:)

Изменено пользователем Kopa

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Возможно стоит посмотреть на решения использования Spf4 для разных контроллеров.

на базисе spf Форт для MSP430

В разработке выше примерно так и сделано, за исключением, что выходные

бинарные коды формируются в файлы проекта для IAR ( что не обязательно )

а, теперь до меня таки дошло, что там происходит!

Осталось разобраться в механизмах...

Опять же, очень не хватает "View Definition"...

Насколько я понял, исходник, который компилируется, это ~mak/msp430/src.f

Однако, не совсем понятно, что именно будет включено в конечный образ.

REQUIRE CASE-INS	lib\ext\caseins.f

: MREAD-FILE READ-FILE ;
: MC! C! ;
: MC@ C@ ;
: MW! W! ;
: MW@ W@ ;
:  M!  ! ;
:  M@  @ ; 
:  M+  + ; 
:  MNEGATE NEGATE ; 
: MOVER OVER ;
: MAND AND ;
: MCR CR ;
: MEXECUTE EXECUTE ;
: MVARIABLE VARIABLE ;

REQUIRE >NAME ~mak\LIB\fpc.f 
REQUIRE NUMBER? ~mak\LIB\fpcnum.f


TRUE VALUE QUICK
: SL\ POSTPONE \ ; IMMEDIATE

[DEFINED] GUI-CONSOLE
[iF]  : FJB GUI-CONSOLE::FlushJetBuf ;
[ELSE] : FJB ;
[THEN]      


REQUIRE TC_?LIMIT ~mak\LIB\THERE\STAT.f


MODULE: TC_M  
REQUIRE T_@ ~mak\LIB\THERE\mthere.f 
;MODULE
REQUIRE TH_H- ~mak\LIB\THERE\RECOM.F

\ REQUIRE CS-! ~mak\ext.f

REQUIRE ASMINF_MOD ~mak\MSP430\SRC\ASMMSP.f

~mak\MSP430\SRC\LEX.F
~mak\MSP430\SRC\prefix.f



\ EOF
\ REQUIRE DISMSP		~mak\MSP430\SRC\DISMSP.f
: M\  POSTPONE \ ; IMMEDIATE
REQUIRE T-START		~mak\MSP430\SRC\tc.f

[iFNDEF] W>S
: W>S ( w -- n )  \ Расширение знакового 16 разрядонго числа до 32 разрядного
 0xFFFF AND    \ удаляем грязь из старших разрядов
0x8000 XOR 0x8000 - ;
[THEN]


: HH.+  DUP C@ 2 H.R 1+ ;
: INST.+
HH.+ ."  " ;

: MINST ( ADDR1 ADDR2 --  ADDR1 ADDR1 )
\ F7_ED
 DUP H. 9 EMIT 9 EMIT INST.+
BEGIN  2DUP U> 
WHILE \ DUP 7 AND 0= IF CR DUP H. 9 EMIT THEN
               INST.+ 
REPEAT ;


REQUIRE INCLUDED_AL	~mak\LIB\THERE\mlist.f 
\ DIS-OPT

0 VALUE ROM-HERE

0 VALUE FID


CREATE  FTST  0x2000 ALLOT


CASE-INS ON

0x4000 TO CODE-SIZE

0xFC00     TO T-ORG                \ Начальный целевой адрес области кода

T-ORG VALUE MT-ORG
0x5000 TO D-ORG                \ Начальный целевой адрес области данных
0x5000 CONSTANT SP0@           \ дно стека данных
0x7F00 CONSTANT RP0@           \ дно стека возвратов
\ CREATE CS-ORG 1 CS-CELLS ALLOT

T-ORG TO INCL-HH

' NOOP TO <PRE> 
[DEFINED] DBG_STOP [iF]  DBG_STOP [THEN]

CR .( T-ORG=) T-ORG H.

\ S" devel\~mak\MSP430\BLOAD.F" INCLUDED \EOF

T-START

S" devel\~mak\MSP430\ROM.f" INCLUDED
 HERE TO ROM-HERE
MCR .( ROM=) HERE T-ORG - .
.( safasfs)
S" F.C" CSAVE
S" F.BIN" TSAVE
S" F.HEX" T-SAVE
\ T-ORG  HERE OVER ALSO FORTH - PREVIOUS DISMSP

T-STOP

 

 

Ладно, пойду пока тренироваться на кошках (верблюдах :) )

Там вроде всё прозрачно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Насколько я понял, исходник, который компилируется, это ~mak/msp430/src.f

Однако, не совсем понятно, что именно будет включено в конечный образ.

 

Можно предположить, что содержимое файла rom.f c формированием выходных файлов *.f_al

и они и используются при сборке в проекте IAR ещё далее формируются с, bin, hex файлы

содержимое FORTH_IMG ( наверное пробный cм. в main если его подключить, то первые байты это код примитива DUP )

...
T-START

S" devel\~mak\MSP430\ROM.f" INCLUDED
...

 HERE TO ROM-HERE
MCR .( ROM=) HERE T-ORG - .
.( safasfs)
S" F.C" CSAVE
S" F.BIN" TSAVE
S" F.HEX" T-SAVE
\ T-ORG  HERE OVER ALSO FORTH - PREVIOUS DISMSP

T-STOP

 

Ладно, пойду пока тренироваться на кошках (верблюдах :) )

Там вроде всё прозрачно.

 

Удачи!.

 

 

Опять же, очень не хватает "View Definition"...

 

Хорошо помогает Поиск по словам в Far:)

 

 

 

а, теперь до меня таки дошло, что там происходит!

Осталось разобраться в механизмах...

 

Да у Михаила свой, неповторимый, способ Форт программирования.

Достаточно посмотреть на его макрооптимизатор в spf4 :)

Изменено пользователем Kopa

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сейчас ещё глянул SwiftX - вот практически эталон того, что мне нужно.

Жаль, без исходников...

Но кое-что можно почерпнуть.

Например, отличный стиль, а также готовые файлы описания периферии

(кстати, я имею право их использовать, сохранив копирайт?)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сейчас ещё глянул SwiftX - вот практически эталон того, что мне нужно.

Жаль, без исходников...

Но кое-что можно почерпнуть.

 

Вроде какая то версия для PC имеет исходники

 

Но кое-что можно почерпнуть.

 

Можно при изучении брать материал из разных Форт систем:) ( и не только комерческих )

 

Например, отличный стиль, а также готовые файлы описания периферии

(кстати, я имею право их использовать, сохранив копирайт?)

 

Не знаю, но думаю не возбраняется:)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно предположить, что содержимое файла rom.f c формированием выходных файлов *.f_al

и они и используются при сборке в проекте IAR

 

Так и есть.

 

ещё далее формируются с, bin, hex файлы

содержимое FORTH_IMG ( наверное пробный cм. в main если его подключить, то первые байты это код примитива DUP )

 

Командами сохранения загрузочного образа:

S" F.C" CSAVE

S" F.BIN" TSAVE

S" F.HEX" T-SAVE

 

Можно будет пользоваться если вся программа будет скомпилирована средствами Форта. В данном примере,

часть программы компилируется средстваим IAR . Честно говоря, компиляция конечного модуля

в взаимодействии с IAR не очень удобна. При изменении целевой программы в части форта ( devel\~mak\MSP430\rom.f )

требуется запустить TST.BAT затем компиляцию IAR и снова TST.BAT затем компиляцию IAR . Это чтобы правильно установились

ссылки. Программа для прошивки данного примера является частью распределенной форт системы. Если контроллер с данной

прошивкой подъкрючить к COM порту персоналки, то запустив TST.BAT можно взаимодействовать с удаленным контроллером

в интерактивном режиме. Для примера можно запустить TEST.F затем TEST .

Для генерации листинга:

S" TEST.F" INCLUDED_AL

Еще рекомендую комманду E>

E> +

E> MAIN

E> TEST

В редакторе, клавиша F11 - гипертекстовый вызов определения форт-слова.

Клавиша F12 - вернутся обратно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот такой кусочек из asm.f

( DEFER SOME WORDS FOR EASE IN PORTING TO A CROSS ASSEMBLER )
DEFER     CODE-C, '     C, IS     CODE-C, ( X -- )
DEFER     CODE-W, '     W, IS     CODE-W, ( X -- )
...

Что такое DEFER и почему это облегчает портирование?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот такой кусочек из asm.f

( DEFER SOME WORDS FOR EASE IN PORTING TO A CROSS ASSEMBLER )
DEFER     CODE-C, '     C, IS     CODE-C, ( X -- )
DEFER     CODE-W, '     W, IS     CODE-W, ( X -- )
...

Что такое DEFER и почему это облегчает портирование?

 

DEFER ИМЯ создаёт векторное слово

xt IS ИМЯ определяет его текущее наполнение

простой вариант получения xt ' СЛОВО

 

 

P.S. DEFER ( в spf4 VECT ) часто определяются для использования когда

конкретное его наполнение еще не определено, но использование целесообразно.

Например в tinyboot DEFER позволяет в процессе использования конкретного контроллера вынести

вариантную часть во время настройки на работу с ним не пересобирая базовое ядро кросс системы.

Вопросы?

Изменено пользователем Kopa

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вопросы?

Вопросы появляются в процессе, а не при таких занятиях урывками, как у меня.

Сегодня случайно занесло меня в англоязычную педию, разница ощутима.

Наши хоть бы для начала английскую версию перевели...

Очень развёрнутая статья про форт, оттуда попал на gforth - первое впечатление очень положительное.

Особенно от документации.

Сейчас докачаю исходники, буду смотреть.

С GСС отношения более-менее сложились, по крайней мере легче будет оттолкнуться, чем от пустого места.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сегодня случайно занесло меня в англоязычную педию, разница ощутима.

Наши хоть бы для начала английскую версию перевели...

 

Что понравилось? Английская версия

И в чём русская статья "проиграла"? Русская версия

 

 

Очень развёрнутая статья про форт, оттуда попал на gforth - первое впечатление очень положительное.

Особенно от документации.

Сейчас докачаю исходники, буду смотреть.

 

На Си есть ещё много Форт реализаций:) ( BigForth, kforth, ficl, pforth ... )

На асме, например, reva, retro. и ещё интересны разные подходы в других Форт системах:)

и близких разработок ( например давнишняя Timbre - из Форта делает Cи код для ускорения )

 

С GСС отношения более-менее сложились, по крайней мере легче будет оттолкнуться, чем от пустого места.

 

Возможно GCC уже оптимизирует Форт реализации? Было бы неплохо.

Изменено пользователем Kopa

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Возможно GCC уже оптимизирует Форт реализации? Было бы неплохо.

Система работает как компилятор: gforth *.fs [ключи]

 

Ещё бросилась в глаза система автодокументирования по типу doxygen, через \G

: save-input ( -- x1 .. xn n ) \ core-ext
    \G The @i{n} entries @i{xn - x1} describe the current state of the
    \G input source specification, in some platform-dependent way that can
    \G be used by @code{restore-input}.
    (save-input) current-input @ swap 1+;

из си перекочевало include, хотя в форте это по-моему require с небольшими нюансами

А, нет, нашёл.

: include  ( ... "file" -- ... ) \ gforth
    \G @code{include-file} the file @var{file}.
    name included;

: require  ( ... "file" -- ... ) \ gforth
    \G @code{include-file} @var{file} only if it is not included already.
    name required;

Всё-таки разные вещи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Насколько я понял из беглого диагонального прочтения доки, есть возможность включения форт-ядра в программы на си (например, в качестве скриптового движка), и есть возможность обращения к сишным функциям и библиотекам из форта.

Использование ассемблера в тексте не приветствуется.

В данный момент читаю про кросс-компиляцию (пока наиболее актуально для меня, уже хочется что-то склепать).

Также упомянута тесная интеграция с emacs, включая возможность компиляции.

Тоже интересно.

 

Наконец-то скачал эти несчастные 6 метров (по 1к/с)

Попробовал.

Убойная штука see !!!

"Скриншот" терминала:

see code
: code
  header here 8 + cfa, 0 init-asm; ok
  ok
see :
: :
  header (:noname); ok
see 2DUP
Code 2dup
( $402FE3 )  mov     dword ptr 42A6F8 , ebx  \ $89 $1D $F8 $A6 $42 $0
( $402FE9 )  mov     eax , dword ptr 4 [esi]  \ $8B $46 $4
( $402FEC )  mov     edx , dword ptr [esi]  \ $8B $16
( $402FEE )  sub     esi , # 8  \ $83 $EE $8
( $402FF1 )  add     ebx , # 4  \ $83 $C3 $4
( $402FF4 )  mov     dword ptr 4 [esi] , eax  \ $89 $46 $4
( $402FF7 )  mov     dword ptr [esi] , edx  \ $89 $16
( $402FF9 )  mov     edi , dword ptr FC [ebx]  \ $8B $7B $FC
( $402FFC )  jmp     4014A4  \ $E9 $A3 $E4 $FF $FF
end-code
ok

Получается встроенный дизассемблер-дисфорт!

Ох...рененная штука!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...