Обновить
15
0.3
Дмитрий Гарбузов @SystemSoft

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

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

Всем привет. Это третья часть когда я делаю ОС на E-Ink экране.

Значит так:

  1. Я переделал ядро. Полностью.

  2. Мне пришёл e-ink экран.

Что по поводу ядра? Ну, оно работает, оно вроде красиво выглядит.

Главная тема про e-ink:

Мне пришёл 3.97 дюйма (G) Waveshare.

Честно я не понимаю почему он не работает.

Так как библиотеки для моего дисплея я не нашёл, то я решил установить на 7.5 ведь это единственная библиотека где разрешение 800 на 480 пикселей.

Она не выводит нечего. Просто падает (из-за того что видите ли что bytearray не поддерживает 800 на 480 (при делении на 8)).

Другие библиотеки: он выводит какую то абракадабру:

  1. Куча точек всех цветов

  2. Две большие линии которые меняют цвет

  3. Между ними белая линия большая (не меняет цвет)

Подключено верно, но не работает. Помогите пожалуйста.

Да, и это всё на MicroPython (сборка под Rapsberry Pi Pico W).

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

Пишу операционную систему для устройства на E-Ink, часть 2.

Всем привет! Сегодня я продолжаю писать операционную систему для своего "смартфона" (назвал потому что прикольно звучит).

Сегодня мало чего сделал, обновил ядро для "многозадачности" (листать задачи можно).

Также сделал штуку, которая запускает все приложения, но в будущем будет планировать задачи (планировщик задач, верно?).

Пока ещё не получил три кнопки и дисплей хочу сделать ядро.

В принципе первая версия будет простой, предсказуемой, почти стабильной и мало функциональной.

Удачи!

Теги:
-1
Комментарии6

Пишу операционную систему для устройства на E-Ink, часть 1.

Всем привет! В своей первой новости (не буду оставлять ссылку) я говорил про некую читалку. Да, проект прикольный, но я собираюсь сделать такое же устройство только с 4.2 дюймовым таким дисплеем и 3 кнопками (влево, выбрать, вправо).

Проект будет на Raspberry Pi Pico W.

Сегодня я сделал библиотеки, нужную структуры (мне будет всё равно на то, что в конечном итоге останется 10 бит памяти) и сделал небольшое ядро.

Выглядит плохо, но старался. Короче сделав небольшое ядро, я почувствовал эту мощь правильной структуры. Когда сделал 100 строк, и тебе остается добавить по 10 в двух файлах, что бы все вызовы 100-го файла были вызваны.

Также все приложения будут написаны на Python.

Много чего ещё осталось сделать, но база уже есть.

Удачи.

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

Всем привет👋. Сегодня хочу рассказать новость: я начинаю свой новый проект который я ещё не назвал но название будет типа Pear PDA. Коротко говоря, это что-то типа устройства Palm III (НЕ РЕКЛАМА).

Будет на кнопках и на e-ink дисплее. У меня ещё нечего нету для сборки но если у вас имеется e-ink дисплея или какие ни будь кнопки то вы можете принять участие.

Если захотите что-то добавить то вот ссылка:

SystemSoftware2/Pear-PDA

Это не рекламный пост. Просто хочу донести до вас свои мысли.

Да, и если у вас есть идеи прошу разлагать их где ни будь (в комментариях к примеру).

Забыл написать: всё будет на MicroPython.

Удачи!

Теги:
-4
Комментарии13

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

Как вы возможно знаете (нет) что я всегда жалуюсь что привычной 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

Информация

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

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

Software Developer
Python
Compilers
System Programming
C
Object-oriented design