|
|
  |
А вот бы на FORTH написать..., ;-) |
|
|
|
Jun 5 2009, 08:01
|
Знающий
   
Группа: Участник
Сообщений: 598
Регистрация: 22-08-05
Пользователь №: 7 861

|
Цитата(MrYuran @ Jun 5 2009, 10:38)  : Pulse ( Addr Mask --) 2DUP OR! FFFF XOR AND! ; Формирует импульс длительностью 23 мкс при тактировании от DCO (4.8МГц) Код FFFF XOR это INVERT битов
|
|
|
|
|
Jun 5 2009, 08:55
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(Kopa @ Jun 5 2009, 12:01)  Код FFFF XOR это INVERT битов Ну , не всё так сразу. Теперь уже нашёл. Почти понял, как свои слова добавлять к дистрибу. Почему-то отдельно описаны реализации в файле core430, а потом упакованы в словарь в файле hilvl430 Наверно, это правильно, но несколько неудобно править сразу в двух местах. А вообще, паковать форт в ИАРе - неправильно. Но на первое время сойдёт. Что я хочу на первом этапе: (тсз, ближайшая цель) соорудить простейшее форт-ядро, в котором интерпретатор будет запускаться в отдельном потоке (например, по прерыванию от технологического УАРТа, либо от основного после набора секретной комбинации символов (ахалай-махалай-сим-салавим) плюс пароль). Вот в этом направлении пока движусь. Цитата Почти понял, как свои слова добавлять к дистрибу. Почему-то отдельно описаны реализации в файле core430, а потом упакованы в словарь в файле hilvl430 Всё, допёр. в core простые слова, а в hilvl - сложные. а моё слово не находилось, потому что надо было правильно длину указывать. Код : Pulse ( Mask Addr --) 2DUP OR! >R INVERT R> AND!; с новыми (асмовыми) определениями OR! и AND! формирует 8-мкс импульс. Конечно, не 1мк, как на чистом асме, но уже вполне... ########### такая ещё проблема. если заливать исходный код, даже на скорости 9600 в конце определения или строки происходит протормаживание интерпретатора (анализ строки, поиск по словарю, компиляция) даже при компиляции в ОЗУ. С флешью к этому надо будет добавить время записи в флешь. За это время из входного потока может потеряться несколько символов. Пока выхожу из положения введением ведущих пробелов после каждого определения. Хотя, если сделать динамический входной буфер и ловить символы по прерываниям, то наверно проблема исчезнет.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Jun 5 2009, 09:17
|
Знающий
   
Группа: Участник
Сообщений: 598
Регистрация: 22-08-05
Пользователь №: 7 861

|
Цитата(MrYuran @ Jun 5 2009, 11:43)  Ну , не всё так сразу. Теперь уже нашёл. есть "волшебное" слово WORDS показывающее слова текущего контекста Цитата(MrYuran @ Jun 5 2009, 11:43)  А вообще, паковать форт в ИАРе - неправильно. Но на первое время сойдёт. можно и не паковать, а использовать только ассемблер  Цитата(MrYuran @ Jun 5 2009, 11:43)  Что я хочу на первом этапе: (тсз, ближайшая цель) соорудить простейшее форт-ядро, в котором интерпретатор будет запускаться в отдельном потоке (например, по прерыванию от технологического УАРТа, либо от основного после набора секретной комбинации символов (ахалай-махалай-сим-салавим) плюс пароль).
Вот в этом направлении пока движусь. Внутренний ключевые функции софта, при этом, имеет смысл оформить в виде слов с возможностью на стеке передавать им параметры для интерактивного "тестирования" аппаратуры.
|
|
|
|
|
Jun 5 2009, 09:24
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(Kopa @ Jun 5 2009, 13:17)  Внутренний ключевые функции софта, при этом, имеет смысл оформить в виде слов с возможностью на стеке передавать им параметры для интерактивного "тестирования" аппаратуры. Ну да, само собой. Я пока от возможности дёрнуть ногой по команде прихожу в восторг. Проходящий мимо коллега смотрит скептически. Вот если бы писать под МСП на C# и .Net Framework...  Кстати, куча времени уходит обычно на написание всяческих технологических примочек с кнопочками и окошечками. а тут - берёшь терминал по вкусу - и вперёд!
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Jun 5 2009, 09:51
|

Частый гость
 
Группа: Участник
Сообщений: 95
Регистрация: 13-12-07
Пользователь №: 33 246

|
Цитата(MrYuran @ Jun 5 2009, 15:55)  Код : 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 Тоже должно сработать.
|
|
|
|
|
Jun 5 2009, 09:57
|
Знающий
   
Группа: Участник
Сообщений: 598
Регистрация: 22-08-05
Пользователь №: 7 861

