RccHD
-
Публикации
142 -
Зарегистрирован
-
Посещение
-
Победитель дней
13
Сообщения, опубликованные пользователем RccHD
-
-
Наконец-то смог запустить TTY в виртуальном окружении!

Теперь можно сделать полноценные терминалы ( скопировать исходники из OpenOS )-
3
-
-
Кстати, как там с поглощением эвентов?
Два моих приложения висят на модеме, и слушают эвенты. Приложение А поймало modem_message. Поймает ли этот же мессадж приложение Б?
Или оно окажется поглощено приложением А?
Не знаю, приду домой -- проверю.
Вообще вроде бы все приложения уловят ивент(вспомни пример, когда я управлял сразу двумя змейками)
Если это работает для key_down, то и для модема сработает, я думаю
-
3
-
-
как то так?
Ну вроде должно работать правильно. Я пока не могу это с компа запустить и потестить
-
Я заменяю component.proxy, component.invoke, component.setPrimary, component.getPrimary, component.list
-
Тут еще можно подумать о виртуальных компонентах, т.к. некоторые приложения не нуждаются в монопольном доступе к компонентам.
...
Да, нужно разделять компоненты на 3 типа.
1) компонент, к которому нельзя получить прямой доступ ( только gpu ). Вместо gpu надо вернуть gpuProxy(уже реализован)
2) компонент, который можно поделить между несколькими приложениями
3) компонент, который не может быть использован сразу несколькими приложениями
-
Эти функции будут вызываться приложением или системой?Хороший вопрос
Их будет вызывать специальный распределитель компонент, т.е. система
-
ААААААААААААААААААААААААААААААААААААААА!!!!!!!!!!
Как же оказывается сложно писать свою ОС
Очень много приходится проектировать.
80% времени проектирую, 20% времени пишу код-
1
-
-
Ты хочешь строго разделять - кто пользуется конкретным компонентом?
Не обязательно. Главное, чтобы была возможность разрешения коллизий и распределения компонент между окнами
-
Нужно написать функции getComponent и freeComponent, которые будут разрешать коллизии компонент. ( когда два окна требуют одну и ту же компоненту )
Функции должны распределять компоненты одинакового типа между окнами. Например если есть 2 редстоун-адаптера и 2 окна потребовали компонент "redstone", то каждое окно должно получить свой редстоун-адаптер
local getComponent = function(window, componentType, componentAddress) --[[ window - это окно, которое потребовало компоненту componentType - тип компоненты ( игнорировать GPU ) componentAddress - адрес требуемой компоненты ]] return componentProxy end local freeComponent = function(componentAddress) -- пометить компонент <componentAddress> как незанятый return nil end -
Не, это на основе Material Design Lite от Google. Через либу elm-mdl.
Material Design как раз используется в полимере
-
-
Нормальные программы не должны слушать этот эвент, а должны просто перерисовываться используя значения размера окна.
Если некоторые программы не будут перерисовываться, их можно будет вручную рестартнуть нажав Ctrl+R
-
В классических тайловых менеджерах разрешают.
Да и вообще, если какая-то программа закрывается - то остальные автоматом ресайзятся, чтобы занять экран полностью.
Да, но такие программы должны слушать событие "screen_resized", чтобы сразу обновить свои переменные в соответствии с новым размером окна.
Поэтому я добавлю возможность ручного перезапуска (ctrl + R) для таких программ, которые не адаптированы под изменяющийся размер окна.
-
1
-
-
Вот например интересно, давать ли возможность юзеру изменять размер окна?
При каждом изменении окна придется перерисовывать графику приложения. А в некоторых случаях придется перезапускать приложение, которое запущено в этом окне.
Вот например если есть такой код, то придется перезапустить приложение, чтобы переменные соответствовали размеру окна:
local w, h = require("component").getPrimary("gpu").getResolution() -
Пока что решил взять перерыв в кодинге. Пару дней не буду ничего программировать и т.д.
Так что давайте пока обсудим идеи новых фич в эту ОС
Пишите свои предложения -
Запусти шелл в одном своих окон.
Я уже писал, что это проблематично...
-
Какие файлы OpenOS были изменены? Я не понял, как извлечь эту информацию из репозитория, а просматривать все файлы в поисках изменений выше моих сил.Никакие файлы не были изменены. Мои версии некоторых системных компонент лежат в папке lib/proxy
-
Вот исходники.
https://github.com/RccHD/WinOS/tree/master/WinOS/dd243563-b2e6-4ba8-8c28-28ca278f0402/home
Скопировать в таком виде в папку /home. Реализовано примерно 50% необходимого функционала.
Все оптимизировать буду после того, как будет готов хоть немного доработанный вариант.
Рабочий скрипт: test1.lua(змейка, матрица и проч.)
Нерабочий -- test.lua(использует term, tty)
Чтобы закрыть программу нужно нажать backspace. Помогает не всегда
-
1
-
-
Не нужно ничего придумывать, т.к. автор мода все уже сделал для нас.
Вне майна есть множество программ для обучения программированию по типу 'черепаха'(я сам с таких программ начинал изучать программирование). Во время обучения ученик должен отдавать черепахе команды 'вперед 200; влево 90; вперед 200' и черепаха будет двигаться!
В моде opencomputers есть роботы, которые по своей сути, не сложнее 'черепахи'. Есть все те же команды 'вперед, влево, вправо и т.д.'
Если хочется, чтобы игроки(новички) начали программировать, нужно научить их программировать роботов. Нужно больше топиков "как управлять роботами", "как заставить робота копать шахту" и т.д.
Если игрок не умеет мыслить алгоритмами и у него не получается программировать робота, значит этот мод он вряд ли освоит
-
1
-
-
Вот же проблемка.
Стандартный term и tty реализованы так, что никакими усилиями не получается встиснуть их в gpu эмулированную через буффер
-
Решил еще добавить возможность ставить приложения на паузу(coroutine позволяют и такое делать)
Кроме того, что любую программу можно поставить на паузу, можно будет еще 'выключать графику' этой программы
Пример использования: запустил 4 программы сразу и комп начал лагать. Взял и вырубил всем 4 программам графику, при этом все неграфические процессы продолжат работу. И все ок, комп перестанет лагать. Так как именно операции с графикой обычно тормозят систему
Какие могут быть подводные камни?
-
Вот это мне нравится. Человек задумал - человек запилил. =)
А то наплодят 100500 тем, а толку - нуль. Ни одного завалящего скриншотика.
Просто пока у меня есть этот энтузиазм я могу запилить что угодно хоть за пару дней. Постараюсь побыстрее закончить ОС пока не пропал настрой
-
2
-
-
Решил еще добавить возможность ставить приложения на паузу(coroutine позволяют и такое делать)
Кроме того, что любую программу можно поставить на паузу, можно будет еще 'выключать графику' этой программы
Пример использования: запустил 4 программы сразу и комп начал лагать. Взял и вырубил всем 4 программам графику, при этом все неграфические процессы продолжат работу. И все ок, комп перестанет лагать. Так как именно операции с графикой обычно тормозят систему
-
3
-
-
@@RccHD, делай конфиг на Lua и переключение кнопками.Да!!! Ты написал именно то, чем я сейчас занимаюсь. Будет офигенный кастомизируемый оконный менеджер. Можно будет свои сочетания клавиш регистрировать


Разработка новой операционной системы. WinOS.
в Операционные системы
Опубликовано: · Изменено пользователем RccHD
2) Боюсь, может не хватить 2мб оперативки на все это, но я попробую
3) нет такой возможности
4) будет в стандартной реализации оконного менеджера ( настройка через конфиг )
5) да, но на счет шапок не уверен... На маленьких экранах можно будет выключить шапку
6) будет в стандартной реализации оконного менеджера ( настройка через конфиг )
7) не уверен
8) наверное
9) наверное
10) перетаскивание не буду делать, т.к. у нас маленькие экраны и МАЛО оперативки.
Поддержки нескольких мониторов наверное не будет, т.к. для операций с gpu у меня используется двойная буфферизация и на несколько рабочих столов/экранов не хватит ОЗУ
Изначально я хотел написать оконный менеджер и все. Но как только я начал, стало понятно, что нужно делать еще виртуальную среду для каждого окна, кастомные обработчики событий, подмена _ENV, подмена require и loadfile, подмена event, component, component.gpu и много еще всегоТо, что я делаю можно назвать "почти ОС" или "надстройка над OpenOS"