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/ |