Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пт окт 23, 2020 14:46

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 88 ]  На страницу Пред.  1, 2, 3, 4, 5, 6  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Вт июл 18, 2006 13:09 
Не в сети

Зарегистрирован: Сб май 06, 2006 18:43
Сообщения: 400
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
in4 писал(а):
Я рассматривал реализацию либо интерпретатора такого проца, либо JIT-компилятор.
Вот их-то реализация на процах традиционных архитектур и будет тормозить.
А если делать аппаратно, то этих ограничений нет... :)


в этом случае упихиваться в 4 бита нет смысла -- экономия на выборку 2х опкодов вместо одного будет компенсироваться делением полученного байта на 2 опкода

а вообще -- сейчас пробую написать форт-машину для AVR, скорость получается где-то 1/5-1\10 скорости самого AVR, что вполне приемлемо, если использовать быстрый AVR с тактовой 16-24 МГц

_________________
http://akps.ssau.ru/forth/


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

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5016
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 21 раз.
Поблагодарили: 58 раз.
Хищник писал(а):
oleg писал(а):
Тогда к чему мы пришли - кто обобщит? Стоит ли обговорить стандартную модель форт-процессора? Как поступать с флагами арифметических операций?


Думается, что никак. По сути, форт-процессор сводится к вариациям безоперандной системы команд, которую можно основать на стековой модели. Но можно обойтись и регистрами, тогда мнемоники ассемблера по-прежнему могут выглядеть похожими на Форт. Стандартной модели как таковой не будет - если даже ее и начертать на скрижалях, это только даст цель для критики и основу для всевозможных улучшений. Даже флаги - не обязательное решение. Детали аппаратного решения сильно зависят от возможностей аппаратуры и желаемого результата. Форт-процессор может и управлять LCD (тогда ему надо совсем немного ресурсов), и выступать в качестве центрального процессорного яжра (тогда это 32-разрядный процессор с большими стеками и развитой системой команд). Кто из них "настоящий" - а Форт его знает!...


Я имел ввиду не вообще общую модель. Я имел ввиду проц с набором комманд вмещающимся в 4 бита 8)
И о флагах вопрос туда же.
Кстати, кто-нибудь с ТТА разбирался? Как организовать транспорты на альтере?


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

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5016
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 21 раз.
Поблагодарили: 58 раз.
Еще раз вернусь.
in4 писал(а):
ты хотел сказать
Код:
2/ == lit(-1) shift
2* == lit(1) shift


Да.

in4 писал(а):
значит, shift с параметром - сложно, но можно! Особенно для виртуальной машины. Для проца не так удобно - н. писать микропрограммы.


зачем же так? Сдвиг делается на мультиплексоре, правда получается великовато устройство сдвига.
Либо двигать в цикле, тогда параметр только 0 и не ноль 8) для if-a.

in4 писал(а):
так ли нужно r+ ? М.б. все-таки сделать ret попроще, т.к. он чаще применяется?
При наличии ret , call м. убрать
Код:
: call lit ret ;

но лучше оставить для скорости...


не понял 8(
Call должен оставить на стеке возвратов адрес точки возврата, иначе это будет if.

: call ip@ >r lit(addr) branch ;
Его разбивать точно не стОИт.

in4 писал(а):
но и более медленная и более длинная... а применяется часто. Наверное, 3я по частоте команда!
После call и ret .

тоже не совсем так.
Если переход if0 (пусть так и называется;) ) то будет коротко, а если нужен флаг операции, то тут длинно.
Но ведь не всегда нужно знать меньше ли нуля результат, или был ли заем-перенос?

???Что я еще пропустил???


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

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Часть сообщений, затронувшая теализацию TTA в железе перенесены в раздел "Железо"
сюда: http://fforum.winglion.ru/viewtopic.php?p=1351#1351

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


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

Зарегистрирован: Сб май 06, 2006 12:01
Сообщения: 959
Откуда: Украина, Харьков
Благодарил (а): 2 раз.
Поблагодарили: 7 раз.
Конечно, д.б. так
Код:
: call lit >r ret ;

но заменять call таким не стОит, даже инлайновым, из-за частоты использования

