logic
-
Публикации
287 -
Зарегистрирован
-
Посещение
-
Победитель дней
13
Сообщения, опубликованные пользователем logic
-
-
В 05.06.2020 в 23:35, BrightYC сказал:Решил написать свой мультизагрузчик. Возможно, он похож на тот, что поставляется с комплектом MineOS, так что в целом является неплохой заменой стандартного биоса.
Установка:
Для OpenOS, просто запустите эту команду:
wget -f https://raw.githubusercontent.com/BrightYC/Cyan/master/installer.lua /tmp/installer.lua && /tmp/installer.luaДля MineOS же есть приложение в местном AppMarket, под названием Cyan BIOS. Там тоже довольно элементарно.
Исходники лежат тут: https://github.com/BrightYC/Cyan
Что он может?
- Возможность загрузки/доступа к загрузчику по "белому" списку
- Lua-интерпретатор
- Возможность подключения компонентов "на лету"
- Возможность отформатировать/переименовать файловую систему
-
Загрузка по интернету
Доступ по белому списку:
Ограничивает возможность управления биосом (на программном уровне), так же, если установить require user input, биос будет ждать нажатие от пользователя в белом списке.
Shell:
Позволяет выполнять некий код "на лету". Имплементированы следующие функции:- print(...)
- proxy(componentName: string): component proxy or nil
- sleep([timeout: number])
Демонстрация:
P.S Огромное спасибо @Fingercomp за лекцию по экранированию символов.вот еще бажочек, текст немного сдвинут вверх и влево, что сильно бросается в глаза на t2 тире
-
В 25.06.2022 в 20:48, BrightYC сказал:потому что код писался специально чтоб лучше сжимался....
В 05.06.2020 в 23:35, BrightYC сказал:Решил написать свой мультизагрузчик. Возможно, он похож на тот, что поставляется с комплектом MineOS, так что в целом является неплохой заменой стандартного биоса.
Установка:
Для OpenOS, просто запустите эту команду:
wget -f https://raw.githubusercontent.com/BrightYC/Cyan/master/installer.lua /tmp/installer.lua && /tmp/installer.luaДля MineOS же есть приложение в местном AppMarket, под названием Cyan BIOS. Там тоже довольно элементарно.
Исходники лежат тут: https://github.com/BrightYC/Cyan
Что он может?
- Возможность загрузки/доступа к загрузчику по "белому" списку
- Lua-интерпретатор
- Возможность подключения компонентов "на лету"
- Возможность отформатировать/переименовать файловую систему
-
Загрузка по интернету
Доступ по белому списку:
Ограничивает возможность управления биосом (на программном уровне), так же, если установить require user input, биос будет ждать нажатие от пользователя в белом списке.
Shell:
Позволяет выполнять некий код "на лету". Имплементированы следующие функции:- print(...)
- proxy(componentName: string): component proxy or nil
- sleep([timeout: number])
Демонстрация:
P.S Огромное спасибо @Fingercomp за лекцию по экранированию символов.вот еще один баг, ты не откатываешь изменения внесенные в палитру, на третях мониторах ты потеряешь пару оттенков серого что в целом нестрашно, и если бы ты не поддерживал мониторы второго уровня это не было бы так серьезно, но так как в коде у тебя есть упоминания планшетов, я могу с уверенностью сказать что биос создавался для использования в том числе и на мониторах второго уровня, а так последствия от такой смены палитры довольно серьезные, и многие gui программы могут сильно исказиться, так как в палитре просто не будет нужных цветов
-
В 25.06.2022 в 20:48, BrightYC сказал:потому что код писался специально чтоб лучше сжимался....
ну ладно... но у меня без кэшированный сжатия белее эффективное, хз наверное мы юзаем разные алгоритмы сжатия
-
В 05.06.2020 в 23:35, BrightYC сказал:Решил написать свой мультизагрузчик. Возможно, он похож на тот, что поставляется с комплектом MineOS, так что в целом является неплохой заменой стандартного биоса.
Установка:
Для OpenOS, просто запустите эту команду:
wget -f https://raw.githubusercontent.com/BrightYC/Cyan/master/installer.lua /tmp/installer.lua && /tmp/installer.luaДля MineOS же есть приложение в местном AppMarket, под названием Cyan BIOS. Там тоже довольно элементарно.
Исходники лежат тут: https://github.com/BrightYC/Cyan
Что он может?
- Возможность загрузки/доступа к загрузчику по "белому" списку
- Lua-интерпретатор
- Возможность подключения компонентов "на лету"
- Возможность отформатировать/переименовать файловую систему
-
Загрузка по интернету
Доступ по белому списку:
Ограничивает возможность управления биосом (на программном уровне), так же, если установить require user input, биос будет ждать нажатие от пользователя в белом списке.
Shell:
Позволяет выполнять некий код "на лету". Имплементированы следующие функции:- print(...)
- proxy(componentName: string): component proxy or nil
- sleep([timeout: number])
Демонстрация:
P.S Огромное спасибо @Fingercomp за лекцию по экранированию символов.небольшой бажок в установщике для openOS, если загрузиться с lua bios сменить чип и попытаться поставить этот биос вылетит ошибка(хотя чип и прошьётся, не не примениться read only, не напишет seccess, и не предложит reboot), так как ты использовал метод computer.getBootAddress который нежелательно использовать после загрузки компьютера(мое субъективное мнения), это ошибка актуальная для смены lua bios/micro bios/и самого Cyan Bios а так же для всех биосов где computer.getBootAddress просто алиас к eeprom.getData, однако например при загрузке через smart efi и последующий смены чипа с попыткой прошивки Cyan Bios ошибки не последует так как так computer.getBootAddress там реализован иначе, сделай такой код: local bootaddress = fs.get("/").address if computer.getBootAddress then local ok, result = pcall(computer.getBootAddress) if result then bootaddress = result end end eeprom.setData(bootaddress), и проблема исчезнет
-
В 24.06.2022 в 22:34, Bumer_32 сказал:понятно? ты серьёзно?
тебе сложно написать 1 строку что это не обязательно?
я ток ничерта не понял
там 2 способа установки 1) на чистый диск, 2) на готового робота в OpenOS причем так чтобы OpenOS тоже работала, первый перепрошивки eeprom не требует сгодиться обычный lua bios второй требует
-
1 час назад, eu_tomat сказал:А какая фраза из твоей инструкции по установке сообщает о том, что прошивка EEPROM является необязательной операцией?
ну.... я думал это и так понятно
-
2
-
-
31 минуту назад, eu_tomat сказал:@rootmaster А для чего процесс установки сделан таким сложным? Эта OS имеет не настолько богатый функционал, чтобы ради её установки совершать так много действий.
Идеальный процесс установки OS мне видится таким:
1. Вставляем в компьютер интернет-плату, а в дисковод вставляем дискету с OpenOS.
2. Включаем компьютер и дожидаемся появления приглашения командной строки.
3. Вводим команду:
wget -f https://.../installTopOS.lua /tmp/installTopOS.lua && /tmp/installTopOS.lua
А дальше программа уже сама должна прошить EEPROM, найти жёсткий диск (предложить выбрать из нескольких найденных) и докачать необходимые файлы. Примерно так и сделано в MineOS, в которую ты регулярно кидаешь камни.
Разные операционные системы в Майнкрафте и так-то не особо полезны в сравнении с копалками или фермами, и поэтому игрокам требуется серьёзная мотивация, чтобы хотя бы один раз запустить очередную OS. Зато простой процесс установки заметно снижает этот барьер: игроки могут установить OS даже без серьёзной мотивации, на минимальном любопытстве.
вставляешь диск в комп переходишь туда кода он смонтирован и водишь одну команду ВСЕ
-
30 минут назад, eu_tomat сказал:@rootmaster А для чего процесс установки сделан таким сложным? Эта OS имеет не настолько богатый функционал, чтобы ради её установки совершать так много действий.
Идеальный процесс установки OS мне видится таким:
1. Вставляем в компьютер интернет-плату, а в дисковод вставляем дискету с OpenOS.
2. Включаем компьютер и дожидаемся появления приглашения командной строки.
3. Вводим команду:
wget -f https://.../installTopOS.lua /tmp/installTopOS.lua && /tmp/installTopOS.lua
А дальше программа уже сама должна прошить EEPROM, найти жёсткий диск (предложить выбрать из нескольких найденных) и докачать необходимые файлы. Примерно так и сделано в MineOS, в которую ты регулярно кидаешь камни.
Разные операционные системы в Майнкрафте и так-то не особо полезны в сравнении с копалками или фермами, и поэтому игрокам требуется серьёзная мотивация, чтобы хотя бы один раз запустить очередную OS. Зато простой процесс установки заметно снижает этот барьер: игроки могут установить OS даже без серьёзной мотивации, на минимальном любопытстве.
лол шить eeprom необязательно, это чтобы сделать dualboot roboOS и openOS
-
В 15.06.2022 в 18:21, Fingercomp сказал:Здесь заявляется, что пароли хэшируются. Хотя это определённо прогресс по сравнению с плейнтекстом, мне кажется, готовую хэш-функцию в силу религиозных убеждений ты юзать побоялся и сделал свою.Можешь ли тогда выложить не избитую минификатором используемую тобой функцию хэширования?Кроме того, солишь ли ты пароль перед хэшированием?нет пароль не солю хотя стоило бы но вот 30 байт свободного места которых даже не хватило на переключения архитектуры так не считают, а hesh функцию можеш посмотреть в исходнике https://raw.githubusercontent.com/igorkll/topBiosV5/main/microBios.lua
-
В 15.06.2022 в 17:41, ProgramCrafter сказал:Is it time to analyze code?
biosname="microBios" statusAllow=1; local b=function()error("no bootable medium found",0)end; do local type,c,d=type,true,computer.getDeviceInfo() local function e(f) local g,h,i,j,k=126,1671,7124,"",{} for l=1,#f do table.insert(k,f:byte(l))end; for l=1,#f do local m,n,o=f:byte(l-1),f:byte(l+1),f:byte(l) if not m then m=f:byte(#f)end; if not n then n=f:byte(1)end; local p=m*g+n*h+o*i;p=p+l*h;p=p*(i-(#f-l)) for q,r in ipairs(k)do p=p+r-l*q*(g-h)end; p=math.abs(p)p=p%256;j=j..string.char(p) if#j==16 then local s=j:byte(1)g=g+s;h=h*s;i=i*s;j=j:sub(2,#j) end end; while#j<16 do j=string.char(math.abs(i+h*#j)%256)..j end; return j end; local function t(u)return component.proxy(component.list(u)()or"*")end; local v=t("eeprom") local function w(f,x) local y,z,l={},1,1; while 1 do if l>#f then break end; local s=f:sub(l,#x+l-1) if not y[z]then y[z]=""end; if s==x then z=z+1;l=l+#x else y[z]=y[z]..f:sub(l,l)l=l+1 end end; if f:sub(#f-(#x-1),#f)==x then table.insert(y,"")end; return y end; local function A(B) return w(v.getData(),"\n")[B]or"" end; local function C(B,D) if A(B)==D then return end; if D:find("\n")then error("\\n char")end; local y=w(v.getData(),"\n") for l=B,1,-1 do if not y[l]then y[l]=""end end; y[B]=D; v.setData(table.concat(y,"\n")) end; local function E(F) local G,H,I; for J in component.list(F)do I=tonumber(d[J].width) if component.type(F)=="screen"then if#component.invoke(J,"getKeyboards")>0 then I=I+10 end end; if not H or I>H then G,H=J,I end end; return G end; local function K(L,M) local N=computer.uptime() while computer.uptime()-N<L do M()end end; local O,P,Q,R=t("internet"),component.proxy(E("gpu")or""),a,{} if P then Q=A(2) if component.type(Q)~="screen"then Q=E("screen") if Q then C(2,Q)end end; if Q then R=component.invoke(Q,"getKeyboards")P.bind(Q)end end; local function S(T) return function()return T end end; computer.getBootGpu=S(P and P.address) computer.getBootFile=function()return A(3)end; computer.getBootScreen=S(Q) computer.getBootAddress=function()return A(1)end; function computer.setBootFile(U)C(3,U)end; function computer.setBootScreen(Q)C(2,Q)end; function computer.setBootAddress(J)C(1,J)end; local V=computer.shutdown; function computer.shutdown(W) if type(W)=="string"then C(6,W)end;V(W) end; local function X(J) for l,p in ipairs(R)do if p==J then return 1 end end end; local function Y(J) local Z=component.proxy(J) return Z.getLabel()and Z.address:sub(1,4)..":"..Z.getLabel()or Z.address:sub(1,4) end; local function _(a0) local a1,a2,a3,a4=O.request(a0),"" if a1 then while 1 do a3,a4=a1.read(math.huge) if a3 then a2=a2 ..a3 else a1.close() if a4 then return a,a4 else return a2 end end end else return a,"Unvalid Address" end end; local a5,a6,a7,a8; local function a9() if not Q then return end; local aa={[8]={0xf0f0f0,0x1e1e1e,0x2d2d2d,0x3c3c3c,0x4b4b4b,0x5a5a5a,0x696969,0x787878,0x878787,0x969696,0xa5a5a5,0xb4b4b4,0xc3c3c3,0xd2d2d2,0xe1e1e1,0},[4]={0xffffff,0xffcc33,0xcc66cc,0x6699ff,0xffff33,0x33cc33,0xff6699,0x333333,0xcccccc,0x336699,0x9933cc,0x333399,0x663300,3368448,0xff3333,0}}aa=aa[a5] if aa then a8=c; for l,p in ipairs(aa)do P.setPaletteColor(l-1,p)end end end; if Q then a5=math.floor(P.getDepth()) a6,a7=P.getResolution() a9() if a8 then P.setPaletteColor(1,0x7B68EE)P.setPaletteColor(2,0x1E90FF)P.setPaletteColor(3,0x6B8E23)P.setPaletteColor(4,0x8B0000)P.setPaletteColor(5,0xDAA520)P.setPaletteColor(6,0)P.setPaletteColor(7,0xFFFFFF) end end; local function ab(f,ac,ad) P.set((ac or 0)+math.floor(a6/2-(#f-1)/2+0.5),ad or math.floor(a7/2+0.5),f) end; local function ae() P.setBackground(0)P.setForeground(0xFFFFFF)P.fill(1,1,a6,a7," ") end; local function af(f,ag,L,ah,ai) if not Q then if ah then error(ah,0)end;return end; ae() P.setForeground(ag or 1,not ai and a8) ab(f) if L==c then ab("Press Enter To Continue",a,math.floor(a7/2+0.5)+1) while 1 do local aj={computer.pullSignal()} if aj[1]=="key_down"and X(aj[2])and aj[4]==28 then break end end elseif L then K(L,function()computer.pullSignal(0)end) end; return 1 end; _G.status=function(f)af(f,0xFFFFFF,a,a,1)end; local function ak(f,al) local am="" local function an() af(f..": "..(al and string.rep("*",#am)or am).."_",5) end; an() while 1 do local aj={computer.pullSignal()} if X(aj[2])then if aj[1]=="key_down"then if aj[4]==28 then return am elseif aj[3]>=32 and aj[3]<=126 then am=am..string.char(aj[3])an() elseif aj[4]==14 then if#am>0 then am=am:sub(1,#am-1)an()end elseif aj[4]==46 then break end elseif aj[1]=="clipboard"then am=am..aj[3]an() if am:byte(#am)==13 then return am end end end end end; local function ao(ap,aq,ar) local as,at,au={},{},ar or 1; function as.a(...) table.insert(at,{...}) end; local function av() ae() P.setForeground(aq,a8) ab(ap,a,a7//3) local m,o,n=at[au-1],at[au],at[au+1] P.setBackground(0) if m then P.setForeground(m[2],a8)ab(m[1],-a6//3,a7//3*2) end; if n then P.setForeground(n[2],a8)ab(n[1],a6//3,a7//3*2) end; P.setBackground(o[2],a8)P.setForeground(0)ab(o[1],a,a7//3*2) end; function as.l() av() while 1 do local aj={computer.pullSignal()} if aj[1]=="key_down"and X(aj[2])then if aj[4]==28 then if not at[au][3]then break end; local aw=at[au][3]() if aw then return aw end; av() elseif aj[4]==205 then if au<#at then au=au+1;av()end elseif aj[4]==203 then if au>1 then au=au-1;av()end end end end end; return as end; local ax=A(6)C(6,"") local function ay(J) local Z=component.proxy(J) if Z.exists("/boot/kernel/pipes")then return"/boot/kernel/pipes" elseif Q then if Z.exists("/OS.lua")then return"/OS.lua" elseif Z.exists("/init.lua")then return"/init.lua" end else if Z.exists("/init.lua")then return"/init.lua" elseif Z.exists("/OS.lua")then return"/OS.lua" end end end; local function az() af("Please Wait",5) end; local function aA() if A(4)==""then return 1 end; while 1 do local aB=ak("Enter Password",1) if not aB then break end; if e(aB)==A(4)then return 1 end end end; local function aC() if A(5)==""and not aA()then V()end; local aD=ao("micro bios",2) aD.a("Back",4) aD.a("Reboot",4,function()V(1)end) aD.a("Shutdown",4,V) if O then aD.a("Url Boot",3,function() local a0=ak("Url") if a0 then local a2,ah=_(a0) if a2 then local M,ah=load(a2,"=urlboot") if M then a9() local aE,ah=pcall(M) if not aE then af(ah or"unknown error",0xFFFFFF,c,a,1)end else af(ah,4,c) end else af(ah,4,c)end end end) end; aD.a("Password",5,function() if aA()then local aD=ao("Password",3) aD.a("Set Password",5,function() local aF=ak("Enter New Password",1) if aF and aF~=""and aF==ak("Confirm New Password",1)then az()C(4,e(aF))end end) aD.a("Set Password Mode",5,function() local aD=ao("Select Mode",2) aD.a("Menu",5,function()az()C(5,"")end) aD.a("Boot",5,function()az()C(5,"1")end) aD.a("Disable",5,function()az()C(5,"2")end) aD.a("Back",4)aD.l() end) aD.a("Clear Password",5,function() az()C(4,"")C(5,"") end) aD.a("Back",4) aD.l() end end) for J in component.list("filesystem")do local ap=Y(J) aD.a(ap,1,function() local aD=ao("Drive "..ap,2) local Z=component.proxy(J) local aG={"/init.lua","/OS.lua"} for l=2,1,-1 do if not Z.exists(aG[l])then table.remove(aG,l)end end; local aH="/boot/kernel/" for aI,U in ipairs(Z.list(aH)or{})do table.insert(aG,aH..U) end; if#aG>0 then aD.a("boot",1,function() local U=ay(J) if U then az()C(1,J)C(3,U)return 1 end; af("Boot File Is Not Found",a,c) end) end; local function aJ(U) if component.invoke(J,"exists",U)then aD.a(U,1,function()az()C(1,J)C(3,U)return 1 end) end end; for l,p in ipairs(aG)do aJ(p)end; aD.a("Back",4) return aD.l() end) end; aD.l() end; if ax~="fast"and A(5)=="1"and(not Q or not aA())then V()end; if Q then if ax=="bios"then aC() elseif ax~="fast"and#R>0 and af("Press Alt To Open The Bios Menu")then K(1,function() local aj={computer.pullSignal(0.1)} if aj[1]=="key_down"and X(aj[2])and aj[4]==56 then aC()end end) end end; local aK,U=A(1),A(3) local aL=component.proxy(aK) if not aL or not aL.exists(U)then af("Search For A Bootable Filesystem") U=a; if aL then U=ay(aK)end; if not U then for aM in component.list("filesystem")do local aN=ay(aM) if aN then aK=aM;U=aN;break end end end; if U then az()C(1,aK)C(3,U) aL=component.proxy(aK) else af("Bootable Filesystem Is Not Found",a,c,1)V() end end; if Q then a9()end; af("Boot To Drive "..Y(aK).." To File "..U,0xFFFFFF,a,a,1) local U,am=assert(aL.open(U,"rb")),"" while 1 do local aB=aL.read(U,math.huge) if not aB then break end; am=am..aB end; aL.close(U) if U=="/OS.lua"then v.getData=function()return aK end end; b=load(am,"=init") end; b()
исходник же в репозитории есть, зачем?
-
изначально разрабатывалась под eeprom от сюда и фичи boot to external os и много плохого кода
ос была портирована на скорую руку так что извините и зарепортире если работы вдруг окажется нестабильной
о любых бага просьба репортить в тему
функционал
- установка привата на робота (ака useradd)
- настройка автозагрузки
- установка одной из 2 предустановленных тем
- скачивания программ по url
- показ документации к программам
- перемежения/копирования/переименования программ
- запуск программ
установка ос на диск
-
установка с робота: перейдите в тему мода для openOS() и откройте dev устоновшик, и устоновите им micro bios, затем введите на роботе команду:
mkdir /boot/kernel; wget https://raw.githubusercontent.com/igorkll/roboOS/main/source.lua /boot/kernel/roboOS -fзатем переключите ос, для этого при загрузке micro bios нажмите alt найтите диск робота и выберите /boot/kernel/roboOS
-
установка с компьютера: устоновите диск будушего и разобраного робота в компьютер перейдите туда куда ом смонтирован (обычьно /mnt/xxx (где xxx первые три буквы uuid диска)) а зачем введите команду
wget https://raw.githubusercontent.com/igorkll/roboOS/main/source.lua init.lua
пример программы для данной ос(круговая копалка)
local robot = component.proxy(component.list("robot")()) if gui then gui.status("to exit press ctrl+c") end local sides = { bottom = 0, top = 1, back = 2, front = 3, right = 4, left = 5, unknown = 6, down = 0, up = 1, north = 2, south = 3, west = 4, east = 5, negy = 0, posy = 1, negz = 2, posz = 3, negx = 4, posx = 5, forward = 3 } local damegeWait = 0.5 ----------------------------------------------- local function interrupt(time) local e = {computer.pullSignal(time or 0.1)} if e[1] == "key_down" and e[3] == 3 and e[4] == 46 then error("terminated", 0) end end local function delay(time) local inTime = computer.uptime() while computer.uptime() - inTime < time do interrupt(time - (computer.uptime() - inTime)) end end local oldInterruptTime = computer.uptime() local function interruptTimer() if computer.uptime() - oldInterruptTime > 1 then interrupt() oldInterruptTime = computer.uptime() end end ----------------------------------------------- local function wait(event) while not event() do interruptTimer() end end local function move(side, swing, dmg) while true do interruptTimer() local detectOk, detectOut, detectType = pcall(robot.detect, side) if not detectOk or not detectOut then if robot.move(side) then break end else if swing and (dmg or detectType ~= "entity") then robot.swing(side) if damegeWait and detectType == "entity" then delay(damegeWait) end end end end end local function swing(side, dmg) local swingCount, detectOut, detectType = 0, nil, nil while true do interruptTimer() swingCount = swingCount + 1 detectOut, detectType = robot.detect(side) if detectType == "liquid" or detectType == "air" then break elseif detectType == "entity" then if not dmg then break end if not robot.swing(side) then break end delay(damegeWait) if swingCount >= 16 then break end else if not robot.swing(side) then break end if swingCount >= 4 then break end end end end local function waitEntity(side) while select(2, robot.detect(side)) == "entity" do interruptTimer() end end ----------------------------------------------- local size = 1 while true do for i = 1, 2 do for i2 = 1, size do swing(sides.up, true) swing(sides.down, true) move(sides.forward, true, true) end robot.turn(false) end size = size + 1 end
демо программа демонстрирующая работу gui
local docs = {[0] = "TUT OSNOVNA DOCA A UNICODE NE PODDERHITICA POTOMU CHE EKONOMIL BYTES FOR EEPROM"} local strs = {} local funcs = {} table.insert(strs, "null") table.insert(docs, "null menu point") table.insert(funcs, false) table.insert(strs, "yesno") table.insert(docs, "yesno gui element") table.insert(funcs, function() if gui.yesno("shutdown?") then computer.shutdown() end end) table.insert(strs, "yesno") table.insert(docs, "yesno gui element") table.insert(funcs, function() if gui.yesno("shutdown?") then computer.shutdown() end end) table.insert(strs, "read") table.insert(docs, "input") table.insert(funcs, function() local data = gui.read("press ctrl+c to cancel") if data then gui.warn("msg: " .. data) end end) for i = 100, 2000, 100 do table.insert(strs, tostring(i)) table.insert(docs, "test doc for menu point " .. tostring(i)) table.insert(funcs, function() computer.beep(i, 0.1) end) end gui.setData("gui test", docs, strs) local num, scroll = 1, 0 while true do num, scroll = gui.menu(num, scroll) if funcs[num] then funcs[num]() else gui.warn("is null menu point") end end
документация для пользователей
- программы могут располагаться на любых дисках и дискетах, автозагрузка привязывается к конкретному диску и ссылается на конкретный файл а ссылка лежит на диск с установленной автозагрузкой в /roboOS/autorun.cfg
- настройки ос храниться в /roboOS/settings.cfg на системном диске
- такая система позволяет легко поставить на робота одну автозагрузочную программу а на дискету другую, причем информация о том какая программа автозагрузочная лежит на диске а не в системе, PS если хотите создать автозагрузочную дискету то создайте на ней файл /roboOS/autorun.cfg а в нем ссылка не файл на этой же дискете, например /roboOS/programs/karer/main.lua
- каждая программа имеет свою папку в /roboOS/programs там должен находиться файл main.lua а так же может находиться файл doc.txt с небольшим описаниям обратите внимания что при скачивании программы по url будет скачан только файл main.lua однако при входе вы сможете скачать все необходимые файлы
- в программу первым аргументом передаться табличка с некими данными о этой программе а конкретнее имеет в себе 2 ключа fs proxy файловой системы от куда произошёл запуск программы и file с путем до главного файла этой программы
- по у автозагрузки приоритет на внешние диски
- при запуске автозагрузочного файла у вас есть секунда на то чтобы отменить запуск и сразу попасть в меню для этого необходимо нажать alt
-
1
-
В 05.06.2020 в 23:35, BrightYC сказал:Решил написать свой мультизагрузчик. Возможно, он похож на тот, что поставляется с комплектом MineOS, так что в целом является неплохой заменой стандартного биоса.
Установка:
Для OpenOS, просто запустите эту команду:
wget -f https://raw.githubusercontent.com/BrightYC/Cyan/master/installer.lua /tmp/installer.lua && /tmp/installer.luaДля MineOS же есть приложение в местном AppMarket, под названием Cyan BIOS. Там тоже довольно элементарно.
Исходники лежат тут: https://github.com/BrightYC/Cyan
Что он может?
- Возможность загрузки/доступа к загрузчику по "белому" списку
- Lua-интерпретатор
- Возможность подключения компонентов "на лету"
- Возможность отформатировать/переименовать файловую систему
-
Загрузка по интернету
Доступ по белому списку:
Ограничивает возможность управления биосом (на программном уровне), так же, если установить require user input, биос будет ждать нажатие от пользователя в белом списке.
Shell:
Позволяет выполнять некий код "на лету". Имплементированы следующие функции:- print(...)
- proxy(componentName: string): component proxy or nil
- sleep([timeout: number])
Демонстрация:
P.S Огромное спасибо @Fingercomp за лекцию по экранированию символов.укажи в теме пожалуйста что на первых мониторах не работает а то я они комп так ухандохал, конечно на lua биос потом обратно поменял но все равно неприятненько
-
В 12.10.2020 в 21:32, nikitaaaaa сказал:Вобщем времени у меня не так много надо чтоб каким то образом робот без внутреннего монитора передавал картинку на компьютер по беспроводной карте.
Примерно как терминальный сервер и терминал. Думаю вы все поняли, не задавайте лишних вопросов а я дальше по секретным делам
могу сделать, но не за безплатно, в роботе не gpu не screen не потребуеться, можно будет внешний хоть t3 подключить, интересует?
-
2
-
-
как пользоваться:
- для входа в меню bios нажмите alt при загрузке
- для установки пароля bios>password(текущий пароль)>set password вводите пароль два раза
- пароль можно выключить и он будет нужен только для входа в меню password он может блокировать меню или загрузку в цело
- пароль захеширован хоть и храниться в nbt, владельцы варпов могут быть спокойны
- также вы можете перезагрузить компьютер без появления надписи bios menu(computer.shutdown("fast")) или сразу в меню (computer.shutdown("bios"))
- если у вас стоит мод для openOS() то вы можете использовать reboot fast и reboot bios прямо в shell
также из под функций присутствует:
- url boot (Internet>Url boot)
- возможность запуска openOS через интернет(Internet>openOSonline)
- так же биос умеет подгружать утилиты с github репозитория, которых в скором времени там будет много
- password
- возможность загрузки в разные файлы на одном диске например - openOS и mineOS
что может быть непонятно:
- если вы вводите пароль а поле просто очищается значит вы ввели его неправильна
- если вы вводите в буквы не вводиться убедитесь что у вас включен английский язык
- если вы поставили пароль в он не подставился и не было окна pleas wait значит два пароля не совпадают
примечания:
- поддерживаются все тиры железа
-
обязательно установить архитектуру процессора в lua 5.3(начиная с новой версии биос меняет ее автоматически(как Cyan Bios)) -
начиная с новой версии загрузка в mineOS работать не будет, это проблема ос, так как она использует getData вместо getBootAddress, и я больше не собираюсь поддерживать этот костыль(поддержка mineOS была полностью удалена)
команда для установки:
wget https://raw.githubusercontent.com/igorkll/microBios/main/compressed.bin /tmp/bios.lua -f;echo "" > /dev/eeprom-data;flash /tmp/bios.lua microBios -q;echo "require('computer').setArchitecture('lua 5.3')" > "/tmp/architecture.lua" /tmp/architecture.lua;reboot-
1
-
1
-
В 06.06.2020 в 05:44, BrightYC сказал:Я думал сделать так, но к сожалению у меня совсем не хватает места. Я не знаю что можно сделать, разве что назначить какого-то одного админа.
Исправлю. (Вообще, там должно быть 12 символов).
В принципе, код EEPROM'ы хранится в NBT, я совсем забыл об этом. Переделаю сегодня...
сейчас я работаю над своим новым биосом и там будет пароль который хоть и будет в eeprom data будет закеширован, так что пароль не такой уж и плахой вариант
-
В 03.06.2022 в 12:49, eu_tomat сказал:@rootmaster Правильно ли я понял, что эта система автокрафта состоит из единственного робота даже без вспомогательных сундуков, а все необходимые для крафта материалы должны находиться во внутреннем инвентаре робота?
да ты правильно все понял
-
В 31.05.2022 в 18:08, num_pi сказал:Каким образом ты собрался поставлять промежуточные компоненты для крафта?
от сам их скрафтит, если чегото не хватает
-
программа которая может сома крафтить предметы
при установке мода для openOS не соглашайтесь на установку top bios v5.1 он делает программный read only и будет препятствовать своему удалению если хотите хороший БИОС установите мод dev установщиком от сюда
wget https://raw.githubusercontent.com/igorkll/openOSpath/dev/bin/installer.lua /tmp/ins.lua -f; /tmp/ins.lua
конфигурация робота
- контроллер инвентаря
- улучшения верстак
- два апгрейдя инвентарь(лучше больше)
- монитор, видеокарта и клавиатура
- интернет карта(для установки мода для openOS необходимого для запуска)
чтобы скачать программу можно пойти двумя путями:
- скачать из магазина, скачиваем мод для openOS из соответствующий темы, затем зайти в market, виртуальным курсором навести на robotCraft нажать enter и скачать его
-
скачать программу этой командой
wget https://raw.githubusercontent.com/igorkll/appMarket3/main/robotCraft.lua /usr/bin/robotCraft.lua -f
а она уже сома откроет установщик мода
чтобы открыть программу просто введите в терминале robotCraft, если предлагает установить мод для openOS смело устанавливайте(без него не будет работать)
управления
- в меню можно видеть зарегистрированные предметы а ниже подменю для осуществления различных действий
- для регистрации предметы выложите его крафт в верхнем левом углу инвентаря робота а результат крафта положите в четвертый слот и нажмите add
- меня give это продвинутый поиск предметов он скрафтит предмет если не сможет найти
- find в отличии от give умеет только искать но не крафтить
- при выборе предметы в главном меню предстанет выбор крафтить один или пока не вылезет какая-то ошибка(например закончатся ресурсы)
- выход из программы кнопкой exit или ctrl + alt + c(например если идет крафт)
-
1
-
5
-
component.filesystem.rename() перемешает папку/файл а потом удаляет старую это очень медленно, а как переименовать быстрой непонятно
-
В 09.11.2019 в 23:06, 8urton сказал:Последняя версия : 2.2
Команда для установки : pastebin run ngQT9YF8Системные требования:
- Корпус компьютера, екран - 1 Tier
- Процесор - 1 Tier
- Видеокарта - 1 Tier
- Память - 1.5 Tier (x1)
- Жёрсткий диск - 1 Tier
- Дисковод, клавиатура, Lua BIOS - должны присутствовать
Краткое описание: Inerpat - примитивная система для запуска на любом ведре, и инструмент для создание и отладки EEPROM кода.
Также она поможет в ситуации, когда ваш компьютер превратился в "обожённый строительный материал"Специальные клавиши:
- ALT - Открыть главное меню
- CTRL - Открыть меню файла/папки. В редакторе - меню сохранения.
- TAB - Навигация по доступным файловым системам
Скриншоты:
почему после каждого действия откидывает в самое начало списка файлов? если бы не это отчичьная бы ос была бы
-
начнем с того что программа идет в паре программа/загрузчик
для программы необходимо создать отдельную папку и поместить туда саму программа и загрузчик(bootloader.lua)
устоновка:
- https://raw.githubusercontent.com/igorkll/products/main/nFlash/bootloader.lua загрузчик
- https://raw.githubusercontent.com/igorkll/products/main/nFlash/main.lua сама программа
что умеет данная прошивка eeprom?
- удаленное включить/выключить микроконтроллер
- узнать в каком он сейчас состоянии(вкл/выкл)
- удаленная перезагрузка
- удаленный запуск кода
- удаленная прошивка(обратите внимания что код имеющий синтаксическую ошибку не будет прошит)
- поиск устройств
- база данные хранения uuid модемов для обращения по кодовому имени
как работать с базой данных?
- названия из базы можно использовать вместо полного uuid
- регистрация nFlash base register uuid(можно сокращенный, если модем установлен в компьютер)
- регистрация по сети, nFlash broadcast list; nFlash broadcast register "номер из списка" имя
полная документация
print("power control:")print("nFlash control registernameOrFulluuid power on")print("nFlash control registernameOrFulluuid power off")print("nFlash control registernameOrFulluuid power reboot")print("nFlash control registernameOrFulluuid power get")print("programm control:")print("nFlash control registernameOrFulluuid run path")print("nFlash control registernameOrFulluuid fastrun code")print("nFlash control registernameOrFulluuid flash path")print("base:")print("nFlash base list")print("nFlash base register uuid(если модем устоновлен в компьютер можно сократить uuid(для быстрой регистрации))")print("nFlash base remove")print("broadcast:")print("nFlash broadcast list(список сохраняться в оперативку для регистрации по номеру)")print("nFlash broadcast register number registerName(для начала требуеться проиндексировать устройства)")print("nFlash broadcast savedList(выводит предыдулий лист без поиска по сети)")-
2
-
В 14.04.2022 в 20:50, Taoshi сказал:Первым шагом навстречу пользователям является, как я думаю, наличие такой ссылки на программу, благодаря которой можно скачать и запустить её без необходимости качать и распаковывать архивы.
Вторым, если программа состоит более чем из одного файла, самодокачивание программой своих/не своих частей необходимых для полноценной работы.
Доки на мой взгляд - третьестепенный фактор: большинство пользователей хочет максимально просто получить что-либо и пользоваться этим. Но в это же время предоставляемые продуктом возможности должны быть описаны хоть как-то, иначе они рискуют остаться неизвестными. Например, вывод по кнопке/команде краткого списка "что и как" – один из оптимальных вариантов. Ведь доки, по сути, это задокументированные возможности продукта, а не какие-то взятые с потолка абстрактные рассуждения. И когда автор в теме, в своей теме, пишет что может его программа – это не только добавляет ему постов в своей теме, но и - что более важно - делает описание более обширным, более ЗАДОКУМЕНТИРОВАННЫМ. Сделал обновление: что-то добавил или что-то поменял – напиши там же. Это удобно всем.
у моего софта уже давно есть устоновшик
-
1 минуту назад, eu_tomat сказал:Насколько я знаю, кнопка включения-выключения немедленно выключает компьютер, не генерируя каких-либо событий. Поэтому и перехватить её нажатие невозможно.
Можно, например, использовать для этой цели вспомогательный компьютер, который, обнаружив отключение основного компьютера, отключит вслед за ним и все подключенные мониторы.
во первых, это был премер задачи для который может пригодиться обработка, во вторых если я напишу OS поддерживаюшю несколько мониторов даже если есть одна карта то мне нада ставить 2 компа? както не рационально
-
7 минут назад, eu_tomat сказал:Можно сделать кнопку для гашения мониторов сигналом красного камня.
Но удобнее, наверное, выключать компьютер программно, чтобы перед выключением компьютера автоматически гасли все мониторы.
нет, я хочу чтобы была какаето функция которая срабатывала не только при програмном выключении но и аппаратном, подмена метада shutdown не помогла, она позваляет обработать софт выключения но не хард, а как перехватить хард выключения не особо понятно









BetterBIOS - Прошивка для EEPROM с улучшенным функционалом
в eeprom
Опубликовано:
круто, мне нравиться, вот только хотелось бы выбрать диск один раз и чтоб выбор не постаянно появлялся, а еще хотелось бы разные звуки на подключения и удаления файловрй системмы(ну это я уже так, придераюсь), а чтобы решить проблемму с свободным местом, можеш юзать софтину bpacker(да простят меня админы за упаменания левого софта в чужой теме)