Обновить
14
-1.3
Дмитрий Гарбузов@SystemSoft

Просто разработчик

Отправить сообщение

Всем привет!

Тема поста про мою ОС.

Так как я считаю что зациклился на ядре и ФС, я вспомнил о графике.

Как вообще будет выглядеть ОС?

Не как Windows 11 или другие до Windows 3.1, не как System 1.0 - Mac OS 9.2.2.

И не как Mac OS X (или macOS).

Будет выглядеть как NeXTSTEP.

Как будет отображаться изображение на экране?

Вот так (номер: что отображается):

  1. Сам экран ОС: Тут иконки, док и всякие меню.

  2. Экран диалогов: здесь маленькие диалоговые окна с вводом и какой то информацией

  3. Экран рабочего окна (или окон): здесь отображается рабочая задача.

  4. Остальные окна: они тут так, по приколу, ведь им всего по 20 мс уделяется.

Вот такая графика. Как я реализую? Две библиотеки: где просто работа с самим экраном. И там где уже работа идёт как в фреймворке (кнопки и окна: все будет там).

Удачи!

UPD: минусовая за "другое". Так ещё и без комментариев, то это называется личная неприятность (если это один и тот же чел меня минусовал на двух постах). Прошу определится и минусовать за личную неприятность.

Теги:
-2
Комментарии3

Всем привет!

В прошлом посту я говорил что всё ещё пишу ОС и не забросил проект.

Да, так.

Так же я рассказал в том посту что я добавил много технологий чего нового.

Так вот.

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

Что это? Нет не mov. Я реализовал системные вызовы.

Пока что их 13.

Вот их список (в виде "номер: значение вызова"):

  1. Cказать сообщение от ядра.

  2. Записать в файл (или создать если нету).

  3. Прочитать содержимое папки.

  4. Поменять рабочую папку.

  5. Вернуть рабочую папку.

  6. Создать папку.

  7. Удалить папку.

  8. Удалить файл.

  9. Проверить: это папка?

  10. Проверить: это файл?

  11. Вывести содержимое файла.

  12. Сохранить содержимое файловой системы в файл.

  13. Вывести сообщение (любое).

Вот так получилось!

Удачи!

Теги:
0
Комментарии3

Всем привет!

Я пишу свою ОС, уже давно, на MicroPython.

Я снял свои посты потому что во первых они мне просто не понравились. Во вторых же, я перешёл на TFT LCD.

Да, если что я не забросил😅.

А какие продвижения были за это время?

  • Нормальная файловая система (mkdir, rmdir, права доступа и ещё много чего).

  • Вытесняющая многозадачность.

  • Режимы доступа (user, system).

Ну это возможно не всё, но это главное.

Ставлю день конца работы на... Ну лучше всего 24 января (не простая дата) но возможно затянется до конца февраля... Тогда прямо точно ставлю на апрель.

Также напомню что ОС будет на девайсе Raspberry Pi Pico W

Удачи!

Теги:
+4
Комментарии2

Всем привет👋. Давно не писал на Хабре (не бойтесь, я не писал на другом форуме).

Как вы возможно знаете (нет) что я всегда жалуюсь что привычной 4x4 клавиатуры не достаточно для нормальных проектов помимо светодиодов.

Да, я думаю так и есть. Но потом я сделал раскладки. Было прикольно, но неудобно.

Потом спустя месяцев 3-4 (наверно много) я додумал как это сделать.

Это сделать легко.

Учитывая что можно делать на дисплее SSD1306 (ой, это просто контроллер дисплеев) я решил сделать кнопки. Делал я их уже много но для клавиатуры случаев не было. И в итоге я сделал что-то по типу кнопочной клавиатуры как на телефоне. Управляется такой раскладкой:

  1, 2, 3, вверх.
  4, 5, 6, влево.
  7, 8, 9, вправо.
  Ввод (enter), 0, выбрать, вниз.

Да, и ещё как это выглядит на Wokwi:

Красиво? Наверно да...
Красиво? Наверно да...

Код выпущу когда сделаю его красивее.

Если хотите могу выпустить версию которая сейчас.

И ещё: "<" - это backspace и раскладка чуть-чуть другая.

Удачи👋.

Теги:
Всего голосов 8: ↑6 и ↓2+8
Комментарии0

Всем привет!

Как вы помните: я говорил что хочу сделать свою лисп машину.

Проект не удался из-за корпуса и проводов. Но после этого я взялся делать микрокомпьютер на графической операционной системе.

Этот проект уже получился.

Сейчас решил всё усложнить и сделал ассемблер машину.

Ввод и вывод желают оставлять всего лучшего потому что ввод идёт с помощью двух кнопок (на самом деле limit switch это называют). А эти две кнопки это 0 и 1.

Результат программы не выводится но отображается в светодиодах:

  1. Зеленый - всё правильно.

  2. Желтый - правильно но с ошибками.

  3. Красный - не правильно.

Назвал я первую ассемблер машину как "pear 8800". Почему именно груша? Во первых я люблю груши :-). Во вторых мне нравится везде ставить название "pear" и дальше что-то.

Но можно вводить код по типу такого (не один не скомпилирует ведь мой это интерпретатор но на самом деле это не так):

section .data
hello: 1
section .code
mov ret hello

Вывод: 1.

3 регистра: rsi и rdi для данных и ret для данных которые возвращает программа.

Вот так.

Теги:
Всего голосов 2: ↑2 и ↓0+2
Комментарии0

Всем привет.

Хочу вам рассказать о том что я делаю LISP машину на Raspberry Pi Pico W.

