Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт мар 28, 2024 23:59

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
 Заголовок сообщения: Ошибки в известных реализациях Форта и их исправление.
СообщениеДобавлено: Сб фев 26, 2011 17:27 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
В комплект поставки SPF 4.20 входит jpf375c.exe - старый SP-Forth, которым собирается новый.

jpf375c.exe содержит две ошибки.

Ошибка первая :
Выполняем :
10000 U>D D2/ D.
9992 Ok
Неправильно !
Должно быть :
10000 U>D D2/ D.
5000 Ok
Ошибка в реализации слова D2/


Ошибка вторая :
Выполняем :
-1 S>D 2 FM/MOD . .
0 -1 Ok
Неправильно !
Должно быть :
-1 S>D 2 FM/MOD . .
-1 1 Ok
Ошибка в реализации слова FM/MOD


По этой ссылке лежит jpf375c.exe в котором эти ошибки пропатчены прямо в коде :
http://depositfiles.com/files/u11d79ymg

Патч можно проделать и вручную следующим образом :
Сравнение файлов JPF375C.OLD и JPF375C.EXE
00000AA9: D8 C8
00000AAC: 50 8B
00000AAD: F7 DA
00000AAE: FB F7
00000AAF: 0B F9
00000AB0: C0 85
00000AB1: 0F D2
00000AB2: 88 74
00000AB3: 05 07
00000AB4: 00 33
00000AB5: 00 D9
00000AB6: 00 79
00000AB7: 5B 03
00000AB8: 52 48
00000AB9: 87 03
00000ABA: EC D1
00000ABB: C3 52
00000ABC: 0B 87
00000ABD: D2 EC
00000ABE: 74 C3
00000C80: C0 C1


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ошибки в известных реализациях Форта и их исправление.
СообщениеДобавлено: Сб фев 26, 2011 17:50 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
Sprinter-FORTH (c) Ivan Mak
Beta-version! 0.07 (for PC)

Выполняем :
-2 2/ .
7FFF Ok
Ошибка в реализации слова 2/
Аналогичная ошибка в реализации слова D2/

Патчим :
Было :
Код:
to_del: pop ax          ; делить на 2 (беззнаково)
        clc
        shr ax,1
        push ax
        jmp next
...
dto_del:pop eax         ; делить на 2 (беззнаково)
        clc
        shr eax,1
        push eax
        jmp next
Стало :
Код:
to_del: pop ax          ; делить на 2 (знаково)
        sar ax,1
        push ax
        jmp next
...
dto_del:pop eax         ; делить на 2 (знаково)
        sar eax,1
        push eax
        jmp next


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ошибки в известных реализациях Форта и их исправление.
СообщениеДобавлено: Сб фев 26, 2011 18:08 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июн 25, 2009 11:12
Сообщения: 412
Благодарил (а): 41 раз.
Поблагодарили: 8 раз.
Ethereal писал(а):
В комплект поставки SPF 4.20 входит jpf375c.exe - старый SP-Forth, которым собирается новый.

Кстати, а почему 4.20 собирается старой версией, а не самим собой? :shock:


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ошибки в известных реализациях Форта и их исправление.
СообщениеДобавлено: Сб фев 26, 2011 19:02 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
Если SPF4.20 перекомпилировать самим собой, то при каждой перекомпиляции смещение образа spf в
памяти будет систематически уплывать. Поэтому надо выбрать какую-то фиксированную версию для
перекомпиляции, чтобы смещение образа получать постоянным. Вот и была выбрана для сборки JPF375c.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ошибки в известных реализациях Форта и их исправление.
СообщениеДобавлено: Сб фев 26, 2011 20:14 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
Вот здесь: http://www.enet.ru/win/cherezov/sp-forth.html
лежат SP-Forth v3.16 и SP-Forth v3.75. Чтобы заставить их работать под Win-XP забейте
нулевыми байтами строку-копирайт SP-Forth и Андрея Черезова в PE-заголовке exe-файлов.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ошибки в известных реализациях Форта и их исправление.
СообщениеДобавлено: Пн фев 28, 2011 19:21 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
SPF 4.20 не работает под Win-95/98.
Причина - Win-95/98 не понимает флажка FILE_SHARE_DELETE
при вызове функции CreateFileA.

Лечение :
В файле src\win\spf_win_io.f было :
: OPEN-FILE-SHARED ( c-addr u fam -- fileid ior )
NIP SWAP >R >R
0 FILE_ATTRIBUTE_ARCHIVE ( template attrs )
OPEN_EXISTING
SA ( secur )
7 ( share )
R> ( access=fam )
R> ( filename )
CreateFileA DUP -1 = IF GetLastError ELSE 0 THEN
;
Заменить на :
: OPEN-FILE-SHARED ( c-addr u fam -- fileid ior )
NIP SWAP >R >R
0 FILE_ATTRIBUTE_ARCHIVE ( template attrs )
OPEN_EXISTING
SA ( secur )
3 ( share )
R> ( access=fam )
R> ( filename )
CreateFileA DUP -1 = IF GetLastError ELSE 0 THEN
;
и пересобрать SP-Forth.

Хотя, по уму конечно должно быть :
WinNT? IF 7 ( share read/write/delete ) ELSE 3 ( share read/write ) THEN
, что я и обнаружил здесь http://www.forth.org.ru/~ac/lib/win/file/share-delete.f
Но это, как я понимаю, будет в будущей версии SPF.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ошибки в известных реализациях Форта и их исправление.
СообщениеДобавлено: Вс июл 10, 2011 23:21 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
SPF 4.20

Если вы попросите ACCEPT ввести строку максимальной длины +n1,
то будет вводиться строка максимальной длины +n1+2 (при UNIX-LINES +n1+1).
Лечение :

Было :
: ACCEPT1 ( c-addr +n1 -- +n2 ) \ 94
\ Ввести строку максимальной длины до +n1 символов.
\ Исключительная ситуация возникает, если +n1 0 или больше 32767.
\ Отображать символы по мере ввода.
\ Ввод прерывается, когда получен символ "конец строки".
\ Ничего не добавляется в строку.
\ +n2 - длина строки, записанной по адресу c-addr.
OVER SWAP
H-STDIN READ-LINE
...

Стало :
: ACCEPT1 ( c-addr +n1 -- +n2 ) \ 94
\ Ввести строку максимальной длины до +n1 символов.
\ Исключительная ситуация возникает, если +n1 0 или больше 32767.
\ Отображать символы по мере ввода.
\ Ввод прерывается, когда получен символ "конец строки".
\ Ничего не добавляется в строку.
\ +n2 - длина строки, записанной по адресу c-addr.
LTL @ - OVER SWAP
H-STDIN READ-LINE
...


Последний раз редактировалось Ethereal Ср июл 13, 2011 17:09, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ошибки в известных реализациях Форта и их исправление.
СообщениеДобавлено: Вт июл 12, 2011 03:36 
HERE 1 ACCEPT может привести к переполнению буфера, т.к. получится HERE 4294967295 H-STDIN READ-LINE

Решение проблемы в корне:
Код:
REQUIRE CORE_OF_REFILL  ~pinka/spf/fix-refill.f


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Ошибки в известных реализациях Форта и их исправление.
СообщениеДобавлено: Ср июл 13, 2011 02:27 
Не может. Потому-что внутри READ-LINE первым делом с длиной проделывается
LTL @ +
и длина -1 превращается в длину 1.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Ошибки в известных реализациях Форта и их исправление.
СообщениеДобавлено: Ср июл 13, 2011 16:49 
Да, верно.
Тогда вычитать тоже следует LTL @, а то при UNIX-LINES будет читать на 1 меньше и будет невозможно прочитать строку в 1 символ.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Ошибки в известных реализациях Форта и их исправление.
СообщениеДобавлено: Ср июл 13, 2011 17:08 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
Согласен. Исправил.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ошибки в известных реализациях Форта и их исправление.
СообщениеДобавлено: Пн сен 10, 2012 05:43 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
Самая последняя версия AmForth v4.9 для однокристалок Atmel AtMega.

В файле ..\core\words\to-lower.asm видим

