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

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

: Pulse ( Addr Mask --)

2DUP OR! FFFF XOR AND! ;

Формирует импульс длительностью 23 мкс при тактировании от DCO (4.8МГц)

FFFF XOR

 

это INVERT битов

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


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

FFFF XOR

это INVERT битов

Ну , не всё так сразу.

Теперь уже нашёл.

Почти понял, как свои слова добавлять к дистрибу.

Почему-то отдельно описаны реализации в файле core430, а потом упакованы в словарь в файле hilvl430

Наверно, это правильно, но несколько неудобно править сразу в двух местах.

А вообще, паковать форт в ИАРе - неправильно.

Но на первое время сойдёт.

 

Что я хочу на первом этапе:

(тсз, ближайшая цель)

соорудить простейшее форт-ядро, в котором интерпретатор будет запускаться в отдельном потоке (например, по прерыванию от технологического УАРТа, либо от основного после набора секретной комбинации символов (ахалай-махалай-сим-салавим) плюс пароль).

 

Вот в этом направлении пока движусь.

 

Почти понял, как свои слова добавлять к дистрибу.

Почему-то отдельно описаны реализации в файле core430, а потом упакованы в словарь в файле hilvl430

Всё, допёр.

в core простые слова, а в hilvl - сложные.

а моё слово не находилось, потому что надо было правильно длину указывать.

 

: Pulse ( Mask Addr --)
    2DUP OR! >R INVERT R> AND!;

с новыми (асмовыми) определениями OR! и AND! формирует 8-мкс импульс.

Конечно, не 1мк, как на чистом асме, но уже вполне...

 

###########

такая ещё проблема.

если заливать исходный код, даже на скорости 9600 в конце определения или строки происходит протормаживание интерпретатора (анализ строки, поиск по словарю, компиляция) даже при компиляции в ОЗУ. С флешью к этому надо будет добавить время записи в флешь.

За это время из входного потока может потеряться несколько символов.

Пока выхожу из положения введением ведущих пробелов после каждого определения.

Хотя, если сделать динамический входной буфер и ловить символы по прерываниям, то наверно проблема исчезнет.

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


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

Ну , не всё так сразу.

Теперь уже нашёл.

 

есть "волшебное" слово WORDS показывающее слова текущего контекста

 

А вообще, паковать форт в ИАРе - неправильно.

Но на первое время сойдёт.

 

можно и не паковать, а использовать только ассемблер:)

 

 

Что я хочу на первом этапе:

(тсз, ближайшая цель)

соорудить простейшее форт-ядро, в котором интерпретатор будет запускаться в отдельном потоке (например, по прерыванию от технологического УАРТа, либо от основного после набора секретной комбинации символов (ахалай-махалай-сим-салавим) плюс пароль).

 

Вот в этом направлении пока движусь.

 

Внутренний ключевые функции софта, при этом, имеет смысл оформить в виде слов

с возможностью на стеке передавать им параметры для интерактивного "тестирования"

аппаратуры.

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


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

Внутренний ключевые функции софта, при этом, имеет смысл оформить в виде слов

с возможностью на стеке передавать им параметры для интерактивного "тестирования"

аппаратуры.

Ну да, само собой.

Я пока от возможности дёрнуть ногой по команде прихожу в восторг.

 

Проходящий мимо коллега смотрит скептически.

Вот если бы писать под МСП на C# и .Net Framework... :biggrin:

 

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

а тут - берёшь терминал по вкусу - и вперёд!

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


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

: Pulse ( Mask Addr --)
    2DUP OR! >R INVERT R> AND!;

с новыми (асмовыми) определениями OR! и AND! формирует 8-мкс импульс.

Конечно, не 1мк, как на чистом асме, но уже вполне...

:
;C Pulse ( Mask Addr --)
        HEADER  Pulse,5,'Pulse',DOCODE
        DECD   PSP
        MOV     2(PSP),0(PSP)
        AND     @PSP+,0(TOS)
        XOR     @PSP+,0(TOS)
        MOV     @PSP+,TOS
        NEXT

 

Тоже должно сработать.

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


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

Ну да, само собой.

Я пока от возможности дёрнуть ногой по команде прихожу в восторг.

 

Есть разработки где рисование ladder диаграмм в текстовом редакторе

прямо транслируется в программу на Форт.

 

Проходящий мимо коллега смотрит скептически.

Вот если бы писать под МСП на C# и .Net Framework... :biggrin:

 

А знаком ли он с частью базовых принципов "экстремального" программирования

когда советуют иметь, как можно меньшие простые объекты с минимальной

необходимой тестируемостью? Меньше понятия слова в языке программирования,

трудно что то придумать.

 

На Javа и С# есть n-ое количество Форт систем.

и у Java и С# выходной байт код стековый. Далее.

Пишем на них и исполняем или транслируем с помощью JIT код для целевого процессора.

( с возникшими проблемами по скорости и избыточности выходного кода боремся дополнительными

ограничениями по использованию Java и С# языков или как то ещё)

 

Если посмотреть список контор, при принятии Форт стандарта 94г. то почти все мировые бренды.:)

