Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Язык программирования (и ОС) ФОРТ (FORTH) 0003: базовая система команд tinyVM


Информационный Канал Subscribe.Ru

0003: базовая система команд tinyVM

Прежде чем рассмотреть целевой компилятор, нужно коснуться вопроса о системе
команд tinyVM.

Как уже было описано в выпуске [0001], tinyVM использует два типа команд:

0op: <опкод>             безоперандные команды и префиксы
1op: <опкод> <операнд>   команды с одним операндом

Для рассмотрения ЦК достаточно взять следующие команды:

команда   байт-код  ЦК             описание
==================================================================

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

nop       00
jmp       01 addr   1234 jmp       переход
?jmp      02 addr   5678 ?jmp      ( flag -- ) переход если flag=0
call      03 addr   9182 call      (R: -- retaddr ) вызов
ret       04                       (R: retaddr -- ) возврат
lit       05 cell   -189 lit       ( -- cell ) префикс литерала
exec      06                       ( addr -- ) вызов по адресу из D-стека
do        08        Nto Nfrom do   начало цикла со счетчиком
loop      09        loop           конец цикла
i         0A                       значение счетчика L[Lp-0]
j         0B                       значение счетчика L[Lp-1]
k         0C                       значение счетчика L[Lp-2]

С системой команд есть одна проблема: рассматриваемая технология
программирования очень простая, хост-систем (целевых платформ) существует не
один десяток, еще больше найдется тех, кому не понравится что-то в архитектуре
tinyVM (например в RU.JAVA была идея использовать гарвардскую архитектуру с
разделением кода и данных в разные адресные пространства), поэтому очень
вероятно появление множества клонов tinyVM, и в этом случае необходимо по
возможности обеспечить переносимость программ между tinyVM и ее клонами.

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

Другой вариант (более гибкий, но и более сложный в использовании) -- обязать
авторов клонов tinyVM в обязательном порядке комплектовать пакет с исходниками
движка или его бинарниками модифицированной под клон версией целевого
компилятора с добавленными и переназначенными опкодами команд.

Эта проблема в намного большей степени относится к проекту Synergy
http://synergy.com.ua, так как его система команд завязана на глобальную
систему команд (глидов), что требует их жесткого определения.

Думаю, есть смысл (пока проблема не возникнет практически) пока использовать
вариант 2 определения системы команд, но в рамках Synergy создать систему
регистрации (можно свободную -- архитектура tinyVM дает 64K опкодов, но для
тощих встраиваемых систем может возникнуть ограничение не более 0x100 команд)
диапазонов команд с их подробной on-line спецификацией.

Для встраиваемых систем (системы управления на микроконтроллерах в пром.
оборудовании, кофеварках и пылесосах) наверняка возникнет клон с байтовой
адресацией и 8-битными опкодами (с диапазоном команд 0x00..0xFF) чтобы не
тратить время на дополнительные циклы чтения/записи памяти и особенно
поддержку 16-битных операций (из-за ограничений по скорости и объему кода
движка). Этот вариант может оказаться еще более несовместимым из-за другой
организации памяти и отличий в работе команд.

Полную спецификацию системы команд tinyVM (последняя версия) качать с
http://akps.ssau.ru/forth/tiny/doc/cmdset.html

================
http://akps.ssau.ru
forth@km.ru
FidoNet SU.FORTH 2:5057/18.29
tel.: +7 8462 28 9910 (work), 15 4313 (home)

Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.forth
Отписаться
Вспомнить пароль

В избранное