Войти
ФлеймФорумЖелезо

Мой виртуальный 16-битный процессор Simpleton (2 стр)

Страницы: 1 2 3 4 Следующая »
#15
16:08, 27 дек. 2019

=A=L=X=
Добро пожаловать в "теплый и уютный" )


#16
16:12, 27 дек. 2019

=A=L=X=
Будет ли принципиальная разница:

var a: int*;
и
var a: int[10];
?
#17
16:34, 27 дек. 2019

nes
Тут речь в основном даже не в теплоте, а в том как уместится в 128 кб.
Но по теплому. :)

#18
(Правка: 16:37) 16:36, 27 дек. 2019

nes
Для простоты типы массивы всегда должны содержать размер, безразмерные массивы ненужны в типах ибо просто синоним указателя.
но вот имея переменную типа массив на руках конверсия в указатель на первый элемент - супер.

#19
17:20, 27 дек. 2019

=A=L=X=
> Тут надо заметить, что в объявлении типов скобки разворачиваются сразу в
> указатель на функцию, которая возвращает в качестве результата тип объявленный
> левее, т.е. не надо для функций (в отличие от массивов) вставлять явный * для
> декларирования - ибо оно тут лишено смысла изначально всегда было.
В Си там своя красота есть - там всё что есть считается частнымм случаями единого синтаксиса декларации.

+ Показать

И указатель на функцию != функции; точно так же, как и указатель != массив.
#20
17:24, 27 дек. 2019

kipar
> Вряд ли он уложится в 64кб памяти. ну и портирование стдлибы с файлами,
> тредами, сигналами, плавающей точкой и прочим весельем тоже не выглядит простым
> занятием.
На счёт 64 кб не знаю, но вот в необходимости ++11-стдлибы я сильно сомневаюсь.

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

#21
17:46, 27 дек. 2019

А почему виртуальный? Запилил бы его на Verilog, ежели вещь стоящая, народ заценит.

#22
18:18, 27 дек. 2019

Delfigamer
> typedef void(*pfnDeletePoint)(Point**);
В SimpL это будет:
type void(Point **) pfnDeletePooint;
На мой взгляд прям намного логиченее и понятнее.

#23
18:19, 27 дек. 2019

Ghost2
> А почему виртуальный? Запилил бы его на Verilog, ежели вещь стоящая, народ
> заценит.

Неужели виртуальный процессор Java на Verilog уже покорил тебя и всю вселенную?
Где как и когда??

#24
19:39, 27 дек. 2019

=A=L=X=

Да я без сарказма. Посмотрел исходник твой, это хорошо ляжет на HDL.

> Неужели виртуальный процессор Java на Verilog уже покорил тебя и всю вселенную?
Ты про Jazelle?

#25
3:39, 28 дек. 2019

Ghost2

Я в железе плохо разбираюсь, поэтому на реализацию в железе потребуется слишком много сил, а пока на это хобби сил вообще практически нет.
Как я выше писал, возможно реализую в железе когда нибудь на пенсии, но к тому времени возможно уже будет что там запускать за счёт виртуальной машины и программ для неё. :D
А насчёт популярности - не очень понятно зачем оно вообще может быть сегодня популярным - реальных микроконтроллеров гора и тележка и FPGA им проиграет по цене только в путь.

#26
(Правка: 6:45) 5:08, 28 дек. 2019

Delfigamer
> И указатель на функцию != функции; точно так же, как и указатель != массив.

Массив и указатель на массив это и у меня разные вещи, ибо функция может вернуть указатель на массив, но вернуть массив - нет.
Но типа "функция" у меня просто нет, т.к. он не имеет никакого смысла в системе типов - имеет смысл только указатель на функцию.
Поэтому в Си возможны такие приколы: https://ideone.com/cGeo4B

void func()
{
  std::cout << "Hello!\n";
}
 
int main() {
  void (*ptr)() = &func;
  (****&**************&*&**********************&*ptr)(); // абсолютли акей
  return 0;
}
Я хочу эту воду вылить из тазика еще на этапе проектирования.
void() ptr = func;
ptr(); // ok
(*ptr)(); // error: there is nothing to dereference
Технически это можно трактовать как то, что в SimpL тип функции это указатель на адрес где начинается код функции как таковой, т.е. функции как value это изначально адреса, что в общем то весьма хорошо соответствует ассемблерной природе вещей.

#27
7:29, 28 дек. 2019

=A=L=X=
> Технически это можно трактовать как то, что в SimpL тип функции это указатель
> на адрес где начинается код функции как таковой, т.е. функции как value это
> изначально адреса, что в общем то весьма хорошо соответствует ассемблерной
> природе вещей.
Не то, чтобы я рекомендовал так делать, но для общего обзора покажу.

+ Показать
#28
8:02, 28 дек. 2019

Delfigamer
> В CellOS/PowerPC (на которой работает третья плойка), "функция" состоит из двух
> компонентов - кода и контекста.

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

#29
(Правка: 8:10) 8:08, 28 дек. 2019

=A=L=X=
Через r2 код обращается к статическим переменным, а свой "r2-блок" аллоцируется на каждую загруженную дллку. Получается PIC по данным. А загружать через Current Instruction Address PPC не умеет, там по спекам cia и nia вообще за регистры не считаются. Как-то так.

Страницы: 1 2 3 4 Следующая »
ФлеймФорумЖелезо