Jump to content
    

Форт (Forth) и MSP430 для изучения

Первым желанием было - отредактировать текст, но оставил "как есть",пусть эта "лажа" послужит всем примером - "Форт не прощает ошибок".

 

вот, лажу исправил

: My_Func     ( L2 L1 X2 X1 X --- N )

        DUP  >R OVER  - R>         \ L2 L1 X2 X1 [X-X1] X
        SWAP >R    >R              \ L2 L1 X2 X1   || R: [X-X1] X
        OVER R> -  >R -            \ L2 L1 [X2-X1] || R: [X-X1] [X2-X]
        SWAP R> M* >R              \ L2 [X2-X1]    || R: [X-X1] L1*[X2-X]
        SWAP R>                    \ [X2-X1] L2 L1*[X2-X] ||  R: [X-X1]
        SWAP R> M* D+              \ [X2-X1] L1*[X2-X]+L2*[X-X1]
        SWAP m/round
       ;

 

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

Если случается такой мозголомный ужас - имеет смысл задуматься - " А верно ли я подошел к решению задачи?"

Впрочем, об этом лучше читать уже рекомендованное - Thinking Forth

 

Share this post


Link to post
Share on other sites

( по мнению Криса Касперского программы на форте с трудом поддаются "хакингу")

А вроде как наоборот - во многие системы входят слова для "дизфорта", вываливающие исходники по имени слова.

Да что далеко ходить - сборки .net, не прошедшие обфускацию, вываливают все свои потроха по первому требованию

 

Share this post


Link to post
Share on other sites

А вроде как наоборот - во многие системы входят слова для "дизфорта", вываливающие исходники по имени слова.

Да что далеко ходить - сборки .net, не прошедшие обфускацию, вываливают все свои потроха по первому требованию

Сборки Net, Java показывают легко свои "потроха", если не убрана отладочная информация (в другом варианте могут быть проблемы,

скорее всего)

Статя Криса Касперски Защита игр от взлома (статья в журнале хакер) проясняющая некоторые моменты. (Особо действенный способ выполнять программу в рамках эмулируемого и ивестного "только" разработчику программы процессора) А как оно всё реально эффективно...

 

P.S. Для развития интересна статья к прочтению Криса Касперски Языки, которые мы потеряли (Форт тоже упоминается)

И также стоит ознакомитья с исследовательской статьёй приведённой в книге Брукса Мифический Человеко месяц

начиная с главы.16 (online) Серебряной пули нет — сущность и акциденция в программной инженерии (русское издание данной книги, вроде 2002года )

 

Народ! если вас будут убеждать что на форте только так и приходится писать программы, знайте - вас обманывают. Ни один фортер в здравом уме и трезвой памяти не станет творить такое без особых на то причин ...

 

Такое, только, в моём понимании:

 

1. Если выполнение будет происходить на "чисто" стековом процессоре (например графический процессор Вводная инфа: Gameduino Игровой адаптер для контролеров)

2.Других возможностей нет "по быстрому" добавить необходимую математику на "регистровой" реализации Форт, например в ассемблере.

или требуется некоторая компактность занимаемого места кодом. (а надстройки (или "инородные"инструменты) по кодогенерации или кросс-компиляции кода не используются)

3. Проверить "абстрактные" оптимизационные возможности на данном коде на разных Форт системах..

