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

bibi или удобство разработки eeprom-кода и операционных систем

Рекомендуемые сообщения

Писать программы для eeprom - то еще занятие. Попробуем облегчить этот процесс.

  • в \config\OpenComputers.cfg устанавливаем bufferChanges=false
Это отключит буферизацию, и все изменения файлов в каталогах сохранения будут немедленно отображены внутри игры
  • Загружаем игру в сингл, строим себе базу, ставим там компьютер, и инсталлируем на него OpenOS.
После этого, в каталоге \saves\%save_name%\opencomputers\ появится UID нашего виртуального "винчестера", со всем содержимым
  • Записываем туда файл bibi
local gpu = component.proxy(component.list("gpu")())
gpu.bind(component.list("screen")()) 

local cy=1
prn=function(...)
  local t={...}  
  for i=1,#t do t[i]=tostring(t[i]) end
  gpu.set(1,cy,table.concat(t, ' '))
  cy=cy+1
end

local readfile=function(f)
  for addr in component.list("filesystem") do
    local fs=component.proxy(addr)
    local h=fs.open(f)
    if h then
      --костыль для init.lua
      computer.getBootAddress=function() return addr end
      local s,r='',''
      while r do
        r=fs.read(h,math.huge)
        s=s..(r or "")
      end
      fs.close(h) 
      return s,f
    end
  end
end

prn('bibi: press a key to force init.lua') computer.beep(440)
local s,f=readfile('boot.lua')
if ({computer.pullSignal(1)})[1]=='key_down' or not s then 
  s,f=readfile('init.lua')
end

if s then
  local r,e=load(s,f)
  if r then r,e=pcall(r) end
  prn('bibi:', r, e)
else
  prn('bibi: no file')
end

prn('bibi: press a key to reboot')
repeat until ({computer.pullSignal()})[1]=='key_down'
computer.shutdown(true) 
  • И файл boot.lua
prn('Hello world', nil~=false)
После чего в OpenOS делаем:
  • flash -q bibi bibi
  • reboot
h_1434835970_5235428_e2d021c481.png

 

Наблюдаем наш хелловорлд и убеждаемся, что nil и false - это две большие разницы:

 

h_1434837050_8115362_ab38e16a39.png

 

Теперь открываем наш boot.lua в блокноте или в чем вам удобно писать код, разминаем мозги и пальцы и погружаемся в процесс творчества.

В одном окне блокнот с кодом, в другом - майнкрафт с нашим виртуальным компьютером. Написали-сохранили-проверили.

---

Ошибки компиляции нашего кода будут выглядеть так:

h_1434837050_7948091_48364a2896.png

 

Ошибки выполнения так:

h_1434837050_1573462_b1d2246271.png

  • А если нам захочется в OpenOS то мы нажмем секретную кнопку "а кей" когда наш bibi пискнет при старте.
Также в OpenOS мы попадем если bibi не найдет файла boot.lua. А если и init.lua не найдет, то скажет "no file" и будет ждать когда мы исправим ситуацию

 

ЗЫ

Не злоупотребляйте prn(), она очень служебная и не умеет scroll, конечно scroll это всего лишь условие и две строки, но зачем?!

Пишите свои prn-ы с преферансом и барышнями, предварительно поиграв ну хотя-бы с таким вот хелловорлдом:

 

boot.lua для экспериментов:

--биндим гпу со скрином
local gpu = component.proxy(component.list("gpu")())
gpu.bind(component.list("screen")())

--стираем
local sw, sh = gpu.maxResolution(); gpu.fill(1,1,sw,sh," ")

--наши прн-ы с преферансом но без барышень
function prnto(x,y,...)
  local t={...}
  for i=1,#t do t[i]=tostring(t[i]) end
  gpu.set(x,y,table.concat(t, ' '))
end

local cy=1
function prn(...)
  prnto(1,cy,...)
  if cy==sh then
    gpu.copy(1,1,sw,sh,0,-1)
    gpu.fill(1,sh,sw,1," ")
  else
    cy=cy+1
  end
end

--хелловорлдим
prn('Hello world', nil~=false)

--глобалим
for k,v in pairs(_G.component) do prn(k,v) end

