Forth http://fforum.winglion.ru/ |
|
Формат вызова Quark http://fforum.winglion.ru/viewtopic.php?f=23&t=814 |
Страница 1 из 2 |
Автор: | Hishnik [ Вт июн 19, 2007 00:06 ] |
Заголовок сообщения: | Формат вызова Quark |
Сейчас с параметром вызывается только Evaluate. Формат вызова у него register - eax получает параметр, и возвращает результат. Для экспериментов, ввиду проблем с вызовом quark.dll из SPF, добавил EvaluateC, у которого stdcall (параметр на стеке). |
Автор: | begemot [ Вт июн 19, 2007 05:42 ] |
Заголовок сообщения: | |
а я что то не понял .. зачем форт вызывать из форта ? |
Автор: | Hishnik [ Вт июн 19, 2007 19:44 ] |
Заголовок сообщения: | |
Да и я не понял... попросили, однако. |
Автор: | in4 [ Вт июн 19, 2007 23:22 ] |
Заголовок сообщения: | |
begemot писал(а): а я что то не понял .. зачем форт вызывать из форта ?
Разные версии, однако... |
Автор: | VoidVolker [ Пн ноя 17, 2008 02:30 ] |
Заголовок сообщения: | |
Вызов кварка в СПФ осуществляется так(огромное спасибо за помощь 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: в спф вызов апи-функции осуществляется из этого регистра. |
Автор: | ygrek [ Пт ноя 21, 2008 00:50 ] |
Заголовок сообщения: | |
Причина неработоспособности (как и следовало ожидать) в 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 |
Автор: | Hishnik [ Пт ноя 21, 2008 01:03 ] |
Заголовок сообщения: | |
ygrek писал(а): Причина неработоспособности (как и следовало ожидать) в quark.dll, т.к. EvaluateC не соответствует формату вызова stdcall. После исправления всё работает как и должно :
Кварк я не исправлял. СПФ адаптирован к формату вызова register. |
Автор: | ygrek [ Пт ноя 21, 2008 01:36 ] |
Заголовок сообщения: | |
Я исправлял. |
Автор: | Гость [ Пт ноя 21, 2008 08:31 ] |
Заголовок сообщения: | |
ygrek писал(а): Я исправлял.
И где? А Форт системы на базе fasm ( reda, reva и др.) также просто подключаются? |
Автор: | VoidVolker [ Пт ноя 21, 2008 20:57 ] |
Заголовок сообщения: | |
ygrek писал(а): Причина неработоспособности (как и следовало ожидать) в quark.dll, т.к. EvaluateC не соответствует формату вызова stdcall. После исправления всё работает как и должно
Где и что исправлено? И вот что надо исправить в ннкроне, чтоб заработало? |
Автор: | ygrek [ Сб ноя 22, 2008 01:52 ] |
Заголовок сообщения: | |
Цитата: Quark-Forth распространяется бесплатно, без предоставления исходных текстов.
Декомпиляция, дизассемблирование или внесение изменений в программу любыми способами запрещены и лишают пользователя права на использование продукта. К сожалению публикация исправления может спровоцировать пользователя нарушить лицензию кварка. |
Автор: | Hishnik [ Сб ноя 22, 2008 13:42 ] |
Заголовок сообщения: | |
ygrek писал(а): К сожалению публикация исправления может спровоцировать пользователя нарушить лицензию кварка.
Меня тут внезапно осенило! Можно объяснить суть исправления мне, и я его внесу в исходные тексты. Кстати, докомпиляция или правка кода штатными средствами кварка условия его использования не нарушает. |
Автор: | ygrek [ Сб ноя 22, 2008 22:32 ] |
Заголовок сообщения: | |
Вместо jmp на Evaluate надо call, либо пролог заменить. |
Автор: | Hishnik [ Сб ноя 22, 2008 23:48 ] |
Заголовок сообщения: | |
Ок. Я не знаю, так ли я сделал, но исправленный вариант перезалит на обычное место (www.msyst.ru/quarkexe.zip) |
Автор: | VoidVolker [ Вс ноя 23, 2008 13:52 ] |
Заголовок сообщения: | |
Ага, все работает и в спф и в ннкроне. ygrek спасибо |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |