Forth http://fforum.winglion.ru/ |
|
Forth for pda 4.0 http://fforum.winglion.ru/viewtopic.php?f=38&t=248 |
Страница 1 из 3 |
Автор: | kufal [ Ср окт 04, 2006 00:06 ] |
Заголовок сообщения: | Forth for pda 4.0 |
Информация устарела. новое смотрите в Компилятор Forth для Windows (реализация на Delphi) |
Автор: | LV [ Ср окт 04, 2006 02:06 ] |
Заголовок сообщения: | |
У меня не заработало. Послал письмо. |
Автор: | LV [ Ср окт 04, 2006 09:49 ] |
Заголовок сообщения: | |
Версия под Windows работает. Не работает на КПК. На КПК у меня Pocket PC 2002. Если скомпилированно на eVC++ 3.0, то должно работать. Процессор тут ни причем. Выдается сообщение "Не найден 'FORTH', или один из его компонентов. Убедитесь, что путь и имя файла указаны верно и доступны все нужные библиотеки". Хотя оба файла я кидал и в корень и в другие места (на случай, если при запуске ищется второй файл, хотя я не вижу в этом смысла). Я послал письмо со скриншотом. |
Автор: | Hishnik [ Ср окт 04, 2006 10:08 ] |
Заголовок сообщения: | |
Код: Пример: "user32.dll" LoadLibrary constant USER32 USER32 "MessageBoxA" GetProcAddress constant MessageBox 0 0 0 0 5 MessageBox EXECUTE_WIN Правильно ли я понял, что в число параметров входит и само число, передающее число параметров? А вообще решение достаточно разумное. В СПФ с передачей параметров на стек Windows потенциально возможны проблемы. В 4.сколько-то я видел просто перекидывание 15 чисел, независимо от того, сколько в действительности надо. Кстати, чтобы каждый раз не заморачиваться с указанием пятерки (четверки), можно вписывать требуемое число параметров рядом с адресом функции. Т.е нечто вроде Код: : WINAPI CREATE , GetProcAddress , DOES> DUP @ 0 DO S>WIN LOOP 4 + EXECUTE ;
" MessageBoxA" 4 WINAPI MessageBox положит в память 4, а за ним адрес функции |
Автор: | LV [ Ср окт 04, 2006 19:58 ] |
Заголовок сообщения: | |
kufal писал(а): по поводу исходника скомпилировать и будет работать - это не совсем так - forth сделан не на чистом C - очень важен тип процессора
Ну тогда другое дело. У меня довольно старенький ARM процессор - SA1110 206MHz. Мне все-таки интересно как фактически на С сделать форт. Тут же нет ассемблера. Что прямо в машинных кодах что-ли? |
Автор: | Hishnik [ Ср окт 04, 2006 20:18 ] |
Заголовок сообщения: | |
LV писал(а): Мне все-таки интересно как фактически на С сделать форт. Тут же нет ассемблера. Что прямо в машинных кодах что-ли?
На Си достаточно просто написать почти любую виртуальную машину. Вкратце - вот так. Заводим переменную - указатель на исполняемый код и таблицу кода. Пусть это int pc и int code[10000]. И поехали cmd = code[pc]; switch cmd 0 case : тут команды для "нет операции"; pc++ ( не забываем перейти к новому адресу) 1 case ну и так далее - на каждый считанный из памяти код модифицируем что-то в программе 2 case Конечно, это будет медленнее, чем простое выполнение машинного кода, но это просто принцип показан. |
Автор: | LV [ Ср окт 04, 2006 20:55 ] |
Заголовок сообщения: | |
Спасибо, принцип виртуальной машины понял. Но kufal, как я понял использует машинные команды процессора. Допустим я их узнаю и создам массив code[10000], который заполню ими (реальными машинными кодами, а не виртуальными). Как туда передать управление? Или поставим вопрос по другому - каким еще способом можно написать на С форт задействуюя машинные коды? В таком варианте могут возникнуть трудности с адресацией. |
Автор: | Hishnik [ Ср окт 04, 2006 23:40 ] |
Заголовок сообщения: | |
Управление можно передать, сделав указатель на функцию и присваивая ему разные значения. Лобовое решение - сделать ассемблерную вставку с jmp на какой-то адрес, а адрес менять "вручную". Чтобы не было трудностей с адресацией, можно компилировать только относительные переходы (если есть такая возможность), или вести таблицу relocations (список адресов, где есть переходы куда-то), а потом добавлять ко всем адресам, указанным в таблице, начальный адрес массива. |
Автор: | Hishnik [ Чт окт 05, 2006 00:20 ] |
Заголовок сообщения: | |
Ну вообще тогда уж Dragon Book Или Ахо, Сети, Ульман "Компиляторы. Принципы. Технологии. Инструменты". Еще помню интересную книгу Костельцева "Построение интерпретаторов и компиляторов", там тоже рассмотрены виртуальные машины. С точки зрения освоения я как-то заметил, что удобнее делать упор на реализацию переходов, вызовов подпрограмм, загрузку непосредственных значений и работу с памятью. Эти куски ВМ принципиальны, а вот арифметика как раз вторична, поскольку реализуется достаточно просто. Так что увлечение арифметическими командами и пересылками регистр-регистр может кончиться некоторым "пробуксовыванием" на более сложных кусках кода. |
Автор: | LV [ Чт окт 05, 2006 14:43 ] |
Заголовок сообщения: | |
kufal писал(а): сейчас работаю на твоим процессором и операционкой - в конце недели думаю что версия появится
могу предложить реализацию forth на tasm для Dos (или вообщее без ОС) в исходниках., если конечно интересно Спасибо за предложение. Но для Dos на ассемблере я себе давным давно сам делал и исходники остались. Я даже с Барановым и Ноздруновым встречался и на одной из конференций по форту был в Питере. Вот сейчас захотелось вспомнить те времена и освежить в памяти знания о форте. Ради удовольствия можно было бы сделать форт на КПК но без ассемблера для меня было непонятно как. Вот на исходники этого, хотябы часть с основной идеей, я бы взглянул. |
Автор: | mOleg [ Чт окт 05, 2006 15:22 ] |
Заголовок сообщения: | |
вставлю и свои пять копеек Возьми и посмотри на eForth - там около 30 приметивов нужно реализовать, все остальное идет уже на уровне форта - кстати самый широкопортируемый форт Ссылочку сразу не дам, но через гугл ищется легко |
Автор: | Mihail [ Чт окт 05, 2006 15:45 ] |
Заголовок сообщения: | |
kufal писал(а): могу предложить реализацию forth на tasm для Dos (или вообщее без ОС) в
Без ОС, к файлам доступ есть? |
Автор: | Mihail [ Чт окт 05, 2006 16:09 ] |
Заголовок сообщения: | |
LV писал(а): Мне все-таки интересно как фактически на С сделать форт.
Лучше всего http://devbiol.zoo.uwo.ca/~kvt/relf01.zip Есть еще: http://pfe.sourceforge.net/ http://ficl.sourceforge.net/ |
Автор: | in4 [ Пт окт 06, 2006 00:30 ] |
Заголовок сообщения: | |
kufal писал(а): за исключением некоторый моментов реализации
Меня, например, в основном это и интересует в исходниках! Как сделать, чтоб исходник был простым и понятным, а реализация маленькая и быстрая!;) |
Автор: | LV [ Пт окт 06, 2006 13:13 ] |
Заголовок сообщения: | |
Mihail писал(а): Лучше всего http://devbiol.zoo.uwo.ca/~kvt/relf01.zip
Есть еще: http://pfe.sourceforge.net/ http://ficl.sourceforge.net/ Спасибо за ссылки. Очень интересно было познакомиться с relf. А вот за Ficl - отдельное огромное спасибо! Вот чего не хватало для полного счаться и что подсознательно где-то в голове крутилось, но никак не оформлялось в понятную мысль. Идея использования форта как виртуальную машину в параллельном процессе, с которым обычное windows-приложение обменивается информацией - просто отличная. Вот именно такой подход мне нужен в одном деле. И реализация отличная. |
Страница 1 из 3 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |