Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вт апр 16, 2024 10:25

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: [BF] движок на С(++)
СообщениеДобавлено: Вт май 22, 2007 22:42 
Не в сети

Зарегистрирован: Сб май 06, 2006 18:43
Сообщения: 400
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Код:
// Виртуальная форт-машина = интерпретатор байт-кода = движок для POSIX систем
// (copyleft) Dmitry Ponyatov <forth@km.ru> & RU FIG [http://fforum.winglion.ru]

_________________
http://akps.ssau.ru/forth/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт май 22, 2007 22:46 
Не в сети

Зарегистрирован: Сб май 06, 2006 18:43
Сообщения: 400
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Код:
// ============= конфигурация движка ================
// размеры памяти и стеков
                    // размер памяти форт-задачи, байт
#define Msz 0x1000
                    // размер стека возвратов, cells
#define Rsz 0x100
                    // размер стека данных, cells
#define Dsz 0x10
                    // размер стека do/loop (max вложенность циклов)
#define Lsz 0x10
// =============================================


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

соответсвенно на форте это будет

Код:
0x1000 CONSTANT _Msz
0x100  CONSTANT _Rsz
0x10   CONSTANT _Dsz
0x10   CONSTANT _Lsz


с подчеркиванием, потому что в коде целевого компилятора можно задать
константы, которые скомпилируются в целевой код:

Код:
_Msz const Msz
_Rsz const Rsz
_Dsz const Dsz
_Lsz const Lsz

_________________
http://akps.ssau.ru/forth/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт май 22, 2007 22:47 
Не в сети

Зарегистрирован: Сб май 06, 2006 18:43
Сообщения: 400
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Код:
// подключение стандартных библиотек
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

// определение типов
#define uchar unsigned char
#define uint  unsigned int
#define CELL  sizeof(UINT)

_________________
http://akps.ssau.ru/forth/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт май 22, 2007 22:50 
Не в сети

Зарегистрирован: Сб май 06, 2006 18:43
Сообщения: 400
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
загрузчик байт-кода сделан в функции main() вместе с инициализацией

если хочется чтобы какая-то программа или билд форт-ОС поставлялся юзеру
в виде одного исполняемого файла или .jarа для мобильника, вместо загрузки
из файла можно вкомпилить байт-код в виде сишного текста типа

Код:
uchar M[]={0x01,0x12,0x34,0x00,0x12,0x4D,0x22,...}


перед загрузкой выполняется провека командной строки запуска движка

Код:
// загрузчик, может не использоваться
// если байт-код забит в виде текста в сам исходник типа uchar M[]={1,2,3,..}
// (удобно если нужен один exeшник включающий внутрь весь нужный байт-код,
// например для версии движка на Java в байт-кодом в одном .jarе для мобил)

int main(int argc, char *argv[])
{
// проверка формата командной строки C:\> vm[.exe] BYTECODE
assert(argc>1);
// TODO: инициализация подсистемы многозадачности
// mt_init();
// загрузка байт-кода в память форт-машины (рутовой форт-задачи)
FILE *img=fopen(argv[1],"rb"); assert(img!=NULL);
assert(fread(M,1,Msz,img)!=0); fclose(img);
// запуск планировщика задач
sheduler();
// фиктивный return чтобы компилер не ругался что из int main() нет return int
return 0;
}

_________________
http://akps.ssau.ru/forth/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт май 22, 2007 22:52 
Не в сети

Зарегистрирован: Сб май 06, 2006 18:43
Сообщения: 400
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
при загрузке выполняется проверка на успещность открытия файла и его ненулевую длину

_________________
http://akps.ssau.ru/forth/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт май 22, 2007 22:52 
Не в сети

Зарегистрирован: Сб май 06, 2006 18:43
Сообщения: 400
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
планировщик задач пока без поддержки многозадачности :-)

Код:
// планировщик задач, для однозадачного варианта тупой бесконечный цикл

void sheduler()
{
for (;;) step();
}

_________________
http://akps.ssau.ru/forth/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт май 22, 2007 22:55 
Не в сети

Зарегистрирован: Сб май 06, 2006 18:43
Сообщения: 400
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
выборка и исполнение одной команды
пока только заготовка, для всех команд надо будет далее вбить свои case 0xNN

Код:
void step()
{
// выборка команды с проверкой сто не улетели вне адресного пространства
assert(Ip<Msz); op=M[Ip++];
// запуск "микрокода" команды на Си по ее опкоду
// быстрее и красивее таблица указателей на "микрокод" команд ВМ с индексацией
// по опкоду команды, но менее наглядно и недоступно в некоторых языках
switch(op) {
            case 0x00: nop(); break;
            default:
                    #ifdef MODE16
                         fprintf(stderr,"\nCORE %.4X:%.2X",--Ip,op);
                    #else
                         fprintf(stderr,"\nCORE %.8X:%.2X",--Ip,op);
                    #endif
                    abort();
}
}

_________________
http://akps.ssau.ru/forth/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт май 22, 2007 23:00 
Не в сети

Зарегистрирован: Сб май 06, 2006 18:43
Сообщения: 400
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
если 8 бит на опкод не хватит (для всяких расширений типа 2D/3D графики, сетевых протоколов реализованных на сях или через вызовы библиотек или API хост-ОС, числомолотильных векторных операций типа подсчета контрольных сумм, криптографии, обработки аудио/видео и т.п.), можно использовать набор префиксов, переключающих на один цикл интерпретатор на другой набор команд (расширенние типа EXT_GR, EXT_FILEIO, EXT_LOWIO, EXT_NET,..).

и еще -- для экспериментальных и пользовательских (точнее автора движка) команд зарезервирован диапазон опкодов 0xF0..0xFF.

_________________
http://akps.ssau.ru/forth/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт май 22, 2007 23:02 
Не в сети

Зарегистрирован: Сб май 06, 2006 18:43
Сообщения: 400
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
использовать хитрые форматы команд типа некратных 8 или мелкобитных, упакованных и т.п. -- лишняя постеря скорости работы движка. естественно это не относится к эмуляторам форт-процессоров -- но на то они и эмуляторы

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

_________________
http://akps.ssau.ru/forth/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт май 22, 2007 23:05 
Не в сети

Зарегистрирован: Сб май 06, 2006 18:43
Сообщения: 400
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
и при написании компиляторов будет гемор -- как заставить всех процессорогуру использовать одну систему команд и одинаковую периферию ? не надо забывать что нам еще надо писать компиляторы, значит опять будет ведро кодогенераторов под каждую модель процессора :-\

_________________
http://akps.ssau.ru/forth/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт май 22, 2007 23:06 
Не в сети

Зарегистрирован: Сб май 06, 2006 18:43
Сообщения: 400
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
и захочется дизассемблить или даже анализировать код --> куча дизасмеров и правил анализа

_________________
http://akps.ssau.ru/forth/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт май 22, 2007 23:09 
Не в сети

Зарегистрирован: Сб май 06, 2006 18:43
Сообщения: 400
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
с другой стороны ПЛИСы толстеют и жешевеют -- если реализовать весь набор команд BF с расширениями в чистом железе, можно будет гнуть пальцы типа наш супер-камень поддерживает
аппаратный вывод графики, криптографию, протоколы ETH/PPP/TCP/IP/UDP/ICMP, стек SS7
и дерганье лапами робота на чисто аппартном уровне
, спец-версия также имеет команды ЛЕВЫЙ-КОФЕЙНИК и ДАТЬ_В_ГЛАЗ_СОСЕДУ

_________________
http://akps.ssau.ru/forth/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт май 22, 2007 23:37 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
forth@km.ru писал(а):
числомолотильных векторных операций

В сочетании с байт-кодом - это сильно!... :)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт май 22, 2007 23:44 
Не в сети

Зарегистрирован: Сб май 06, 2006 18:43
Сообщения: 400
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Хищник писал(а):
forth@km.ru писал(а):
числомолотильных векторных операций

В сочетании с байт-кодом - это сильно!... :)

а что смешного ? положил на стек адрес блока данных (типа ссылок на два .aviшных файла) и дернул
video/morph ( avi1 avi2 -- avi_morphed )

_________________
http://akps.ssau.ru/forth/


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт май 22, 2007 23:46 
Не в сети

Зарегистрирован: Сб май 06, 2006 18:43
Сообщения: 400
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
работать с данными то будет отпрофайленный и заоптимизированный по самые помидоры ассемблерный код или вообще отдельное железо видеомонтажной карты

_________________
http://akps.ssau.ru/forth/


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

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


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

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


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

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