Forth
http://fforum.winglion.ru/

[BF] система команд
http://fforum.winglion.ru/viewtopic.php?f=16&t=759
Страница 1 из 3

Автор:  forth@km.ru [ Вт май 22, 2007 23:32 ]
Заголовок сообщения:  [BF] система команд

команды -- опкод 8 бит, префиксы переключения на расширенные наборы команд 8 бит (любое количество, получается дерево расширений), параметры у команд типа lit, call, jmp один cell

диапазон 0x0F..0xFF зарезервирован для экспериментальных команд

команды пока поделены на группы по 8 опкодов

0x0N команды управления выполнением программы типа call/ret, jmp, ?jmp, lit, bye
0x1N стековые операции
0x2N операции с памятью включая XMEM (динамически выделяемые блоки вне адресного пространства основной памяти форт-машины)
0x3N целочисленная арифметика
0x4N логические и битовые операции
0x7N консольный ввод/вывод с поддержкой stdin/stdout
0x8N отладочные

расширения

0x9N EXT_GR простейшая 2D монохромная (лучше без цветной для портабельности) графика
0xAN EXT_FILEIO доступ к файловой системе (или лучше завязаться на доступ к файлам через сеть ?)
0xBN EXT_NET сетевые стеки ETH/PPP/IP/TCP/UDP/ICMP и более высокоуровневые протоколы
0xCN EXT_CRYPTO поддержка криптографии нужна ?
0xDN EXT_3D видимо не обойтись, быстрые векторные операции

0xEN префикс для других расширений

0xFN резерв для экспериментальных команд и спец.версий движков

Автор:  forth@km.ru [ Вт май 22, 2007 23:33 ]
Заголовок сообщения: 

после того как набор CORE команд устоится, их можно сжать в один диапазон, освободится еще примерно 40% опкодов

Автор:  WingLion [ Вт май 22, 2007 23:43 ]
Заголовок сообщения: 

forth@km.ru писал(а):
диапазон 0x0F..0xFF зарезервирован для экспериментальных команд


Это в смысле 240 кодов из 256 - зарезервированы? :)

Или имелось в виду 0xF0..0xFF?

forth@km.ru писал(а):
параметры у команд типа lit, call, jmp один cell


Мне почему-то кажется, что вот эти парамерты как раз, лучше сделать регулируемыми, т.е. 1 байт, 1 слово, 1 селл и т.д. до некоего 'псевдоразумного' предела.

Автор:  forth@km.ru [ Вт май 22, 2007 23:50 ]
Заголовок сообщения: 

добавить еще wlit & blit, а переходы сделать как в relfе относительными ?

Автор:  WingLion [ Ср май 23, 2007 00:09 ]
Заголовок сообщения: 

я склоняюсь к тому, чтобы lit, call и jmp сами по себе были префиксами, за которыми сразу же идет указатель на размер данных/адреса
для jmp, возможно еще и указатель на флаг условного исполнения

Автор:  forth@km.ru [ Вт май 29, 2007 21:32 ]
Заголовок сообщения: 

для работы примера простейшей программы EMPTY.4th нужно чтобы в коде целевого компилятора и в движке были прописаны и реализованы команды bye:

Код:
void bye() { exit(0); }

void step()
{
...
            case 0x07: bye(); break;
...
}


и

Код:
void jmp() { Ip=Mget(Ip); }

void step()
{
...
            case 0x01: jmp(); break;
...
}

Автор:  forth@km.ru [ Вт май 29, 2007 21:38 ]
Заголовок сообщения: 

функция Mget(addr) используется для получения cellа побайтно или в случае движка на Си для процессора, к которого порядок байт совпадает в порядком в форт-машине, используется финт ушами с применением макроса и хитрого доступа через указатели:

Код:
#ifdef I8086||I386
#define Mget(addr)        (*(uint *)(&M[addr]))
#define Mset(addr,n)      (*(uint *)(&M[addr]))=n
#endif

Автор:  forth@km.ru [ Вт май 29, 2007 21:43 ]
Заголовок сообщения: 

forth@km.ru писал(а):
в случае движка на Си для процессора, к которого порядок байт совпадает в порядком в форт-машине, используется финт ушами с применением макроса и хитрого доступа через указатели:


любой приличный компилятор Си должен породить для такой операции код из пары-тройки машинных команд, которые выполняют чтение/запись сразу 2/4 байт массива М[] идущих в памяти подряд. Но -- если компилятор в целях оптимизации включит выравнивание элементов этого массива на границы машинных слов, получим косяк.

