Комментарии 15
Ещё в факторио можно передавать сразу много сигналов по проводам и делать арифметические операции сразу со всеми. В комбинаторе есть сигнал *, обозначающий любой сигнал. С ним есть нюансы и ограничения, но потенциально возможность очень интересная.
В моём дизайне получилась RAM память, которая уже через три или четыре такта (точно не помню) способна отдать записанное значение, и я вообще думал отказаться от регистров. А ещё что забавно — можно получение внешних данных или управление чем-то сделать как доступ в RAM память. Практически DMA.
Ещё у меня была чисто теоретическая мысль сделать что-то типа гипертрединга. Если есть схема без ячеек памяти и обратных связей, которая выдаёт результат через N тактов, то можно каждый такт отправлять на неё новые данные и с задержкой в N тактов получать один результат за другим. Таким образом, можно на одной схеме паралелльно делать несколько рассчётов. Кстати, то что я писал про RAM память — аналогично, можно писать хоть каждый такт.
Создание процессора заглохло на том, что мне стало лень расставлять-настраивать всё в факторио, и я захотел написать эмулятор логических цепей. Чтобы с помощью кода «собрать» схему, протестировать, а потом на её основе сгенерировать готовый блюпринт и вставить в игру. Руки всё никак не дойдут)
P.S. Ещё в факторио можно прям из комбинаторов собрать стек и использовать его вместо регистров, как в forth.
Э-э-э, а что там в принципе может быть сложного для программиста с высшим образованием?
темный лес из-за банальной лени в том, чтобы разобраться в этом всем. Ну и специфика в реализации этой механики в самой игре. Например, комбинатор стоящее левее быстрее инкрементирует свое значение. (На этом эффекте есть схема защиты, когда массив лазерных турелей активируется отдельно стоящей.)
Поэтому и выглядит как «магия».
Например, комбинатор стоящее левее быстрее инкрементирует свое значение.
Не верю. Вот даже специально эксперимент только что провёл: поставил 200 таймеров в ряд, запустил их все, подождал немного и остановил. В итоге все таймеры показали 3133, включая самый левый и самый правый.
На этом эффекте есть схема защиты, когда массив лазерных турелей активируется отдельно стоящей.
Если я правильно понял про какую схему речь — то там нет никаких особых эффектов, "активирующая" турель может находиться где угодно.
В общем, нет нем никакой магии, совсем никакой. Каждый комбинатор делает ровно то что написано, и ничего кроме этого.
А может быть имелось ввиду что-то вида «поставь два комбинатора, которые попробуют изменить одно и то же значение (или друг друга) и одновременно запусти — победит тот, что обновится быстрее, и это будет левый». но это просто предположение — опять же, без деталей можно только спекулировать
Если оно и связано с чем-то хитрым — то только с багом, но баги в факторке исправляют, а не изучают.
Что же до варианта с "изменить одно значение", то это абсурд — комбинаторы не "меняют значение", а устанавливают значения на своих выходах. Если выходы соединить — их значения сложатся, а не перезапишутся.
там действительно использовался другой эффект — при разрядке аккумулятора приоритет питания идет на турель, а комбинатор при этом отключался. за счет этого возникала разница в значениях. на версии 0.17. по крайней мере это работало, а на 1.х не пробовал. Вчера вспомнил вечером по пути домой.
давно не играл, подзабылось что-то.
В моём дизайне получилась RAM память, которая уже через три или четыре такта (точно не помню) способна отдать записанное значение, и я вообще думал отказаться от регистров. А ещё что забавно — можно получение внешних данных или управление чем-то сделать как доступ в RAM память. Практически DMA.
К слову, в самых первых компьютерах регистров тоже не было. Затем появился кэш. И уже потом — собственно регистры.
Создание процессора заглохло на том, что мне стало лень расставлять-настраивать всё в факторио, и я захотел написать эмулятор логических цепей. Чтобы с помощью кода «собрать» схему, протестировать, а потом на её основе сгенерировать готовый блюпринт и вставить в игру. Руки всё никак не дойдут)
Возможно я не совсем правильно понял в чем Ваша проблема, но есть же, например, Logisim. Производительности мне хватило, чтобы симулировать свою имплементацию RV32I на частоте порядка 1 кГц.
нам нужно подождать 10 игровых тактов (fps), чтобы начать следующий такт системы.
я правильно понимаю, что чтобы разогнать процессор, надо разогнать систему, на которой он запущен, чтобы повысить число кадров в секунду?
Здесь автор не совсем точно выразился — в factorio есть tps, а есть fps. tps — это и есть игровые такты, и в нормальном состояние тактов всегда ровно 60 в секунду. Они могут проседать под нагрузкой (тем самым замедляя всё вокруг), но никогда не могут быть больше.
А fps можно сделать любой — он никак не влияет на tps.
Но технически верно, по сути факторио выступает здесь в роли эмулятора, и чтобы разогнать процессор внутри эмулятора — надо разогнать эмулятор, а для этого может понадобиться разогнать уже физический процессор :)
Ну вот, такая шутка пропадает — когда надо разогнать GPU чтобы ускорить буквально CPU.
В свое время было прикольно было играть с ускорением времени в старых играх на новых процессорах. Когда эта скорость не фиксировалась по максимальному значению, а упиралась в производительность процессора. И на современном процессоре все начинало в прямом смысле летать.
Не говоря про очень старые игры, которые почему-то привязывались к частоте процессора даже в реальном времени, и становились неиграбельными на современных системах.
8-битный Тьюринг-полный компьютер в Factorio