4. Из интереса (любви) к чистому искусству.(здесь есть некоторые оправданные аналоги Graphicals Haiku in Forth и код, возможно, с минимумом переделок использовать для этого.

...

Edited by Kopa

Share this post


Link to post
Share on other sites

"Хорошая идея - приложить к этому делу Форт. Вот его преимущества: простота реализации Форт-машины, компактность p-кода, довольно высокая производительность, сложность декомпиляции и ни на что непохожесть. Форт стоит особняком от всех языков, совсем не стремясь соответствовать человеческим привычкам, "здравому смыслу" и "логике". Разобраться в его идеологии с нуля будет непросто. Хакеру придется нарыть кучу литературы и запастись терпением. Даже если ему не наскучит, разработчик защиты получит хорошую фору по времени, ну а там... мыщъх что-нибудь придумает!"

Защита игр от взлома Автор: ©Крис Касперски ака мыщъх

Share this post


Link to post
Share on other sites

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

Увы, не сильно лучшего хватает, как уже упоминал, и в библиотеках расширений. Это не только извращения программистов, это отчасти свойство языка, ну провоцирует он к "мозголомству". И еще, когда глубоко погрузился в написание на форте, это уже не кажется ужасом, все понятно и прозрачно. До тех пор пока погрузился :rolleyes:

Проблемы с хакингом это во многом следствие неочевидности и сложности для восприятия базового синтаксиса и сложных стековых манипуляций (общепризнанная слабость языка). И тоже самое будет с пониманием кода другим программистом. Плюс бесконечное расширение новыми понятиями и новой лексикой, на выходе может легко дать текст на "птичьем" языке, малопонятном для других разработчиков (проблема для любого программного языка, но для форта такое расширение в гораздо большей степени "и нужно, и можно"). Скажут, что должно в идеале решатся правильной методой программирования, но (это уже как битый руководитель) лучше бы было жизнеспособно и без оной. Тем более для зачастую простых с программной точки зрения микроконтроллерных задач.

Поэтому для командной работы (мы сейчас в основном только так и работаем, что правильно) я Forth поостерегусь применять, кроме случаев действительной нужды в нем.

 

Если случается такой мозголомный ужас - имеет смысл задуматься - " А верно ли я подошел к решению задачи?"

Правильно сказано. В том числе задуматься и про выбор инструментария. :rolleyes:

 

P.S. Сам не пробовал, но вроде исходный текст форт восстанавливается по скомпилированному бинарному коду (для некоторых систем). Вот где разгул для хакинга. Не так давно паролил часть слов интерпретатора, дающих доступ к памяти и "потрохам", когда пошли активные поставки изделий в Китай. Больше для очистки совести.

Это к недостаткам Forth никак не не отношу.

Share this post


Link to post
Share on other sites

Хотя с другой стороны, я сам когда-то учился программировать на стековой машине советского калькулятора, с сомнительным как видим результатом :rolleyes:

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

Share this post


Link to post
Share on other sites

Увы, не сильно лучшего хватает, как уже упоминал, и в библиотеках расширений.

Да, может не хватать готовых и доступных существующих прототипов со знанием реализованных "наработок", как впрочем, и при создании "любого" программного изделия.:) Но, в этом случае, программисты сами, зачастую, "запиливают" себе небходимый код и решения, по ходу.

 

Это не только извращения программистов, это отчасти свойство языка, ну провоцирует он к "мозголомству". И еще, когда глубоко погрузился в написание на форте, это уже не кажется ужасом, все понятно и прозрачно. До тех пор пока погрузился :rolleyes:

Проблемы с хакингом это во многом следствие неочевидности и сложности для восприятия базового синтаксиса и сложных стековых манипуляций (общепризнанная слабость языка). И тоже самое будет с пониманием кода другим программистом.

Можно согласится, если нет привычки восприятия Форт программ. У меня проблем с восприятием и изменением чужого Форт кода особых не было. (всё в рабочем порядке), при этом те вещи которые не надо изменять, "легко" вычленяются из кода и не рассматриваются детально (Форт код действительно, в этом случае, минимально "защищает" себя от изучения.) Стековые маниуляции не так сложны и многочислены (зачастую типовое шаблонное использование) и "достаточно" наглядны в "коротких" интервалах кода. (но комментарии и правила оформления кода не помешают)

 

Плюс бесконечное расширение новыми понятиями и новой лексикой, на выходе может легко дать текст на "птичьем" языке, малопонятном для других разработчиков (проблема для любого программного языка, но для форта такое расширение в гораздо большей степени "и нужно, и можно").