IMHO, желательно иметь хоть бы 2 проверки (так удобнее!!)
на 0 - для проверок на совпадение, и флаги в стеке тоже проверять)
на <0 - Мур оставил в CF, в проце из книги "Компьютеры" японского автора (тут мне не доступна, белая мягкая) это была единственная операция сравнения. Там, кстати, был минимальный набор команд проца, но без стеков - форт на нем не построить... :(

Вот насчет второй проверки - можно по знаку числа, можно по переносу, как лучше, не знаю.
Использование знака в худшем случае в 2 раза уменьшает размер адреса (это можно и обойти, м.б. ценой нескольких команд :( ).

_________________
With best wishes, in4.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн июл 24, 2006 22:12 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5016
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 21 раз.
Поблагодарили: 58 раз.
in4 писал(а):
Конечно, д.б. так
Код:
: call lit >r ret ;

но заменять call таким не стОит, даже инлайновым, из-за частоты использования

Что-то тут не так.
Во-первых ":" и ";"нельзя использовать при описании этой команды.
call =
ip@ lit(const) addr \ нашли адрес возврата
>R \ сохранили адрес возврата
lit(addr) dup 0if \ вошли в подпрограмму?

: call lit >r ret ; - это работать не будет, на сколько я понимаю.
это скорее код execute но тоже не рабочий. В том то и дело, что без ret легко обойтись, а call намного более сложный приметив.


in4 писал(а):
IMHO, желательно иметь хоть бы 2 проверки (так удобнее!!)

мой вариант таков: в общую память мапятся различные регистры процессора:
ip
overflov
sign
interrupt

все что надо, это просто прочесть флаг

lit('overflov) fetch 0if или
lit('sign) fetch 0if - конечно это долго, но всеравно все в 4 бита влазит.
Замечу, что 4-битовы проц (забыл как фирма-то называется8( ) так вот у него система комманд больше и разрядность шины команд шире, а вот разрядность данных = 4 бита. У меня случай обратный: разрядность данных хоть1024 бита, а система команд влазит в 4.
in4 писал(а):
на 0 - для проверок на совпадение, и флаги в стеке тоже проверять)

И сразу система команд вылазит за 16 штук 8(
in4 писал(а):
на <0 - Мур оставил в CF, в проце из книги "Компьютеры" японского автора (тут мне не доступна, белая мягкая) это была единственная операция сравнения.

а у меня можно сколько угодно вариантов сравнения реализовать 8) Только через доступ к памяти. Если есть желание можно заняться оптимизацией выполнения команд, ну хотя бы выполнять их параллельно ;)

in4 писал(а):
Вот насчет второй проверки - можно по знаку числа, можно по переносу, как лучше, не знаю.
Использование знака в худшем случае в 2 раза уменьшает размер адреса (это можно и обойти, м.б. ценой нескольких команд ).

Тут надо думать, а лучше считать. Что будет лучше бит на команду или 4 бита?
Я думаю что 5 бит, как в Чаковских процах это быстро, но не понятно как с памятью работать то есть понятно что можно выбирать команды тройками, но некратность степени двойки меня смущает очень сильно.

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


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

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
oleg писал(а):
Я думаю что 5 бит, как в Чаковских процах это быстро, но не понятно как с памятью работать то есть понятно что можно выбирать команды тройками, но некратность степени двойки меня смущает очень сильно.


Да там можно просто разбить 16 нит на (1)(5)(5)(5)бит и считать, что однобитная команда, '1' = Call по адресу из остальных 15-ти бит... а '0' - это 3 5-битных команды. Для литерала (кодиеуемого одной из пятерок) просто следующее слово выбирается как литерал, а не как новые команды.

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн июл 24, 2006 22:37 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5016
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 21 раз.
Поблагодарили: 58 раз.
WingLion писал(а):
Да там можно просто разбить 16 нит на (1)(5)(5)(5)бит и считать, что однобитная команда, '1' = Call по адресу из остальных 15-ти бит... а '0' - это 3 5-битных команды. Для литерала (кодиеуемого одной из пятерок) просто следующее слово выбирается как литерал, а не как новые команды.

Это понятно, но это уже было 8)
А четыре бита на команду еще не было ;) К тому же если старший бит - признак call то разрядность шины адреса ограничивается 15 битами :( Или 30 если выбирать шестерками ;) А при предлагаемом мною подходе нет вообще никаких завязок на разрядность шин. Лишь бы разрядность данных была кратна разрядности адресов.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт июл 25, 2006 00:51 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5016
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 21 раз.
Поблагодарили: 58 раз.
oleg писал(а):
0- lit
1- call
2- if
3- >R
4- R>
5- R+
6- R@
7- dup
8- drop
9-over
A- add
B- and
C- xor
D- shift
E- fetch
F- store

Все команды в 4 бита &)


Кстати тут подумалось, что можно выкинуть R@ = R> DUP >R
а так же R+ = R> + >R
значит две команды можно добавить 8)
?какие варианты!

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


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

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
ret и nop

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт июл 25, 2006 01:20 
Не в сети
Moderator
Moderator
Аватара пользователя

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


noop = dup drop или lit(n) drop или >R R> или dup and или
вобщем без nop можно обойтись при таком маленьком наборе команд.

ret = R> dup 0if
Может есть что-нибудь более важное?
тот же move ? swap ?
или же избавить себя от гемороя и добавить * / ?

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


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7047
Благодарил (а): 17 раз.
Поблагодарили: 116 раз.
oleg писал(а):
noop = dup drop или lit(n) drop или >R R> или dup and или
вобщем без nop можно обойтись при таком маленьком наборе команд.


А вот и нет. Если стек заполнен до упора, то nop допустим, а dup drop приведет к переполнению стека.


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

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
oleg писал(а):
ret = R> dup 0if
Может есть что-нибудь более важное?

ret тремя командами? Да так и повеситься недолго!
ret должен быть одной командой и выполняться мгновенно!

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


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

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7047
Благодарил (а): 17 раз.
Поблагодарили: 116 раз.
WingLion писал(а):
ret тремя командами? Да так и повеситься недолго!


Так вешаться как раз долго! :))

"Что же вы так убиваетесь? Вы же так не убьетесь!" :hey;


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

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5016
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 21 раз.
Поблагодарили: 58 раз.
Хищник писал(а):
oleg писал:
noop = dup drop или lit(n) drop или >R R> или dup and или
вобщем без nop можно обойтись при таком маленьком наборе команд.

А вот и нет. Если стек заполнен до упора, то nop допустим, а dup drop приведет к переполнению стека.

Во-первых, у меня есть подозрение, что стек до упора заполнен быть не должен, вероятно это стоило бы предусмотреть. можно написать слово nop и его вызывать.
WingLion писал(а):
ret тремя командами? Да так и повеситься недолго!
ret должен быть одной командой и выполняться мгновенно!

Тем не менее ret более простая для реализации команда чем тот же call.
Да и не идет речь об очень мощьном процессоре и тот же ret ну будет он выполняться за 6 тактов, а не за два?

Ладно. Надо прикинуть, как это в железо будет ложиться. Тогда может набор изменится 8)

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


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

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


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

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


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

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