ПО, ЭВМ и АСУ из Таможенного Союза

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » ПО, ЭВМ и АСУ из Таможенного Союза » Проект "Виртуальные машины" » Первая реализация. Исходники.


Первая реализация. Исходники.

Сообщений 1 страница 30 из 62

1

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

main.r
Код:
 
#вставка    "library.h" 
#вставка 	<locale.h> 	//Во избежание "крокозяблей" на выводе
#вставка 	<stdio.h> 	//Стандартный однобайтовый ввод-вывод
#вставка 	<wchar.h> 	//"Широкие" многобайтовые символы и их ввод-вывод
#вставка 	<wctype.h> 	//"Классификация" широких символов

#вставка	"vm.h"    //Внешний интерфейс виртуальной машины

// при подключении файлов из других папок будьте внимательны с путями,
// так как перед компиляцией С/С++ файлы будут находится в папке .src/
 
цел main()
{
    //включение всех локалей
	setlocale(LC_ALL, "");
	system("cls");
	пчтф16(L"Новый проект.\n");
	
	//в переменной типа ТВМ "упакована" все внутреннее устройство ВМ:
	// регистры, стек, память указатели и тд. 
	ТВМ* ВМ1 = создать_ВМ();
	
	// программа состоящая их одной тестовой инструкции. 
	б64 программа = 16"FFFF;
	//Тут требуется подумать. Программа загружается как массив байтов. 
	загрузить_ВМ(ВМ1,(симв*) &программа, (симв*)((&программа)+1));
	//Наверное, имеет смысл совсместить загрузку и старт программы в одной инструкции.
	старт_ВМ(ВМ1);
	// освобождаем динамически выделенную память под ВМ.
	закрыть_ВМ (ВМ1);
	читз();
	вернуть 0;  
}	

В следующих двух файлах описана интерфейсная часть ВМ. То есть, какие функции доступны нам для использования ВМ.

vm.rh vm.r
Код:
#если_нет 	VM_H
#макрос	  	VM_H	
//===========================================================
// 	Файл:    vm.rh
// 	Версия:    1.00
// 	Дата:    17.06.2022
//	Описание:	Описание внешнего интерфейса виртуальной машины (ВМ)
//        доступ к внутренним структурам ВМ извне напрямую запрещен
//	Автор:
//===========================================================

тип структура ТВМ ТВМ;
 
// Внешний интерфейс управления виртуальной машиной
ТВМ* создать_ВМ();        // конструктор
пуст закрыть_ВМ(ТВМ* эта_ВМ);	// деструктор
пуст загрузить_ВМ(ТВМ* эта_ВМ, симв * старт_адрес, симв* стоп_адрес);	// загрузка программы в байт-кодах в ВМ
пуст старт_ВМ(ТВМ* эта_ВМ);    // запуск работы ВМ

 

#к_если    //VM_H

Код:
//===========================================================
// 	Файл:    vm.r
// 	Версия:    1.00
// 	Дата:    17.06.2022
//	Описание:	Реализация интерфейса виртуальной машины (ВМ)
//        доступ к внутренним структурам ВМ извне напрямую запрещен
//	Автор:
//===========================================================
#вставка    "library.h" 
#вставка	"vm.h"
#вставка	"vm_core.h"

// Конструктор виртуальной машины
ТВМ* создать_ВМ()
{
	ТВМ* врем = (ТВМ*) malloc (sizeof(ТВМ));
	/****начало тестового блока****/
	врем->имя[0] = 'V';
	врем->имя[1] = 'M';
	врем->имя[2] = '1';
	врем->имя[3] = '\n';
	врем->имя[4] = '\0';
	/****конец тестового блока****/
	вернуть врем;
}
// Деструктор виртуальной машины
пуст закрыть_ВМ(ТВМ* эта_ВМ)
{
	free(эта_ВМ);
}
// загрузка программы в байт-кодах в ВМ
пуст загрузить_ВМ(ТВМ* эта_ВМ, симв * старт_адрес, симв* стоп_адрес)
{
	эта_ВМ->РЕГИСТР_А = *((б64*) старт_адрес);
}	