В практической работе "мощные" механизмы по саморасширению Форт системы, зачастую, используются по минимуму необходимого. На выходе

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

 

Правильно сказано. В том числе задуматься и про выбор инструментария. :rolleyes:

Полностью поддерживаю и стараюсь использовать, по возможности и необходимости, разные дополнительные инструментальные и не только средства.:)

 

P.S. Сам не пробовал, но вроде исходный текст форт восстанавливается по скомпилированному бинарному коду (для некоторых систем).

Наверное это можно отнести к Форт системам с "классической" реализацией использования шитого кода и с "небольшими" отклонениями

от существующих стандартов.

В русском SPF4 код после макрооптимизатора, уже наверное без "специальной" теории семантического анализа не понять,не имея исходного кода

программы.

 

Поэтому для командной работы (мы сейчас в основном только так и работаем, что правильно) я Forth поостерегусь применять, кроме случаев действительной нужды в нем.

Для командной работы на Форт необходимо желание самих программистов-разработчиков использовать данный инструментарий в своей работе, а также не ограничивать и индивидуальный интерес к опробированию задуманных решений на Форт.

 

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

Может и не возвращение, но как повод "переосмыслить" некоторые вещи полезен и в сравненнии с Си.

 

Тем более для зачастую простых с программной точки зрения микроконтроллерных задач.

Задачи микроконтроллерные, изначально рассматриваются и определяются, как "простые", но дальше "аппетит" разработчика

может быть ничем не ограничен к добавлению всё новых и новых "фич".

Edited by Kopa

Share this post


Link to post
Share on other sites

Вопрос к знатокам форта.

 

Дано:

#define ADC10DTC0_ 0x0048 /* ADC10 Data Transfer Control 0 */

 

Требуется преобразовать в:

0x0048 constant ADC10DTC0_

 

То есть перетасовать порядок следования слов. Можно это как-нибудь реализовать?

Share this post


Link to post
Share on other sites

Вопрос к знатокам форта.

 

Дано:

#define ADC10DTC0_ 0x0048 /* ADC10 Data Transfer Control 0 */

 

Требуется преобразовать в:

0x0048 constant ADC10DTC0_

 

То есть перетасовать порядок следования слов. Можно это как-нибудь реализовать?

Самое простое, без обработки входного потока и "извращений"

 : /* POSTPONE  \ ; 
: #define , CREATE DOES> @ ;
0
#define ABC 123
#define CCC 456
,

P.S. Вспомнилось, попутно, обcуждение простых действий по преобразованию постфикса ассемблера в инфикс

Число ли?

В devel SPF4, вроде есть ещё варианты для #define

Edited by Kopa

Share this post


Link to post
Share on other sites

А для чего ноль в начале и запятая в конце? (в смысле, обязательно ли)

 

Первая часть сработала :)

: /* POSTPONE  (; ok 
: */ POSTPONE  ); ?
: // POSTPONE  \; ok 

/* 12345 fjf j j */ ok

10 4 5 */ .s <0> ok

 

Правда, случайно переопределил */, ну да ладно..

 

А вот вторая - ни в какую. Рестартится, правда warm.

 

0 ok 
#define abc 123 ok 
, ok 
abc4Ñ30G2553 v0.34 Apr 15 2012|110001110 Warm

В последней строке написал abc и нажал Enter

Share this post


Link to post
Share on other sites

А для чего ноль в начале и запятая в конце? (в смысле, обязательно ли)

В этом варианте обязательно, 0 произвольное число чтобы не произошло исчерпания стека при выполнениии #define

(т.к. первым действием слово дописывает данные в поле кода "условно предыдущего слова")

а запятая, чтобы последняя константа тоже получила своё число.

Edited by Kopa

Share this post


Link to post
Share on other sites

Таки извратился :)

: #define :; ok 
#define abc 123; ok
abc . 123 ok