--компонентим
for k,v in component.list() do prn(k,v) end

--ииииииии
while true do
  local e={computer.pullSignal(.833)}
  
  --часики-и-и
  local s=tostring(math.floor(computer.freeMemory()/1024))..'/'..tostring(computer.totalMemory()/1024)..' kb free '..os.date('!%R')
  prnto(sw-#s+1,1,s)

  --ну и прочие эвенты с юникодами
  if e[1] then 
    e[2]=tostring(e[2]):sub(1,3)..'~' -- обрезаем адрес компонента
    prn(table.unpack(e))
    if e[1]=='key_down' and e[3]~=0 then prn(unicode.char(e[3])) end
  end

  --а по тильде (~) все сначала
  if e[1]=='key_down' and e[4]==41 then computer.shutdown(true) end
end

 

Изменено пользователем swg2you

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ошибки компиляции нашего кода будут выглядеть так:h_1434837050_7948091_48364a2896.png

Lua - интерпретируемый язык, компиляции там нет. В твоём случае это ошибка синтаксиса. Тех кто называет Lua компилируемым языком нужно сжигать на костре.

Изменено пользователем LeshaInc

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Lua - интерпретируемый язык, компиляции там нет. В твоём случае это ошибка синтаксиса. Тех кто называет Lua компилируемым языком нужно сжигать на костре.

Видимо человек так себе это представляет, хотя и не правильно.

Изменено пользователем NEO

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Брысь отсюда!  )

Идите маны покурите и матчасть почитайте если нечего по делу сказать. Ишь ты, какие критиканы!

Или самосожгитесь там, на костре из собственного невежества, самоуверенности и слепых заблуждений. )

:D

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Цитаты из wikipedia.org:

  • "Компиляция — трансляция программы, составленной на исходном языке высокого уровня, в эквивалентную программу на низкоуровневом языке, близком машинному коду."
  • "Результатом работы компилятора может быть программа на специально созданном низкоуровневом языке, подлежащем интерпретации виртуальной машиной. Такой язык называется псевдокодом или байт-кодом."
  • "Интерпрета́ция — пооператорный (покомандный, построчный) анализ, обработка и тут же выполнение исходной программы или запроса (в отличие от компиляции, при которой программа транслируется без её выполнения)"

Цитата из описания load в официальной документации на lua.org:

  • "If there are no syntactic errors, returns the compiled chunk as a function; otherwise, returns nil plus the error message."

Своими словами:

  • load - компилирует текст программы в байт-код. Ком-пи-ли-ру-ет! Поэтому его ошибки это ошибки ком-пи-ля-ци-и.

А когда мы будем выполнять наш байт код, через pcall, или просто добавив скобочки обратимся к нему как к функции, вот тогда уже будет происходить интерпретация байт кода с его выполнением.

--==--

Брысь отсюда!  )

Идите маны покурите и матчасть почитайте если нечего по делу сказать. Ишь ты, какие критиканы!

Или самосожгитесь там, на костре из собственного невежества, самоуверенности и слепых заблуждений. )

Каждый компилятор после своей работы оставляет файл с машинным или байт кодом.

А интерпретатор может упрощать конструкции что бы постоянно не анализировать.

У тебя бомбит :smile3:  :smile3:  :smile3:  Есть специальный компилятор LuaJIT http://luajit.org, а в OC стоит просто Lua interpreter.

Который интерпретирует.

Изменено пользователем NEO

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Каждый компилятор после своей работы оставляет файл с машинным или байт кодом.

А интерпретатор может упрощать конструкции что бы постоянно не анализировать.

У тебя бомбит :smile3:  :smile3:  :smile3:  Есть специальный компилятор LuaJIT http://luajit.org, а в OC стоит просто Lua interpreter.

Который интерпретирует.

Ух приставучий. Иди учись. Не трать моё время!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ух приставучий. Иди учись. Не трать моё время!

Я не приставучий, я не люблю когда не правильно пишут термины.

Ты не понял термина, ну бывает.

Отвечать тебе больше не буду так как знаю что такой спор будет долго длиться, да и всё равно в конце концов ты поймёшь термин интерпретация, и компиляция, и в чём их разница.

Изменено пользователем NEO

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я не приставучий, я не люблю когда не правильно пишут термины.

Ты не понял термина, ну бывает.

Отвечать тебе больше не буду так как знаю что такой спор будет долго длиться, да и всё равно в конце концов ты поймёшь термин интерпретация, и компиляция, и в чём их разница.

Ок, ок. Прости за грубость. Спор действительно на пустом месте.

Пойду я, а то у меня еще мой коблоужас на сервере не достроен.

Еще рас прошу извинить и, надеюсь, мир?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ребята, давайте жить дружно!

Пусть у swg2you Луа компилируется, а у NEO - интерпретируется.

:D

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Totoro, Ты хочешь сказать что swg2you должен написать компилятор Lua?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не пашет этот bibi, ошибка: boolean ожидается, передано string. Я ошибку не нашел, извольте исправить, автор)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не пашет этот bibi, ошибка: boolean ожидается, передано string. Я ошибку не нашел, извольте исправить, автор)

Серж! Мне вот интересно, есть на форуме темы, которые ты не апнул. Тебе медаль некропостера уже давать надо. Ну тут еще крипер с ним. Тема программная, баги автору и т.п. Это хорошо, что там баг нашел.

 

Но 99% тем ты апаешь вообще просто так, типа мол, о, прикольно, или, мол, я тоже это когда-то хотел сделать. При чем темы чаще всего находишь, которые сдохли полгода-год назад :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

кста mineOS не меняет _ENV(со слов ECS) и по идеи на ней можно запускать eeprom код сразу

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
37 минут назад, rootmaster сказал:

кста mineOS не меняет _ENV(со слов ECS) и по идеи на ней можно запускать eeprom код сразу

Запустить код, предназначенный для EEPROM, можно даже в стандартной OpenOS небольшими усилиями. Сложнее создать чистую среду, никак не модифицированную операционной системой. Это и попытался сделать автор темы.

 

Полностью чистая среда гарантирована лишь при запуске кода непосредственно с EEPROM. Но и удобство отладки кода в этом случае минимально.

 

Способы же, обеспечивающие удобство, так или иначе модифицируют среду. Например, в рассматриваемом варианте выполнена привязка графической платы к монитору. В других вариантах может потребоваться инициализация не графической подсистемы, а сетевой. В любом случае эти модификации не идут ни в какое сравнение с изменениями, выполненными операционными системами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
3 часа назад, eu_tomat сказал:

Запустить код, предназначенный для EEPROM, можно даже в стандартной OpenOS небольшими усилиями. Сложнее создать чистую среду, никак не модифицированную операционной системой. Это и попытался сделать автор темы.

 

Полностью чистая среда гарантирована лишь при запуске кода непосредственно с EEPROM. Но и удобство отладки кода в этом случае минимально.

 

Способы же, обеспечивающие удобство, так или иначе модифицируют среду. Например, в рассматриваемом варианте выполнена привязка графической платы к монитору. В других вариантах может потребоваться инициализация не графической подсистемы, а сетевой. В любом случае эти модификации не идут ни в какое сравнение с изменениями, выполненными операционными системами.

ну можно сделать эмулютор для openOS в котором будут исключительно виртуальные компоненты

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
10 минут назад, rootmaster сказал:

ну можно сделать эмулютор для openOS в котором будут исключительно виртуальные компоненты

Можно. Но виртуализация также изменяет среду выполнения, например, внося задержки в исполнение кода.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 18.10.2015 в 14:52, SergOmarov сказал:

Не пашет этот bibi, ошибка: boolean ожидается, передано string. Я ошибку не нашел, извольте исправить, автор)

gpu.bind(component.list("screen")()) <---
component.list("screen")() ---> 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', 'screen'

Получается

gpu.bind('xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', 'screen')

2 аргумент функции gpu.bind это reset: boolean

Поэтому ошибка

С какого то момента добавили второй аргумент в gpu.bind

Здесь его нет, а здесь есть

Можно заменить на

gpu.bind(({component.list("screen")()})[1])

 

Изменено пользователем ItsMakar

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Советую сразу просить А.С.Пушкина исправить и дописать что-нибудь. Например изменить финал Капитанской дочки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...