//Запуск виртуальной машины
пуст старт_ВМ(ТВМ* эта_ВМ)
{
	/****начало тестового блока****/
	пчтф(эта_ВМ->имя);
	если (эта_ВМ->РЕГИСТР_А == 16"FFFF){
    пчтф16(L"Выполнена тестовая инструкция!\n");
	}
	/****конец тестового блока****/
}

А теперь начало реализации самой ВМ.

vm_core.rh
Код:
#если_нет 	VM_CORE_H
#макрос	  	VM_CORE_H	
//===========================================================
// 	Файл:    vm_core.rh
// 	Версия:    1.00
// 	Дата:    17.06.2022
//	Описание:	Описание внутреннего устройства виртуальной машины (ВМ)
//	Автор:
//===========================================================
#макрос РЕГИСТР_А регистры[0]
#макрос РЕГИСТР_Б регистры[1]
#макрос РЕГИСТР_В регистры[2]
#макрос РЕГИСТР_Г регистры[3]
#макрос РЕГИСТР_Д регистры[4]
#макрос РЕГИСТР_Е регистры[5]
#макрос РЕГИСТР_Ж регистры[6]
#макрос РЕГИСТР_З регистры[7]
#макрос РЕГИСТР_И регистры[8]
#макрос РЕГИСТР_К регистры[9]
#макрос РЕГИСТР_Л регистры[10]
#макрос РЕГИСТР_М регистры[11]
#макрос РЕГИСТР_Н регистры[12]
#макрос РЕГИСТР_О регистры[13]
#макрос РЕГИСТР_П регистры[14]
#макрос РЕГИСТР_Р регистры[15]

// Структура,описывающая виртуальную машину
структура ТВМ {
 	симв имя[10];
 	б64 регистры[16];
 	
 };

#к_если    //VM_CORE_H

0

2

Нужно инструкцию, как это компилировать. Правильно ли я понимаю, что для этого нужен exe-шник без исходников, который надо запускать в виртуальной машине, в которой запущен freedos?

0

3

Лис написал(а):

Нужно инструкцию, как это компилировать. Правильно ли я понимаю, что для этого нужен exe-шник без исходников, который надо запускать в виртуальной машине, в которой запущен freedos?

Есть четыре варианта. Длинный и правильный - мне позаниматься, сделать транспилятор для Линукса когда всё будет собираться, выложить весь пакет для тестирования. Покороче - могу выложить сишные файлы после трансляции, для самостоятельной сборки. Наверное, возможна кросс-компиляция: сразу под Линукс, но такого ни разу не делал. Ну, и возможно запускать в каком-нибудь эмуляторе виндовой консоли.

0

4

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

Для этого, наверное, мне нужна утилита Юрия, но я про неё читал давно, в мою систему она не интегрирована,
я даже не уверен, что она запускается на моей аппаратной платформе.

0

5

У Юрия выложены исходники утилиты, там в одном месте стоит #ifdef для сборки под Линукс. Но с тех пор я утилиту сильно переписал. Теперь она ещё "переводит" обратно из транслита сообщения компилятора. Без этого работать не комфортно.

0

6

Евгений написал(а):

У Юрия выложены исходники утилиты, там в одном месте стоит #ifdef для сборки под Линукс. Но с тех пор я утилиту сильно переписал. Теперь она ещё "переводит" обратно из транслита сообщения компилятора. Без этого работать не комфортно.

Значит тебе нужно:
1) выложить исходные тексты твоей версии утилиты
2) описать как она работает у тебя - под DOS, под Windows ?

Если под Windows, то можно попробовать запустить её в WINE.

0

7