Осталось придумать, кто будет ; дописывать в конце каждой строки

 

Чегт, ещё одна засада!

#define ADC10CTL1_            0x01B2    /* ADC10 Control 1 */ 0X01B2?

Как бы объяснить, что 0x == hex

Share this post


Link to post
Share on other sites

А вот вторая - ни в какую. Рестартится, правда warm.

Может, в этом варианте для 4e4h попробовать использовать последовательность [ LITERAL ] вместо запятой в дефине

т.к. устройство данного Форта может отличаться от общей модели с неразделяемой памятью.

 

P.S. Числа можно из входного потока например брать по такой схеме

  : # NextWord 0 0 2SWAP >NUMBER 2DROP DROP  ,;  IMMEDIATE

Вместо NeхtWord вероятно есть слово WORD

и тогда : NextWord ( -- addr len ) WORD COUNT ;

и далее с возможными вариациями

Edited by Kopa

Share this post


Link to post
Share on other sites

ok, попробую :)

Хотя, полюбому матчасть учить.

Слова есть такие:

words ABC #DEFINE ABC ABC #DEFINE // /* S2? S2 GREEN RED P3 P2 P1 UNUSED MEM MEMTOP MEMBOT CGET CTOGGLE CCLR CSET MS 1MS BIN BELL .VER \ 2CONSTANT WIPE FACTORY

COLD WARM BOOT SAVE VALID? APPCRC ITHERE crc (crc ccrc .S DUMP U.R WORDS MARKER

FLALIGNED NOOP ENVIRONMENT? DEPTH MOVE WITHIN LEAVE +LOOP LOOP ENDLOOP DO L> >L

REPEAT WHILE AGAIN UNTIL BEGIN ELSE THEN IF POSTPONE ['] ; : IMMEDIATE REVEAL HIDE ] [ RECURSE DOES> (DOES>) CREATE <BUILDS HEADER ( [CHAR] CHAR ' ABORT" ?ABORT ABORT QUIT EVALUATE INTERPRET ?NUMBER >NUMBER ?SIGN DIGIT? LITERAL FIND IMMED?

NFA>CFA NFA>LFA WORD >COUNTED /STRING SOURCE IC, I, IALLOT IHERE C, , ALLOT HERE

HEX DECIMAL . U. SIGN #> #S # >DIGIT <# HOLD UD* UD/MOD IWORD ." S" IS" (S") (IS") ITYPE ICOUNT TYPE ACCEPT UMAX UMIN SPACES SPACE CR COUNT 2OVER 2SWAP 2DUP 2DROP 2! 2@ MIN MAX */ */MOD MOD / /MOD * FM/MOD SM/REM M* DABS ?DNEGATE DNEGATE ABS ?NEGATE S>D APPU0 INFOB COR #INIT UINIT BL TIBSIZE TIB S0 R0 L0 PAD CAPS APP NEWEST IDP LP HP LATEST 'SOURCE DP STATE BASE >IN U0 ,NONE !DEST ,DEST ,BRANCH ,

EXIT !COLON ,JMP ,CALL ,CF !CF COMPILE, >BODY CHARS CHAR+ CELLS CELL+ CELL ALIGNED ALIGN KEY? KEY EMIT N= S= SCAN SKIP I->D CMOVE> CMOVE FILL UM/MOD UM* UNLOOP J I (+loop) (loop) (do) ?branch branch U> U< > < <> = 0< 0= RSHIFT LSHIFT 2/ 2*

>< 1- 1+ NEGATE INVERT XOR OR AND - M+ +! + D->I IC@ I@ IC! I! FLERASE C! C@ ! @

TUCK RP! RP@ SP! SP@ R@ R> >R NIP ROT OVER SWAP DROP ?DUP DUP USER CONSTANT VARIABLE EXIT lit EXECUTE ok

 

Все-таки ABC прописалось, но выполняет что-то загадочное :)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...