Forth http://fforum.winglion.ru/ |
|
моя форт-система, которая потихоньку пишется http://fforum.winglion.ru/viewtopic.php?f=40&t=3125 |
Страница 7 из 7 |
Автор: | Victor__v [ Сб май 05, 2018 14:09 ] |
Заголовок сообщения: | Re: моя форт-система, которая потихоньку пишется |
Портировал библиотеку automate.f от ~yz на Нову Портирована она почти полностью. Исключение: цикл FOREACH и расшифровка ошибок (будут вылезать кракозябры). Работоспособность проверял бегло. Как пользоваться СПФ-скими либами из Новы? Надо подключить окружение: SPF/ENV+.F Всё, портированные либы будут корректно подключаться. Поскольку в Нове слов меньше, может потребоваться слой совместимости - файл WORDS.F (знаете, как назвать попонятней, предлагайте). Как подключается automate Код: SPF/ENV+.F WORDS.F ~YZ\LIB\AUTOMATE.F Либу выложу позже. Когда ещё Нову и либы к ней пополню |
Автор: | Victor__v [ Ср май 09, 2018 14:08 ] |
Заголовок сообщения: | Re: моя форт-система, которая потихоньку пишется |
Нова 1.02, исходники, либы, портированный COM Что изменилось? TRANSLATE-FILE стал пользовательским вектором. Пользовательские вектора тоже изменились. Т.к. они определяются почти на финишной прямой, то USER-VECT-CODE определяется на среднем уровне, что позволило вывести его из параметризации. Это слово уже само отвечает за компиляцию. Добавлена возможность загружать файлы в форт-систему без обработки. В принципе, это и так делается одной строчкой, но Нова дополнительно позволяет для этих целей пользоваться стеком окружений и путём используемого файла. Для этого указывайте в конце пути к файлу :BIN К примеру, FILE-TEST.F:BIN Пример использования можно посмотреть в ~er\float\code\include.f Добавлена библиотека макросов ~er\macro\macro.f Позволяет определять простые макросы и константы, которые нигде не отсвечивают. Вся служебка хранится в стеке возвратов и при окончании трансляции очищается откатом. Откаты решают всё! Портирована работа с COM - automate.f от ~yz Как я понял, эта либа писалась достаточно давно. Иначе как объяснить наличие BL WORD COUNT вместо PARSE-NAME |
Автор: | Victor__v [ Пт июн 22, 2018 14:19 ] |
Заголовок сообщения: | Re: моя форт-система, которая потихоньку пишется |
Нова 1.03 Изменения: Нова может скомпилировать саму себя по исходникам. В процессе переписал часть стекового манипулятора (в 5.1). Из-за различий версий код компилировался разный, что мешало проверить "правильность" системы. После этого живо были ликвидированы остальные несуразности. Стоит отметить, что компиляция форт-образа ведётся Новой для работы с теми же абсолютными адресами, что и в используемом форте (т.е c 0x00402000). Добавлена возможность сохранить наработанную форт-систему. Для этого добавлена библиотека (компилируется во врем. словарь, в форт-образ не идёт). Добавлены слова: MIN MAX SSET? \ a1 a2 ... an n b --- a1 a2 ... an n flag проверить элемент b на вхождение в множество, вернуть флаг (-1 да, 0 нет). Думаю, пора портировать на 64 бита. У меня тут как раз fasm с дизассемблером завалялись Обкатаю пару примитивов в фасме для работы с виндой (там fastcall), допишу форт-ассемблер, подготовлю стек. манипулятор и пр. Всё дело проверю в дизассемблере (не очень мне нравится 64бита в интеле, инструкцию порезали гады ) По идеям: Добавить возможность использовать дополнительные таблицы предкомпиляции в словарях. Т.е. сначала шерстятся некие куски памяти в словарях, а потом основная таблица. Зачем: есть либы (к примеру лок. переменные), существующие в временных словарях. Они ест-но пишут обработчики в основную таблицу. Но стоит врем. словарь освободить, то может случиться ошибка (запрещённый адрес, "не то" значение и проч. Плюсы: надёжность, легко реализуется (освежил память, потребуется изменить только одно слово). Минусы: завязка на словарь (чего не хочется). Компилировать параметрические слова через таблицу предкомпиляции. Плюсы: логичность, расширяемость (хотя не думаю, что кому-то понадобится определять новое параметрическое слово) Минусы: ? А так ли оно надо? Сейчас обработка параметрических слов хоть и кастрирована по сути, но проста. Да и опр. новых парам. слов маловероятно. По либам: JSON основная часть работы сделана. Уже может транслировать JSON-файлы, и просто отрезки на этом языке. Добавлено слово DUMP |
Автор: | Victor__v [ Пн июл 09, 2018 21:26 ] |
Заголовок сообщения: | Re: моя форт-система, которая потихоньку пишется |
Идея взята из: viewtopic.php?f=25&t=2097 Возможность определять слово в словарь без переключений. Код: : TO-VOC: ' >param @ >R R@ L>hereFA @ DP = IF R> CURRENT KEEP! : ELSE ." error, various codofile!!!" CR -1999 THROW THEN ; Не хочешь перевязывать или переключать словари, пользуйся. Ограничение одно: кодофайл текущего словаря и выбранного (куда идёт привязка) должен быть одним и тем же. |
Автор: | Victor__v [ Сб июл 14, 2018 14:51 ] |
Заголовок сообщения: | Re: моя форт-система, которая потихоньку пишется |
Оставлю здесь на случай неожиданностей на компе: Виндяшный обратный вызов для Новы Код: \ каллбек на обратном ходу самостоятельно дропает элементы вызывающего кода HEADER (free-arg) ECX POPr \ (p) EDX POPr \ ~call 0x8D C, 0x24 C, 0x8C C, \ LEA ESP, [ECX*4] [ESP] EDX JMPr \ восстановить значения регистров на обратном ходу HEADER (call-restore) EDI POPr ESI POPr EBP POPr EBX POPr EDX POPr ECX POPr RET, \ стековая диаграмма (возвраты) слова ниже \ params ~call dw \ (free-arg) registr (call-restore) \ подушка параметры+стек (free-R) HEADER (CALL-BACK) EAX POPr \ тут указатель на кол-во параметров И КОД [EAX] PUSHr \ ячейки под параметры 0x68 C, ' (free-arg) , ECX PUSHr EDX PUSHr EBX PUSHr EBP PUSHr ESI PUSHr EDI PUSHr 0x68 C, ' (call-restore) , \ RLIT ECX ESP MOVr-r \ для сброса стека данных \ косячный асм потому что \ EBX 9 CELLS ESP LEAr-im-r \ указатель для перетаскивания параметров 0x8D C, 0x5C C, 0x24 C, 9 CELLS C, ESI [EAX] MOVr-r \ получаем кол-во ячеек 0x8D C, 0x5C C, 0xB3 C, 0x00 C, \ LEA EBX, 0 [EBX] [ESI*4] EDX 20 CELLS MOVr-im \ восстанавливаем TLS, если код не в потоке, то ручками FS: EDI [EDX] MOVr-r EDX EDX EDX PUSHr PUSHr PUSHr \ подушка стека данных ] BEGIN [ \ лень уже было заморачиваться. потом подправлю ESI ESI ORr-r JE SHORT Jcc> [EBX] PUSHr EBX CELL NEGATE LEA+- ESI DEC 2SWAP ] AGAIN [ j-close EBP ESP MOVr-r EBX CELL EAX LEAr-im-r EAX [EBP] MOVr-r EBP CELL LEA+- \ получаем указатель на код EDX 100 MOVr-im \ создаём пространство стека данных Mark1 EDX PUSHr EDX DEC Mark1 JNE SHORT >Jcc ECX PUSHr \ точка сброса пространства стека данных 0x68 C, ' (free-R) , EBX JMPr : CALLBACK: \ cells -- in: <bl> HEADER ['] (CALL-BACK) COMPILE, , \ шибко маловероятно [CALL] ] ; Для проверки работоспособности использовались API из темы http://www.fforum.winglion.ru/viewtopic.php?f=25&t=2219 |
Автор: | Victor__v [ Сб июл 14, 2018 14:56 ] |
Заголовок сообщения: | Re: моя форт-система, которая потихоньку пишется |
Хм, может как в Форке тоже тупо указатель на параметры передавать? Проще и структурней... Надо подумать над этим |
Автор: | Victor__v [ Сб июл 21, 2018 22:07 ] |
Заголовок сообщения: | Nova-forth 1.04 |
Форт-система Изменения: Ядро: добавлен обратный вызов Либы: сравнение строки с маской (что-то похожее) И по мелочи, почти не писал последний месяц. Что в планах? "Оторваться" от ядра и наварганить более-менее простой HTTP-сервер, благо, сокеты имеются. MySQL (портировать пример из SPF от ~day) и написать свой собственный вариант. Юзверьский интерфейс пощупать. По ядру. Вычисление размера инлайн-области происходит каждый раз при вызове слова. Думаю, немного упростить этот момент. К примеру, при пометке слова инлайн-флагом сразу вычисляется его размер, размер укладывается в верхний байт FFA слова. Чтобы отличать этот вариант от 2 уже существующих предлагается помечать такие слова сразу IMMEDIATE и INLINE флагами. Т.к. одновременно они в компиляции не участвуют, то это будет отличительным признаком. Примерный код Код: : FFA-COMPILE, \ ffa@ xt .... OVER &INLINE &IMMEDIATE OR AND IF SWAP 8 RSHIFT S, EXIT THEN .... Это разгрузит часть инлайн-слов и как бонус позволит в эту же степь засунуть константы. Изначально отказывался от инлайн-констант т. к. если она в каком-либо байте имела бы 0xC3 , то это привело бы к ошибкам |
Страница 7 из 7 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |