Kopa 0 5 июня, 2009 Опубликовано 5 июня, 2009 · Жалоба : Pulse ( Addr Mask --) 2DUP OR! FFFF XOR AND! ; Формирует импульс длительностью 23 мкс при тактировании от DCO (4.8МГц) FFFF XOR это INVERT битов Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 27 5 июня, 2009 Опубликовано 5 июня, 2009 · Жалоба FFFF XOR это INVERT битов Ну , не всё так сразу. Теперь уже нашёл. Почти понял, как свои слова добавлять к дистрибу. Почему-то отдельно описаны реализации в файле core430, а потом упакованы в словарь в файле hilvl430 Наверно, это правильно, но несколько неудобно править сразу в двух местах. А вообще, паковать форт в ИАРе - неправильно. Но на первое время сойдёт. Что я хочу на первом этапе: (тсз, ближайшая цель) соорудить простейшее форт-ядро, в котором интерпретатор будет запускаться в отдельном потоке (например, по прерыванию от технологического УАРТа, либо от основного после набора секретной комбинации символов (ахалай-махалай-сим-салавим) плюс пароль). Вот в этом направлении пока движусь. Почти понял, как свои слова добавлять к дистрибу. Почему-то отдельно описаны реализации в файле core430, а потом упакованы в словарь в файле hilvl430 Всё, допёр. в core простые слова, а в hilvl - сложные. а моё слово не находилось, потому что надо было правильно длину указывать. : Pulse ( Mask Addr --) 2DUP OR! >R INVERT R> AND!; с новыми (асмовыми) определениями OR! и AND! формирует 8-мкс импульс. Конечно, не 1мк, как на чистом асме, но уже вполне... ########### такая ещё проблема. если заливать исходный код, даже на скорости 9600 в конце определения или строки происходит протормаживание интерпретатора (анализ строки, поиск по словарю, компиляция) даже при компиляции в ОЗУ. С флешью к этому надо будет добавить время записи в флешь. За это время из входного потока может потеряться несколько символов. Пока выхожу из положения введением ведущих пробелов после каждого определения. Хотя, если сделать динамический входной буфер и ловить символы по прерываниям, то наверно проблема исчезнет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kopa 0 5 июня, 2009 Опубликовано 5 июня, 2009 · Жалоба Ну , не всё так сразу. Теперь уже нашёл. есть "волшебное" слово WORDS показывающее слова текущего контекста А вообще, паковать форт в ИАРе - неправильно. Но на первое время сойдёт. можно и не паковать, а использовать только ассемблер:) Что я хочу на первом этапе: (тсз, ближайшая цель) соорудить простейшее форт-ядро, в котором интерпретатор будет запускаться в отдельном потоке (например, по прерыванию от технологического УАРТа, либо от основного после набора секретной комбинации символов (ахалай-махалай-сим-салавим) плюс пароль). Вот в этом направлении пока движусь. Внутренний ключевые функции софта, при этом, имеет смысл оформить в виде слов с возможностью на стеке передавать им параметры для интерактивного "тестирования" аппаратуры. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 27 5 июня, 2009 Опубликовано 5 июня, 2009 · Жалоба Внутренний ключевые функции софта, при этом, имеет смысл оформить в виде слов с возможностью на стеке передавать им параметры для интерактивного "тестирования" аппаратуры. Ну да, само собой. Я пока от возможности дёрнуть ногой по команде прихожу в восторг. Проходящий мимо коллега смотрит скептически. Вот если бы писать под МСП на C# и .Net Framework... Кстати, куча времени уходит обычно на написание всяческих технологических примочек с кнопочками и окошечками. а тут - берёшь терминал по вкусу - и вперёд! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
chu 0 5 июня, 2009 Опубликовано 5 июня, 2009 · Жалоба : 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 Тоже должно сработать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kopa 0 5 июня, 2009 Опубликовано 5 июня, 2009 · Жалоба Ну да, само собой. Я пока от возможности дёрнуть ногой по команде прихожу в восторг. Есть разработки где рисование ladder диаграмм в текстовом редакторе прямо транслируется в программу на Форт. Проходящий мимо коллега смотрит скептически. Вот если бы писать под МСП на C# и .Net Framework... А знаком ли он с частью базовых принципов "экстремального" программирования когда советуют иметь, как можно меньшие простые объекты с минимальной необходимой тестируемостью? Меньше понятия слова в языке программирования, трудно что то придумать. На Javа и С# есть n-ое количество Форт систем. и у Java и С# выходной байт код стековый. Далее. Пишем на них и исполняем или транслируем с помощью JIT код для целевого процессора. ( с возникшими проблемами по скорости и избыточности выходного кода боремся дополнительными ограничениями по использованию Java и С# языков или как то ещё) Если посмотреть список контор, при принятии Форт стандарта 94г. то почти все мировые бренды.:) ( но это конечно не аргументы ) Кстати, куча времени уходит обычно на написание всяческих технологических примочек с кнопочками и окошечками. Необходимость в лёгких средствах для этого привела к созданию, в рамках spf4, специализированного библиотечного Форт расширения от ~yz а тут - берёшь терминал по вкусу - и вперёд! Ага. И даже можно снять видеоролик процесса, при этом :) ( есть и примеры этого ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 27 5 июня, 2009 Опубликовано 5 июня, 2009 · Жалоба 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 в скобках задано... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 5 июня, 2009 Опубликовано 5 июня, 2009 · Жалоба На Javа и С# есть n-ое количество Форт систем. и у Java и С# выходной байт код стековый. Далее. Пишем на них и исполняем или транслируем с помощью JIT код для целевого процессора. Кстати, о JIT. Почему бы при использовании MSP430 не реализовать это для Форта? Есть же исполнение из RAM. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kopa 0 5 июня, 2009 Опубликовано 5 июня, 2009 · Жалоба ########### такая ещё проблема. ... С обычным терминалом придётся изменить логику внутренней обработки входного потока или ускорить поиск слов по словарю через хеш функции. или перейти на более специализированные протоколы посылка - ответ ( для примера в tinyboot так сделано и дополнительно образ в кросс системе синхронизирован с кодом в устройстве имеется также возможность к ядру компилировать посылаемые байт-коды.) какого-то х.. do и loop в скобках задано... Так обычно обозначают внутренние примитивные слова служащие основой для стандартных. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 27 5 июня, 2009 Опубликовано 5 июня, 2009 · Жалоба : ;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-архитектуры) Так обычно обозначают внутренние примитивные слова служащие основой для стандартных. Ага, я уже в комментариях прочитал :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kopa 0 5 июня, 2009 Опубликовано 5 июня, 2009 (изменено) · Жалоба Кстати, о JIT. Почему бы при использовании MSP430 не реализовать это для Форта? Есть же исполнение из RAM. Можно, но в общем, вопрос в решении достаточно серьёзный , если не учитывать простые приёмы. ( типа макрооптимизация, дающая хорошие результаты при постоянном введении необходимых тех или иных правил ) Плюс ресурсы отнимаемые у контроллера. ( у Java и C# это не так просто и вливаний финансовые могут себе позволить ) Ещё предстоит учесть, что в Форте почти отсутствует понятие типа данных и в каких то случаях необходимо будет учитывать архитектуру внутреннего устройства Форт системы. А так это вполне решимая задача P.S. В классически построенной Форт системе главное достоинство, при выполнении программой своих функций, компактность полученного кода. Короче, задача номер ноль - инлайн ассемблер (тем более что он намного проще для msp ввиду ортогональной RISC-архитектуры) Просто "сказка", но в отличии от PDP-11 не такая ортогональная:) хотя и в PDP-11 не всё было необходимое. Инлай ассемблер можно встроить используя возможности внутреннего существующего Форта и посмотрев примеры реализаций ( например у приводимого выше Форта для MSP Михаилом на spf4 или другие :) Част ассемблер в Форт системах обратный, но можно и классический ( один легко следует из другого статья этого же автора, что и Camel Forth Как написать свой (кросс-)ассемблер © Brad Rodriguez Можно сделать и Си подобный синтаксис ассемблера:) Изменено 5 июня, 2009 пользователем Kopa Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 5 июня, 2009 Опубликовано 5 июня, 2009 · Жалоба Плюс ресурсы отнимаемые у контроллера. ... P.S. В классически построенной Форт системе главное достоинство, при выполнении программой своих функций, компактность полученного кода. Дык хотя бы самые глубокие циклы JIT'ить на ходу. Можно не весь код. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
chu 0 5 июня, 2009 Опубликовано 5 июня, 2009 · Жалоба какого-то х.. do и loop в скобках задано... Доступно изложено в книге Баранова и Ноздрунова " Язык Форт и его реализации" Глава2. Реализация и расширения 2.3 Стек возвратов и реализация структур управления. В книге описывается стандарт F83. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 27 5 июня, 2009 Опубликовано 5 июня, 2009 · Жалоба : Pulses ( Mask Addr Num --) 0 DO 2DUP Pulse LOOP 2DROP; 2 Pulses формирует 2 импульса 8мкс с периодом 35мкc :08: :yeah: Сорри за мой мой поросячий восторг, что-то подобное испытываешь, когда начинает пищать первый мультивибратор или программа "хелловорлд" начинает мигать светодиодами... :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
chu 0 5 июня, 2009 Опубликовано 5 июня, 2009 · Жалоба :08: :yeah: Сорри за мой мой поросячий восторг, что-то подобное испытываешь, когда начинает пищать первый мультивибратор или программа "хелловорлд" начинает мигать светодиодами... :) Здорово! :cheers: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться