Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пт мар 29, 2024 05:22

...
Google Search
Forth-FAQ Spy Grafic

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




Ответить
Имя пользователя:
Заголовок:
Текст сообщения:
Введите текст вашего сообщения. Длина сообщения в символах не более: 60000

Размер шрифта:
Цвет шрифта
Настройки:
BBCode ВКЛЮЧЕН
[img] ВЫКЛЮЧЕН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЕН
Смайлики ВЫКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Не преобразовывать адреса URL в ссылки
Вопрос
Теперь гостю придется вводить здесь пароль. Не от своей учетной записи, а ПАРОЛЬ ДЛЯ ГОСТЯ, получить который можно после регистрации на форуме через ЛС.:
Этот вопрос предназначен для выявления и предотвращения автоматических регистраций.
   

Обзор темы - kf600 - система команд
Автор Сообщение
  Заголовок сообщения:  Re: kf600 - система команд  Ответить с цитатой
POKE ( D, A -- ) запись числа D в ячейку стека с адресом A, считая от вершины стека. 123 0 POKE заменит число, бывшее вершиной стека до выполнения этой команды, на 123.

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

ARG! ( D, A -- ) - записать число D по адресу параметра с индексом A. Номер параметра означает смещение относительно вершины стека на момент входа в выполняемое слово (в котором встретилось слово ARG!). Положительные смещения соответствуют параметрам, помещенным на стек после начала выполнения слова.
Сообщение Добавлено: Вс апр 19, 2015 23:14
  Заголовок сообщения:  kf600 - система команд  Ответить с цитатой
Новая версия ядра 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-ядрах занимает многовато места. Но почему нет?
Сообщение Добавлено: Пт апр 17, 2015 02:22

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


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