Изначально я хочу сделать её похожую на эту:

Вот такой.
Вот такой.

Конечно не такой, но по виду схожую.

Я ещё называю это холодильником.

И. На данный момент я сделал аппаратную часть и перехожу к программной.

Дальше сделаю корпус и всё.

Скажу когда сделаю.

Удачи.

Теги:
Всего голосов 10: ↑9 и ↓1+10
Комментарии2

Всем привет!

Представляю вам мой новый проект: Terpinal.

Также я называл его "терпи нал".

Это терминальная операционная система для Raspberry Pi Pico. Который выводит на SSD1306.

Вот ссылка:

https://github.com/SystemSoftware2/Terpinal

Прочитайте README.md и узнайте что и как подключить.

Также я называю операционку как PicoOS Firmware (не знаю почему так).

Теги:
Всего голосов 1: ↑0 и ↓1-1
Комментарии3

Я доделал компилятор C на Python.

Баги всё ещё есть но их намного меньше

Его я назвал pycc.

Если хотите попробовать, вот гитхаб: https://github.com/SystemSoftware2/pycc

Всё остальное смотрите там.

[UPD]: А за что минусуете?

Теги:
Всего голосов 7: ↑6 и ↓1+6
Комментарии2

Всем привет.

Как вы знаете я пишу компилятор C на Python.

Сегодня я исправил баг с типизацией, который случайно нашёл когда делал ошибки.

Вот этот отрывок: void main() { int x = "h"; } обрабатывался как правильный синтатикс. Теперь нет.

И я добавил цикл do-while. Правда в нём есть проблема: в конце если выражения = false то он ещё раз выполняет и потом останавливает цикл do-while. Ну, пока что так.

Пример цикла do-while:

void main() {
  int a = 10;
  do {
    a = a + 1;
  } while (a > 2);
}

Только вывод не то что "a" это 1 а 0. Правда, сил нету добавлять ненужные части кода для исправления.

Ну. Хотя бы работает как то. А то когда в первый раз делал этот цикл то вообще нечего не работало.

Всем пока.

Теги:
Всего голосов 4: ↑3 и ↓1+3
Комментарии0

Снова всем привет. В прошлом посту я писал о том что пишу компилятор C (на Python).

Вчера я добавил функции, вот пример программы вычисления факториала с функциями:

void fac(n) {
  int f = 1;
  while (n > 1) {
    f = f * n;
    n = n - 1;
  }
}

void main() {
  fac(5);
}

Что можно заметить нового и чего нету:

  • Функция main стала обязательной

  • Не обрабатывается тип данных у аргументов (не везде)

  • Все переменные и параметры - глобальные

  • Оператора return не существует

  • Функции объявляются только с помощью void

Вот как компилятор создаёт функции:

  1. Добавляет в словарь self.funcs данные о функции

  2. Когда видит вызов функции то компилирует код функции но перед компиляцией создаёт переменные со значениями аргументов

Получается мы не заставляем виртуальную машину работать с функциями ВООБЩЕ.

Но и в этом есть свой минус: return сделать будет невозможно.

Самым сложным это сделать нормальный парсер для этого чуда.

Из-за этого я испортил код парсера. Главное работает 😅.

Всем пока.

Теги:
Всего голосов 2: ↑2 и ↓0+2
Комментарии0

Всем привет.

Сегодня на данный момент я пишу компилятор C в байткод.

Вы скажете: но C же в машинный код компилируется? В моём случае нет. Лишь в байткод.

Вот правила которые мой C поддерживает:

  • цикл do-while, цикл while, условие if-else, цикл for (возможно)

  • Из операций: +, -, /, *, ==, !=, <, >

  • Декларация переменных только с инициализацией (не int x;) а (int x = 5;)

  • Присваивание (типо a = a + 1;) можно при созданной переменной

  • Из типов данных только два: int, char

  • Функции не обещаю но возможно будут

А то что уже есть:

  • if-else, while

  • Декларация переменных

  • Присваивание переменных

  • Все типы данных

  • Все операции

Сделать факториал уже можно. Вот пример факториала 5:

int n = 5;
int f = 1;
while (n > 1) {
  f = f * n;
  n = n - 1;
}

Вывод:

Execution finished
n: 0
f: 120

Вот как он работает:

  • С помощью регулярок лексер получает нужный токен и тег

  • Парсер строит AST

  • Компилятор делает байткод

  • Виртуальная машина выполняет его

Вот так всё работает.

Все инструкции байткода (на данный момент):

FETCH переменная - положить на стек значение переменной
PUSH число - положить на стек число
POP - я не помню зачем это ведь это не нужно будет нам
ADD, SUB, MUL, DIV - бинарные операции
NOTEQ, EQ, LT, GT - реляционные операции
JMP адрес - перейти по адресу
JNZ адрес - перейти по адресу если на вершине стека не 0
JZ адрес - перейти по адресу если на вершине стека 0
PASS - игнорировать
STORE имя - сделать переменную если она есть и её тип данных
      соответствует типу данных значения
TSTORE имя - декларация переменной
HALT - конец программы

Вот так. На данный момент в проекте где-то 400 строчек кода но это с комментариями и всеми пустыми строками.

Конец. Всем пока.

Теги:
Всего голосов 3: ↑3 и ↓0+4
Комментарии1

Информация

В рейтинге
Не участвует
Откуда
Адыгейск, Адыгея, Россия
Зарегистрирован
Активность

Специализация

Десктоп разработчик
Python
Компиляторы
Системное программирование
C
Объектно-ориентированное проектирование