В этом случае, а также для процессоров с другим порядком байт в маш.слове нужны функции, оперирующие с cellами побайтно через сдвиги и наложения.

Автор:  вопрос [ Вт май 29, 2007 21:56 ]
Заголовок сообщения: 

насколько я понимаю, многие процессоры, особенно х86 не сообенно экономят на размерах команд, для чего же экономить тут?

Автор:  in4 [ Вт май 29, 2007 22:22 ]
Заголовок сообщения: 

вопрос писал(а):
насколько я понимаю, многие процессоры, особенно х86 не сообенно экономят на размерах команд, для чего же экономить тут?

ВМ можно встроить в микроконтроллер, у которого ресурсов маловато. Удобно отлаживаться на ПК, а потом проверенный код прошить в микроконтроллер. Получается, чем лучше упакована система команд - тем больше максимальный размер программы... :)

Автор:  вопрос [ Вт май 29, 2007 22:48 ]
Заголовок сообщения: 

ВИдимо, я туплю. если нужно экономить рессурсы, то для чего делать вобще ВМ? Форт и ФортВМ - разные вещё? или наличие "форт-машины" (механизма компиляции определений - исполнения) превращает любой Форт в ВМ? ведь нет? Тогда почему не делать форт без ВМ для микроконтроллера, а ВМ - только для отладки? Я пытаюсь сейчас сделать примитивную настраиваемую "ВМ-интерпретатор" (текстовые команды)

Автор:  in4 [ Вт май 29, 2007 23:51 ]
Заголовок сообщения: 

вопрос писал(а):
если нудно экономить рессурся, то для чего делать вобще ВМ?

Ценой потери быстродействия можно бОльше втиснуть в память - например, свернутый шитый код.
Или подбор системы команд - минимальный набор(только нужные команды) и "сжимающее" кодирование...
вопрос писал(а):
Форт и ФортВМ - разные вещё?
Конечно, разные. И независимые. М.б. ВМ без Форта - Ява, например, и Форт без ВМ - вариант нативного кода, м.б. даже без стеков... ;) И все равно будет Форт!
вопрос писал(а):
или наличие "форт-машины" (механизма компиляции определений - исполнения) превращает любой Форт в ВМ? ведь нет?

Форт-машина состоит из нескольких частей. Обычно есть машина исполнения - структуры данных и набор примитивов. Есть надстройка над ней - интерпретатор и компилятор. Машину исполнения уже можно рассматривать как ВМ с ассемблером, равным набору примитивов. :)
вопрос писал(а):
Тогда почему не делать форт без ВМ для микроконтроллера, а ВМ - только для отладки?
Можно. Но отлаживать проще, когда они одинаковы... ;) И у ВМ в микроконтроллере есть свои преимущества, особенно - экономичная работа с памятью... ;)
В мыслях есть сделать полную систему - с интерпретатором и компилятором, работающую в 1к ОЗУ на микроконтроллере... Пока не доказал невозможность... ;)

Автор:  вопрос [ Ср май 30, 2007 00:41 ]
Заголовок сообщения: 

Цитата:
В мыслях есть сделать полную систему - с интерпретатором и компилятором, работающую в 1к ОЗУ на микроконтроллере... Пока не доказал невозможность...
У меня возникло желание отговорить, быстрее кто-то сделает память больше и дешевле, чем решится неблагодарная задача...

Автор:  вопрос [ Ср май 30, 2007 00:48 ]
Заголовок сообщения: 

Цитата:
Форт-машина состоит из нескольких частей. Обычно есть машина исполнения - структуры данных и набор примитивов. Есть надстройка над ней - интерпретатор и компилятор.

Набор примитивов - это уже ВМ или ещё нет?

Автор:  in4 [ Ср май 30, 2007 01:17 ]
Заголовок сообщения: 

вопрос писал(а):
У меня возникло желание отговорить, быстрее кто-то сделает память больше и дешевле, чем решится неблагодарная задача...

Сделают - будет больше возможностей!! ;) А так в одном корпусе можно сделать удобно конфигурируемую систему... ;)
вопрос писал(а):
Набор примитивов - это уже ВМ или ещё нет?

Нет, надо еще их вызывать и параметры передавать... ;) Но от реализации зависит... ;)
ВМ обычно стартуют внешними средствами... Настраивают системы передачи параметров, вызовов и начало интерпретации...

Страница 1 из 3 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/