KeyTwoZero 15 Опубликовано: 16 мая, 2022 (изменено) Приветствую вас. Этот пост я пишу, чтобы рассказать вам о своей разработке для мода OpenComputers: BetterBIOS Это специальная прошивка BIOS для EEPROM, позволяющая выбирать любое из подключенных устройств для загрузки. Для этого используется пользовательский псевдографический интерфейс, который поддерживается на всех уровнях видеокарт и экранов. Так же, в этой прошивке есть своя система отображения ошибок, показывающая весь "traceback" за исключением не нужных пунктов внутри самой прошивки. Это будет очень полезно для разработчиков собственных операционных систем, ведь данная прошивка подскажет места, в которых возникла ошибка, в то время как стандартная прошивка молчит как партизан. UPD. Начиная с версии 4, код ошибок можно пролистывать: Если доступных для загрузки устройств больше, чем одно - то при включении компьютера, пользователю предлагается выбрать одно из них. Если такое устройство только одно - загрузка начнётся незамедлительно. Подключение устройств для загрузки происходит динамически, "на лету", прямо во время выбора устройства. Так же, данная прошивка имеет приоритеты на выбор экрана: первым делом она пытается подключить тот экран, у которого есть клавиатуры поблизости. Если таковых не имеется - использует любой другой. Видеокарту прошивка использует максимального уровня. Прошивка защищена от критических сбоев при резком извлечении устройств, пока программа работает с файлами на них. Это делает данную прошивку практически не убиваемой, и позволяет избегать любых несчастных случаев при работе с компьютером. Я просто параноик, иначе сделать не мог... Данная прошивка поддерживает большое количество разных операционных систем, использующих разные файлы для загрузки: OpenOS Plank9 MineOS Работает это за счёт списка файлов, которые ищет прошивка. Вы можете добавить свои файлы, вписав их в переменную в начале файла. Ну или можете оставить комментарий под этой темой, с просьбой, какой файл стоит ещё добавить. Забавный факт: Если таких файлов будет очень много, то посмотрев их список нажатием клавиши F8 при выборе устройства - вы можете пролистывать список. Так же, если вы хотите, чтобы прошивка при запуске не перезаписывала данные EEPROM (setData), и не мусорила в оперативной памяти рудиментарными функциями типа "computer.getBootAdress", которые нужны для OpenOS - вы можете отключить всё это дело в меню через клавиши. А если вам не хочется каждый раз их нажимать - то просто измените комментарий в конце кода с 11 на 10 или 00. Несмотря на весь этот функционал и продуманность, в минимизированном виде данная прошивка помещается на EEPROM, стандартная ёмкость которого - 4096 символов. К сожалению, код не очень хорошо читаемый, но это обусловлено тем, что я писал заранее с расчётом на то, что подробный код будет минимизирован, а для них нужно ещё и грамотно написать код, который, увы - сложно читается. Исходный код данной прошивки вы можете посмотреть здесь. Спасибо за внимание. Если у вас есть какие-то идеи, как можно улучшить или ухудшить данную прошивку - пишите здесь, или как-нибудь вычислите меня, постараюсь подумать, и может быть, даже обновлю код, сделав его лучше для вас. Изменено 7 июля, 2022 пользователем KeyTwoZero Глоабльное обновление (Версия 4) 12 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
logic 51 Опубликовано: 26 июня, 2022 В 16.05.2022 в 14:11, KeyTwoZero сказал: Приветствую вас. Этот пост я пишу, чтобы рассказать вам о своей разработке для мода OpenComputers: BetterBIOS Это специальная прошивка BIOS для EEPROM, позволяющая выбирать любое из подключенных устройств для загрузки. Для этого используется пользовательский псевдографический интерфейс, который поддерживается для всех уровней видеокарт и экранов (То есть интерфейс будет даже на видеокарте и/или экране первого уровня, при чём с обрезанными адресами, чтобы уместить имя устройства в экран). Так же, в этой прошивке есть своя система отображения ошибок, показывающая весь "traceback" за исключением не нужных пунктов внутри самой прошивки. Это будет очень полезно для разработчиков собственных операционных систем, ведь данная прошивка подскажет места, в которых возникла ошибка, в то время как стандартная прошивка молчит как партизан. Если доступных для загрузки устройств больше, чем одно - то при включении компьютера, пользователю предлагается выбрать одно из них. Если такое устройство только одно - загрузка начнётся незамедлительно. Подключение устройств для загрузки происходит динамически, "на лету", прямо во время выбора устройства. То же самое с экранами и видеокартами. Так же, данная прошивка имеет приоритеты на выбор экрана: первым делом она пытается подключить тот экран, у которого есть клавиатуры поблизости. Если таковых не имеется - использует любой другой. Видеокарту прошивка использует максимального уровня. Прошивка защищена от критических сбоев при резком извлечении устройств, пока программа работает с файлами на них. Это делает данную прошивку практически не убиваемой, и позволяет избегать любых несчастных случаев при работе с компьютером. Я просто параноик, иначе сделать не мог... Данная прошивка поддерживает стандартную операционную систему OpenOS, для работы которой требуются функции computer.setBootAddress и computer.getBootAddress. Если вы хотите использовать данную прошивку, но не хотите мусорить в глобальных переменных этими рудиментами - просто вырежьте эти функции, сделать это несложно, ниже будут ссылки на исходники. Несмотря на весь этот функционал и продуманность, в минимизированном виде данная прошивка помещается на EEPROM, стандартная ёмкость которого - 4096 символов. Вы можете изучить исходный код данной прошивки, и использовать некоторые приёмы оттуда для своих проектов. К сожалению, код не очень хорошо читаемый, но это обусловлено тем, что я писал заранее с расчётом на то, что подробный код будет минимизирован, а минимизаторов кода недостаточно, нужно ещё и грамотно написать код. Исходный код: https://codeberg.org/KeyTwoZero/BetterBIOS/src/branch/main (Я ещё делал репозиторий на GitHub, но чёт я его забросил... Мне он не нравится) Спасибо за внимание. Если у вас есть какие-то идеи, как можно улучшить или ухудшить данную прошивку - пишите здесь, или как-нибудь вычислите меня, постараюсь подумать, и может быть, даже обновлю код, сделав его лучше для вас. круто, мне нравиться, вот только хотелось бы выбрать диск один раз и чтоб выбор не постаянно появлялся, а еще хотелось бы разные звуки на подключения и удаления файловрй системмы(ну это я уже так, придераюсь), а чтобы решить проблемму с свободным местом, можеш юзать софтину bpacker(да простят меня админы за упаменания левого софта в чужой теме) 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
KeyTwoZero Автор темы 15 Опубликовано: 28 июня, 2022 @rootmaster Обновил прошивку, можно посмотреть в репозитории в CodeBerg. Теперь издаются звуки разной высоты при подключении и извлечении устройств. Так же исправил пару моментов, которые занимали слишком много места. Например, белый цвет #FFFFFF я просто заменил на -1, ведь оказывается - так можно делать. 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
logic 51 Опубликовано: 29 июня, 2022 (изменено) 15 часов назад, KeyTwoZero сказал: @rootmaster Обновил прошивку, можно посмотреть в репозитории в CodeBerg. Теперь издаются звуки разной высоты при подключении и извлечении устройств. Так же исправил пару моментов, которые занимали слишком много места. Например, белый цвет #FFFFFF я просто заменил на -1, ведь оказывается - так можно делать. круто, молодец, удобно в использовании а главное не нарушает стилистику open computers, в общем мне нравиться, но есть еще пару моментов которые я бы поправил, автопобор разшенения конечно хорошо но я бы сделал ограничения по высоте и по ширене чтобы все видно было, причем по высоте динамитчики в зависимости от выводимой информации, еще хочется просто выбрать загрузочное устройство а когда хочешь поменять нажимаешь alt и выбираешь, но это уже как сам захочешь, так же хочется чтобы можно было загружаться не только в init.lua но и в файлы лежашие в /boot/kernel это некий маленький стандарт который я подсмотрел в plan9k, а если будет нахватать места можешь сжимать bios при помоши bpacker лежачего в теме eeprom(если тебе не принципиальна поддержка lua 5.2 он работает только в lua 5.3), а на планшете изменения разрешения выглядит неуместно а на роботе экран вообще глючит из за того что по вертикале больше максимального(баг open computers), добавь проверку на планшет и робота(if not component.list("tablet")() and not component.list("robot") then setCustomResolution() end) Изменено 29 июня, 2022 пользователем rootmaster Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
logic 51 Опубликовано: 29 июня, 2022 (изменено) 15 часов назад, KeyTwoZero сказал: @rootmaster Обновил прошивку, можно посмотреть в репозитории в CodeBerg. Теперь издаются звуки разной высоты при подключении и извлечении устройств. Так же исправил пару моментов, которые занимали слишком много места. Например, белый цвет #FFFFFF я просто заменил на -1, ведь оказывается - так можно делать. а еще хочется beep как в lua bios при загрузке, (computer.beep(1000, 0.2)) Изменено 29 июня, 2022 пользователем rootmaster 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
logic 51 Опубликовано: 2 июля, 2022 В 16.05.2022 в 14:11, KeyTwoZero сказал: Приветствую вас. Этот пост я пишу, чтобы рассказать вам о своей разработке для мода OpenComputers: BetterBIOS Это специальная прошивка BIOS для EEPROM, позволяющая выбирать любое из подключенных устройств для загрузки. Для этого используется пользовательский псевдографический интерфейс, который поддерживается для всех уровней видеокарт и экранов (То есть интерфейс будет даже на видеокарте и/или экране первого уровня, при чём с обрезанными адресами, чтобы уместить имя устройства в экран). Так же, в этой прошивке есть своя система отображения ошибок, показывающая весь "traceback" за исключением не нужных пунктов внутри самой прошивки. Это будет очень полезно для разработчиков собственных операционных систем, ведь данная прошивка подскажет места, в которых возникла ошибка, в то время как стандартная прошивка молчит как партизан. Если доступных для загрузки устройств больше, чем одно - то при включении компьютера, пользователю предлагается выбрать одно из них. Если такое устройство только одно - загрузка начнётся незамедлительно. Подключение устройств для загрузки происходит динамически, "на лету", прямо во время выбора устройства. То же самое с экранами и видеокартами. Так же, данная прошивка имеет приоритеты на выбор экрана: первым делом она пытается подключить тот экран, у которого есть клавиатуры поблизости. Если таковых не имеется - использует любой другой. Видеокарту прошивка использует максимального уровня. Прошивка защищена от критических сбоев при резком извлечении устройств, пока программа работает с файлами на них. Это делает данную прошивку практически не убиваемой, и позволяет избегать любых несчастных случаев при работе с компьютером. Я просто параноик, иначе сделать не мог... Данная прошивка поддерживает стандартную операционную систему OpenOS, для работы которой требуются функции computer.setBootAddress и computer.getBootAddress. Если вы хотите использовать данную прошивку, но не хотите мусорить в глобальных переменных этими рудиментами - просто вырежьте эти функции, сделать это несложно, ниже будут ссылки на исходники. Несмотря на весь этот функционал и продуманность, в минимизированном виде данная прошивка помещается на EEPROM, стандартная ёмкость которого - 4096 символов. Вы можете изучить исходный код данной прошивки, и использовать некоторые приёмы оттуда для своих проектов. К сожалению, код не очень хорошо читаемый, но это обусловлено тем, что я писал заранее с расчётом на то, что подробный код будет минимизирован, а минимизаторов кода недостаточно, нужно ещё и грамотно написать код. Исходный код: https://codeberg.org/KeyTwoZero/BetterBIOS/src/branch/main (Я ещё делал репозиторий на GitHub, но чёт я его забросил... Мне он не нравится) Спасибо за внимание. Если у вас есть какие-то идеи, как можно улучшить или ухудшить данную прошивку - пишите здесь, или как-нибудь вычислите меня, постараюсь подумать, и может быть, даже обновлю код, сделав его лучше для вас. вот еще вопрос, зачем ты используешь setData если меню для выбора вылезете каждый раз? это ведь без с мысленно, если ты переживаешь что в некоторых операционках вместо computer.getBootAddress используется eeprom.getData то это бред, так как в некоторых биосах в eeprom дата лежит не только адрес загрузочного носителя, но и дополнительные данных, я бы привел пример такого биоса но меня за "рекламу" заплюют Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
KeyTwoZero Автор темы 15 Опубликовано: 3 июля, 2022 (изменено) В 02.07.2022 в 19:29, rootmaster сказал: вот еще вопрос, зачем ты используешь setData если меню для выбора вылезете каждый раз? это ведь без с мысленно, если ты переживаешь что в некоторых операционках вместо computer.getBootAddress используется eeprom.getData то это бред, так как в некоторых биосах в eeprom дата лежит не только адрес загрузочного носителя, но и дополнительные данных, я бы привел пример такого биоса но меня за "рекламу" заплюют Большое спасибо за подсказки. Пожалуй, уберу setData при загрузке, а так же попробую пофиксить проблемы с на планшетах и роботах, ибо я на них даже не пробовал запускать. Ну и beep(1000,0.2) сделаю в начале. Думаю, что на планшетах проще отключить всю эту систему выбора, так как там может быть только один дискетоприёмник, а значит - лишь одна дискета. P.S. Если каждый раз при запуске не делать setData - не будет запускаться OpenOS. Ну и костыльная же эта ваша OpenOS... Изменено 4 июля, 2022 пользователем KeyTwoZero 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
KeyTwoZero Автор темы 15 Опубликовано: 4 июля, 2022 Обновил. Изменения можно увидеть в репозитории. Теперь издаётся звук при запуске прошивки. Пофикшен баг с мониторами у роботов, да и вообще теперь экраны первого уровня не используют "максимальное" разрешение. Ибо кому в кайф сидеть 4 на 2 экране первого уровня?.. Так же заметил, что можно заменить функцию pairs на свою переменную, это повзоляет сильнее сжать код. Но есть и негативная сторона: Стал замечать, что к сожалению, конкретно в этом проекте - очень сложно релизовать прям всё-всё-всё. Увы, но 4 кибибайта на прошивку - действительно слишком мало для полёта творческой фантазии... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
logic 51 Опубликовано: 4 июля, 2022 7 часов назад, KeyTwoZero сказал: Обновил. Изменения можно увидеть в репозитории. Теперь издаётся звук при запуске прошивки. Пофикшен баг с мониторами у роботов, да и вообще теперь экраны первого уровня не используют "максимальное" разрешение. Ибо кому в кайф сидеть 4 на 2 экране первого уровня?.. Так же заметил, что можно заменить функцию pairs на свою переменную, это повзоляет сильнее сжать код. Но есть и негативная сторона: Стал замечать, что к сожалению, конкретно в этом проекте - очень сложно релизовать прям всё-всё-всё. Увы, но 4 кибибайта на прошивку - действительно слишком мало для полёта творческой фантазии... еще хотел сказать, что модификатор сам переименовывает переменные, и делать их такими короткими не обязательно, я "облагорожу" твой код, сделаю его меньше и лутще и скину тебе в личьку, а там сам разберёшься что с этим делать Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
KeyTwoZero Автор темы 15 Опубликовано: 5 июля, 2022 В 04.07.2022 в 14:03, rootmaster сказал: еще хотел сказать, что модификатор сам переименовывает переменные, и делать их такими короткими не обязательно, я "облагорожу" твой код, сделаю его меньше и лутще и скину тебе в личьку, а там сам разберёшься что с этим делать Я тут решил вообще полностью переписать код, изменить интерфейс, и убрать некоторые функции, которые я посчитал ненужными. Однако - появится новый функционал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
logic 51 Опубликовано: 6 июля, 2022 16 часов назад, KeyTwoZero сказал: Я тут решил вообще полностью переписать код, изменить интерфейс, и убрать некоторые функции, которые я посчитал ненужными. Однако - появится новый функционал. хорошое решения, поддерживаю, вот вопрос тебе нужна поддержка lua 5.2? если нет, можешь скинуть мне исходник вплоть до 18 кб и я его сожму Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
KeyTwoZero Автор темы 15 Опубликовано: 6 июля, 2022 13 часа назад, rootmaster сказал: хорошое решения, поддерживаю, вот вопрос тебе нужна поддержка lua 5.2? если нет, можешь скинуть мне исходник вплоть до 18 кб и я его сожму Извините за некоторую грубость, но я уже пробовал ту утилиту, что вы рекомендовали - она фигня, по сравнению с другим минификатором кода на Lua. Я пробовал их много всяких, сравнивал результаты, и нашёл лучший для себя вариант, который сжимает код максимально сильно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
hohserg 197 Опубликовано: 6 июля, 2022 LZSS пробовал в чистом виде? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
logic 51 Опубликовано: 6 июля, 2022 46 минут назад, KeyTwoZero сказал: Извините за некоторую грубость, но я уже пробовал ту утилиту, что вы рекомендовали - она фигня, по сравнению с другим минификатором кода на Lua. Я пробовал их много всяких, сравнивал результаты, и нашёл лучший для себя вариант, который сжимает код максимально сильно. ну ок Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
KeyTwoZero Автор темы 15 Опубликовано: 7 июля, 2022 Произошло глобальное обновление Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
KeyTwoZero Автор темы 15 Опубликовано: 7 июля, 2022 18 часов назад, rootmaster сказал: ну ок Как вам обновление?)) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
logic 51 Опубликовано: 7 июля, 2022 43 минуты назад, KeyTwoZero сказал: Как вам обновление?)) не смотрел, пока что не нашел команду для установки, сейчас найду и посмотрю Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ProgramCrafter 544 Опубликовано: 7 июля, 2022 53 минуты назад, KeyTwoZero сказал: Как вам обновление? Мне кажется, на экран ошибки стоило бы выводить, с какого диска велась загрузка. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
logic 51 Опубликовано: 7 июля, 2022 (изменено) 58 минут назад, KeyTwoZero сказал: Как вам обновление?)) посмотрел, честно, не очень 1) зачем записывать загрузочный адрес в eeprom-data? 2) не удобно тянуться к f клавишам 3) зачем возможность удалить getBootAddress? 4) почему ты настройки в разделе кода eeprom а не в специально для этого предназначеным eeprom-data(парсер пишется очень просто)? 5) почему после краша ос ты даёшь возможно выйти и загрузиться в другую ос без reboot? если одна ос что-то в _ENV наменяет а потом крашнеться. юзер может загрузиться заново? 6) если загрузочный диск ровно один не дает зайти в меню и что-то там сделать 7) галочки слишком маленькие так я немного разобрался и понял что ты даёшь возможность настроить установку data и getBootAddress. ну если уж и считаеш(я считаю иначе, getBootAddress для получения загрузочьного адреса, getData для получения данных eeprom в которых может быть много данных(в одном их моих биосов имя которого придеться умолчать, там около 10-ти блоков данных)) getBootAddress рудиментами, то ты можешь записывать настройки опять в eeprom стрелки советую сделать кликабельными, галки тоже Изменено 7 июля, 2022 пользователем rootmaster Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
KeyTwoZero Автор темы 15 Опубликовано: 7 июля, 2022 2 часа назад, rootmaster сказал: посмотрел, честно, не очень 1) зачем записывать загрузочный адрес в eeprom-data? 2) не удобно тянуться к f клавишам 3) зачем возможность удалить getBootAddress? 4) почему ты настройки в разделе кода eeprom а не в специально для этого предназначеным eeprom-data(парсер пишется очень просто)? 5) почему после краша ос ты даёшь возможно выйти и загрузиться в другую ос без reboot? если одна ос что-то в _ENV наменяет а потом крашнеться. юзер может загрузиться заново? 6) если загрузочный диск ровно один не дает зайти в меню и что-то там сделать 7) галочки слишком маленькие так я немного разобрался и понял что ты даёшь возможность настроить установку data и getBootAddress. ну если уж и считаеш(я считаю иначе, getBootAddress для получения загрузочьного адреса, getData для получения данных eeprom в которых может быть много данных(в одном их моих биосов имя которого придеться умолчать, там около 10-ти блоков данных)) getBootAddress рудиментами, то ты можешь записывать настройки опять в eeprom стрелки советую сделать кликабельными, галки тоже Обновил: Обозначения функций (Галочки и пустые квадраты) теперь являются большими галочками и перекрестиями Пофиксил баг с _ENV, вот за то, что напомнили - спасибо, не заметил сразу Теперь всегда загружается меню, даже если устройство одно (Как по мне - лучше вренуть как было, ибо если часто пользоваться какой-то одной ОС - пальцы устанут каждый раз дополнительно нажимать ENTER) С остальным решил ничего не менять, ибо устал... Пытаться запихнуть столько всего в жалкие 4096 символов - очень утомляет. Интерфейс, как по мне - для клавиатуры и так норм, запускать всякие терминальные ОС сойдёт, а делать его ещё и кликабельным - это вообще жесть, без сжатия не обойтись, и то не факт, что реализация сжатия не будет больше, чем выигрыш от него. (Потому что данные в минимизированном коде почти равномерные, если не считать всяких local, function и end) Но, может - когда-нибудь попробую и с сжатием... А говоря о конфиге, который хранится в самом коде - это лучшее, что я мог придумать, ибо операционные системы могут запросто стереть оттуда конфиг, да и они могут быть не готовы к такому повороту жизни, как "UID-устройства ХОБА ПОЛУЧИ ДВА ЧИСЛА". Пускай уж пользователь сам настроит под себя и свои ситуации. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах