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 ]
Заголовок сообщения: 

вставлю и свои пять копеек 8)
Возьми и посмотри на eForth - там около 30 приметивов нужно реализовать, все остальное идет уже на уровне форта - кстати самый широкопортируемый форт 8) Ссылочку сразу не дам, но через гугл ищется легко ;)

Автор:  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 писал(а):


Спасибо за ссылки. Очень интересно было познакомиться с relf. А вот за Ficl - отдельное огромное спасибо! Вот чего не хватало для полного счаться и что подсознательно где-то в голове крутилось, но никак не оформлялось в понятную мысль. Идея использования форта как виртуальную машину в параллельном процессе, с которым обычное windows-приложение обменивается информацией - просто отличная. Вот именно такой подход мне нужен в одном деле. И реализация отличная.

Страница 1 из 3 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/