Автор |
Сообщение |
|
|
Заголовок сообщения: |
Re: разруливание мелких проблем |
 |
|
В определении ~NAME был пропущен вариант определения слова COMPILE замените код see.fts на следующий: source file: see.fts \ 28.06.2009 ~mOleg \ Copyright [C] 2009-2013 mOleg mOlegg@ya.ru \ декомпиляция подпрограммного шитого кода
math/ useful.fts util/ ufl.fts memory/ dump.fts string/ print.fts branch/ handlers.fts vocs/ deref.fts vocs/ unit.fts
ALSO HIDDEN DEFINITIONS
VECT STARE \ раннее объявление
Unit: disForth
20 VALUE lines# \ количество линий для отображения USER Lines \ сколько линий уже показано
\ после отображения lines# линий ожидать нажатия клавиши \ в случае нажатия ESC вернуть false, по нажатию любой другой клавиши true : ?lines ( --> ) Lines @ IF -1 Lines +! ELSE lines# Lines ! KEY 0x1B = IF FALSE ;THEN THEN TRUE ;
\ ловим либо определения, либо данные : ~box ( addr --> # ) >L TOKEN L+ L@ @ TOKEN + CELL L+
\ если call то считаем, что <: встретился L@ B@ 0xE8 = IF ." <: " L> OVER TOKEN CELL + - STARE ." ;> " ;THEN
L@ SCNT@ DROP OVER > IF ." (BOX) " L> OVER ELSE L> COUNT THEN <| [CHAR] " KEEP KEEPS [CHAR] " KEEP |> PTYPE ;
\ отобразить литеральные данные : ~LIT ( n --> ) DUP BODY> *IF SWAP ." ( " H. ." ) " ID>ASC <| [CHAR] ' KEEP Bl_ KEEP KEEPS |> TYPE ;THEN DROP DUP N. ." ( " H. ." )" ;
\ отобразить имя по адресу внутри CFA+PFA определения : ~name ( addr --> ) BODY> *IF ID>ASC <| KEEPS Bl_ KEEP |> TYPE ELSE ." ???" H. THEN ;
\ отобразить содержимое : ~NAME ( addr --> # ) DUP TOKEN@ DUP ['] (LIT) = IF DROP TOKEN + @ ~LIT TOKEN CELL + ;THEN DUP ['] (DLIT) = IF DROP TOKEN + D@ D. TOKEN 2 CELLS + ;THEN DUP ['] BRANCH = IF DROP TOKEN + ." BRANCH " DUP @ + H. TOKEN REF + ;THEN DUP ['] ?BRANCH = IF DROP TOKEN + ." ?BRANCH " DUP @ + H. TOKEN REF + ;THEN DUP ['] N?BRANCH = IF DROP TOKEN + ." N?BRANCH " DUP @ + H. TOKEN REF + ;THEN DUP ['] -BRANCH = IF DROP TOKEN + ." -BRANCH " DUP @ + H. TOKEN REF + ;THEN DUP ['] *BRANCH = IF DROP TOKEN + ." *BRANCH " DUP @ + H. TOKEN REF + ;THEN DUP ['] COMPILE = IF DROP TOKEN + ." COMPILE " TOKEN@ ~name TOKEN TOKEN + ;THEN DUP ['] (BOX) = IF DROP ~box ;THEN NIP ~name TOKEN ;
\ по указанному адресу находится токен? : ?TOKEN ( addr --> flag ) DUP TOKEN@ IMAGE-BASE HERE BETWEEN IF B@ 0xE8 = ;THEN DROP FALSE ;
\ декодирование одного токена ШК : DECODE ( addr --> asc # ) DUP CR H. ." \t" DUP ?TOKEN IF ~NAME ;THEN DUP B@ 0xE9 = IF ." JUMP " DUP 1 + @ + ~LIT TOKEN ;THEN DUP B@ 0x90 = IF DROP ." nop" 1 ;THEN DUP B@ 0xC3 = IF DROP ." EXIT " 1 ;THEN DUP B@ 0x68 = IF ." RLIT " 1 + @ ~LIT TOKEN ;THEN DUP B@ 0x05 = IF ." off_" 1 + @ ~LIT TOKEN ;THEN @ ~LIT CELL ;
\ дизФорт куска кода длиной в # байт с адреса addr : (STARE) ( addr # --> ) OVER + <: BEGIN DDUP < WHILE OVER DECODE *WHILE ROT + SWAP ?lines WHILE REPEAT THEN THEN -2 THROW \ тут просто ошибка нужна ;> CATCH TDROP ;
\ дизФорт слова, начинающегося с адреса addr F: (DIS) ( addr --> ) lines# Lines ! BODY> DUP &PRI GET-ATTR IF THROW THEN ABORT" заданное слово является примитивом!" DUP LINK>C SWAP to_flag off_eow W@ STARE ;F
' (STARE) IS STARE
EndUnit
ALSO ROOT DEFINITIONS
\ дизФорт слова, которому принадлежит addr : DIS ( addr --> ) BODY> disForth (DIS) ;
\ дизФорт слова с именем name : SEE ( / name --> ) ' disForth (DIS) ;
RECENT RECENT
?ABSENT test{ \EOF -- тестовая секция ------------------------------------------ test{
}test
FORTH(0)>SEE <:
0x005CF317 COMPILE (BOX) 0x005CF321 HERE 0x005CF326 nil 0x005CF32B , 0x005CF330 536870946 ( 0x20000022 ) 0x005CF339 EXIT Ok FORTH(0)> Ok
В определении ~NAME был пропущен вариант определения слова COMPILE замените код see.fts на следующий:
[pre]source file: see.fts [b][color=#808080]\ 28.06.2009 ~mOleg[/color] [color=#808080]\ Copyright [C] 2009-2013 mOleg mOlegg@ya.ru[/color] [color=#808080]\ декомпиляция подпрограммного шитого кода[/color]
[color=#00F000]math/ useful.fts[/color] [color=#00F000]util/ ufl.fts[/color] [color=#00F000]memory/ dump.fts[/color] [color=#00F000]string/ print.fts[/color] [color=#00F000]branch/ handlers.fts[/color] [color=#00F000]vocs/ deref.fts[/color] [color=#00F000]vocs/ unit.fts[/color]
[color=#FF00FF]ALSO[/color] [color=#FF00FF]HIDDEN[/color] [color=#FF00FF]DEFINITIONS[/color]
[color=#FF8000]VECT STARE[/color] [color=#808080]\ раннее объявление[/color]
[color=#FF8000]Unit: disForth[/color]
[color=#00F000]20[/color] [color=#FF8000]VALUE lines#[/color] [color=#808080]\ количество линий для отображения[/color] [color=#FF8000]USER Lines[/color] [color=#808080]\ сколько линий уже показано[/color]
[color=#808080]\ после отображения lines# линий ожидать нажатия клавиши[/color] [color=#808080]\ в случае нажатия ESC вернуть false, по нажатию любой другой клавиши true[/color] [color=#FF8000]: ?lines[/color] [color=#0080C0]( --> )[/color] Lines @ [color=#00A0A0]IF[/color] [color=#00F000]-1[/color] Lines +! [color=#00A0A0]ELSE[/color] lines# Lines ! KEY [color=#00F000]0x1B[/color] = [color=#00A0A0]IF[/color] [color=#00F000]FALSE[/color] [color=#FF8000];THEN[/color] [color=#00A0A0]THEN[/color] [color=#00F000]TRUE[/color] [color=#FF8000];[/color]
[color=#808080]\ ловим либо определения, либо данные[/color] [color=#FF8000]: ~box[/color] [color=#0080C0]( addr --> # )[/color] >L TOKEN L+ L@ @ TOKEN + CELL L+
[color=#808080]\ если call то считаем, что <: встретился[/color] L@ B@ [color=#00F000]0xE8[/color] = [color=#00A0A0]IF[/color] [color=#00F000]." <: "[/color] L> OVER TOKEN CELL + - STARE [color=#00F000]." ;> "[/color] [color=#FF8000];THEN[/color]
L@ SCNT@ DROP OVER > [color=#00A0A0]IF[/color] [color=#00F000]." (BOX) "[/color] L> OVER [color=#00A0A0]ELSE[/color] L> COUNT [color=#00A0A0]THEN[/color] [color=#0000F0]<|[/color] [color=#00F000][CHAR] "[/color] [color=#0000F0]KEEP[/color] [color=#0000F0]KEEPS[/color] [color=#00F000][CHAR] "[/color] [color=#0000F0]KEEP[/color] [color=#0000F0]|>[/color] PTYPE [color=#FF8000];[/color]
[color=#808080]\ отобразить литеральные данные[/color] [color=#FF8000]: ~LIT[/color] [color=#0080C0]( n --> )[/color] DUP BODY> [color=#00A0A0]*IF[/color] SWAP [color=#00F000]." ( "[/color] H. [color=#00F000]." ) "[/color] ID>ASC [color=#0000F0]<|[/color] [color=#00F000][CHAR] '[/color] [color=#0000F0]KEEP[/color] [color=#00F000]Bl_[/color] [color=#0000F0]KEEP[/color] [color=#0000F0]KEEPS[/color] [color=#0000F0]|>[/color] TYPE [color=#FF8000];THEN[/color] DROP DUP N. [color=#00F000]." ( "[/color] H. [color=#00F000]." )"[/color] [color=#FF8000];[/color]
[color=#808080]\ отобразить имя по адресу внутри CFA+PFA определения[/color] [color=#FF8000]: ~name[/color] [color=#0080C0]( addr --> )[/color] BODY> [color=#00A0A0]*IF[/color] ID>ASC [color=#0000F0]<|[/color] [color=#0000F0]KEEPS[/color] [color=#00F000]Bl_[/color] [color=#0000F0]KEEP[/color] [color=#0000F0]|>[/color] TYPE [color=#00A0A0]ELSE[/color] [color=#00F000]." ???"[/color] H. [color=#00A0A0]THEN[/color] [color=#FF8000];[/color]
[color=#808080]\ отобразить содержимое[/color] [color=#FF8000]: ~NAME[/color] [color=#0080C0]( addr --> # )[/color] DUP TOKEN@ DUP [color=#00F000]['] (LIT)[/color] = [color=#00A0A0]IF[/color] DROP TOKEN + @ ~LIT TOKEN CELL + [color=#FF8000];THEN[/color] DUP [color=#00F000]['] (DLIT)[/color] = [color=#00A0A0]IF[/color] DROP TOKEN + D@ D. TOKEN [color=#00F000]2[/color] CELLS + [color=#FF8000];THEN[/color] DUP [color=#00F000]['] BRANCH[/color] = [color=#00A0A0]IF[/color] DROP TOKEN + [color=#00F000]." BRANCH "[/color] DUP @ + H. TOKEN REF + [color=#FF8000];THEN[/color] DUP [color=#00F000]['] ?BRANCH[/color] = [color=#00A0A0]IF[/color] DROP TOKEN + [color=#00F000]." ?BRANCH "[/color] DUP @ + H. TOKEN REF + [color=#FF8000];THEN[/color] DUP [color=#00F000]['] N?BRANCH[/color] = [color=#00A0A0]IF[/color] DROP TOKEN + [color=#00F000]." N?BRANCH "[/color] DUP @ + H. TOKEN REF + [color=#FF8000];THEN[/color] DUP [color=#00F000]['] -BRANCH[/color] = [color=#00A0A0]IF[/color] DROP TOKEN + [color=#00F000]." -BRANCH "[/color] DUP @ + H. TOKEN REF + [color=#FF8000];THEN[/color] DUP [color=#00F000]['] *BRANCH[/color] = [color=#00A0A0]IF[/color] DROP TOKEN + [color=#00F000]." *BRANCH "[/color] DUP @ + H. TOKEN REF + [color=#FF8000];THEN[/color] DUP [color=#00F000]['] COMPILE[/color] = [color=#00A0A0]IF[/color] DROP TOKEN + [color=#00F000]." COMPILE "[/color] TOKEN@ ~name TOKEN TOKEN + [color=#FF8000];THEN[/color] DUP [color=#00F000]['] (BOX)[/color] = [color=#00A0A0]IF[/color] DROP ~box [color=#FF8000];THEN[/color] NIP ~name TOKEN [color=#FF8000];[/color]
[color=#808080]\ по указанному адресу находится токен?[/color] [color=#FF8000]: ?TOKEN[/color] [color=#0080C0]( addr --> flag )[/color] DUP TOKEN@ IMAGE-BASE HERE BETWEEN [color=#00A0A0]IF[/color] B@ [color=#00F000]0xE8[/color] = [color=#FF8000];THEN[/color] DROP [color=#00F000]FALSE[/color] [color=#FF8000];[/color]
[color=#808080]\ декодирование одного токена ШК[/color] [color=#FF8000]: DECODE[/color] [color=#0080C0]( addr --> asc # )[/color] DUP CR H. [color=#00F000]." \t"[/color] DUP ?TOKEN [color=#00A0A0]IF[/color] ~NAME [color=#FF8000];THEN[/color] DUP B@ [color=#00F000]0xE9[/color] = [color=#00A0A0]IF[/color] [color=#00F000]." JUMP "[/color] DUP [color=#00F000]1[/color] + @ + ~LIT TOKEN [color=#FF8000];THEN[/color] DUP B@ [color=#00F000]0x90[/color] = [color=#00A0A0]IF[/color] DROP [color=#00F000]." nop"[/color] [color=#00F000]1[/color] [color=#FF8000];THEN[/color] DUP B@ [color=#00F000]0xC3[/color] = [color=#00A0A0]IF[/color] DROP [color=#00F000]." EXIT "[/color] [color=#00F000]1[/color] [color=#FF8000];THEN[/color] DUP B@ [color=#00F000]0x68[/color] = [color=#00A0A0]IF[/color] [color=#00F000]." RLIT "[/color] [color=#00F000]1[/color] + @ ~LIT TOKEN [color=#FF8000];THEN[/color] DUP B@ [color=#00F000]0x05[/color] = [color=#00A0A0]IF[/color] [color=#00F000]." off_"[/color] [color=#00F000]1[/color] + @ ~LIT TOKEN [color=#FF8000];THEN[/color] @ ~LIT CELL [color=#FF8000];[/color]
[color=#808080]\ дизФорт куска кода длиной в # байт с адреса addr[/color] [color=#FF8000]: (STARE)[/color] [color=#0080C0]( addr # --> )[/color] OVER + [color=#FF8000]<: BEGIN[/color] DDUP < [color=#00A0A0]WHILE[/color] OVER DECODE [color=#00A0A0]*WHILE[/color] ROT + SWAP ?lines [color=#00A0A0]WHILE[/color] [color=#00A0A0]REPEAT[/color] [color=#00A0A0]THEN[/color] [color=#00A0A0]THEN[/color] [color=#00F000]-2[/color] [color=#C00000]THROW[/color] [color=#808080]\ тут просто ошибка нужна[/color] [color=#FF8000];>[/color] CATCH TDROP [color=#FF8000];[/color]
[color=#808080]\ дизФорт слова, начинающегося с адреса addr[/color] [color=#FF8000]F: (DIS)[/color] [color=#0080C0]( addr --> )[/color] lines# Lines ! BODY> DUP &PRI GET-ATTR [color=#00A0A0]IF[/color] [color=#C00000]THROW[/color] [color=#00A0A0]THEN[/color] [color=#C00000]ABORT" заданное слово является примитивом!"[/color] DUP LINK>C SWAP to_flag off_eow W@ STARE [color=#FF8000];F[/color]
' (STARE) IS STARE
[color=#FF8000]EndUnit[/color]
[color=#FF00FF]ALSO[/color] [color=#FF00FF]ROOT[/color] [color=#FF00FF]DEFINITIONS[/color]
[color=#808080]\ дизФорт слова, которому принадлежит addr[/color] [color=#FF8000]: DIS[/color] [color=#0080C0]( addr --> )[/color] BODY> disForth (DIS) [color=#FF8000];[/color]
[color=#808080]\ дизФорт слова с именем name[/color] [color=#FF8000]: SEE[/color] [color=#0080C0]( / name --> )[/color] ' disForth (DIS) [color=#FF8000];[/color]
[color=#FF00FF]RECENT[/color] [color=#FF00FF]RECENT[/color]
[color=#C00000]?ABSENT test{ \EOF -- тестовая секция ------------------------------------------[/color] test{
}test [/b][/pre]
[pre]FORTH(0)>SEE <:
0x005CF317 COMPILE (BOX) 0x005CF321 HERE 0x005CF326 nil 0x005CF32B , 0x005CF330 536870946 ( 0x20000022 ) 0x005CF339 EXIT Ok FORTH(0)> Ok[/pre]
|
|
|
 |
Добавлено: Пт май 15, 2020 19:13 |
|
|
 |
|
|
Заголовок сообщения: |
Re: разруливание мелких проблем |
 |
|
Victor__v писал(а): Ввел SEE <: и словил вылет скорее всего все же с перехватом исключений проблема. Посмотрю на выходных.
[quote="Victor__v"]Ввел SEE <: и словил вылет[/quote] скорее всего все же с перехватом исключений проблема. Посмотрю на выходных.
|
|
|
 |
Добавлено: Чт май 14, 2020 20:01 |
|
|
 |
|
|
Заголовок сообщения: |
Re: разруливание мелких проблем |
 |
|
Еще одна неприятность. Решил я посмотреть как Форк создает лямбды.
Ввел SEE <: и словил вылет
Если что: Винда 8, аппаратные исключения там перехватываются, проверял.
Еще одна неприятность. Решил я посмотреть как Форк создает лямбды.
Ввел [b]SEE <:[/b] и словил вылет
Если что: Винда 8, аппаратные исключения там перехватываются, проверял.
|
|
|
 |
Добавлено: Сб май 09, 2020 16:04 |
|
|
 |
|
|
Заголовок сообщения: |
Re: разруливание мелких проблем |
 |
|
под семеркой не наблюдаю (64 битной), а десятки под рукой нет. В чем разница не понятно 8(
под семеркой не наблюдаю (64 битной), а десятки под рукой нет. В чем разница не понятно 8(
|
|
|
 |
Добавлено: Пт апр 07, 2017 16:41 |
|
|
 |
|
|
Заголовок сообщения: |
Re: разруливание мелких проблем |
 |
|
в совместимости также а примеры 10 0 / 3 @
: tt 10 @ 2 + ; ' tt catch
результат один и тот же
в совместимости также а примеры 10 0 / 3 @
: tt 10 @ 2 + ; ' tt catch
результат один и тот же
|
|
|
 |
Добавлено: Чт апр 06, 2017 21:23 |
|
|
 |
|
|
Заголовок сообщения: |
Re: разруливание мелких проблем |
 |
|
Цитата: У меня форк не ловит аппаратные исключения Форк выводит сообщение и закрывается Windows 10 не имею под рукой десятой винды. а в режиме совместимости что? ну и пример как бы не лишний
[quote]У меня форк не ловит аппаратные исключения Форк выводит сообщение и закрывается Windows 10[/quote] не имею под рукой десятой винды. а в режиме совместимости что?
ну и пример как бы не лишний
|
|
|
 |
Добавлено: Чт апр 06, 2017 16:12 |
|
|
 |
|
|
Заголовок сообщения: |
Re: разруливание мелких проблем |
 |
|
У меня форк не ловит аппаратные исключения Форк выводит сообщение и закрывается Windows 10
У меня форк не ловит аппаратные исключения Форк выводит сообщение и закрывается Windows 10
|
|
|
 |
Добавлено: Ср апр 05, 2017 14:00 |
|
|
 |
|
|
Заголовок сообщения: |
|
 |
|
да, запустился, будем смотреть дальше
да, запустился, будем смотреть дальше
|
|
|
 |
Добавлено: Сб янв 03, 2009 21:01 |
|
|
 |
|
|
Заголовок сообщения: |
|
 |
|
вопрос писал(а): 98 ME, файлы - позже
ясно. К сожалению у меня просто не осталось под рукой места, где есть 9х ветка виндов 8(
но ошибка узнаваема, поэтому попробуй в файле .\kernel\os\win\file_io.f
заменить в RdLine ( buff # fid --> # flag )
первую строку на:
<pre>
H-STDIN OVER = IF READ-FILE THROW TRUE EXIT THEN
</pre>
дальше трогать не надо ничего.
[quote="вопрос"]98 ME, файлы - позже[/quote]
ясно. К сожалению у меня просто не осталось под рукой места, где есть 9х ветка виндов 8(
но ошибка узнаваема, поэтому попробуй в файле .\kernel\os\win\file_io.f
заменить в RdLine ( buff # fid --> # flag )
первую строку на:
<pre>
H-STDIN OVER = IF READ-FILE THROW TRUE EXIT THEN
</pre>
дальше трогать не надо ничего.
|
|
|
 |
Добавлено: Сб янв 03, 2009 18:38 |
|
|
 |
|
|
Заголовок сообщения: |
|
 |
|
98 ME, файлы - позже
98 ME, файлы - позже
|
|
|
 |
Добавлено: Пт янв 02, 2009 21:17 |
|
|
 |
|
|
Заголовок сообщения: |
|
 |
|
вопрос писал(а): Error: Неверный хэндл
оп, интересно.
вышли мне на почту пожалуйста fork.ini и options.f
и, если не сложно dir по корневому каталогу.
да, и какая у тебя винда стоит.
[quote="вопрос"]Error: Неверный хэндл[/quote]
оп, интересно.
вышли мне на почту пожалуйста fork.ini и options.f
и, если не сложно dir по корневому каталогу.
да, и какая у тебя винда стоит.
|
|
|
 |
Добавлено: Пт янв 02, 2009 19:16 |
|
|
 |
|
|
Заголовок сообщения: |
|
 |
|
Цитата: Ктати, не помешало бы и описание этих циклов Там имеется статейка. Но вот незадача, почитав всё (многое) собрал себе форк, а он не желает работать - в бесконечном цикле выводит построчно сообщение
Error: Неверный хэндл
интересно, откуда начинать искать ошибку, чтобы не долго?
[quote]Ктати, не помешало бы и описание этих циклов[/quote] Там имеется статейка. Но вот незадача, почитав всё (многое) собрал себе форк, а он не желает работать - в бесконечном цикле выводит построчно сообщение
Error: Неверный хэндл
интересно, откуда начинать искать ошибку, чтобы не долго?
|
|
|
 |
Добавлено: Пт янв 02, 2009 10:41 |
|
|
 |
|
|
Заголовок сообщения: |
|
 |
|
вопрос писал(а): я так, кстати и не понял, что означает расширение fts
ForTh Source
расширение попросило поменять несколько человек, чтобы не пересекаться с СПФовским *.f
[quote="вопрос"]я так, кстати и не понял, что означает расширение fts[/quote]
ForTh Source ;)
расширение попросило поменять несколько человек, чтобы не пересекаться с СПФовским *.f
|
|
|
 |
Добавлено: Ср дек 31, 2008 20:46 |
|
|
 |
|
|
Заголовок сообщения: |
|
 |
|
я так, кстати и не понял, что означает расширение fts
я так, кстати и не понял, что означает расширение fts
|
|
|
 |
Добавлено: Ср дек 31, 2008 20:44 |
|
|
 |
|