Перейти к содержимому

Лидеры


Популярный контент

Показан контент с высокой репутацией 16.05.2022 во всех областях

  1. 5 баллов
    Приветствую вас. Этот пост я пишу, чтобы рассказать вам о своей разработке для мода OpenComputers: BetterBIOS Это специальная прошивка BIOS для EEPROM, позволяющая выбирать любое из подключенных устройств для загрузки. Для этого используется пользовательский псевдографический интерфейс, который поддерживается на всех уровнях видеокарт и экранов. Так же, в этой прошивке есть своя система отображения ошибок, показывающая весь "traceback" за исключением не нужных пунктов внутри самой прошивки. Это будет очень полезно для разработчиков собственных операционных систем, ведь данная прошивка подскажет места, в которых возникла ошибка, в то время как стандартная прошивка молчит как партизан. UPD. Начиная с версии 4, код ошибок можно пролистывать: Если доступных для загрузки устройств больше, чем одно - то при включении компьютера, пользователю предлагается выбрать одно из них. Если такое устройство только одно - загрузка начнётся незамедлительно. Подключение устройств для загрузки происходит динамически, "на лету", прямо во время выбора устройства. Так же, данная прошивка имеет приоритеты на выбор экрана: первым делом она пытается подключить тот экран, у которого есть клавиатуры поблизости. Если таковых не имеется - использует любой другой. Видеокарту прошивка использует максимального уровня. Прошивка защищена от критических сбоев при резком извлечении устройств, пока программа работает с файлами на них. Это делает данную прошивку практически не убиваемой, и позволяет избегать любых несчастных случаев при работе с компьютером. Я просто параноик, иначе сделать не мог... Данная прошивка поддерживает большое количество разных операционных систем, использующих разные файлы для загрузки: OpenOS Plank9 MineOS Работает это за счёт списка файлов, которые ищет прошивка. Вы можете добавить свои файлы, вписав их в переменную в начале файла. Ну или можете оставить комментарий под этой темой, с просьбой, какой файл стоит ещё добавить. Забавный факт: Если таких файлов будет очень много, то посмотрев их список нажатием клавиши F8 при выборе устройства - вы можете пролистывать список. Так же, если вы хотите, чтобы прошивка при запуске не перезаписывала данные EEPROM (setData), и не мусорила в оперативной памяти рудиментарными функциями типа "computer.getBootAdress", которые нужны для OpenOS - вы можете отключить всё это дело в меню через клавиши. А если вам не хочется каждый раз их нажимать - то просто измените комментарий в конце кода с 11 на 10 или 00. Несмотря на весь этот функционал и продуманность, в минимизированном виде данная прошивка помещается на EEPROM, стандартная ёмкость которого - 4096 символов. К сожалению, код не очень хорошо читаемый, но это обусловлено тем, что я писал заранее с расчётом на то, что подробный код будет минимизирован, а для них нужно ещё и грамотно написать код, который, увы - сложно читается. Исходный код данной прошивки вы можете посмотреть здесь. Спасибо за внимание. Если у вас есть какие-то идеи, как можно улучшить или ухудшить данную прошивку - пишите здесь, или как-нибудь вычислите меня, постараюсь подумать, и может быть, даже обновлю код, сделав его лучше для вас.
  2. 2 балла
    Ещё можно заюзать dofile вместо require - результат тот же, а либа каждый раз будет читаться из файла без кеширования
  3. 2 балла
    Сбрасывать кеш надо перед require('numbers'): package.loaded['numbers'] = nil что-то там = require('numbers')
  4. 2 балла
    Небольшой апдейт для ОС: Добавлено приложение Events, работающее по аналогии с OpenOS'евским dmesg Добавлена возможность установки event.interruptingFunction для пользовательской обработки прерываний по ctrl + alt + c Добавлена возможность установки кастомных кодов клавиш вместо ctrl + alt + c Добавлена поддержка precise режима для мониторов без форсированной установки этого режима на false Для магазина приложений добавлена поддержка иконок с разрешением < 8x4 пикселей Исправлен краш проводника при скроллинге в пустых директориях Оптимизирован экранный буфер для прямых вызовов к GPU через invoke без проксирования компонента, что чуть-чуть повышает скорость отрисовки И для местной прошивки EEPROM: Добавлена фича URL boot для выполнения пользовательских скриптов Добавлена поддержка авто-привязки к монитору при его подключении и отключении Добавлено ожидание появления "приемлемой" файловой системы в компьютере с соотв. оповещением, если при включении компьютера она не была обнаружена
  5. 1 балл
    Мда) Додуматься до этого было бы непросто. Спасибо!
  6. 1 балл
    Зараза! Ну, тогда только ручная растеризация символов, да. Я от недалекого ума эту фичу напрямую через двумерные таблички реализовал. Может, у тебя получится более грамотное решение https://github.com/IgorTimofeev/MineOS/blob/master/Libraries/BigLetters.lua
  7. 1 балл
    local event = require("event") local unicode = require("unicode") local component = require("component") local screen = component.screen local gpu = component.gpu -- Отображаемый текст local text = "Hehe u cute" -- Разрешение по высоте, на основе которого будет подобрана "идеальная" ширина -- Т.к. строка всего одна, она как раз займет 1/3 высоты экрана local height = 3 -- Получаем компоновку мульти-блочного экрана и его пиксельную пропорцию -- Инфа по формуле, если интересно: https://computercraft.ru/topic/2413-kak-ubrat-chyornye-polosy-po-krayam-ekrana-opencomputers/ local aspectWidth, aspectHeight = screen.getAspectRatio() local proportion = 2 * (16 * aspectWidth - 4.5) / (16 * aspectHeight - 4.5) -- Рассчитываем разрешение по ширине на основе высоты и пропорции local width = math.floor(height * proportion) -- Чистим экран gpu.setResolution(width, height) gpu.setBackground(0x220000) gpu.setForeground(0xFFFFFF) gpu.fill(1, 1, width, height, " ") -- Рисуем текст по центру gpu.set(math.ceil(width / 2 - unicode.len(text) / 2), math.ceil(height / 2), text) -- Ждем интерактива от юзера while event.pull() ~= "touch" do end
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...