Одна утилита не спасет. Она лишь маленькая шестеренка в механизме. Всем управляет make. Сначала запускает транспилятор, потом компилятор, раскладывает это все по папкам. Надо портировать весь "комбайн". Вряд ли имеет смысл тащить в WINE плюсом к утилите весь  MinGW. Исходники утилиты тоже на русском С, она собирает сама себя. Поэтому прыгнуть сразу на Линукс не получится. Я подумаю на досуге, как это провернуть...

0

8

Евгений написал(а):

Одна утилита не спасет. Она лишь маленькая шестеренка в механизме. Всем управляет make. Сначала запускает транспилятор, потом компилятор, раскладывает это все по папкам. Надо портировать весь "комбайн". Вряд ли имеет смысл тащить в WINE плюсом к утилите весь  MinGW. Исходники утилиты тоже на русском С, она собирает сама себя. Поэтому прыгнуть сразу на Линукс не получится. Я подумаю на досуге, как это провернуть...

Ты выложи сначала исходники, думать могут и другие разумные, которые лучше знакомы со своими системами.
И make у них и так есть, ничего с ним делать не надо (в том числе портировать).

Отредактировано Лис (2022-06-18 09:28:05)

0

9

Виртуальная машина Это наш сегодняшний проект. Екзешник утилиты лежит в папке utility. По некоторым причинам мне удобно было таскать его по проектам, а не положить рядом с компилятором. Проект с исходниками утилиты имеет точно такую же структуру папок и файлов. Выложу его чуть позже - зарыт где-то на другом компе.

0

10

Исходники утилиты GCC-ом собирается. Единственная зависимость лежит в файле for-win.rh. Вылизать код руки не дошли. Русские исходники в папке src_rus. После транспиляции кладутся в папку .src

0

11

Евгений написал(а):

Исходники утилиты GCC-ом собирается. Единственная зависимость лежит в файле for-win.rh. Вылизать код руки не дошли. Русские исходники в папке src_rus. После транспиляции кладутся в папку .src

Код не смотрел, но комментарий путаный.
1) что за "зависимость"?
2) для чего она нужна?
3) зачем русские исходники лежат в отдельной папке? (или это было просто для описания действия транспиляции, откуда и куда)
4) что надо запускать для сборки? (make -f Makefile ?)

5) какие есть гарантии лицензионной чистоты, не нарушу ли я права Юрия чтением этих текстов?

Отредактировано Лис (2022-06-18 12:03:42)

0

12

Зависимость от Windows. Чтобы определить из какой папки запускается утилита, в коде использована функция, привязанная к ОС Windows. В этом же файле, предложен вариант для Линукс. Попробовать его у меня возможности не было.
Сборка make all
Очистка make clean (может не работать, тогда нужно будет в Make file переписать команду и ключи для очистки папок)
Алгоритм работы такой: make просматривает всё файлы с расширением   . r. rh в папке src_rus. Всё эти файлы подвергаются транспиляции и транспилированные файлы с расширениями   . c. h кладутся в папку   . src. В проекте могут быть и родные сишные файлы в папке src_c, но этот вариант пока не рассматриваем.
После этого, файлы из папки  . src компилируются в   . obj. После этого собирается exe.

По поводу лицензионной чистоты... В частной переписке Юрий дал добро мне на любую модификацию и использование его утилиты. В настоящий момент код утилиты переписан мною процентов на 90%. Как я понял у Вас с Юрием сложные отношения... Если хотите, я могу задать ему прямой вопрос, считает ли он нарушением своих авторских прав, если мы воспользуемся моей модификацией утилиты, которая носит на этом форуме его имя, для решения общей задачи.

Отредактировано Евгений (2022-06-18 13:39:09)

0

13

В исходниках утилиты оказалось много "мусора" (остатки экспериментов) - вечером почищу.

0

14

Евгений написал(а):

код утилиты переписан мною процентов на 90%. ... Если хотите, я могу задать ему прямой вопрос, считает ли он нарушением своих авторских прав, если мы воспользуемся моей модификацией утилиты, которая носит на этом форуме его имя, для решения общей задачи.

