Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пн ноя 19, 2018 03:29

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Формат вызова Quark
СообщениеДобавлено: Вт июн 19, 2007 00:06 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6439
Благодарил (а): 14 раз.
Поблагодарили: 101 раз.
Сейчас с параметром вызывается только Evaluate. Формат вызова у него register - eax получает параметр, и возвращает результат. Для экспериментов, ввиду проблем с вызовом quark.dll из SPF, добавил EvaluateC, у которого stdcall (параметр на стеке).


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 19, 2007 05:42 
Не в сети

Зарегистрирован: Чт июн 07, 2007 02:14
Сообщения: 40
Откуда: }{абаровск
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
а я что то не понял .. зачем форт вызывать из форта ?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 19, 2007 19:44 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6439
Благодарил (а): 14 раз.
Поблагодарили: 101 раз.
Да и я не понял... попросили, однако.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт июн 19, 2007 23:22 
Не в сети

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
begemot писал(а):
а я что то не понял .. зачем форт вызывать из форта ?

Разные версии, однако... ;)

_________________
With best wishes, in4.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн ноя 17, 2008 02:30 
Не в сети
Аватара пользователя

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1255
Благодарил (а): 3 раз.
Поблагодарили: 17 раз.
Вызов кварка в СПФ осуществляется так(огромное спасибо за помощь mOleg'у):
Код:
REQUIRE CODE lib\ext\spf-asm.f

CODE  EAX-API-CALL ( ... extern-addr -- x )
\ вызов внешней функции (API или метода объекта через COM) с передачей параметра в регистре EAX
      PUSH EDI

      MOV EDX, [EBP]
      LEA EBP, 4 [EBP]

      PUSH EBP
      SUB  ESP, # 60
      MOV  EDI, ESP
      MOV  ESI, EBP
      MOV  ECX, # 15
      CLD
      REP MOVS DWORD
      MOV  EBP, ESP

      XCHG EAX, EDX
      CALL EDX

      MOV  EBX, EBP
      SUB  EBX, ESP
      MOV  ESP, EBP
      ADD  ESP, # 60
      POP EBP
      SUB EBP, EBX
      POP EDI
      RET
END-CODE

0 VALUE ActiveLibrary
: FUNCTION   DROP ActiveLibrary GetProcAddress VALUE ;

S" quark.dll" DROP LoadLibraryA CONSTANT 'quark.dll
'quark.dll TO ActiveLibrary

S" Evaluate"   FUNCTION 'Evaluate    : QUARK-EVAL  'Evaluate EAX-API-CALL ;
S" Init"       FUNCTION 'Init        : QUARK-INIT  'Init API-CALL ;
S" Done"       FUNCTION 'Done        : QUARK-DONE  'Done API-CALL ;
S" GetCode"    FUNCTION 'GetCode     : QUARK-GETCODE   'GetCode API-CALL ;
S" GetData"    FUNCTION 'GetData     : QUARK-GETDATA   'GetData API-CALL ;
S" GetStack"   FUNCTION 'GetStack    : QUARK-GETSTACK   'GetStack API-CALL ;
S" GetDepth"   FUNCTION 'GetDepth    : QUARK-GETDEPTH   'GetDepth API-CALL ;
S" GetScreen"  FUNCTION 'GetScreen   : QUARK-GETSCREEN   'GetScreen API-CALL ;
S" SetHWindow" FUNCTION 'SetHWindow  : QUARK-SETHWINDOW   'SetHWindow EAX-API-CALL ;

QUARK-INIT .( Init: ) . CR
S"  777 1000 +" DROP QUARK-EVAL .( Evaluate: ) . CR
QUARK-GETSTACK @ .( Stack: ) .

Причина неработоспособности была в регистре EAX: в спф вызов апи-функции осуществляется из этого регистра.

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт ноя 21, 2008 00:50 
Не в сети

Зарегистрирован: Чт май 04, 2006 18:18
Сообщения: 456
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Причина неработоспособности (как и следовало ожидать) в quark.dll, т.к. EvaluateC не соответствует формату вызова stdcall. После исправления всё работает как и должно :

Код:
WINAPI: Init quark.dll
WINAPI: EvaluateC quark.dll
WINAPI: GetStack quark.dll

: e EvaluateC ABORT" EvaluateC failed" ;

Init . CR
S" 777 1000 + " DROP e
GetStack @ . CR


Код:
1
1777

_________________
http://forth.org.ru/~ygrek


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт ноя 21, 2008 01:03 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6439
Благодарил (а): 14 раз.
Поблагодарили: 101 раз.
ygrek писал(а):
Причина неработоспособности (как и следовало ожидать) в quark.dll, т.к. EvaluateC не соответствует формату вызова stdcall. После исправления всё работает как и должно :

Кварк я не исправлял. СПФ адаптирован к формату вызова register.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт ноя 21, 2008 01:36 
Не в сети

Зарегистрирован: Чт май 04, 2006 18:18
Сообщения: 456
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Я исправлял.

_________________
http://forth.org.ru/~ygrek


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт ноя 21, 2008 08:31 
ygrek писал(а):
Я исправлял.


И где?
А Форт системы на базе fasm ( reda, reva и др.) также просто подключаются?


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт ноя 21, 2008 20:57 
Не в сети
Аватара пользователя

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1255
Благодарил (а): 3 раз.
Поблагодарили: 17 раз.
ygrek писал(а):
Причина неработоспособности (как и следовало ожидать) в quark.dll, т.к. EvaluateC не соответствует формату вызова stdcall. После исправления всё работает как и должно

Где и что исправлено? И вот что надо исправить в ннкроне, чтоб заработало?

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб ноя 22, 2008 01:52 
Не в сети

Зарегистрирован: Чт май 04, 2006 18:18
Сообщения: 456
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Цитата:
Quark-Forth распространяется бесплатно, без предоставления исходных текстов.
Декомпиляция, дизассемблирование или внесение изменений в программу любыми
способами запрещены
и лишают пользователя права на использование продукта.

К сожалению публикация исправления может спровоцировать пользователя нарушить лицензию кварка.

_________________
http://forth.org.ru/~ygrek


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб ноя 22, 2008 13:42 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6439
Благодарил (а): 14 раз.
Поблагодарили: 101 раз.
ygrek писал(а):
К сожалению публикация исправления может спровоцировать пользователя нарушить лицензию кварка.

Меня тут внезапно осенило! :)) Можно объяснить суть исправления мне, и я его внесу в исходные тексты. Кстати, докомпиляция или правка кода штатными средствами кварка условия его использования не нарушает.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб ноя 22, 2008 22:32 
Не в сети

Зарегистрирован: Чт май 04, 2006 18:18
Сообщения: 456
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Вместо jmp на Evaluate надо call, либо пролог заменить.

_________________
http://forth.org.ru/~ygrek


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб ноя 22, 2008 23:48 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6439
Благодарил (а): 14 раз.
Поблагодарили: 101 раз.
Ок. Я не знаю, так ли я сделал, но исправленный вариант перезалит на обычное место (www.msyst.ru/quarkexe.zip)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс ноя 23, 2008 13:52 
Не в сети
Аватара пользователя

Зарегистрирован: Вт мар 20, 2007 23:39
Сообщения: 1255
Благодарил (а): 3 раз.
Поблагодарили: 17 раз.
Ага, все работает и в спф и в ннкроне. :)
ygrek спасибо :)

_________________
Cтоимость сопровождения программного обеспечения пропорциональна квадрату творческих способностей программиста.
Роберт Д. Блисc


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 21 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB