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

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 512 ]  На страницу Пред.  1 ... 10, 11, 12, 13, 14, 15, 16 ... 35  След.
Автор Сообщение
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Сб авг 26, 2017 21:09 
Не в сети
Аватара пользователя

Зарегистрирован: Вс мар 04, 2007 08:02
Сообщения: 212
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
_KROL писал(а):
Даже в твоём Форте:

:(


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Вс авг 27, 2017 12:26 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 519
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 21 раз.
Не так
;; WITHIN ( x b1 b2 --> flag{b1<=x<=b2} )
а вот так
;; WITHIN ( x b1 b2 --> flag{b1<=x<b2})
и это только случай b1<b2

Более полно :
;; Возвратить флаг, который указывает на то, что находится x
в диапазоне [b1..b2), если b1<b2
и вне диапазона (b2..b1], если b1>b2

и не я такой WITHIN придумал. Его придумали без меня (и в стандарт ANSI внесли). Я только лаконично на ассемблере записал.

Почему было сделано именно так, сейчас подумаю.

З.Ы. Изначально кем-то было придумано вот так :
: WITHIN ( n1|u1 n2|u2 n3|u3 -- flag ) OVER - >R - R> U< ;

Проверка, что число из диапазона 0..9 суть
0 10 WITHIN
Проверка, что число вне диапазона 0..9 суть
10 0 WITHIN
Можно верхнее число диапазона понимать как модуль. Ведь числа по модулю 10 суть 0..9

Поигрался с WITHIN-ом и понял. Если использовать только включающие границы,
то нельзя сделать WITHIN проверяющим как вхождение, так и не вхождение в
диапазон. В самом деле пусть диапазон из одного числа 1. Тогда если
писать проверку как 1 1 WITHIN, то нет информации вхождение или
не вхождение проверяется. Числа-то 1 1 одинаковые. А если писать 1 2 WITHIN,
то это совсем не то, что 2 1 WITHIN и информация что проверять (по тому
записан диапазон от начала к концу или от конца к началу) есть.
Короче, невключаемость одного индекса - суть плата за универсальность.

Короче, надо запомнить, что диапазон пишется так [...) и если его писать от начала
к концу, то проверяется вхождение, а если от конца к началу, то не вхождение.


Последний раз редактировалось Ethereal Вс авг 27, 2017 12:33, всего редактировалось 3 раз(а).

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Вс авг 27, 2017 18:40 
Не в сети

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 344
Благодарил (а): 15 раз.
Поблагодарили: 1 раз.
Посмотрел в TD, подумал и решил просто сделать так:
Код:
;; WITHIN ( x b1 b2 --> flag{b1<=x<=b2} )
;;          c b  a
;; Возвратить флаг, который указывает на то, что находится x в диапазоне b1..b2.
AWORD WITHIN,"WITHIN",0
pop ax,bx,cx
sub ax,bx
sub cx,bx
cmp cx,ax
sbb ax,ax
jnz @f ; Просто
dec ax ; и
@@: ; ясно!
push ax
AEND


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Вс авг 27, 2017 21:01 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 519
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 21 раз.
_KROL писал(а):
Код:
sbb ax,ax
jnz @f ; Просто
dec ax ; и
@@: ; ясно!
push ax
AEND
Это "просто и ясно" покладет на стек FFFF в любом случае.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Вс авг 27, 2017 21:23 
Не в сети

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 344
Благодарил (а): 15 раз.
Поблагодарили: 1 раз.
... Вот самый работающий правильный вариант:
Код:
;; WITHIN ( x b1 b2 --> flag{b1<=x<=b2} )
;;          c b  a
;; Возвратить флаг, который указывает на то, что находится x в диапазоне b1..b2.
AWORD WITHIN,"WITHIN",0
pop ax,bx,cx
sub dx,dx
sub ax,bx
sub cx,bx
cmp cx,ax
  jnbe @f
dec dx
@@:
push dx
AEND


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Вс авг 27, 2017 21:43 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 519
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 21 раз.
Тогда будет
0 5 0 WITHIN .
-1 Ok
1 5 0 WITHIN .
0 Ok
2 5 0 WITHIN .
0 Ok
3 5 0 WITHIN .
0 Ok
4 5 0 WITHIN .
0 Ok
5 5 0 WITHIN .
-1 Ok
т.е. стало определение вхождения в диапазон [0..5] и определение не вхождения в диапазон (0..5) = [1..4]
А чтобы записать не вхождение в диапазон [0..5] придется писать 6 FFFF WITHIN , что ни разу не хорошо.

По мне так для диапазона [0..5] старое 0 6 WITHIN и 6 0 WITHIN было лучше, чем пара 0 5 WITHIN и 6 FFFF WITHIN в твоем варианте.

Впрочем, хозяин - барин.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Вс авг 27, 2017 22:23 
Не в сети

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 344
Благодарил (а): 15 раз.
Поблагодарили: 1 раз.
Э... Я ж писал что в диапазоне b1..b2, а не b2..b1. Даже не знаю.
Но хорошо, поменяю b1 и b2 местами для справедливости. :)

Когда разберусь ДО КОНЦА выложу.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Ср авг 30, 2017 19:52 
Не в сети

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 344
Благодарил (а): 15 раз.
Поблагодарили: 1 раз.
Есть обновление. Там 100% работающий и правильный вариант WITHIN + ещё кое-что.
SAVESYS>DRV пока не работает (сохранение системы на дискету) и баги...
http://fforum.winglion.ru/viewtopic.php?f=2&t=3127&start=177(нашёл таки способ ссылки сразу на моё сообщение :D)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Чт авг 31, 2017 08:48 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 519
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 21 раз.
Теперь бы тебе предусмотреть твоему Форту хоть какую-нибудь возможность исполнять программы из файла. А то вводить программу с клавиатуры сразу в Форт не кузяво. В файле хоть поредактировать можно. Я так этот вопрос решил тупо в выложенном здесь мной MS-DOS-овском Форте. Через потоки ввода-вывода :
forth.com < proga.f > proga.lst
и зашибись. Просто и больше ничего не надо. Но ты ввод-вывод через BIOS делаешь и такая штука у тебя не пройдет.

Кстати, я когда тот Форт писал, специально обдумал как минимальными средствами сделать так, чтобы Форт недополнение стека простейшими CORE-словами типа DROP 2DROP . ROT в режиме интерпретации ловил раньше, чем ласты склеит. Чтобы ими нельзя было его заDROPать насмерть. Это самый адекватный критерий. Нашел минимальное достаточное число неиспользуемых ячеек ниже дна стека. Кажется две. Или три. Не помню. Как некую красную зону. А твой Форт свалить зело просто - с пустого стека
. .
и все. Он ласты клеит и завершается. Как бы если бы он такое делать не давал, то выглядел бы солиднее. А пока совсем нет.

З.Ы. Еще раз проверил. А ты недополнение стека в процессе интерпретации оказывается вообще не смотришь.Твой Форт можно свалить 4 раза набрав DROP по одному DROP в строчке. Т.е. эффект недополнения накапливается. Неправильно это. Если после интерпретации слова стек оказался недополнен надо сразу DROPALL давать.
З.З.Ы. Ммм... У твоего Форта идеология такая - ни одного сообщения об ошибке ? Ну тогда делай хотя бы DROPALL молча. Данные на недополненном стеке один хрен под гарантию не подпадают.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Пт сен 01, 2017 21:40 
Не в сети

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 344
Благодарил (а): 15 раз.
Поблагодарили: 1 раз.
Пока так. Баги на счёт досовского в/в как всегда можете посмотреть в "DOCS\BUGS.TXT".
P.s. Тогда я кое-что поменял в EXPECT и всё зароботало!


Вложения:
OLD40025_pre1.ZIP [62.12 Кб]
Скачиваний: 29
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Сб сен 02, 2017 03:02 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 519
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 21 раз.
Если в исходном файле есть пустая строка, то при скармливании его твоему Форту через поток ввода интерпретация на этой строке прекращается. Последующее не интерпретируется.

Попробовал написать согласовалку твоего Форта с tester.fr . Даже написал несколько удачных заглушек, типа
Код:
VARIABLE WARNING
: SOURCE TIB >IN @ OVER - >SZ @ + ;
: CELLS 2* ;
: >IN >SZ 0! WARNING ; \ Very dirty hack
, постоянно недоумевая от того, что у тебя слова бывают написаны в каком-то не общепринятом смысле, например >IN у тебя содержит абсолютный адрес, а не смещение во входном буфере. Потом начал писать определение слова S" , был в постоянном недоумении почему оно постоянно обрушивает систему, хотя в фортовском смысле написано правильно. Для разбирательств почему потребовалось слово DUMP. Как работать с твоим DUMP было лень разбираться (входные и выходные параметры в комментариях не указаны, а что за слово без этого ?) (зачем мне дамп в разных сегментах, коли у тебя COM-файл ? Просто бы типа HERE 100 DUMP писать и дампить было бы уже хорошо), к тому-же оно не показывает дамп в ASCII. А это важно, чтобы по строчкам в дампе быстро понимать куда именно указывает указатель. Начал писать свое простое слово DUMP, опять был в постоянном изумлении почему ничего не удается написать. Наконец, обнаружил, что твое LOOP+ (а не +LOOP как у всех) вот в таком тривиальном коде :
Код:
HEX
: TEST
  38 0 DO
    55 EMIT
  10 LOOP+
;
TEST
BYE
рушит систему и на этом спекся. Посмотрел в код, а твое LOOP+ проверяет ТОЧНОЕ достижение границы. И от этого не видит через нее перепрыгивания. Но ведь в таком виде оно бесполезно. Только вот почему оно рушит систему, а не циклит бесконечно ? Из-за такой проверки границы уже ясно, что оно неправильное. Так-что причину обрушения нет смысла и искать. Надо его просто переписать по другому.

Пока система не в состоянии, чтобы ее потестировать. Уж если даже +LOOP не заLOOPнуть. И от этого даже чего-то типа такого
Код:
: DUMP
  ( addr n -- )
\ Dump n bytes from the address addr.
  BASE @ >R HEX
  OVER + SWAP
  DO
...
  10 +LOOP
  R> BASE !
;
не написать.

З.Ы.
Слово S" мыслится таким
Код:
HEX
: (S") R> COUNT 2DUP + >R ;
: S" COMPILE (S") 22 WORD DUP C, HERE OVER ALLOT SWAP CMOVE ; IMMEDIATE
И ни хрена. Без DUMP не втыкаюсь от чего с ним все рушится.


Последний раз редактировалось Ethereal Сб сен 02, 2017 13:50, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Сб сен 02, 2017 04:26 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 519
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 21 раз.
Да что за фигня ? Ты в качестве готового, скомпилированного файла
OLD4tH.COM в свой архив что вкладываешь ? Я ведь именно им пользуюсь.
Я твой Форт из исходников не собираю.
Взял и повторил твои определения LOOP+ в качестве своего +LOOP :
Код:
: (+LOOP) 2R> ROT 2R> ROT + 2DUP = IF 2DROP NIP >R ELSE 2>R DROP DUP 2>R THEN ;
: +LOOP COMPILE (+LOOP) [COMPILE] >RESOLVE ; IMMEDIATE
: DMP
  OVER + SWAP
  DO
    DEPTH .
  10 +LOOP
;
HERE 100 DMP
BYE
И все работает. Но стоит только в слове DMP заменить +LOOP на твое
готовое LOOP+ как все порушится. Как такое может быть ? Я ведь в определении
+LOOP полностью повторил твое определение LOOP+. Но будучи скомпилировано
заново оно работает, а то, что наготово присутствует в твоем файле OLD4tH.COM
из архива нет.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Сб сен 02, 2017 04:53 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 519
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 21 раз.
Код:
OLD4th SYSTEM [by _KROL] pre1 v.0.25
For exit type 'BYE', for view wordlist - 'WORDS' OK
I>HEX  OK
I>
DEPTH . CR 0
OK
I>
1234 <# # # # # #> DEPTH . 6 OK
I>
BYE

DEPTH у тебя показывает глубину стека в байтах, а не в словах.
. и U. после вывода числа не выдают пробел. Терпимо.
То, что на вход форматного преобразования нужно подавать одинарное,
а не двойное целое, к этому можно тоже как-то привыкнуть. Но почему
на его выходе ТРИ слова ? Ну два пойдут на TYPE , а третье куда ?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Сб сен 02, 2017 12:57 
Не в сети

Зарегистрирован: Пт янв 06, 2017 14:57
Сообщения: 344
Благодарил (а): 15 раз.
Поблагодарили: 1 раз.
Эх, да я сам уже не понимаю, почему в моей системе правильно компилируется не в исходниках, а извне...
Мой дамп : DUMP ( seg ofs --> )
А на счёт S", то я уже определял
: ," CHAR " LITERAL WORD DUP HERE @ SWAP ALLOT SWAP CMOVE 0 C, ; \ компилировать строку до "
: ." COMPILE LIT'Z ," COMPILE TYPE ; IMMEDIATE \ компилировать так: LIT'Z строка TYPE
правда когда пытаюсь подключить это на ассемблере... глюки! :(
Ладно, буду дальше разбираться. Спасибо!


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Моя система(_KROL)
СообщениеДобавлено: Сб сен 02, 2017 13:32 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 519
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 21 раз.
Слава яйцам, что-то заработало. Оказывается вместо HERE у тебя надо писать
HERE @ и ' выдает непонятно что. Но вот мои варианты DUMP и S" запахали :
Код:
OLD4th SYSTEM [by _KROL] pre1 v.0.25
For exit type 'BYE', for view wordlist - 'WORDS' OK
I>HEX  OK
I>
: (+LOOP) 2R> ROT 2R> ROT + 2DUP = IF 2DROP NIP >R ELSE 2>R DROP DUP 2>R THEN ;  OK
I>
: +LOOP COMPILE (+LOOP) [COMPILE] >RESOLVE ; IMMEDIATE  OK
I>
: MAX 2DUP < IF SWAP THEN DROP ;  OK
I>
: DUMP  OK
C>
  ( addr n -- )  OK
C>
\ Dump n bytes from the address addr.  OK
C>
  CR BASE @ >R HEX  OK
C>
  OVER + SWAP  OK
C>
  DO  OK
C>
    I U. SPACE I 10 + DUP  OK
C>
    I DO  OK
C>
      I C@ <# # # #> TYPE DROP SPACE  OK
C>
    LOOP  OK
C>
    I DO  OK
C>
      I C@ BL MAX EMIT  OK
C>
    LOOP CR  OK
C>
  10 +LOOP  OK
C>
  R> BASE !  OK
C>
;  OK
I>
: (S") R> COUNT 2DUP + >R ;  OK
I>
: S" COMPILE (S") 22 WORD DUP C, HERE @ OVER ALLOT SWAP CMOVE ; IMMEDIATE  OK
I>
HERE @  OK
I>
: STROKA S" testing" TYPE ;  OK
I>
STROKA testing OK
I>
80 DUMP
1BF7 06 53 54 52 4F 4B 41 D1 1B 02 1C E8 3B E5 C2 1B  STROKAС   и;еВ
1C07 07 74 65 73 74 69 6E 67 44 0E 5E 01 E8 5F 23 74  testingD ^ и_#t
1C17 0E E8 3F 00 74 09 E8 31 43 43 32 46 41 EB EB 5E  и? t и1CC2FAлл^
1C27 E3 E0 BF CA 93 0E 07 56 57 51 26 3A 0D 75 07 47 гаїК"  VWQ&: u G
1C37 F3 A6 75 02 EB 15 59 5F 5E 26 8A 05 0A C0 74 C2 у│u л Y_^&_  АtВ
1C47 32 E4 03 C7 8B F8 83 31 43 34 34 26 8A 05 59 5F 2д З<ш_1C5F&_ Y_
1C57 5E EB AC 3C 0D 75 01 C3 3C 2F 74 FB 3C 5C 74 F7 ^л┐< u Г</tы<\tч
1C67 3C 2E 74 F3 3C 3C 74 EF 3C 3E 74 EB 3C 7C 74 E7 <.tу<<tп<>tл<|tз
OK
I>
BYE
Кста, из-за того, что ты не переводишь каретку после ввода строки,
Код:
STROKA testing OK
I>
в листинге не понятно, "testing" - это я вводил или это Форт выдал. Так вот тут Форт выдал.


Последний раз редактировалось Ethereal Сб сен 02, 2017 14:08, всего редактировалось 5 раз(а).

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 512 ]  На страницу Пред.  1 ... 10, 11, 12, 13, 14, 15, 16 ... 35  След.

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


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

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


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

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