|
Цитата(MrYuran @ Jun 5 2009, 12:24)  Ну да, само собой. Я пока от возможности дёрнуть ногой по команде прихожу в восторг. Есть разработки где рисование ladder диаграмм в текстовом редакторе прямо транслируется в программу на Форт. Цитата(MrYuran @ Jun 5 2009, 12:24)  Проходящий мимо коллега смотрит скептически. Вот если бы писать под МСП на C# и .Net Framework...  А знаком ли он с частью базовых принципов "экстремального" программирования когда советуют иметь, как можно меньшие простые объекты с минимальной необходимой тестируемостью? Меньше понятия слова в языке программирования, трудно что то придумать. На Javа и С# есть n-ое количество Форт систем. и у Java и С# выходной байт код стековый. Далее. Пишем на них и исполняем или транслируем с помощью JIT код для целевого процессора. ( с возникшими проблемами по скорости и избыточности выходного кода боремся дополнительными ограничениями по использованию Java и С# языков или как то ещё) Если посмотреть список контор, при принятии Форт стандарта 94г. то почти все мировые бренды.  ( но это конечно не аргументы ) Цитата(MrYuran @ Jun 5 2009, 12:24)  Кстати, куча времени уходит обычно на написание всяческих технологических примочек с кнопочками и окошечками. Необходимость в лёгких средствах для этого привела к созданию, в рамках spf4, специализированного библиотечного Форт расширения от ~yz Цитата(MrYuran @ Jun 5 2009, 12:24)  а тут - берёшь терминал по вкусу - и вперёд! Ага. И даже можно снять видеоролик процесса, при этом  ( есть и примеры этого )
|
|
|
|
|
Jun 5 2009, 09:57
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
CODE 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 в скобках задано...
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Jun 5 2009, 10:15
|
Знающий
   
Группа: Участник
Сообщений: 598
Регистрация: 22-08-05
Пользователь №: 7 861

|
Цитата(MrYuran @ Jun 5 2009, 11:55)  ########### такая ещё проблема. ... С обычным терминалом придётся изменить логику внутренней обработки входного потока или ускорить поиск слов по словарю через хеш функции. или перейти на более специализированные протоколы посылка - ответ ( для примера в tinyboot так сделано и дополнительно образ в кросс системе синхронизирован с кодом в устройстве имеется также возможность к ядру компилировать посылаемые байт-коды.) Цитата(MrYuran @ Jun 5 2009, 12:57)  какого-то х.. do и loop в скобках задано... Так обычно обозначают внутренние примитивные слова служащие основой для стандартных.
|
|
|
|
|
Jun 5 2009, 10:20
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(chu @ Jun 5 2009, 13:51)  Код : ;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-архитектуры) Цитата Так обычно обозначают внутренние примитивные слова служащие основой для стандартных. Ага, я уже в комментариях прочитал
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Jun 5 2009, 10:32
|
Знающий
   
Группа: Участник
Сообщений: 598
Регистрация: 22-08-05
Пользователь №: 7 861

|
Цитата(Rst7 @ Jun 5 2009, 13:03)  Кстати, о JIT. Почему бы при использовании MSP430 не реализовать это для Форта? Есть же исполнение из RAM. Можно, но в общем, вопрос в решении достаточно серьёзный , если не учитывать простые приёмы. ( типа макрооптимизация, дающая хорошие результаты при постоянном введении необходимых тех или иных правил ) Плюс ресурсы отнимаемые у контроллера. ( у Java и C# это не так просто и вливаний финансовые могут себе позволить ) Ещё предстоит учесть, что в Форте почти отсутствует понятие типа данных и в каких то случаях необходимо будет учитывать архитектуру внутреннего устройства Форт системы. А так это вполне решимая задача P.S. В классически построенной Форт системе главное достоинство, при выполнении программой своих функций, компактность полученного кода. Цитата(MrYuran @ Jun 5 2009, 13:20)  Короче, задача номер ноль - инлайн ассемблер (тем более что он намного проще для msp ввиду ортогональной RISC-архитектуры) Просто "сказка", но в отличии от PDP-11 не такая ортогональная  хотя и в PDP-11 не всё было необходимое. Инлай ассемблер можно встроить используя возможности внутреннего существующего Форта и посмотрев примеры реализаций ( например у приводимого выше Форта для MSP Михаилом на spf4 или другие  Част ассемблер в Форт системах обратный, но можно и классический ( один легко следует из другого статья этого же автора, что и Camel Forth Как написать свой (кросс-)ассемблер © Brad Rodriguez Можно сделать и Си подобный синтаксис ассемблера
Сообщение отредактировал Kopa - Jun 5 2009, 11:16
|
|
|
|
|
Jun 5 2009, 10:36
|

Частый гость
 
Группа: Участник
Сообщений: 95
Регистрация: 13-12-07
Пользователь №: 33 246

|
Цитата(MrYuran @ Jun 5 2009, 16:57)  какого-то х.. do и loop в скобках задано... Доступно изложено в книге Баранова и Ноздрунова " Язык Форт и его реализации" Глава2. Реализация и расширения 2.3 Стек возвратов и реализация структур управления. В книге описывается стандарт F83.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|