Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Ср ноя 14, 2018 00:17

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: kf600 - система команд
СообщениеДобавлено: Пт апр 17, 2015 02:22 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6435
Благодарил (а): 14 раз.
Поблагодарили: 101 раз.
Новая версия ядра kf вырисовывается настолько интересной, что и в сам Форт (для PC) может внести некоторые изменения. Прежде всего, с 8-битной командой вместо 6-битной вместо 32 "не-литеральных" команд образуется 128. Это дает возможность не ужиматься в пределах только самого необходимого. Что получается из назревших команд:
1. Произвольный доступ к стеку данных, как по абсолютным адресам, так и по смещениям относительно вершины стекового кадра.
Это шаг в сторону кода, генерируемого "классическими" компиляторами. Нужны параметры на стеке данных, образующие стековый кадр. В Форте он может быть эмулирован массивом, доступ к которому все равно пойдет по ! @, что заставляет тратить дополнительные такты на эмуляцию "стека, но не такого". При необходимости прочитать произвольное число можно использовать PICK, но как быть с необходимостью его записать туда? В ядре Форта такого слова за историю его развития не появилось.
Второй момент - это независимая от программиста поддержка адресации. Например, если на стеке было 5 чисел, а подпрограмма создала локальные переменные x, y, z, то они расположатся в ячейках 5, 6, 7 (считая, что заняты ячейки 0 - 4). Теперь, если при вызове такой подпрограммы запомнить на отдельном стеке 5 (т.е. глубину на момент вызова), то у нас получаются автоматически рассчитываемые адреса FRAME+0, FRAME+1, FRAME+2, которые и будут соответствовать локальным переменным.
Стековая нотация видится как ( Data, Offset -- ) и ( Offset -- Data ), наподобие ! @, тут нечего особенно изобретать. Для PC-версии непонятно (хотя почему бы нет?), а для embedded вполне благотворно повлияет на производительность.
Раз есть стековый кадр, его необходимо удалять, для этого нужна версия команды RET.

2. Манипуляции с координатами пикселов и цветовыми компонентами.
Это для графики. Автоинкремент X, Y, получение кода цвета ( R, G, B -- Color ). Сложно сказать, как здесь лучше организовать. Наложение компонентов - либо принудительно в заданные места, либо с помощью быстрого сдвига на 8/16/24 разрядов.

3. DDR.
Два момента. Ее много. И она есть в прямом управлении форт-процессора (whiteTigr - просто монстр, проделал работу высшей категории сложности!). И поскольку это память другого типа, со своими особенностями, ее не стоит просто бесконтрольно кэшировать, как в PC. Тут, опять же, много вариантов, можно просто подключить контроллер в пространство ВВ (а память - в существующее адресное пространство), можно по запросу подгружать динамическую память в блочную статику ПЛИС ("ручной" кэш), можно, наконец, выделить еще одно адресное пространство со своими ! @.

4. В принципе, в системе команд стоит оставить место для плавающей точки. В embedded это не всегда требуется, да и честная реализация на IP-ядрах занимает многовато места. Но почему нет?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: kf600 - система команд
СообщениеДобавлено: Вс апр 19, 2015 23:14 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6435
Благодарил (а): 14 раз.
Поблагодарили: 101 раз.
POKE ( D, A -- ) запись числа D в ячейку стека с адресом A, считая от вершины стека. 123 0 POKE заменит число, бывшее вершиной стека до выполнения этой команды, на 123.

ARG@ ( A -- D ) - прочитать на вершину стека параметр с индексом A. Номер параметра означает смещение относительно вершины стека на момент входа в выполняемое слово (в котором встретилось слово ARG@). Положительные смещения соответствуют параметрам, помещенным на стек после начала выполнения слова.

ARG! ( D, A -- ) - записать число D по адресу параметра с индексом A. Номер параметра означает смещение относительно вершины стека на момент входа в выполняемое слово (в котором встретилось слово ARG!). Положительные смещения соответствуют параметрам, помещенным на стек после начала выполнения слова.


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

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


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

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


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

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