Надо либо все права иметь в письменном виде (лицензия от Юрия для любых разумных и организаций), либо переписать 10% кода, который ещё не переписан.

Евгений написал(а):

Как я понял у Вас с Юрием сложные отношения...

Это независимо от отношений.

И от Вас лицензия нужна на переписанные 90% кода.

0

15

Лис написал(а):

И от Вас лицензия нужна на переписанные 90% кода.

Придётся Лису заниматься ликбезом, так как я в этом, как свинья в апельсинах...
А мнение Юрия я спрошу.

0

16

Евгений написал(а):

мнение Юрия я спрошу.

Мнение Юрия ничего не изменит. От Юрия нужен юридический документ, договор-оферта, наверное, который даёт право неопределённому кругу лиц.

https://habr.com/ru/company/pravo/blog/106346/

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

0

17

Вот ответ Юрия

0

18

Юрий написал(а):

Даю юридически обязывающий ответ:

Разрешаю Евгению Кирьянову безвозмездно использовать и модифицировать указанную утилиту, а так же передавать это право третьим лицам при условии, что эта утилита и проекты на её основе не будут использованы в ущерб мне и стране, в которой я проживаю. На имущественные авторские права не претендую, неимущественные же авторские права (право признаваться автором произведения или право авторства) оставляю на усмотрение и добрую волю пользователей утилиты.

Аминь.

Теперь можно сделать снимок этой страницу и нотариально его заверить или воспользоваться соответствующим сервисом в Интернете. Или дождаться, пока какой-нибудь архиватор Интернета (например, archive.org) не сделает снимок этой страницы.

Лис проверил, является ли он Евгением Кирьяновым. Проверка не прошла. Можно, конечно, поменять фамилию в паспорте, и имя, но оно того не сто́ит.
Кроме того, не указано, в какой стране проживает Юрий (вдруг там СССР или ещё какие заморочки).
Далее, поскольку права не передавались пока Евгением Кирьяновым, то пользоваться пока нельзя.
И наконец с определением "не в ущерб" тоже не всё однозначно. Лис дышит, потребляет кислород, и этим наносит ущерб Юрию (ему меньше достаётся).
Была уже лицензия "для целей добра" и там просили вторую "для целей зла". Можно ли с такой лицензией экспортировать производный софт во Вьетнам? А в КНДР?

Отредактировано Лис (2022-06-19 06:58:09)

0

19

Лис написал(а):

дышит, потребляет кислород

Какое отношение к этому имеет использование данной утилиты?

0

20

MihalNik написал(а):

Какое отношение к этому имеет использование данной утилиты?

Определение "во вред" "в ущерб" нечёткое. А задерживать дыхание во время использования утилиты Лис не будет.
Поскольку совершенно неясно, как ущерб определять, Лис на всякий случай откажется от использования утилиты.

В ситуации с КНДР всё полностью аналогично. Санкции ООН на них за что наложены? За то что живут и делают то, что считают нужным/правильным.
Причём Россия эти санкции ООН полностью выполняет. Чем Юрий хуже Путина?
Применит санкции к Лису, если это будет в его силах, тем более, что ранее он так уже неоднократно делал (вот за такое применение силы там, где этого можно было не делать, Лис Юрия и не любит).

Уткин почему с форума ушел? Мне кажется по аналогичной причине. Я ему оставил права писать только в его разделе (и делать новые топики везде). Ему не понравилось, что я к нему силу применяю.

У Павиа лицензия хорошая - можно использовать в учебных целях, нельзя в коммерческих. Всё понятно. Другими словами - почитать/позапускать можно, использовать (бесплатно) нельзя. Это если не хочется "счастья всем, бесплатно, даром".

Отредактировано Лис (2022-06-19 17:37:34)

0

21

Евгений внимательно прочитал последние сообщения и принял к сведению. Каким-либо образом изменить положение вещей он не может, поэтому и проявлять эмоции по этому поводу или делать другие телодвижения не считает нужным. Хотя официальных заявлений по поводу дальнейшей работы над проектом сделано не было, основываясь на своем опыте, Евгений видит, что основная ценность проекта в настоящий момент утрачена и перспективы продолжения туманные. Есть ли у Евгения предложение, как сохранить проект и соблюсти интересы участников: т.е. обеспечить для себя возможность вести разработку на русском языке,  и при этом избавить Лиса от необходимости использовать утилиту? Да, такое предложение есть. Если Лису будет интересно, то Евгений его озвучит.

0

22

Евгений написал(а):

изменить положение вещей он не может

Может переписать 10% оставшегося кода и зарелизить под более разрешающей лицензией.

Евгений написал(а):

делать другие телодвижения не считает нужным

Тут неясно, какие именно действия имеются в виду.

Евгений написал(а):

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

Неясно, почему утрачена.

Евгений написал(а):

Да, такое предложение есть. Если Лису будет интересно, то Евгений его озвучит.

Да, интересно.

Я вижу такой вариант:
Евгений продолжает делать, как делал, затем разворачивает решение на своём хостинге.
А Лис сможет присоединиться позднее, когда компилятор будет способен скомпилировать себя из исходных текстов без утилиты.

0

23

Лис написал(а):

Неясно, почему утрачена.

Для меня, в данный момент, цель объединения хотя бы минимальной команды для работы над общей задачей намного важнее, чем даже результаты этой работы. Суммарный потенциал нескольких человек, объединенных общим делом, всегда выше чем, потенциал тех же людей, работающих индивидуально.

Лис написал(а):

Да, интересно.

Чтобы скомпилировать исполняемый файл из русскоязычных исходников, можно обойтись и без утилиты. Достаточно в исходниках заменить русские ключевые слова на английские. С этим справится несложный скрипт на JS, а может даже sed. С русскими идентификаторами GCC прекрасно справляется. Написать такой скрипт будет проще, чем адаптировать утилиту под Линукс. Желательно, чтобы Лис проделал это сам, чтобы не возникла новая коллизия уже с лицензией на этот скрипт. Необходимую помощь в написании скрипта готов оказать, а также предоставить словарь замен.

Лис написал(а):

Может переписать 10% оставшегося кода и зарелизить под более разрешающей лицензией.
Тут неясно, какие именно действия имеются в виду.

Этим нужно будет когда-нибудь позаниматься, тем более накопились исправления, которые нужно внести. Но это не первоочередная задача.

0

24

Евгений написал(а):

Для меня, в данный момент, цель объединения хотя бы минимальной команды для работы над общей задачей намного важнее

Ну так достигай эту цель. Лис тебе никак не мешает и не останавливает.
Объявления размести, чем занимаешься, чтобы команду расширить.
Проработай путь добавления новых участников (путём написания документации).

0

25

> Для меня, в данный момент, цель объединения хотя бы минимальной команды для работы над общей задачей намного важнее, чем даже результаты этой работы.

Тут весь вопрос в том, что дел много (выбор проектов огромен), любителей программирования на русском языке немного, каждый из них хочет быть главным и зачастую имеет свой любимый проект, которому и посвящает свободные силы. Например, на этом форуме почти у всех такой проект есть. Вероятность, что оттенки вкусовых пристрастий совпадут - минимальны. Можешь попробовать начать с того, что выяснить, у кого какие проекты уже есть и присоединиться к существующему, т.е. уступить во вкусовых пристрастиях. Это и будет команда из двух человек, если ты хочешь именно команду. Конкретно в этой аудитории сейчас человека три осталось, здесь даже и проекты особо нет смысла искать.

Если же хочешь именно свой проект, то нужно:

* осознать, что продвижение русского языка - это не то же, что "получать удовольствия от программирования на русском" и определиться, что из этого тебе нужно
* составить многоэтапный план действий для будущей команды, и вариант для команды, состоящей из тебя одного (если никто не присоединится и работа в одиночку приемлема)
* опубликовать его
* сделать наработки доступными (Лис задал хороший вопрос про то, как он мог бы воспроизвести твои достижения)
* активно искать аудиторию

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

вече.программирование-по-русски.рф/viewtopic.php?f=2&t=16

Те, кто уже использует русский в программировании - это наши потенциальные соратники. В данном проекте есть некий задел. Правда, сейчас могут помешать санкции, т.к. нужен доступ к платным базам (не думаю, что это дорого).

В теме есть неплохой задел и рассмотрены разные направления развития.

Это будет этап 1, после завершения которого у тебя (и у всех нас) может появиться больше потенциальных помощников в твоих задачах.

Отредактировано БудДен (2022-06-21 12:12:19)

0

26

Касаемо ключевых слов - есть куча лексеров языка Си, такую утилиту можно написать на любом из них. Единственное, что есть всякие тёмные углы. Например, можно написать

Код:
#define int long
#define MyInt(size) int ## size
int32 MyInt32

Не факт, что замена int на цел в таком коде закончится добром. Особенно, если часть кода находится в системных заголовочниках, которые
ты не трогаешь. Это, как минимум, нужно продумать.

Что касается лично меня, то у меня есть такая картинка, из-за которой я по доброй воле направление Си не планирую развивать никогда.
Поэтому к твоим проектам, связанным с любым улучшением Си, никогда не присоединюсь. Однако такая точка зрения на этот вопрос, как у меня, встречается крайне редко. Э, а что, вложений нельзя что ли?

Отредактировано БудДен (2022-06-21 11:55:21)

0

27

https://forumupload.ru/uploads/0018/41/1a/13/t93043.png

Предварительный просмотр мутный, надо нажать на картинку и она откроется в хорошем качестве. Вместо Си можно взять, к примеру, тот же Оберон (думаю, 38% снизятся сразу до 8%), или Эль-76 (если вообще получится переписать, то снизятся до 0)

Отредактировано БудДен (2022-06-21 11:58:31)

0

28

БудДен написал(а):

надо нажать на картинку и она откроется в хорошем качестве.

Под цифрой 8 уязвимость называется "Иное".
Хорошо, что не "Инопланетное" :)

0

29

БудДен написал(а):

* составить многоэтапный план действий для будущей команды,
и вариант для команды, состоящей из тебя одного
(если никто не присоединится и работа в одиночку приемлема)

Мне кажется, что этот пункт как раз увеличивает монархичность и
диктатуру родоначальника какого-то ЯП (даже не обязательно русского).

Лично у меня намётан план действий по доработкам РЯП.
По сути это последовательный список доработок,
отсортированный по убыванию значимости (по отодвиганию момента начала реализации).
НО я постоянно меняю пункты в этом списке :)
И, что может быть самое главное,
мои фактические доработки интерпретатора РЯП
могут сильно (но не кардинально) отличаться от последовательности пунктов.

Это я к тому, что ну накрест (нахер)
эту бюрократию!
Пусть мысли текут спокойно,
и пусть фантазия ограничивается только лишь черепной коробкой создателя ЯП!

И я разрабатываю Русский Язык Программирования,
потому что я с рождения носитель русского языка программирования.
В этом смысле я разработчик РОДНОГО языка программирования.
Был бы я британцем, то, скорее всего, пользовал бы английский язык.
А был бы индийцом, тогда бы может быть не хинди пользовал, а санскрит.
Просто сейчас по аналогии я пока не готов полностью перейти на глаголицу :)

0

30

БудДен написал(а):

Вместо Си можно взять, к примеру, тот же Оберон (думаю, 38% снизятся сразу до 8%), или Эль-76 (если вообще получится переписать, то снизятся до 0)

Ну так-то и в транспиляторе поверх Cей это несложно закрыть.

0


Вы здесь » ПО, ЭВМ и АСУ из Таможенного Союза » Проект "Виртуальные машины" » Первая реализация. Исходники.