; ( C --  c) 
; String
; if C is an uppercase letter convert it to lowercase
VE_TOLOWER:
.dw $ff07
.db "tolower",0
.dw VE_HEAD
.set VE_HEAD = VE_TOLOWER
XT_TOLOWER:
.dw DO_COLON
PFA_TOLOWER:
.dw XT_DUP
.dw XT_DOLITERAL
.dw 'A'
.dw XT_DOLITERAL
.dw 'Z'
.dw XT_WITHIN
.dw XT_DOCONDBRANCH
.dw PFA_TOLOWER0
.dw XT_DOLITERAL
.dw $20
.dw XT_OR
PFA_TOLOWER0:
.dw XT_EXIT

Не будет приводиться к нижнему регистру буква Z.
Чтобы исправить нужно выделенную выше строчку заменить на
    .dw 'Z'+1


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ошибки в известных реализациях Форта и их исправление.
СообщениеДобавлено: Вт май 12, 2015 20:20 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
Классика. Fig-Forth.

Где-то прочитал, что Fig-Forth - это воплощение самого духа Форта.
А все остальное уже не тру. Решил потратить время и приобщиться.
По ходу пьесы во всех реализациях Фиг-Форта для IBM-PC обнаружил
одну и ту-же хрень. Словарь FORTH
Код:
;   FORTH
;
;   THE 'TASK-7' IS A COLD START VALUE ONLY.
;   IT IS CHANGED EACH TIME A DEFINITION IS
;   APPENDED TO THE 'FORTH' VOCABULARY.
;
   DB   0C5H
   DB   'FORT'
   DB   'H'+80H
   DW   VOCAB-0DH
FORTH   DW   DODOE
   DW   DOVOC
   DW   0A081H
   DW   TASK-7   ;COLD START VALUE ONLY
   DW   0   ; END OF VOCABULARY LIST

немедленного исполнения. Об этом говорит то, что в длине имени
0C5H выставлен 6-й бит. И так и должно быть. И в глоссарии по
Фиг-Форт сказано "By convention, vocabulary names are to be
declared IMMEDIATE."

А вот определение нового словаря по VOCABULARY
Код:
;
;   VOCABULARY
;
   DB   8AH
   DB   'VOCABULAR'
   DB   'Y'+80H
   DW   IMMED-0CH
VOCAB   DW   DOCOL
   DW   BUILD
   DW   LIT
   DW   0A081H
   DW   COMMA
   DW   CURR
   DW   AT
   DW   CFA
   DW   COMMA
   DW   HERE
   DW   VOCL
   DW   AT
   DW   COMMA
   DW   VOCL
   DW   STORE
   DW   DOES
DOVOC   DW   TWOP
   DW   CONT
   DW   STORE
   DW   SEMIS

то-бишь
Код:
HEX
: VOCABULARY
  <BUILDS
    A081 ,
    CURRENT @ CFA ,
    HERE VOC-LINK @ , VOC-LINK !
  DOES>
    2+ CONTEXT !
;

создает словарь без признака немедленного исполнения. Что неправильно.
Лечится добавлением в определение VOCABULARY вызова IMMEDIATE :
Код:
;
;   VOCABULARY
;
   DB   8AH
   DB   'VOCABULAR'
   DB   'Y'+80H
   DW   IMMED-0CH
VOCAB   DW   DOCOL
   DW   BUILD
   DW   LIT
   DW   0A081H
   DW   COMMA
   DW   CURR
   DW   AT
   DW   CFA
   DW   COMMA
   DW   HERE
   DW   VOCL
   DW   AT
   DW   COMMA
   DW   VOCL
   DW   STORE
   DW   IMMED   ;Добавлено
   DW   DOES
DOVOC   DW   TWOP
   DW   CONT
   DW   STORE
   DW   SEMIS

З.Ы.
Кстати, изучил это Фиг-Форт просто тупо портанув его под Винды.
Сделав 32-разрядным. На ошибки его еще погоняю и покажу.
Идея была сначала портануть Фиг-Форт под Винды, выложить, а
потом его-же превратить в Форт книги Баранова и Ноздрунова,
чтобы к этой книге прилагался хоть какой-то Форт.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ошибки в известных реализациях Форта и их исправление.
СообщениеДобавлено: Сб июн 06, 2015 09:52 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.

M по просьбе автора темы выделил флуд в тему если не нравится название, предлагайте, как переименовать, изменю.


_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


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

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


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

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


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

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