( но это конечно не аргументы )

 

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

 

Необходимость в лёгких средствах для этого привела к созданию, в рамках spf4,

специализированного библиотечного Форт расширения от ~yz

 

а тут - берёшь терминал по вкусу - и вперёд!

 

Ага.

И даже можно снять видеоролик процесса, при этом :) ( есть и примеры этого )

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


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

WORDS 
Pulse DINT EINT !LEDS COLD .S DUMP U.R WORDS MARKER FLALIGNED ENVIRONMENT?
DEPTH MOVE WITHIN LEAVE +LOOP LOOP ENDLOOP DO L> >L REPEAT WHILE AGAIN UNTIL BE
GIN ELSE THEN IF POSTPONE ['] ; : IMMEDIATE REVEAL HIDE ] [ RECURSE DOES> (DOES>
) CREATE <BUILDS HEADER ( [CHAR] CHAR ' ABORT" ?ABORT ABORT QUIT EVALUATE INTERP
RET ?NUMBER >NUMBER ?SIGN DIGIT? LITERAL FIND IMMED? NFA>CFA NFA>LFA WORD >COUNT
ED /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 ACCEP
T 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 #INIT UINIT
BL TIBSIZE TIB S0 R0 L0 PAD 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> C
MOVE 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+ AND! OR! +! +
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

какого-то х.. do и loop в скобках задано...

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


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

На Javа и С# есть n-ое количество Форт систем.

и у Java и С# выходной байт код стековый. Далее.

Пишем на них и исполняем или транслируем с помощью JIT код для целевого процессора.

 

Кстати, о JIT. Почему бы при использовании MSP430 не реализовать это для Форта? Есть же исполнение из RAM.

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


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

###########

такая ещё проблема.

...

 

С обычным терминалом придётся изменить логику внутренней обработки входного потока

или ускорить поиск слов по словарю через хеш функции.

или перейти на более специализированные протоколы посылка - ответ

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

с кодом в устройстве имеется также возможность к ядру компилировать посылаемые байт-коды.)

 

 

какого-то х.. do и loop в скобках задано...

 

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

стандартных.

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


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

:
;C Pulse ( Mask Addr --)
        HEADER  Pulse,5,'Pulse',DOCODE
        DECD   PSP
        MOV     2(PSP),0(PSP)
        AND     @PSP+,0(TOS)
        XOR     @PSP+,0(TOS)
        MOV     @PSP+,TOS
        NEXT

 

Тоже должно сработать.

Это понятно.

Короче, задача номер ноль - инлайн ассемблер (тем более что он намного проще для msp ввиду ортогональной RISC-архитектуры)

 

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

стандартных.

Ага, я уже в комментариях прочитал :)

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


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

Кстати, о JIT. Почему бы при использовании MSP430 не реализовать это для Форта? Есть же исполнение из RAM.

 

Можно, но в общем, вопрос в решении достаточно серьёзный , если не учитывать простые приёмы.

( типа макрооптимизация, дающая хорошие результаты при постоянном введении необходимых

тех или иных правил )

Плюс ресурсы отнимаемые у контроллера. ( у Java и C# это не так просто и вливаний

финансовые могут себе позволить ) Ещё предстоит учесть, что в Форте почти отсутствует понятие

типа данных и в каких то случаях необходимо будет учитывать архитектуру внутреннего

устройства Форт системы. А так это вполне решимая задача

 

P.S. В классически построенной Форт системе главное достоинство, при выполнении

программой своих функций, компактность полученного кода.

 

 

Короче, задача номер ноль - инлайн ассемблер (тем более что он намного проще для msp ввиду ортогональной RISC-архитектуры)

 

Просто "сказка", но в отличии от PDP-11 не такая ортогональная:)

хотя и в PDP-11 не всё было необходимое.

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

примеры реализаций ( например у приводимого выше Форта для MSP Михаилом на spf4 или другие :)

Част ассемблер в Форт системах обратный, но можно и классический ( один легко следует из другого

статья этого же автора, что и Camel Forth Как написать свой (кросс-)ассемблер

© Brad Rodriguez Можно сделать и Си подобный синтаксис ассемблера:)

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

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


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

Плюс ресурсы отнимаемые у контроллера.

...

P.S. В классически построенной Форт системе главное достоинство, при выполнении

программой своих функций, компактность полученного кода.

 

Дык хотя бы самые глубокие циклы JIT'ить на ходу. Можно не весь код.

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


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

какого-то х.. do и loop в скобках задано...

 

Доступно изложено в книге Баранова и Ноздрунова " Язык Форт и его реализации"

Глава2. Реализация и расширения

2.3 Стек возвратов и реализация структур управления.

 

В книге описывается стандарт F83.

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


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

: Pulses ( Mask Addr Num --)                 
    0 DO                        
        2DUP                              
        Pulse                        
    LOOP 
    2DROP;

2 Pulses формирует 2 импульса 8мкс с периодом 35мкc

:08: :yeah:

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

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


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

:08: :yeah:

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

 

 

Здорово! :cheers:

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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