RedPower на 1.2.5-5

Hel_ISR

妖怪
Команда форума
Лорд-Инквизитор
Adeptus Mechanicus
Инквизитор
Куратор проекта
Регистрация
24.03.2011
Сообщения
17 598
Minecraft
nope
RedPower 2
Внимание!!
Работа всех блоков не проверена!
Обо всех неполадках пишем в этот раздел!

Некоторые рецепты НЕ работают вовсе, какие именно - уточняйте в рецепте.




Руды и дерево

Всего восемь новых руд, три из которых являются драгоценными камнями: Рубины, Изумруды, Сапфиры, Олово, Медь, Серебро, Николит и Вольфрам.
Руду Олова, Меди и Серебра можно раздробить в дробилке из мода ИндустриалКрафт2, получить 2 порошка и переплавить в слитки.
Дальше у нас идет Мрамор, который обычно генерируется в пещерах.
Совершенно новой структурой являются вулканы. Они генерируются на поверхности и состоят из Базальта (на изображении чёрный камень).

Остались менее масштабные объекты - растения и деревья: Каучуковое дерево, Цветок Индиго и Лён.


Кроме всего перечисленного, добавляет распространение мха. Теперь не придется постоянно искать сокровищницы и крепости, ради редкого материала! Достаточно найти один Замшелый булыжник или Замшелый каменную кладку и разместить его по соседству с обычным, при этом рядом должна находиться вода и не должно быть "прямой линии в небо".

Также теперь возможно превращение каменной кладки в потресканную. Для этого с одной стороны от кладки должна находиться вода, с другой лава.



Новые деревья и растения не просто декорация, они также имеют применение.
Так например древесину Каучукового дерева, как и остальные виды древесины, можно обуглить в древесный уголь, но получить доски нельзя, она сразу разбивается на палки.

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

С Льном все немного сложнее - он не генерируется при создании мира. Чтобы его вырастить нужно из высокой травы выбить семена льна, потом нужно посадить на подобие пшеницы, сажать можно только в увлажнённую вспаханную землю. Время роста примерно как у пшеницы (нужно уточнить). Чтобы собрать, нужно разрушить только верхний блок, когда на нем распуститься фиолетовый цветок, тогда вам выпадут новые семена для посадки и нитки, а нижний блок даст новые плоды быстрее, чем посаженный с нуля.



Рецепты верстака
Провода из красного сплава

Эти оголенные провода аналогичны редстоуну (только лучше). Они соединяются с блоками, испускающими или принимающими сигнал, и между собой, а еще они питают блок, на котором расположены. Кроме того, они соединяются с любым видом изолированных проводов. Эти провода могут располагаться на стене и передавать сигнал на 255 блоков. Не соединяются со связками проводов.
Внимание!!! Использование большого количества неизолированных Проводов из красного сплава в "мигающем" режиме (например, от таймера) может привести в существенной нагрузке на сервер и на ваш компьютер, т.к. в этом случае каждое изменение провода (каждое мигание) будет обрабатываться сервером и вашей видеокартой. Хорошей заменой в этом случае является использование Изолированных проводов или Проводов в оболочке


Изолированные провода

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

Связка проводов

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

Окрашенная связка проводов

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

Провода в оболочке

Этим проводам не нужна опора. Они могут быть сделаны из любого покрытия. Могут быть соединены с обычными проводами с помощью оголенных проводов, расположенных на поверхности.

Связки в оболочке

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

Перекраска проводов

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


Плавильная печь

Эта печь требуется для использования технологий RedPower. Самое важное - создание слитков красного сплава, но и для новых слитков тоже требуется эта печь. Также она может извлечь металл из предметов, которые больше не нужны. Список того, что в ней можно сделать, находится в Рецептах плавильной печи.

Разрушитель блоков

При получении сигнала эта машина попробует разломать блок с лицевой стороны. Она не может разрушать админиум, но сломает обсидиан. Разрушенный блок выпадает с задней стороны Разрушителя. Если он не сможет выпасть (например, задняя сторона заблокирована другим блоком), то машина перестает работать, пока ее буфер не будет очищен.

Установщик

Установщик имеет 9 слотов. При подаче сигнала он попробует использовать предмет из инвентаря в направлении, в котором повернут. Использование равносильно щелчку ПКМ игроком. То есть он может использоваться для установки блоков, поджигания зажигалкой, установки вагонеток на рельсы или сбора жидкостей ведрами.

Ретранслятор

Предметы, упавшие (или толкаеммые водой или трубой) на его лицевую сторону, будут перемещены в его буфер. Затем, если возможно, они выпадут с задней стороны, если невозможно, то предмет останется в буфере, а машина перестанет принимать новые. При получении импульса Ретранслятор засосет все предметы в радиусе трех блоков перед лицевой стороной. Если перед ним инвентарь (например, сундук), то он возьмет один предмет из него. Может быть соединен с трубами, для которых будет допустимой целью при пустом буфере.

Фильтр

То же, что и Ретранслятор, но имеет 9 слотов, которые определяют допустимые предметы, машина будет работать только с ними. Если фильтр с пустыми слотами получит импульс, то он заберет из инвентаря перед ним стак любого предмета. Если в слоте будет предмет, то он заберет только этот предмет. Если в слоте будет несколько одинаковых предметов, то он заберет столько же предметов.
Также, фильтр с предметами в слотах станет допустимой целью для труб только если по ним идет тот же предмет.

Пневматическая труба

Трубы используются для транспортировки предметов. Они автоматически направляют их по кратчайшему допустимому пути. Если допустимых направлений нет, труба перестанет принимать предметы. Если есть несколько допустимых направлений одной длины, трубы будут распределять предметы между ними примерно поровну (первые две вещи пойдут в одну трубу - прим. перевод.)
Обычно трубы получают вещи из Ретрансляторов, Разрушителей или Фильтров.
Помощь по трубам РП тут

Детектор предметов

Располагается между двумя трубами, причем работает в одну сторону и не может быть установлен на углу. Подает импульс, в зависимости от режима работы. В первом режиме он подаст импульс за каждый прошедший предмет. То есть 64 предмета дадут 64 последовательных импульса. Второй режим подаст импульс за каждую прошедшую группу предметов. Детектор в третьем режиме будет выдавать сигнал, если предмет не может пройти дальше.

Отвертка

Использование ее на машине поочередно повернет ее лицевую сторону в 6 возможных положений. Также работает с логическими элементами.

Ножовка

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

Мраморный/Базальтовый блоки

Обычные блоки для хранения или строительства из мрамора и базальта соответственно.

Серп

Скашивает растения, причем делает это по площади. Подходит для большинства растений, таких, как пшеница, лен или высокая трава.

Сапфировый/Изумрудный/Рубиновые инструменты

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

Палки

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

Краска Индиго

Из новых цветов индиго можно получить краску соответствующего цвета. Она используется для крафта синей шерсти, как и лазурит. Может заменить лазурит в крафтах RedPower.

Светодиод

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


Это блоки, которые будут светиться при получении сигнала редстоуна. Все лампы светятся белым светом, только сам блок будет иного цвета.

Кремниевая плата

Пластина из известного полупроводникового материала, получена из кремниевого слитка с помощью алмазной пилы.

Блутрическая печь

Работает так же, как и обычная печь, но в два раза быстрее. Работает на блутричестве ("синее электричество" blue - синий, electricity - электричество - прим. перевод.), так что вам нужно поставлять энергию из ее источника. Они могут подключаться напрямую, или же энергия может передаваться с помощью проводов из синего сплава. Чтобы печь заработала, в ней должно накопиться определенное количество энергии.

Солнечная панель

Солнечные панели - это упакованные и соединенные солнечные батареи. Они могут производить и поставлять энергию блутрическим приборам.

Провода из синего сплава

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

Вольтметр

Щелчок ПКМ по синему проводу или иному блутрическому устройству выдаст текущие показатели напряжения и силы тока.

Батарея

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

Аккумулятор

Излишки энергии будут накапливаться в батареях этого блока. Аккумулятор будет пополнять запасы других устройств, когда их энергетический уровень упадет. Текущий уровень заряда аккумулятора можно посмотреть, кликнув на нем ПКМ, но он также показан на текстуре блока, так что вы можете оценить оставшиеся запасы просто бросив на него взгляд.

Редстоун-труба

Помесь провода в оболочке и обычной трубы. Эта труба будет действовать как обычная в доставке предметов, вы даже можете красить ее. Но она также содержит редстоун и может передавать сигналы. Она может соединяться с обычными трубами и проводами в оболочке. Она не сможет соединяться с обычными проводами (используйте провода в оболочке), но она может соединяться с обычной редстоун-пылью.
Эта труба, в частности, используется для подачи сигналов на машины, с которыми она соединена без необходимости подводить дополнительные провода.
Внимание!!! Использование большого количества редстоун-труб в "мигающем" режиме (например, от таймера) может привести в существенной нагрузке на сервер и на ваш компьютер, т.к. в этом случае каждое изменение трубы (каждое мигание) будет обрабатываться сервером и вашей видеокартой. Хорошей заменой в этом случае является использование Изолированных проводов или Проводов в оболочке

Буфер

Буфер подобен ящику с пятью отделениями. Когда в него поставляются предметы с помощью труб, каждая из пяти сторон-входов будет заполнять отдельное отделение. К выходной стороне имеют доступ все отделения. Это очень полезно в сочетании с сортировочной машиной. Обычное применение этого устройства - ситуации, когда предметы поставляются с разной скоростью, обычный сундук может быть заполнен одним видом предметов, не оставляя места для других.

Поисковик

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

Сортировочная машина

Это устройство позволяет устанавливать порядок предметов с военной точностью. Как и фильтр, оно может использоваться как между трубами, так и с инвентарем. Машина помечает предметы выбранным цветом, если вы выбираете его с помощью кнопок. Также она имеет пять режимов работы (если в столбцах нет предметов, то она будет просто доставать из инвентаря все предметы поочередно):

В режиме "anystack sequential" ("любой стек последовательно") машина будет брать заданное количество одного вида предмета из столбца. Приоритет имеют предметы, расположенные в сундуке левее и выше (при этом последний предмет первой строки имеет больший приоритет, чем первый предмет второй строки). После прохода каждого предмета ползунок в GUI сдвинется к следующему столбцу, если нет ни одного из перечисленных в столбце предметов (или недостаточное количество), то машина остановится.
Режим "allstack sequential" ("полный стек последовательно") очень похож на предыдущий, но машина остановится, если нет хотя бы одного из перечисленных предметов.
"Random allstack" ("все стаки случайно") пропускает одновременно все предметы из первого столбца в указанном количестве, пока все они не закончатся, затем то же самое со вторым и т.д. (к первому он вернется только прокрутив все остальные, даже если в инвентаре появятся предметы из первого столбца).
Этот мод пропускает все указанные предметы, независимо от столбца, но приоритет получают предметы слева сверху в инвентаре.
Последний мод аналогичен предыдущему, но он задает цвет по-умолчанию, для всех предметов, у которых не указан цвет


Жестянка краски

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

Краска

Смесь масла из семян льна и выбранного красителя наполнит вашу пустую жестянку.
Можно использовать любой цвет красителя, банка наполнится соответствующей краской.

Кисть

Шерсть-на-палке. Окуните ее в краску и начинайте красить трубы.

Окраска кисти

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

Сапфировый/рубиновый/изумрудный блоки

Блоки для хранения драгоценных камней RedPower похожи на алмазный блок. Девять драгоценных камней образуют блок, который может быть установлен в декоративных целях. Камни могут быть возвращены.

Термоэлемент

Термоэлемент генерирует энергию от разницы температур смежных блоков (например, лава и вода/лед). Он дает еще меньше энергии, чем солнечная панель, но он не зависит от солнечного света и может быть очень полезен для глубоко расположенных машин.

Проектный стол у нас ЗАПРЕЩЕН
Project Table



Ограничивающая труба
Restriction Tube

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

Магнитные трубы
Magtubes

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

Ускоритель
Accelerator

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

Блулектрическая плавильная печь
Blulectric Alloy Furnace

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

Воспламенитель
Igniter

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

Регулятор
Regulator

Регулятор очень разносторонний и может быть использован в различных целях.

У регулятора есть три группы слотов:
Входная часть слева: предметы в инвентаре указывают на вид и количество предметов, которые примет внутренний буфер из трубы, подсоединенной к входной стороне.
Внутренний буфер в центре: предметы хранятся тут, а затем, когда их набирается столько же, сколько во входной части, идут дальше по трубам. Предметы, пришедшие к боковым сторонам, тоже идут в этот инвентарь, игнорируя правила входной части.
Выходная часть справа: если положить сюда предметы, то регулятор будет отправлять предметы только если в следующем за ним инвентаре меньше предметов, чем тут.
Заполнять инвентари необязательно, но это даст дополнительные эффекты.
У него имеется 2 режима работы, которые определяют правила выхода: синхронный выход (по умолчанию) позволит отправлять предметы только если все правила выхода соблюдены в точности для всех предметов, в то время, как асинхронный выход позволит отправлять каждый вид предметов по отдельности, вне зависимости от остальных.
Будет выдавать импульс редстоуна всякий раз, когда отправляет предметы, а также постоянный сигнал, если в соединенном инвентаре хотя бы столько же предметов, сколько и в выходной части.


Алмазная волока
Diamond Drawplate

Эта пластина используется для волочения проводов. Волочение уменьшает провод в диаметре и удлиняет его.

Высококачественный медный провод
Fine Copper Wire

Провод из очень чистой меди, отлично подходит для создания индуктивных катушек.
 

Hel_ISR

妖怪
Команда форума
Лорд-Инквизитор
Adeptus Mechanicus
Инквизитор
Куратор проекта
Регистрация
24.03.2011
Сообщения
17 598
Minecraft
nope
Re: RedPower 2

продолжение:

Рецепты плавильной печи

Слиток красного сплава

Это мягкий, податливый металл, хороший проводник. Насколько хороший? В 16 раз лучше обычного редстоуна! Хотя он слишком мягкий, чтобы делать из него инструменты, из него можно легко делать провода.

Слиток синего сплава

Синий сплав - это базовый блок создания Блутричества, которое нужно для большинства технологий 2 уровня в RedPower 2.

Слиток латуни

В RedPower латунь - это сплав меди и олова. Оно применяется там, где нужно низкое трение, например, в трубах и электротехнике.

Слиток кремния

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

Красная плата

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

Синяя плата

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

Лист олова

Сплав железа и олова, эти листы используются в создании жестянок.

Извлечение железа

Плавильная печь может переплавлять некоторые вещи (ведра и рельсы) и получать из них слитки железа.

Извлечение красного сплава


Плавильная печь может переплавлять некоторые вещи (провода и их связки) и получать из них слитки красного сплава.
 

Hel_ISR

妖怪
Команда форума
Лорд-Инквизитор
Adeptus Mechanicus
Инквизитор
Куратор проекта
Регистрация
24.03.2011
Сообщения
17 598
Minecraft
nope
Re: RedPower 2

Рецепты печи

Каменная плита

Каменная плита является поддерживающим основанием логических элементов.

Базальт

Этот блок представлен в RedPower World, вулканы состоят из него. При разрушении из него выпадает базальтовый булыжник, который может быть переплавлен в гладкий базальт.


Слитки

Tin Ingot Silver Ingot Copper Ingot
Как обычно, добытую руду переплавляем в печи, получаем слитки.


Древесный уголь

Как и остальные виды древесины, древесина каучукового дерева может быть обуглена в уголь.
 

Hel_ISR

妖怪
Команда форума
Лорд-Инквизитор
Adeptus Mechanicus
Инквизитор
Куратор проекта
Регистрация
24.03.2011
Сообщения
17 598
Minecraft
nope
Re: RedPower 2

Логические элементы
Провод

Это редстоун в каменной плате, обеспечивающий проводимость точек в одном элементе.

Анод

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

Указатель

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

Катод

Катод служит в качестве инвертора, излучая красные лучи ближайшим анодам того же элемента.

Секвенсер

Имеет четыре выхода. По очереди подает на них сигнал с очередностью, заданной в меню, доступном по ПКМ. Если синхронизировать его с временем мира, то можно получить удобные часы, просто установив его на 300 секунд.

Таймер

Имеет вход, выход и два входа/выхода. С настраиваемой очередностью посылает импульс на выходы. Если таймер запитать, то он остановится.

Триггер "ИЛИ НЕ"

Имеет два входа/выхода и два выхода. Если подать сигнал или импульс на вход/выход, то будет запитан соответсвующий ему выход и этот вход/выход. Если подать сигнал сразу на оба входа/выхода, то выходы погаснут. Если отключить один из сигналов, то загорится выход, соответсвующий оставшемуся сигналу. Если отключить оба сигнала, то загорится случайный выход (и соответствующий ему вход/выход).

Элемент "ИЛИ НЕ"

Имеет три входа и один выход. Выход включен, когда все три входа выключены и выключается при включении любого входа. Некоторые входы могут быть отключены при помощи ПКМ.

Элемент "ИЛИ"

Имеет один выход и три входа. Выход включается при включении любого входа. Некоторые входы могут быть отключены при помощи ПКМ.

Элемент "И НЕ"

Имеет три входа и один выход. Изначально выход включен и выключается только когда все входы включены. Некоторые входы могут быть отключены при помощи ПКМ.

Элемент "И"

Имеет три входа и один выход. Изначально выход выключен и включается только когда все входы включены. Некоторые входы могут быть отключены при помощи ПКМ.

Элемент "ИСКЛЮЧАЮЩЕЕ ИЛИ НЕ"

Имеет один выход и два входа. Выход включен, когда оба входа имеют одинаковый статус (оба включены или оба выключены), и выключен, когда входы имеют разный статус.

Элемент "ИСКЛЮЧАЮЩЕЕ ИЛИ"

Имеет один выход и два входа. Выход включен, когда оба входа имеют разный статус, и выключен, когда входы имеют одинаковый статус.

Формирователь импульса

Имеет вход и выход. Когда вход получает сигнал или импульс, выход мгновенно испускает короткий импульс.

Тумблер

Имеет два входа и два выхода. Когда вход получает сигнал или импульс, рычаг сдвигается, меняя включенный выход. Рычаг может быть сдвинут вручную с помощью ПКМ.

Элемент "НЕ"

Имеет вход и три выхода. Выходы включены, когда вход выключен и наоборот.

Буферный элемент

Имеет вход и три выхода. Выходы включены, когда вход включен и наоборот.

Мультиплексер

Имеет три входа и один выход. Переключение центрального входа меняет боковой вход, контролирующий выход.

Счетчик

Имеет два входа и два выхода. Каждый импульс к одному выходу сдвигает рычажок в одну сторону, к другому выходу - в другую. Когда он достигает максимума в ту или иную сторону (больше в эту сторону он не сдвинется, максимум и скорость переключения настраиваются), соответствующий выход включается.

Повторитель

Этот улучшенный повторитель поддерживает 9 временных отрезков: 1, 2, 3, 4, 8, 16, 32, 64 и 128 тиков.

Красный

В отличие от обычной платы, эта может передавать сигналы из/в внешнего мира в полную силу.

Комплект

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

Нулевой элемент

Не выполняет никаких логических функций, просто работает как пересечение двух проводов.

Инверторный

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

Неинверторный

Когда нижний провод включен, верхний тоже всегда включен. Когда нижний отключен, верхний работает как обычный провод.
 

Hel_ISR

妖怪
Команда форума
Лорд-Инквизитор
Adeptus Mechanicus
Инквизитор
Куратор проекта
Регистрация
24.03.2011
Сообщения
17 598
Minecraft
nope
Re: RedPower 2

Рецепты ножовки
Плита/панель/покрытие

Вы можете разрезать почти любой твердый блок. Сначала разрежьте его по вертикали, поместив пилу над ним. Полный блок можно разрезать на две плиты (1/2 толщины блока), плиту на две панели (1/4 толщины блока), панель на два покрытия (1/8 толщины блока).

Рейки

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

Углы

Если рейки все еще слишком велики, то вы можете снова разрезать их сбоку, получив соответствующие виды углов.

Склейка углов

Теперь, когда у вас множество мелких частей блоков, вы можете склеить их обратно. Это полезно, если вы ошиблись при разрезании. Этот процесс просто обратный разрезанию. Вам не нужен никакой инструмент или клей, и вы не теряете материал. Два угла, состыкованных вертикально, дают соответствующую рейку.

Склейка реек

Две рейки, склеенные горизонтально, дадут ту часть блока, из которой они были сделаны.

Склейка вертикальных пластин

Конечно же, вертикальные пластины при склейке дадут вещь, из которой они были сделаны.

Антипокрытие/Тройная панель/Плиточное покрытие/Тройное покрытие

Есть еще 4 вещи, толщина которых находится между толщиной тех вещей, которые вы можете получить с помощью пилы. Вы можете получить их путем склеивания мелких частей.

Антипокрытия тощиной как блок минус покрытие (7/8 блока) и делаются из плиты, панели и покрытия.
Тройные панели тощиной как три раза толщина панели (6/8 блока) и делаются из трех панелей одного вида.
Плиточные покрытия толщиной как плита и покрытие (очевидно, в оригинальном списке рецептов ошибка - прим. перевод.) (5/8 блока) и делаются из плиты и покрытия.
Тройные покрытия толщиной как трижды толщина покрытия (3/8 блока) и делаются из трех покрытий.

Вы сможете позже разобрать предмет на составные части.

Рейки

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

Углы

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

Полые блоки

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

Колонна/опора/столб

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

Hel_ISR

妖怪
Команда форума
Лорд-Инквизитор
Adeptus Mechanicus
Инквизитор
Куратор проекта
Регистрация
24.03.2011
Сообщения
17 598
Minecraft
nope
Re: RedPower 2

Списко блоков которые
НЕЛЬЗЯ резать ножовкой


Рудные блоки не режутся (блоки из слитков стандартных руд режутся как угодно)
админиум =)
светокамень, лампы из РП, тыквенный фонарь (сама тыква режется)
листва всех видов, травяной блок, кактусы, арбуз, мицелий
песок и гравий
лед
камень из края
блоки из СИМ крафта
слитки из РП не стакаются в блоки, соответственно нечего резать
руды из ИК стакаются в блоки, но блоки не режутся
----------
лестницы, собранные их резанных блоков работают как положено
-стеклянные лестницы плохо видно (хотя может это у меня из-за Текстурпака)
 

Hel_ISR

妖怪
Команда форума
Лорд-Инквизитор
Adeptus Mechanicus
Инквизитор
Куратор проекта
Регистрация
24.03.2011
Сообщения
17 598
Minecraft
nope
Re: RedPower 2 - подготовка на 125

Обновление на 1.2.5.


Отвертка к сожалению изнашивается и со временем сломается, но есть и этому решение - Звуковая отвертка! Можете не бояться о том, что она сломается. Для её создания понадобится изумруд, слиток латуни и батарейка (её рассмотрим чуть позже).


Атам (Athame)

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

Чесалка (Wool Card)

Позволяет вам вернуть шерсть в отдельные нити. Для создания требуется Качественная железная проволока (Fine Iron Wire):

Примечание: Алмазную волоку (Diamond Drawplate) можно использовать 256 раз.

Каменная связка (Stone Bundle)

Связка проводов зафиксирована в каменной плите.

Испорченный Кремниевый чип (Tainted Silicon Chip)

Добавка светопыли к Кремниевому чипу портит его и вызывает различные эффекты.

Шинный Приёмопередатчик (Bus Transceiver)

Помещается между Связками проводов и позволяет вам выбирать направление сигнала, который нужно продолжить. Если сигнал подается сзади, то сигнал в связке проводов пойдёт слева направо. если сигнал подать спереди, то в связке проводов сигнал пойдёт справа налево. Если запитать спереди и сзади, то они будут подавать сигнал в связки, даже когда его отключат, потому что они будут подпитывать друг друга. Маленький красный огонёк указывает на активность прибора. Для создания требуется Красная плата (см. Вспомогательные инструменты).

Датчик света (Light Sensor)
выдает сигнал и днем и ночью а должен только днем. Также не настраивается отверткой хотя должен.

Будет испускать сигнал при попадании света на него. Требуемый уровень света для подачи сигнала может быть настроен с помощью Отвертки. Для создания требуется Синяя плата (см. Блутричество).

Рандомизатор (Randomizer)

Данный элемент будет испускать беспорядочные сигналы на любой из трех выход. Для поддержаия "случайности" требуется непрерывный сигнал на вход.

Штатный передатчик (State Cell)

Это устройство передает сигнал (по умолчанию вперед) при активировании входа (по умолчанию слева). После отключения входа, устройство будет передавать сигнал в зависимости от установленного времени (окно настройки вызывается ПКм на устройстве), по истечении времени будет подан короткий импуль (по умолчанию вправо). Подача сигнала в основание устройства будет сбрасывать таймер и поддерживать постоянный сигнал.

Синхронизатор (Synchronizer)

Действует на подобие Элемента "И".Если передать сигнал обоим входом, то испускает импульс, даже если один из входов больше не получает сигнала. Импульс в нижнию стороу сбросит синхронизатор.
 

Hel_ISR

妖怪
Команда форума
Лорд-Инквизитор
Adeptus Mechanicus
Инквизитор
Куратор проекта
Регистрация
24.03.2011
Сообщения
17 598
Minecraft
nope
Re: RedPower 2 - подготовка на 125

Ассемблер (Assembler)

Практически тот же Установщик, только имеет 18 слотов и два режима работы:

Изображение Поочередной: позволяет ставить блоки в определенном порядке.
Изображение Цветовой: позволяет ставить блоки по соответствующему цветовому сигналу редстоуна.


Для создания требуется Красная плата (см. Вспомогательные инструменты).

Реле (Relay)

Работает наподобие эжектора, но выкидывает не по 1 предмету и для работы не требуется сигнал. Для создания требуется Транспортер, Буфер и Красная плата (см. Вспомогательные инструменты).

Термоэлемент (Thermopile)

Термоэлемент генерирует энергию от разницы температур смежных блоков (например, лава и вода/лед). Он дает меньше энергии, чем солнечная панель, но он не зависит от солнечного света и может быть очень полезен для глубоко расположенных машин.
Пример рабочего Термоэлемента:


Сортировочная машина (Sorting Machine)

Это устройство позволяет устанавливать порядок предметов с военной точностью. Как и фильтр, оно может использоваться как между трубами, так и с инвентарем. Машина помечает предметы выбранным цветом, если вы выбираете его с помощью кнопок. Также она имеет пять режимов работы (если в столбцах нет предметов, то она будет просто доставать из инвентаря все предметы поочередно):

Изображение Любой стек последовательно: машина будет брать заданное количество одного вида предмета из столбца. Приоритет имеют предметы, расположенные в сундуке левее и выше (при этом последний предмет первой строки имеет больший приоритет, чем первый предмет второй строки). После прохода каждого предмета ползунок в GUI сдвинется к следующему столбцу, если нет ни одного из перечисленных в столбце предметов (или недостаточное количество), то машина остановится.
Изображение Полный стак последовательно: очень похож на предыдущий, но машина остановится, если нет хотя бы одного из перечисленных предметов.
Изображение Все стаки случайно: пропускает одновременно все предметы из первого столбца в указанном количестве, пока все они не закончатся, затем то же самое со вторым и т.д. (к первому он вернется только прокрутив все остальные, даже если в инвентаре появятся предметы из первого столбца).
Изображение Любой предмет: пропускает все указанные предметы, независимо от столбца, но приоритет получают предметы слева сверху в инвентаре.
Изображение Любой предмет со стандартным направлением: задает цвет по-умолчанию, для всех предметов, у которых не указан цвет.


Для создания требуется Красная плата (см. Вспомогательные инструменты).


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

Двигатель фреймов (Frame Motor)

При привидении в действие будет сдвигать блок "главной" стороной, которая обозначена стрелкой, указывающая направление. Если сдвигаемый блок окажется Фреймом, то двигатель попытается переместить все связанные между собой фреймы.

Фрейм (Support Frame)

Данная конструкция является стандартным блоком новой эры в Minecraft. Когда перемещается специальным двигателем, то все соседние Фреймы и прилегающие к ним блоки тоже начнут двигаться, как будто это один блок. Вспомогательным конструкциям можно придать различный вид, поместив в них микроблоки. Если поместить в них Покрытия, то они буду служить в виде изоляции, не позволяя перемещать прилегающие блоки.

Для работы с Фреймами и их двигателями нужно знать следующие особенности:

Для работы Двигателя фреймов требуется блутричество. Активируются при сигнале редстоуна.
Количество блутричества, используемого Двигателем фреймов, зависит от количества перемещаемых Фреймов.
Каждый Двигатель позволяет перемещать только в одну сторону. Поэтому для перемещения Фреймов назад и вперёд потребуется два двигателя.
Двигатели фреймов не перемещают сами себя, а только Фреймы (или другие блоки) приложенных к стороне со стрелкой. Для перемещения двигателя потребуется другой Двигатель фреймов. Но несмотря на это все ещё возможно делать различные транспортные средства.
Фреймы перемещают большинство блоков. Во фреймы можно поместить Покрытия (Cover) или Панели (Panel), которые могут изменить взаимодействие с прилежащими блоками. Если использовать Панели, то это позволит перемещать провода и логические элементы. Использование Покрытий позволит изолировать прилегающие блоки, которые не нужно перемещать.
При помещении во Фрейм панели можно увидеть появившиеся уголки по краям, у покрытий же нет угловых меток.
В данный момент сложно определить почему фреймы не хотят перемещаться. В будущем планируется добавить визуальный эффект (искры), чтобы указать проблемное место. А пока проверьте все прилегающие Трубы, Провода, факелы и другие мелкие объекты, которые не занимают весь блок. Обычное именно они мешают движению.
Некоторые объекты при перемещении становятся похожи на ящик. Это нормально.


Чтобы легче было понять их работу предлагаю рассмотреть простой образец передвижной платформы:

На рисунке два положения платформы: до движения (а) и после движения (б). Оба двигателя (1 и 2) направлены в одну сторону (в данном случае вправо), но у 1 двигателя перемещающая сторона вверху, а у 2 двигателя - внизу. При подаче сигнала на 2 двигатель платформа сдвигается на один блок, но двигатель сам не переместится, поэтому он оказывается на 1 двигателе (положение б), который его переместит обратно при сигнале. Не забываем, что для перемещения требуется блутричество (для этого, как вы могли заметить, стоит аккумулятор).
 

Hel_ISR

妖怪
Команда форума
Лорд-Инквизитор
Adeptus Mechanicus
Инквизитор
Куратор проекта
Регистрация
24.03.2011
Сообщения
17 598
Minecraft
nope
Re: RedPower 2 - подготовка на 125

Компьютеры

8K ЗУПД Модуль (8K RAM Module)

Новое! Модуль, добавляющий Запоминающее устройство с произвольным доступом вашему компьютеру для большей вместимости данных. Присоединяется к Объединительной Плате Центрального Процессора.

Объединительная плата (Backplane)

Новое! Обеспечивает быструю связь с Центральным Процессором. Крепится позади блока ЦП и обеспечивает расширение локальной шины ЦП. Можно присоединить до 7 плат, каждый из которых предоставляет 8K до 64k адресного пространства.

Дискета (Blank Floppy)

Новое! Пустая компьютерная дискета.

Блутрический Мотор (Blulectric Motor)

Новое! Эта машинная часть используется в устройствах, которые требуют вращающего момента.

Медная Катушка (Copper Coil)

Новое! Катушка обернутая в медную проволоку, требуется для машин создающих магнитную индукцию.

Центральный процессор (Central Processing Unit)

Новое! Ядро компьютера. Этот rpc8/e обеспечивает полную функциональность 6502 микропроцессора, включает несколько расширений.

Дисковод (Disk Drive)

Новое! Соединяется с ЦП через Плоский Кабель. В него можно вставить дискеты для сохранения или загрузки програм. Вставить и извлечь дискету можно с помощью щелчка ПКМ по прибору.

Загрузочный диск FORTH (FORTH Boot Disk)

Новое! Диск, содержащий интерпретатор FORTH, который позволяет загрузить его на ваш компьютер. Бесформенный рецепт.

Расширитель IO (IO Expander)

Новое! Соединяется с вашим компьютером и позволяет управлять сигналом в Связках проводов.

Монитор (Monitor)

Новое! Устройство для вывода изображения с вашего компьютера. Также используется для ввода информации.

Плоский кабель (Ribbon Cable)

Новое! Соединяет все компьютерные приборы между собой.
 

Hel_ISR

妖怪
Команда форума
Лорд-Инквизитор
Adeptus Mechanicus
Инквизитор
Куратор проекта
Регистрация
24.03.2011
Сообщения
17 598
Minecraft
nope
Re: Подготовка RedPower на 1.2.5

Краткий курс по FORTH

Вы сделали все компоненты и разместили их. Но дальше возникает вопрос: "Что же делать дальше?". Чтобы ответить на этот вопрос, для начала нужно знать, что компьютеры RedPower базируются на языке программирования FORTH. Поэтому нужно научиться базовым операциям на нем.
Я попытаюсь доступным языком объяснить принцип работы с ним.

1. Введение в FORTH

Для начала попробуем сложить 2 + 2
Для начала нужно записать наши числа и только потом ставить знак требуемого действия:
Код:
2 2 +
Но нажав ввод ничего не происходит. В чем же ошибка? Ошибка в том, что мы не указали что же надо вывести. Для вывода результата требуется добавить в конце ".".
Выглядеть запись будет так:
Код:
2 2 + .
Что мы узнали:
1. Немного о структуре FORTH
2. Вычисление в FORTH
3. "." требуется для выведения результата

2. Более интересные вещи

Теперь пора научиться выводить тексты. Разберем на простом примере: "Hi VikR".

Для начала нужно создать саму программу:
Код:
: test
"test" всего лишь название программы и может быть любым.

Программа создана, и мы приступаем к её написание.
Пишем сообщение для вывода:
Код:
." Hi VikR"
Нажимаем enter.
Само сообщение заключается в кавычки. Пробел между первой кавычкой и сообщением обязателен.

Теперь осталось завершить программу с помощью ";". Точка с запятой сообщается компьютеру о завершении программа.

Конечный результат:
Код:
: test
." Hi VikR"
;
Теперь при вводе названия программы, в данном случае "test", будет выводиться ваше сообщение.

Что мы узнали:
1. Как создать программу
2. Как вывести сообщение на экран
3. Как запустить программу

3. Сигналы

Пора научиться работать с редстоун сигналами. Для этого потребуется Декодер IO.

Для работы с сигналами используется слово IOX. У него есть несколько разновидностей:
Код:
IOX!
IOX@
IOXSET
IOXRST
Вначале рассмотрим IOX!. Он отправит сигнал в Декодер IO, который переведет 16 битный сигнал в связку проводов.
Используется это так:
Код:
1 IOX!
Будет послан 1 сигнал в белый провод, так как его код равен 1.

Узнать какой цвет задействован можно с помощью следующей команды:
Код:
IOX@ .
Не забываем что для вывода информации требуется "."

Что же делать, если вам нужно отредактировать 1 сигнал, при этом не задев другие? Для этого используются команды IOXSET и IOXRST.
IOXSET установит указанный бит в 1. IOXRST сбросит же к 0.
Работает это так:
Код:
4 IOXSET
4 IOXRST
Будет подан сигнал на розовый провод (3-ий провод = 4) и потом снова убран.

Что мы узнали:
1. Как послать и получить редстоун сигнал через IOX
2. Более продвинутые способы управлять битами

4. Память

Следующее что мы будем рассматривать - переменные и константы.

Переменные - это места, где числа могут быть введены и сохранены пока не потребуются программы, могут меняться во время программы.
Константы - подобные переменным, но не могут измениться, они постоянны, как число Пи.

Переменные и константы должны быть записаны перед запуском программы.

Определить переменную или константу можно так:
Код:
0 VARIABLE var
0 CONSTANT const
Мы создаем переменную "var" и устанавливаем её на 0.

Если вам нужно модифицировать существующую переменную во время программы, то можно поступить так:
Код:
*Значение* *Имя переменной* !
Новое значение переменной указывается с помощью пометки "!"

Программы, где переменные могут быть полезны:
Код:
VARIABLE time
1 CONSTANT lump
: testvar
20 time !
lump IOXSET
time @ TICKS
lump IOXRST
;
Лампа присоединена к белому проводу, который является проводом 1, мы используем константу, чтобы сохранить число провода для использования позже в качестве постоянной "lump".
time - отрезок времени, когда лампа включена, который равен 20 тикам или 1 секунде.
Команду IOX мы рассматривали выше, так что нового в ней ничего.
Команда TICKS очень проста - это задержка перед следующей функцией.
Программа включает лампу и после одной секунды выключает её.

Что мы узнали:
1. Что такое переменные и константы
2. Как изменять переменные
3. Узнали о практическом применении переменных и констант

5. Циклы

Каждый раз вводить команду не очень удобно. Поэтому научимся работать с циклами. Для этого мы используем DO. DO будет повторять заданное действие указанное количество раз.
Рассмотрим простой пример, в котором "test do loop" будет выведено на экран 10 раз:
Код:
: doloop
10 0 DO
." test do loop"
LOOP
;
Второе число может использоваться в цикле, как разность между первым и вторым числом.
Код:
: doloop2
10 5 DO
." test do loop 2"
LOOP
;
Нам выведет "test do loop 2" 5 раз.

Рассмотрим теперь на примере с лампами, присоединенными к соответствующим проводам:
Код:
: doloop3
5 0 DO
1 IOXSET
40 TICKS
1 IOXRST
60 TICKS
LOOP
;
Лампа будет включена на 2 секунды (40 тиков) и потом выключится, через 3 секунды (60 тиков) снова будет включена. И так будет 5 раз.

На этом я заканчиваю краткий курс по FORTH.
 

Hel_ISR

妖怪
Команда форума
Лорд-Инквизитор
Adeptus Mechanicus
Инквизитор
Куратор проекта
Регистрация
24.03.2011
Сообщения
17 598
Minecraft
nope
Re: Подготовка RedPower на 1.2.5

Словарь
Данный словарь может содержать ошибки и неполное описание. Просьба сообщать о всех найденных неточностях.


Цвета проводов в связках
Код:
Bit      Dec       Hex       Color
 1          1       0x1       White
 2          2       0x2       Orange
 3          4       0x4       Magenta
 4          8       0x8       Light Blue
 5         16      0x10       Yellow
 6         32      0x20       Lime
 7         64      0x40       Pink
 8        128      0x80       Gray
 9        256     0x100       Light Gray
10        512     0x200       Cyan
11       1024     0x400       Purple
12       2048     0x800       Blue
13       4096    0x1000       Brown
14       8192    0x2000       Green
15      16384    0x4000       Red
16      32768    0x8000       Black
Обозначения
Для описания синтаксиса будут использоваться следующие обозначения:
Код:
( <Input> -- <Output> )
Слева <input> перечисляет все входные параметры для работы команды, если таковые имеются.
-- используется в качестве разделителя, если не указано, то обозначает само слово.
Справа <output> описывает все выходные параметры, необязательный параметр.

Вот несколько примеров:
( -- ) - не требуется дополнительных параметров.
( n -- ) - будет указывать на существующее значение, после удалится.
( -- n ) - будет указывать новое значение при использовании, не изменяет существующие значения.
( n1 -- n ) - сочетание ( n -- ) и ( -- n ), где существующие значения n1 заменяется на n.
( n1 n2 -- n ) - два существующих значений n1 и n2 заменяются одним значением n.

В случае необходимости будут использоваться префиксы, они используются для обозначения ожидающегося значения:
Префикс: n
Описание: Целое число с обычной точностью (16 бит).
Пример:

Код:
+ ( n1 n2 -- n )
/для описания сложения
Префикс: d
Описание: Целое число с двойной точностью (32 бит).
Пример:

Код:
- ( d1 d2 -- d )
/для описания вычитания
Префикс: b
Описание: Значение байта (8 бит).
Пример:

Код:
AND ( b1 b2 -- b )
/для логической операции AND
Префикс: addr
Описание: Работа с основной памятью.
Пример:

Код:
! ( n addr -- )
/для описания операции записи в память
Префикс: f
Описание: Логический флаг TRUE (<>0 or FALSE (=0).
Пример:

Код:
= ( n1 n2 -- f )
/для описания оператора сравнения
Кроме того, префиксы выше 0 (нуля) в качестве входных данных указывает на пустой стек, используемые в качестве выходных данных указывают на то, что стек будет удален после выполнения текущей команды.
Кроме того "..." указывает на последовательность значений, например ( nN...n1 -- ) описывает N значений присутствующих в стеке.
Далее обратите внимание: любой термин обозначает значение 16-битного целого числа и любой символ термина (или знаки) составляет один байт.

Взаимодействие с терминалом
Слово: PAGE
Синтаксис: ( -- )
Описание: Очищает экран и перемещает курсор в левый верхний угол.
Пример:
Код:
PAGE
Слово: SCROLL
Синтаксис: ( -- )
Описание: Перемещает контент на одну строку вверх.
Пример:
Код:
SCROLL
Слово: AT-XY
Синтаксис: ( n1 n2 -- )
Описание: Переместит курсор по x=n1, y=n2.
Пример:
Код:
0 0 AT-XY
/курсор будет перемещен в левый верхний угол
Слово: EMIT
Синтаксис: ( b -- )
Описание: Выдаст данный ASCII код.
Пример:
Код:
65 EMIT
/выведет A
Слово: CR
Синтаксис: ( -- )
Описание: Пропускает строчку вниз с увеличенным отступом.
Пример:
Код:
CR
Слово: SPACE
Синтаксис: ( -- )
Описание: Делает пробел между символами.
Пример:
Код:
SPACE
Слово: BS
Синтаксис: ( -- )
Описание: Отменяет действие и возвращает курсор на изначальную позицию.
Пример:
Код:
BS
Слово: KEY?
Синтаксис: ( -- f )
Описание: Проверяет клавиши, выдаст значение TRUE или FALSE
Пример:
Код:
BEGIN <code> KEY? UNTIL
Слово: KEY
Синтаксис: ( -- b )
Описание: Ждёт нажатия клавиши и выдает ASCII-код при нажатии клавиши.
Пример:
Код:
KEY 32 = IF <code> THEN
Слово: .
Синтаксис: ( n -- )
Описание: Выводит последнее зачение на экран.
Пример:
Код:
1 2 3 .
/выведет 3
Слово: U.
Синтаксис: ( n -- )
Описание: Выводит беззнаковую версию "."
Пример:
Код:
-32 U.
/выведет 65504 (что эквивалентно FFE0)
Слово: ."
Синтаксис: ." <string>"
Описание: Выведет определенные данные.
Пример:
Код:
." Hello World"
/выведет Hello World
Слово: TYPE
Синтаксис: ( addr -- )
Описание: Выведет данные начиная с указанного адреса на терминал.

Слово: ACCEPT
Синтаксис: ( addr n -- addr )
Описание: Для ввода пользовательских данных и записи их в буфер, начиная с указанного адреса.

Связанные со стеками
Слово: DEPTH
Синтаксис: ( -- n )
Описание: Вернет последнее числовое значение в стеке.
Пример:
Код:
1 2 3 DEPTH .
/выведет 3
Слово: .S
Синтаксис: ( -- )
Описание: Выводит все значения из стека (не удаляет значения из памяти).
Пример:
Код:
1 2 3 .S
/выведет 1 2 3
Слово: DUP
Синтаксис: ( n -- n n )
Описание: Дублирует значение стека.
Пример:
Код:
2 DUP .S
/выведет 2 2
Слово: ?DUP
Синтаксис: ( n -- n n )
Описание: Дублирует значение стека, если это не ноль.
Пример:
Код:
0 ?DUP .S
/выведет 0
Слово: 2DUP
Синтаксис: ( n1 n2 -- n1 n2 n1 n2 )
Описание: Дублирует два последих значения в стеке.
Пример:
Код:
1 2 3 2DUP .S
/выведет 1 2 3 2 3
Слово: DROP
Синтаксис: ( n -- )
Описание: Отбрасывает последнее значение из стека.
Пример:
Код:
1 2 3 DROP .S
/выведет 1 2
Слово: 2DROP
Синтаксис: ( n1 n2 -- )
Описание: Тоже самое, что и DROP, но отбрасывает последние два значения
Пример:
Код:
1 2 3 2DROP .S
/выведет 1
Слово: SWAP
Синтаксис: ( n1 n2 -- n2 n1 )
Описание: Меняет местами два поледних числа.
Пример:
Код:
1 2 3 4 SWAP .S
/выведет 1 2 4 3
Слово: 2SWAP
Синтаксис: ( n1 n2 n3 n4 -- n3 n4 n1 n2 )
Описание: Тоже самое, что и SWAP, но меняет местами пару последних чисел.
Пример:
Код:
1 2 3 4 2SWAP .S
/выведет 3 4 1 2
Слово: PICK
Синтаксис: ( nN...n1 n0 -- nN...n1 n )
Описание: Выбирает число n0 из стека и переводит его в n (при этом само число n0 будет удалено, но НЕ само выбранное выбранное значение)(считается сзади, например если n0=0, то будет выдано последнее значениеиз стека n1),
Пример:
Код:
1 2 3 4 1 PICK .S
/выведет 1 2 3 4 3
Слово: OVER
Синтаксис: ( nN...n2 n1 -- nN...n2 n1 n2 )
Описание: Тоже самое, что и 1 PICK.
Пример:
Код:
1 2 3 4 OVER .S
/выведет 1 2 3 4 3
Слово: 2OVER
Синтаксис: ( nN...n3 n2 n1 -- nN...n3 n2 n1 n3 )
Описание: Тоже самое, что и 2 PICK.
Пример:
Код:
1 2 3 4 2OVER .S
/выведет 1 2 3 4 2
Слово: ROT
Синтаксис: ( n1 n2 n3 -- n2 n3 n1 )
Описание: Меняет местами три последних значения стека.
Пример:
Код:
1 2 3 4 ROT .S
/выведет 1 3 4 2
Слово: -ROT
Синтаксис: ( nN...n1 -- n1 nN...n2 )
Описание: Инверсия ROT.
Пример:
Код:
1 2 3 4 -ROT .S
/выведет 1 4 2 3
Слово: NIP
Синтаксис: ( n1 n2 -- n2 )
Описание: Удаляет предпоследнее значение.
Пример:
Код:
1 2 3 NIP .S
/выведет 1 3
Слово: TUCK
Синтаксис: ( n1 n2 -- n2 n1 n2 )
Описание: Дублирует последнее значение и вставляет его перед последними двумя значениями.
Пример:
Код:
1 2 TUCK .S
/выведет 2 1 2
Слово: R>
Описание: Извлекает значение из стека и помещает его в R-стек*

Слово: >R
Описание: Извлекает содержимое из R-стека и помещает его в стек.

Слово: SP@
Синтаксис: ( -- addr )
Описание: Возвращает текущий указатель вершины стека.
Пример:
Код:
ABORT
SP@ .
/выведет 512 (изначальное значение при загрузке)
Слово: SP!
Синтаксис: ( addr -- )
Описание: Устанавливает указатель вершины стека.
Пример:
Код:
512 SP!
/вернет изначальное значение стека
Слово: 0SP
Синтаксис: ( -- )
Описание: Восстановит значение указателя вершины стека.

Слово: RP@
Синтаксис: ( -- addr )
Описание: Тоже самое, что и SP@, но работает с R-стеком.

Слово: RP!
Синтаксис: ( -- addr )
Описание: Тоже самое, что и SP!, но работает с R-стеком.

*R-стек - стек возвратов

Основные команды
Слово: EXIT
Синтаксис: ( -- )
Описание: Незамедлительно выйдет из слова, продолжит выполнение в предыдущем слове
Пример:
Код:
KEY? IF EXIT THEN

Слово: LEAVE
Синтаксис: ( -- )
Описание: Прерывает выполнение и очищает стек. Выходит из циклов, при этом выполнение программы продолжится после маркера окончания цикла. Заметьте, что можно использовать только для ограниченых циклов; для бесконечных цикло лучше использовать WHILE.


Слово: ABORT
Синтаксис: ( -- 0 )
Описание: Прерывает выполнение и очищает возвращаемый стек.
Пример:
Код:
KEY? IF ABORT THEN

Слово: DO
Синтаксис: ( n1 n2 -- )
Описание: Цикл от n2 до n1 (исключается).
Пример:
Код:
Код:
: hello 5 0 DO ." Hello World" CR LOOP ;
/при вызове программы hello выведет Hello World+CR 5 раз

Слово: ?DO
Синтаксис: ( n1 n2 -- )
Описание: Тоже самое, что и DO, но перед началом цикла проверяет все условия для выполнеия.


Слово: LOOP
Синтаксис: ( -- )
Описание: Обозначет конец цикла, запущенного с помощью DO.
Пример:
Код:
Код:
10 0 DO <code> LOOP

Слово: +LOOP
Синтаксис: ( n -- )
Описание: Тоже самое, что и LOOP, но учитывает при выполнении определенные данные пользователя.
Пример:
Код:
Код:
: hello 10 0 DO ." Hello World" CR 2 +LOOP ;
/при вызове программы hello выведет Hello World+CR 5 раз

Слово: BEGIN
Синтаксис: ( -- )
Описание: Обозначает начальную точку для UNTIL, WHILE или AGAIN цикла.
Пример:
Код:
Код:
BEGIN
KEY? IF LEAVE THEN
10 TICKS
AGAIN
/возобновит выполнение программы после AGAIN, если клавиша была нажата.

Слово: UNTIL
Синтаксис: ( f -- )
Описание: Циклы до флага f = TRUE.
Пример:
Код:
Код:
BEGIN IOX@ 32 AND 0= UNTIL
/будет ждать пока входящий бит 5 выключен

Слово: WHILE
Синтаксис: ( f -- )
Описание: BEGIN code1 WHILE code2 REPEAT выполняет code1. Если code1 выолненно, то выполняется code2 и цикл продолжается; при продолжении выполняется REPEAT.
Пример:
Код:
Код:
BEGIN IOX@ 32 AND 0= WHILE 1 TICK REPEAT
/будет ждать пока входящий бит 5 не включится, потом выжидает 1 тик и запускается по новой

Слово: AGAIN
Синтаксис: ( -- )
Описание: Создает вечный цикл, чтобы выйти нужно использовать LEAVE, EXIT или другие средства для разрушения цикла.
Пример:
Код:
Код:
BEGIN
KEY? IF LEAVE THEN
10 TICKS
AGAIN

Слово: REPEAT
Синтаксис: ( -- )
Описание: Используйте BEGIN ... WHILE... REPEAT цикл, см. выше. (Фактически это только ссылка для AGAIN THEN; можено же с этим словом написать более сложный код, например BEGIN (код для каждой операции) WHILE (тест для UNTIL) UNTIL (UNTIL закрывает цикл) ELSE (сработает, если будет выполненно WHILE) THEN)).
Пример:
Код:
Код:
/другой пример без REPEAT
BEGIN (запуск цикла)
KEY? 0= WHILE (цикл первого уровня)
IOX@ 1 AND 0= WHILE (цикл второго уровня)
AGAIN
ELSE ." White wire is on" THEN
ELSE ." Key pressed" THEN

Слово: UNLOOP
Синтаксис: ( -- )
Описание: Очищает один DO/LOOP. При использовании EXIT требуется отменить каждый DO/LOOP с помощью UNLOOP.


Слово: IF
Синтаксис: ( f -- )
Описание: Выполняет код, если f = TRUE, при этом можно задать дополнительно действие ELSE, которое будет действовать, если f = FALSE.
Пример:
Код:
Код:
KEY? IF ." Key pressed" CR THEN

Слово: THEN
Синтаксис: ( -- )
Описание: Обозначет конец условия IF.


Слово: ELSE
Синтаксис: ( -- )
Описание: Обозначает дополнительное действие условия IF.
Пример:
Код:
Код:
KEY 32 = IF <if-block> ELSE <else-block> THEN

Операторы сравнения
Слово: 0=
Синтаксис: ( n -- f )
Описание: f = TRUE если n = 0


Слово: 0<>
Синтаксис: ( n -- f )
Описание: f = TRUE если n <> 0


Слово: 0<
Синтаксис: ( n -- f )
Описание: f = TRUE если n < 0


Слово: <>
Синтаксис: ( n1 n2 -- f )
Описание: f = TRUE если n1 <> n2


Слово: <
Синтаксис: ( n1 n2 -- f )
Описание: f = TRUE если n1 < n2


Слово: U<
Синтаксис: ( n1 n2 -- f )
Описание: Беззнаковая версия <


Слово: >
Синтаксис: ( n1 n2 -- f )
Описание: f = TRUE если n1 > n2


Слово: U>
Синтаксис: ( n1 n2 -- f )
Описание: Беззнаковая версия >


Слово: <=
Синтаксис: ( n1 n2 -- f )
Описание: f = TRUE если n1 <= n2


Слово: >=
Синтаксис: ( n1 n2 -- f )
Описание: f = TRUE если n1 >= n2


Слово: =
Синтаксис: ( n1 n2 -- f )
Описание: f = TRUE если n1 = n2

Арифметические операторы
Слово: +
Синтаксис: ( n1 n2 -- n )
Описание: Сложение: n = n1 + n2


Слово: -
Синтаксис: ( n1 n2 -- n )
Описание: Вычитание: n = n1 - n2


Слово: *
Синтаксис: ( n1 n2 -- n )
Описание: Умножение: n = n1 * n2


Слово: U*
Синтаксис: ( n1 n2 -- n )
Описание: Беззнаковая версия *


Слово: M*
Синтаксис: ( n1 n2 -- nL nH )
Описание: Тоже самое, что и *, но возвращает двойное значение: малое значение nL и большее значение nH.
Пример:
Код:
Код:
1234 2345 M* .S
/результат 10146 44
(10146+65536*44=2893730)

Слово: UM*
Синтаксис: ( n1 n2 -- nL nH )
Описание: Беззнаковая версия M*


Слово: SM/REM
Синтаксис: ( n1L n1H n2 -- nR n )
Описание: двойное действие деления: n = n1/n2 с остатком nR.
Пример:
Код:
Код:
10146 44 1234 SM/REM .S
/результат 0 2345, and
10147 44 1234 SM/REM .S
/результат 1 2345, and
10145 44 1234 SM/REM .S
/результат 1233 2344

Слово: FM/MOD
Синтаксис: ( n1L n1H n2 -- nR n )
Описание: Тоже самое, что и SM/REM (?)


Слово: UM/MOD
Синтаксис: ( n1L n1H n2 -- nR n )
Описание: Беззнаковая версия SM/REM.


Слово: /MOD
Синтаксис: ( n -- nR nQ )
Описание: Оператор модуля, nR обозначает остаток, а nQ частное
Пример:
Код:
Код:
42 10 /MOD .S
/выведет 2 4

Слово: /
Синтаксис: ( n1 n2 -- n )
Описание: Короткая версия /MOD, которая возвращает только остаток
Пример:
Код:
Код:
10 3 / .S
/выведет 1

Слово: MOD
Синтаксис: ( n1 n2 -- n )
Описание: Разновидность /MOD, которая возвращает только частное
Пример:
Код:
Код:
10 3 MOD .S
/вернет 3

Слово: 1+
Синтаксис: ( n1 -- n )
Описание: Прибавляет к данному значению 1
Пример:
Код:
Код:
41 1+ .
/выведет 42

Слово: 1-
Синтаксис: ( n1 -- n )
Описание: Уменьшает данное значение на 1
Пример:
Код:
Код:
43 1- .
/выведет 42

Слово: NEGATE
Синтаксис: ( n1 -- n )
Описание: Инверсия n1
Пример:
Код:
Код:
-42 NEGATE .
/выведет 42
42 NEGATE .
/выведет -42

Слово: MAX
Синтаксис: ( n1 n2 -- n )
Описание: Выдаст максимальное значение
Пример:
Код:
Код:
42 33 MAX .
/выведет 42

Слово: MIN
Синтаксис: ( n1 n2 -- n )
Описание: Выдаст минимальное значение
Пример:
Код:
Код:
42 33 MIN .
/выведет 33
Бинарные операторы
Слово: AND
Синтаксис: ( n1 n2 -- n )
Описание: Вернет n1 И n2.
Пример:
Код:
Код:
1 3 AND
/вернет 1
(00000001 & 00000011 = 00000001)

Слово: OR
Синтаксис: ( n1 n2 -- n )
Описание: Вернет n1 ИЛИ n2.
Пример:
Код:
Код:
1 2 OR
/вернет 3
(00000001 | 00000010 = 00000011)

Слово: XOR
Синтаксис: ( n1 n2 -- n )
Описание: Вернет n1 ИСКЛЮЧАЮЩЕЕ ИЛИ n2.
Пример:
Код:
Код:
1 3 XOR
/вернет 2
(00000001 ^ 00000011 = 00000010)

Слово: INVERT
Синтаксис: ( n1 -- n )
Описание: Возвращает инверсию n1.
Пример:
Код:
Код:
HEX AA INVERT .
/вернет 55
(10101010 -> 01010101)

Слово: 2*
Синтаксис: ( n1 -- n )
Описание: Умножает значение n1 на 2.
Пример:
Код:
Код:
1 2*
/результат 2

Слово: 2/
Синтаксис: ( n1 -- n )
Описание: Делит значение n1 на 2.
Пример:
Код:
Код:
4 2/
/результат 2

Слово: <<
Синтаксис: ( n1 n2 -- n )
Описание: Умножает n1 на 2 n2 раз в битах.
Пример:
Код:
Код:
1 3 <<
/результат 8

Слово: U>>
Синтаксис: ( n1 n2 -- n )
Описание: Делит n1 на 2 n2 раз в битах.
Пример:
Код:
Код:
8 3 U>>
/результат 1

Переменные, константы и т.п.
Слово: VARIABLE
Описание: Создает переменную с именем, значение по умолчанию 0.
Пример:
Код:
Код:
VARIABLE test

Слово: CONSTANT
Описание: Создает константу с именем и определенным значением.
Пример:
Код:
Код:
42 CONSTANT test

Слово: CREATE
Описание: Создает новое слово с дополнительными опциями.
Пример:
Код:
Код:
CREATE test 10 CELLS ALLOT
/создает массив с именем test и значением 10 в общей сложности

Слово: @
Синтаксис: ( addr -- n )
Описание: Читает значение из указанного адреса addr.
Пример:
Код:
Код:
test @ .
/выведет значение переменной test

Слово: !
Синтаксис: ( n addr -- )
Описание: Установит значение переменной n в адрес addr.
Пример:
Код:
Код:
42 test !
/значение переменной test станет 42

Слово: C!
Синтаксис: ( addr -- b )
Описание: Тоже самое, что и @, но читает байтовое значение указанного адреса.
Пример:
Код:
Код:
test C@

Слово: C@
Синтаксис: ( b addr -- )
Описание: Тоже самое, что и !, но устаавливает байтовое значение в указанный адрес.
Пример:
Код:
Код:
42 test C!

Слово: +!
Синтаксис: ( n addr -- )
Описание: Увеличит значение addr на n.


Слово: -!
Синтаксис: ( n addr -- )
Описание: Уменьшит значение addr на n.


Слово: CELL
Синтаксис: ( -- n )
Описание: Вернет размер значения.
Пример:
Код:
Код:
CELL .
/выведет 2

Слово: CELLS
Синтаксис: ( n1 -- n )
Описание: Вернет размер n1 значения.
Пример:
Код:
Код:
10 CELLS .
/выведет 20
(10 значений каждые 2 байта)

Слово: ALLOT
Синтаксис: ( n -- addr )
Описание: Выделяет n байтов памяти и возвращает начало блока addr.
Пример:
Код:
Код:
10 CELLS ALLOT
/выделит 10 значений (20 байтов)

Слово: ,
Синтаксис: ( n -- )
Описание: Выделяет значение на конец кода программы и назначает n (более короткая версия n CELL ALLOT !)


Слово: ,C
Синтаксис: ( b -- )
Описание: Тоже самое, что и "," , но выделяет и сохраняет значение в байтах.


Слово: ,S
Синтаксис: ( addr -- )
Описание: Тоже самое, что и "," , но выделяет и копирует строку, источник которой хранится в addr.

Предопределенные переменные и константы
Слово: TRUE
Тип: C
Синтаксис: ( -- f )
Описание: Выдаст вам значение флага TRUE.
Пример:
Код:
Код:
TRUE .
/выведет -1


Слово: FALSE
Тип: C
Синтаксис: ( -- f )
Описание: Выдаст вам значение флага FALSE.
Пример:
Код:
Код:
FALSE .
/выведет 0

Слово: BL
Тип: C
Синтаксис: ( -- n )
Описание: Выдаст вам ASCII значение пробела.
Пример:
Код:
Код:
BL .S
/выведет 32

Слово: BL
Тип: C
Синтаксис: ( -- n )
Описание: Выдаст вам ASCII значение пробела.
Пример:
Код:
Код:
BL .S
/выведет 32

Слово: I
Тип: C
Синтаксис: ( -- n )
Описание: Вернет текущий счетчик (внутренний) цикла.
Пример:
Код:
Код:
<do> I . <loop>

Слово: J
Тип: C
Синтаксис: ( -- n )
Описание: Вернет текущий счетчик (внешний) цикла.
Пример:
Код:
Код:
<внешний DO> <внутренний DO>
J 10 * I + .
<внутренний LOOP> <внешний LOOP>

Слово: RADIX
Тип: V
Синтаксис: ( -- addr )
Описание: Текущая система счисления анализируется и выводится её значение.
Пример:
Код:
Код:
RADIX @ . \
/выведет 10 (по умолчанию)
16 RADIX !
/поменяет на шестнадцатеричную систему счисления

Слово: SP0
Тип: C
Синтаксис: ( -- n )
Описание: Вернет начальный адрес стека.
Пример:
Код:
Код:
SP0 .
/выведет 512

Слово: RP0
Тип: C
Синтаксис: ( -- n )
Описание: Вернет начальный адрес R-стека.
Пример:
Код:
Код:
RP0 .
/выведет 768

Слово: STATE
Тип: V
Синтаксис: ( -- addr )
Описание: Текущее состояние компилятора (0 = промежуточный режим, 1 = режим компиляции).


Слово: VOCAB
Тип: V
Синтаксис: ( -- addr )
Описание: Адрес последнего известного слова.


Слово: TOP
Тип: V
Синтаксис: ( -- addr )
Описание: Вершина доступной памяти (размер установленной памяти -1)
Пример:
Код:
Код:
HEX TOP @ .
/выведет 1FFF

Слово: TERMADDR
Тип: V
Синтаксис: ( -- addr )
Описание: Текущий адрес терминала.


Слово: DISKADDR
Тип: V
Синтаксис: ( -- addr )
Описание: Текущий адрес дисковода.


Слово: IOXADDR
Тип: V
Синтаксис: ( -- addr )
Описание: Текущий адрес декодера IO.


Слово: SCRATCH
Тип: C
Синтаксис: ( -- n )
Описание: ?


Слово: TIB
Тип: C
Синтаксис: ( -- n )
Описание: Указатель на входной буфер терминала.


Слово: TIBPTR
Тип: V
Синтаксис: ( -- addr )
Описание: Указатель на оставшиеся строки интерпретировавшиеся во входной буфер терминала.


Слово: (HERE)
Тип: V
Синтаксис: ( -- addr )
Описание: Адрес ячейки памяти, где будет хранится новый программный код.


Слово: (blkbuf)
Тип: V
Синтаксис: ( -- addr )
Описание: Хранит блок адресов буфера.


Слово: (blkno)
Тип: V
Синтаксис: ( -- addr )
Описание: Сохраняет текущий активный номер блока.


Слово: (blkup)
Тип: V
Синтаксис: ( -- addr )
Описание: Сохраняет блок модифицированного флага.

Тип: V = переменная (всегда возвращает адрес, для получения значения нужно использовать @), C = константа (для получения значения не требуется использование @)

Взаимодействие между устройствами
Слово: RBP!
Синтаксис: ( n -- )
Описание: Используется для выбора используемого устройства.
Пример:
Код:
Код:
2 RBP!
/будет выбран дисковод, если используются стандартные ID

Декодер IO
Слово: IOX@
Синтаксис: ( -- n )
Описание: Используется для чтения активных сигналов в Декодере IO, возвращает как n.
Пример:
Код:
Код:
IOX@ .
/выведет активный сигнал

Слово: IOX!
Синтаксис: ( n -- )
Описание: Используется для установки исходящего сигнала.
Пример:
Код:
Код:
1 IOX!
/включит белый провод (при этом все остальные будут сброшены)

Слово: IOXSET
Синтаксис: ( n -- )
Описание: Используется для установки отдельных битов Декодере IO, при этом не изменяя другие.
Пример:
Код:
Код:
1 IOXSET
/включит белый провод, все остальные останутся в прежнем состоянии

Слово: IOXRST
Синтаксис: ( n -- )
Описание: Используется для сброса отдельных битов Декодере IO, при этом не изменяя другие.
Пример:
Код:
Код:
1 IOXRST
/сбросит белый провод, все остальные останутся в прежнем состоянии

Связанные с дискетами
Слово: DISKNAME"
Синтаксис: DISKNAME" <name>"
Описание: Имя дискеты.


Слово: DISKID
Синтаксис: ( -- )
Описание: Выводит уникальный ID дискеты.


Слово: SAVE"
Синтаксис: SAVE" <name>"
Описание: Задает имя вашей дискеты и записывает на неё содержимое памяти (начинает с адреса 0x500 до текущего значения HERE, также округляет в большую сторону до следующих 128 байт, чтобы полностью заполнить сектор).


Слово: DISKWS
Синтаксис: ( addr n -- )
Описание: Записывает 128 байт памяти в указанный addr в сектор дискеты n.


Слово: DISKRS
Синтаксис: ( addr n -- )
Описание: Читает 128 байт из сектора дискеты n указанного addr.


Слово: BLOCK
Синтаксис: ( n -- addr )
Описание: Загружает блок n в память и делает его активным, при этом возвращает адрес первого прочитанного байта в addr (также очистит ранее активные блоки на дискете перед загрузкой новой).


Слово: LIST
Синтаксис: ( n -- )
Описание: Как BLOCK, но выводит содержимое блока в конце (текущая реализация LIST изменит систему счисления на десятичную).
Пример:
Код:
Код:
1 LIST
/будет перечислено содержимое первого блока

Слово: LOAD
Синтаксис: ( n -- )
Описание: Как BLOCK, но выполняет код после загрузки.


Слово: WIPE
Синтаксис: ( -- )
Описание: Стирает все содержимое активного блока.


Слово: FLUSH
Синтаксис: ( -- )
Описание: Очищает активные блоки на дискете.


Слово: REVERT
Синтаксис: ( -- )
Описание: Возвращает данные с диска, отменяя все изменения активных блоков.


Слово: UPDATE
Синтаксис: ( -- )
Описание: Действия текущего блока должны быть помечены, как измененные.


Слово: PP
Синтаксис: <line> PP <content>
Описание: Редактирует линию <line>, заменяя существующий контент с <content>.

Разные слова
Слово: EXECUTE
Синтаксис: ( addr -- )
Описание: Устанавливает счетчик программ в память и выполняет их.
Пример:
Код:
Код:
' TEST EXECUTE
/выполнит TEST

Слово: QUIT
Синтаксис: ( -- )
Описание: Перезагружает интерпретатор FORTH, стирает стек и R-стек.


Слово: WORDS
Синтаксис: ( -- )
Описание: Выведет все известные слова.


Слово: HIDE
Синтаксис: ( -- )
Описание: Скроет последнее определенное слово, предотвращая его выполнение.


Слово: REVEAL
Синтаксис: ( -- )
Описание: Покажет последнее определенное слово.


Слово: FORGET
Синтаксис: FORGET <word>
Описание: Удалит данное слово (при этом удалит все слова определенные позже).
Пример:
Код:
Код:
: test1 <code> ;
: test2 <code> ;
FORGET test1
/будет удален и test1, и test2

Слово: HEX
Синтаксис: ( -- )
Описание: Перейдет в шестнадцатеричную систему счисления.


Слово: DECIMAL
Синтаксис: ( -- )
Описание: Перейдет в десятичную систему счисления.


Слово: TICK
Синтаксис: ( -- )
Описание: Ждет 1 тик (1/20 секунды).


Слово: TICKS
Синтаксис: ( n -- )
Описание: Ждет указанное количество тиков.
Пример:
Код:
Код:
20 TICKS
/будет ждать 1 секунду

Слово: TIMES
Синтаксис: n TIMES <word>
Описание: Повторяет данное слово n раз.
Пример:
Код:
Код:
10 TIMES SPACE

Слово: HERE
Синтаксис: ( -- n )
Описание: Ячейка памяти, где будет хранится новый программный код.


Слово: FREE
Синтаксис: ( -- n )
Описание: Вернет количество свободной памяти.
Пример:
Код:
Код:
FREE .
/выведет 600 (если система чистая и нет дополнительных модулей памяти)

Слово: [
Синтаксис: ( -- )
Описание: Переход в режим компиляции.


Слово: ]
Синтаксис: ( -- )
Описание: Переход в промежуточный режим.


Слово: :
Синтаксис: : <word>
Описание: Позволяет создать новое слово, после <word> будет переход в режим компиляции.


Слово: ;
Синтаксис: ( -- )
Описание: Обозначает конец при создании слова.


Слово: (
Синтаксис: ( <comment>)
Описание: Добавляет комментарий, конец которого обозначается )


Слово: \
Синтаксис: \ <comment><CR>
Описание: Как (, но концом является CR.


Слово: STRLEN
Синтаксис: ( addr -- n )
Описание: Возвращает длину n строкой данного addr. (?)


Слово: RSTRLEN
Синтаксис: ( addr -- n )
Описание: Почти как STRLEN, но действует наоборот.


Слово: STRCMP
Синтаксис: ( addr1 addr2 -- n )
Описание: Сравнивает две строки в addr1 и addr2, возвращая 1, если str1 <> str2 или 0, если str1 = str2.


Слово: ISNUM
Синтаксис: ( addr -- f )
Описание: Проверяет строку в addr на интерпретируемость и на знаковое значение.


Слово: ISUNUM
Синтаксис: ( addr -- f )
Описание: Как ISNUM, но без отрицательных значений.


Слово: ATOI
Синтаксис: ( addr -- n )
Описание: Преобразует строки addr в знаковое значение, возвращаемое, как n.


Слово: UATOI
Синтаксис: ( addr -- n )
Описание: Тоже самое, что и ATOI, но только для беззнаковых значений.


Слово: UITOA
Синтаксис: ( n -- addr )
Описание: Преобразует беззнаковые значения n в строку и возвращает строку адреса.


Слово: MEMCMP
Синтаксис: ( addr1 addr2 n1 -- n )
Описание: Сравнивает два блока памяти в addr1 и addr2, заданной длины n1. Возвращает 1, если block1 <> block2 или 0, если block1 = block2.


Слово: FILL
Синтаксис: ( addr n b -- )
Описание: Заполняет блок памяти addr длиной n с помощью байтового значения b.


Слово: MOVE
Синтаксис: ( addr1 addr2 n -- )
Описание: Копирует n байтов из addr1 в addr2.


Слово: '
Синтаксис: ' <word>
Описание: Ищет данное слово и возвращает его адрес или сообщение об ошибке.
Пример:
Код:
Код:
' RADIX .
/выведет 2859

Внутренние слова
Слово: COLD
Синтаксис: ( -- )
Описание: Запускает ОС и выводит загрузочное сообщение.


Слово: DOES>
Синтаксис: ( -- )
Описание: ?


Слово: (do)
Синтаксис: ( -- )
Описание: ?


Слово: (?do)
Синтаксис: ( -- )
Описание: ?


Слово: (loop)
Синтаксис: ( -- )
Описание: ?


Слово: (+loop)
Синтаксис: ( -- )
Описание: ?


Слово: (leave)
Синтаксис: ( -- )
Описание: ?


Слово: (")
Синтаксис: ( -- )
Описание: ?


Слово: (does)
Синтаксис: ( -- )
Описание: ?
 

Hel_ISR

妖怪
Команда форума
Лорд-Инквизитор
Adeptus Mechanicus
Инквизитор
Куратор проекта
Регистрация
24.03.2011
Сообщения
17 598
Minecraft
nope
Re: Подготовка RedPower на 1.2.5

Низкоуровневое управление устройствами (by HitriyLis) ©

Стандартный ФОРТ позволяет использовать устройства не вникая в механизм их работы, но в нём нет слов, позволяющих использовать все возможности этих устройств. Управляются устройства через собственную память, доступ к которой можно получить с помощью RBP! (память этих устройств как бы "отображается" в памяти компьютера). Я буду расписывать "карту" памяти каждого устройства, где число до двоеточия - смещение адреса окна (т.е. если написано 0хFF, то необходим байт с адресом 0х300 + 0хFF = 0х3FF), 2 числа через дефис - диапазон, а после двоеточия - смысл этого байта или диапазона.

Начнём с самого простого - с декодера. В ФОРТе достаточно команд для полноценного управления декодером, поэтому на нём проще объяснить принцип управления. Итак, память декодера выглядит следующим образом:
Код:
0x00-0x01: Регистр входа (это 2-х байтовое число считывает IOX@)
0x02-0x03: Регистр генерации сигнала (это число устанавливает IOX!)
Первые 2 байта, это совокупность сигналов, которые декодер генерирует и принимает (надеюсь, вы уже знаете как кодируются цвета =). Вторая пара байтов - только те сигналы, которые декодер генерирует. Например, если нет никаких сигналов, то оба числа равны 0. Если выполнена команда 2 IOX! и нет других сигналов, то оба числа равны 2. И наконец, если выполнена предыдущая команда и на декодер подаётся сигнал только с белого провода, то первое число 3, а второе 2.

Дисковод:
Код:
0x00-0x7F: Буфер дисковода, размером в 1 сектор.
0x80-0x81: Номер сектора
0x82: Команда для дисковода: (далее значения этого байта)
 0: Ничего или удачное завершение предыдущей команды
 1: Прочитать имя дискеты
 2: Записать имя дискеты
 3: Прочитать ID дискеты (серийный номер)
 4: Прочитать сектор дискеты
 5: Записать сектор дискеты
 0xFF: Неудачное завершение предыдущей команды
Серийный номер:
Каждая дискета, при создании, получает случайный ID, состоящий из 16 HEX цифр в виде строки. Этот ID задаётся раз и навсегда (можно только "сбросить" на ID загрузочной дискеты с ФОРТом). Чтобы прочитать ID, необходимо в байт 0x82 поместить число 3 и подождать, когда дисковод сменит его на 0 или 0xFF (да, на выполнение команды нужно время). После выполнения команды, дисковод оставит в начале буфера ID в виде текста (оставшееся место заполняется нулями). Дисковод выдаст ошибку только в одном случае: если нет дискеты.

Имя:
Каждую дискету можно назвать как угодно и переименовывать сколь угодно раз. Максимальная длина имени 64 символа. Чтение имени аналогично чтению ID, только другая команда. Для того, чтобы изменить имя дискеты, поместите это имя в буфер (не забудте, что последний байт должен быть нулевым) и выполните команду 2.
Ошибка может возникнуть если нет дискеты или вы попытались переименовать загрузочную дискету (у неё защита от записи).

Данные:
Данные с дискеты читаются и записываются на неё только секторами по 128 байт.
На каждой дискете может быть до 2049 секторов, это значит, что дискета может содержать до 262272 байт или, примерно, 256 Кб. Чтобы прочитать с дискеты нужный сектор, поместите его номер в байты 0x80-0x81 и выполните команду 4. Прочитанный сектор будет находится в буфере и вам остаётся только скопировать его в память компьютера (всем этим занимается DISKRS) или изменить данные прямо в буфере для последующей перезаписи.
Ошибка может возникнуть если нет дискеты или требуемый сектор не существует (чтение за пределом файла-образа).
Примечание: если размер файла не кратен 128 байтам, то сектор, содержащий конец файла, может быть прочитан и размещён в буфере, но дисковод не обнулит оставшуюся часть и выдаст ошибку.
Чтобы переписать сектор дискеты, поместите данные в буфер, поместите номер сектора в соответствующие место и выполните команду 5. Ошибка возникнет, если нет дискеты или эта дискета загрузочная (FORTH boot disk).


Терминал:
Разрешение монитора 80х50 знакомест. Нумерация строк и столбцов от 0 сверху-вниз и слева-направо.
Код:
Курсор:
0x01: столбец x
0x02: строка  y
0x03: режим (0: спрятан, 1: сплошной, 2: мигающий)
Буфер ввода с клавиатуры (16 байт, FIFO):
0x04: Указатель начала очереди
0x05: Указатель конца  очереди
0x06: Значение клавиши в начале очереди
Действия с облостями:
0x07: Команда (1: заполнить, 2: выделить(инверсия цвета); 3: копировать)
Координаты левого верхнего угла:
0x08: x координата области источника / Значение для заполнения
0x09: y (необходимо только для копирования)
0x0A: х координата области, требуемой для изменения
0x0B: y
0x0C: Ширина области
0x0D: Высота области
Доступ к видеопамяти:
0x00: Номер строки для чтения/изменения
0x10-0x60: Содержимое строки
Курсор:
Тут всё просто, помещаете в байты 0х01 и 0х02 нужные координаты и курсор переместится (этим занимается AT-XY). С режимом курсора тоже просто. Например, введите HEX 0 303 C! и курсор изчезнет (2 303 С! чтобы его вернуть).

Чтение с клавиатуры:
Терминал самостоятельно читает нажатие клавиш и помещает их значение в собственный буфер (при наличии места), даже если терминал не связан с компьютером. Буфер пуст, если оба указателя равны (это проверяет KEY?). Буфер переполнен, если указатель конца находится перед указателем начала. Таким образом, буфер может реально хранить 15 символов, если 16, то будет невозможно различить переполненный и пустой буфер. Если программе нужно прочитать символ, то необходимо сравнить указатели, если они не равны, то значение необработанной клавиши будет находится в байте 0x06. Терминал никак не реагирует на чтение с буфера, поэтому программе нужно самостоятельно увеличить на 1 указатель начала (всё это выполняет KEY). Заметьте, что терминал самостоятельно уменьшает число указателя, если оно больше 15 (возвращает остаток деления на 16).
Небольшой прикол: введите HEX 7 304 +! и компьютер зациклится выполняя эту команду снова и снова. Эта команда переставляет указатель начала очереди на 7 позиций вперёд, но т.к. очередь закольцована, то реально он переставляется на 9 позиций назад. Буфер теперь не пуст и ФОРТ думает, что вы что-то ввели и обрабатывает это обычным способом. В буфере сохранена предыдущая команда (точнее 3), которая снова колдует с буфером. Терминал работает самостоятельно и из такого цикла можно выбраться нажав 7 раз любую клавишу. Указатель конца очереди дойдёт до позиции, где расположен первый символ команды и при выполнении очередного цикла буфер будет пуст.

Видеопамять:
Программы могут напрямую менять информацию, выводимою на экран. Для этого надо в байт 0x00 поместить номер строки (от 0 до 49) и в последнем диапазоне менять данные по своим нуждам. Терминал может выводить 128 различных символов. Оставшиеся 128 символов те же самые, только выводятся с инверсией цвета (чёрное на зелёном). Различить символы с инверсией можно по старшему биту.

Действие с областями:
При очистке экрана и прокрутке ФОРТ-система не обращается к видеопамяти. Вместо этого она просто посылает команды с нужными параметрами на терминал, а тот сам делает всё необходимое. Это весьма удобно, т.к. можно сохранить место в памяти и сэкономить время на написание кода и в момент его исполнения.

Заполнение:
Для заполнения прямоугольного участка 1 символом нужно сделать следующее:

Номер нужного символа поместите в байт 0x08.
Координаты левого верхнего угла области заполнения поместите в байты 0x0A и 0x0B.
Ширину и высоту заполняемой области поместите в байты 0x0C и 0x0D.
Поместите число 1 в байт 0x07 и ждите завершения команды.

(Команда PAGE заполняет весь экран символом с номером 0х16(пробел))

Выделение:

Координаты левого верхнего угла области для выделения поместите в байты 0x0A и 0x0B.
Ширину и высоту выделяемой области поместите в байты 0x0C и 0x0D.
Поместите число 2 в байт 0x07 и ждите завершения команды.

Например, можно "выделить" весь экран. Для этого введите:
Код:
PAGE (Необходимо, чтобы прокрутка не сбила ваши настройки)
HEX
0  30A ! (Заполняем сразу 2 байта нулями)
50 30C C! (80 столбцов в HEX-е 50)
32 30D C! (50 строк в HEX-е 32)
2  307 C! (Всё зелёное!)
Можно ещё раз ввести последнюю строку (несколько раз)

Копирование:

Координаты левого верхнего угла области, которую хотите скопировать, поместите в байты 0x08 и 0x09.
Координаты левого верхнего угла области, которую нужно изменить, поместите в байты 0x0A и 0x0B.
Ширину и высоту выделяемой области поместите в байты 0x0C и 0x0D.
Поместите число 3 в байт 0x07 и ждите завершения команды.

Стоит обратить внимание, что копирование производится байт за байтом слева-направо и сверху-вниз. Об этом важно помнить, когда области пересекаются.
Например, пусть экран содержит следующий текст:
Код:
ABCDE
FGHIJ
KLMNO
PQRST
UVWXY
Терминал настроен копировать область 3х3 с позиции (1,1)(там где "G") в позицию (1,0)(там где "В"). Результат предсказуем:
Код:
AGHIE
FLMNJ
KQRSO
PQRST
UVWXY
Но, если копировать из (1,1) в (1,2), то результат будет иным:
Код:
ABCDE
FGHIJ
KGHIO
PGHIT
UGHIY
 

Hel_ISR

妖怪
Команда форума
Лорд-Инквизитор
Adeptus Mechanicus
Инквизитор
Куратор проекта
Регистрация
24.03.2011
Сообщения
17 598
Minecraft
nope
Re: Подготовка RedPower на 1.2.5

Программы

Блокировка паролем (by HitriyLis)
Данная программа полностью блокирует компьютер до тех пор, пока не введут правильный пароль. После разблокировки можно проводить любые действия, включая удаление блокировщика. Если вы хотите, чтобы программа выполняла только одно действие (как в предыдущей программе), то вставьте блокировщик (lock) в программу с бесконечным циклом.

Итак:
Сперва нам нужно хранить правильный пароль, но 1 переменной для этого не достаточно.
Как хранить строку? Есть разные способы, но данная реализация ФОРТа использует такое определение:
Строка - последовательность байт, заканчивающиеся нулевым. Каждый байт представляет собой 1 литеру. (т.е. как в Си)
Зарезервируем память под хранение пароля:
Код:
10 CONSTANT len
len ALLOT CONSTANT password
Помните, что последний байт должен быть нулевым, поэтому не забудьте зарезервировать на 1 байт (символ) больше, чем вы хотите. В данном примере пароль ограничен 9-ю символами. Это число может быть больше.

Пароль нам надо с чем-то сравнивать.
Для этого создадим ещё одну переменную:
Код:
len ALLOT CONSTANT buf
Для задания/изменения пароля используйте:
Код:
password len ACCEPT {Нажимаем Enter} {Вводим пароль} {Еще раз Enter}
Чтобы посмотреть текущий пароль необходимо ввести: PASSWORD TYPE
Проверку правильности введённого пароля проверяет STRCMP (сравнение строк).
Осталось описать слово блокировки. Пример:
Код:
: lock
BEGIN
  PAGE
  ." PC is blocked." CR
  ." Enter password: "
  buf len  ACCEPT CR     \Запрашиваем ввод пароля
  password STRCMP 0= DUP \Логическое значение понадобится дважды
  IF
    ." You are right!"
  ELSE
    ." Wrong passwor!" CR
    ." You can try after " \10 секунд
    10 0 DO
      18 3 AT-XY \Это положение я вычислил отдельно
      10 I - .   \предыдущее число заменяется
      20 TICKS   \1 секунда
    LOOP
  THEN
UNTIL ;

Взаимодействие между компьютерами (by HitriyLis)
Как передать данные с одного компьютера на другой?
Есть 3 способа: через дискету, декодер или шину.
С первым всё более-менее понятно.
Второй можно использовать, но это неудобно: узкий канал да и скорость оставляет желать лучшего.

Как работает третий способ:
Диапазон памяти компьютера от 0х300 до 0x3FF используется для связи с устройствами через шину. Командой RBP! (ID-->) эта область становится "окном" устройства. Т.е. при изменении данных в памяти компьютера, эти данные также изменяются в устройстве, и наоборот.
Компьютеры имеют 2 окна: первое для связи с конкретным устройством, а второе только для приёма.
Например, если один компьютер связывается с другим, то окно первого отображает память второго в диапазоне от 0х400 до 0x4FF. Т.е. изменяя байт по адресу 0х305 в первом компьютере, изменяется байт с номером 0х405 во втором.

Пример на практике:
Соединим одной шиной три компьютера с разными ID (условно, ID 0 - первый, 8 - второй, 9 - третий).

Все компьютеры загружаются с одной дискеты, на которой заранее подготовлены новые слова
Код:
HEX
: DUMP //Распечатывает содержимое принимающего окна
500 400 DO
  I C@ EMIT
LOOP ;
Это слово запустил на втором компьютере. Кракозябры в начале блока - это BIOS. Далее сплошная горизонтальная черта (это нулевые байты).

Сотрём этот БИОС со второго компьютера при помощи первого:
Код:
HEX
: NETFILL ( c,ID-->)
RBP!    //Связываем окно с нужным устройством
300 100 ROT //Подготавливаем параметры для следующей команды
FILL ;
Используем: 0 8 NETFILL.
Снова пишем DUMP во втором компьютере. Кракозябры исчезли.

Теперь попробуем отправить строку с первого компьютера во второй.
Просто использовать 8 RBP! 300 100 ACCEPT не получится, т.к. ACCEPT переключит окно и свяжется с терминалом. Пойдём на хитрость:
Код:
HEX
: SEND ( ID-->)
CR ." Enter message: "
400 100 ACCEPT DROP //Сначала записываем строку во второе окно
RBP!              //Переключаем окно
400 300 OVER
STRLEN MOVE ; //А затем копируем в первое
Теперь можно отправить сообщение: 8 SEND <ввожу: Hello, friend!>
На втором компьютере ввожу: 400 TYPE.
И вот что получилось:
На первом:

На втором:

У вас, наверное, возник вопрос: зачем третий компьютер?
Перед тем, как что-то делать на первых двух, на третьем я запустил следующую программу:
Код:
HEX
: SNIFFER ( ID-->)
BEGIN
  DUP RBP!
  300 400 100 MEMCMP //Сравниваю окна.
  0<> IF            //Если они не равны,
   300 400 100 MOVE //то копирую первое во второе
   PAGE DUMP THEN   //и распечатываю.
AGAIN ;[/code
Запустил с параметром 8 SNIFFER.

Каждое действие делал снимок. Итог:
[img]http://i.imgur.com/Ri3fx.png[/img]
[/spoiler]

Пароль на рычагах
[spoiler=]
Суть:
есть несколько рычагов (до 15-ти), правильная их комбинация производит некоторое действие (запрограммированное). Для "ввода" пароля нужно нажать кнопку.

"Железо": У каждого рычага свой цвет (произвольный, уникальный, кроме чёрного).
Кнопка посылает сигнал в чёрный провод.
Декодер, отвечающий за ввод пароля имеет ID 4, а выполняющий некое действие - 3.

Итак, программа:
Первое, что нам нужно - это переменная, содержащая текущий пароль (точнее, комбинацию рачагов)
[code]VARIABLE PASKEY
Для удобства записи (да и лень пересчитывать), установлю шестнадцетеричный режим словом HEX. Ключ можно устанавливать вручную, но в таком случае можно здорово промахнуться. Поэтому описываем слово для установки пароля:
Код:
: SETKEY
4 IOXADDR !
IOX@ 7FFF AND
PASKEY !
RC ." Current key is "
PASKEY @ . ;
Что тут происходит (построчно):
Создаём слово.
Устанавливаем адрес декодера с паролем
Запрашиваем с декодера 2 байта о том, какие сигналы он принимает и отфильтровываем нужные цвета (т.е. чёрный не учитывается)
Сохраняем пароль.
Выводим на терминал сохранённый ключ. (если выдаёт 0, значит что-то не так подключили) Закончили описание.

Следующее: нам понадобится подпрограмма ожидания нажатия на кнопку:
Код:
: WAITBLK
4 IOXADDR !
BEGIN
  10 TICKS
  IOX@ 8000 AND
UNTIL ;
Описание (с 3-й строчки):
Начинаем цикл с пост условием.
Ждём немного.
Опрашиваем декодер и убираем все цвета, кроме чёрного.
Если на вершине стека 0 (нет сигнала) цикл повторяется.

Теперь можно описать слово блокировки.
Оно будет выполняться до тех пор, пока не будет "введён" правильный код:
Код:
: BLOCK
BEGIN
  WAITBLK
  IOX@ 7FFF AND
  PASKEY =
UNTIL ;
Описание (с 3-й строчки):
Ждём сигнала (команду "ввод")
Берём с декодера ключ.
Сравниваем с правильным (чёрный провод не учитываем).
Если ключ не правильный, то повторяем цикл.

Подпрограммы готовы, теперь опишем слово с нужным действием.
В моём случае просто зажигается лампочка на 5 секунд. LAMP.

Опишем "главное слово":
Код:
: MAIN
BEGIN
  BLOCK
  LAMP
AGAIN ;
После запуска этой программы компьютер будет работать зациклено, и единственный способ к нему обратиться - нажать "сброс"
Также, после запуска MAIN можете смело снимать монитор/терминал и дисковод =)

Удачи.

Код целиком:
Код:
VARIABLE PASKEY
HEX

: SETKEY
4 IOXADDR !
IOX@ 7FFF AND PASKEY !
RC ." Current key is" PASKEY @ . ;

: WAITBLK
4 IOXADDR ! BEGIN 5 TICKS
IOX@ 8000 AND UNTIL ;

: BLOCK
BEGIN WAITBLK
IOX@ 7FFF AND
PasKey = UNTIL ;

: MAIN
BEGIN BLOCK
LAMP //Ваше действие.
AGAIN ;

ProtectOS (by HitriyLis)
Многие на серверах хотят ограничить доступ к их компьютерам, для этого они их прячут или ставят пароль. Но если хочется, например, чтобы компьютер управлял дверью в ваш бункер, освещением, вызовом лифта, ещё чем-нибудь по команде, то с паролями могут возникнуть проблемы, т.к. MineOS - открытая система. Пароль, поставленный на отдельное слово, легко взломать средствами ФОРТа. Поставить пароль на полную блокировку тоже не хочется (т.е. должны быть команды для гостей).
В таком случае поможет ОС, надстроенная над ФОРТом, позволяющая выполнять только "разрешённые" команды.
Итак, основа ProtectOS:
Код:
VARIABLE FUNCNUM
0 FUNCNUM !
25 CONSTANT MAXFUNC
MAXFUNC CELLS ALLOT CONSTANT FUNCS

\Поиск во внутреннем словаре
: FINDID \(addr_str-->n)
FUNCNUM @ 0 ?DO
  FUNCS I 2* + @
  >NAME OVER STRCMP
  0= IF DROP
  I LEAVE THEN
LOOP ;

: FINDF  \(addr_str-->addr_func)
FINDID DUP
MAXFUNC > IF
 DROP 0 ELSE
2* FUNCS + @
THEN ;

: INTERPRET  \(addr_str-->) Принимается адрес строки с командами
TIBPTR !
BEGIN
  TIBWORD DUP STRLEN \Признак конца строки с командами
  0<> WHILE
  DUP FINDF ?DUP  \Ищем функцию
  IF NIP EXECUTE  \Если не 0, то исполняем
   ELSE           \иначе, пытаемся представить как число
    DUP C@ ISNUM IF
      ATOI
    ELSE
      ."Unknown Token: " \Можно заменить на 6140 TYPE
     TYPE CR
      EXIT
    THEN
  THEN
REPEAT DROP ;

: WITHIN   \(N,A,B-->b) TRUE, если A<N<B
2 PICK > -ROT > AND ;

: MAIN
RP0 RP! \Отчищаем стек возвратов
BEGIN
  DEPTH -1 100 \Проверка заполненности стека
  WITHIN 0= IF
    ." Empty Stack" \Можно заменить на 6208 TYPE
    0SP THEN
  CR ." > "
  TIB 120 ACCEPT
  SPACE INTERPRET
AGAIN ;
Суть в том, чтобы заменить стандартный словарь и интерпретатор ФОРТа на свой. Внутренний словарь представляет собой массив с адресами разрешённых функций. (Список можно редактировать вручную, но если вы не понимаете как, то смотрите ниже)
Вспомогательные слова для администрирования:
Код:
: ARUN \Замена COLD
0 C@ DISKADDR !
1 C@ TERMADDR !
PROBE TOP !
CR ." ProtectOS Initialized"
MAIN ;
' ARUN 1304 ! \Меняем ссылку для автозапуска

: HELP \Выводит содержание внутреннего словаря
CR FUNCNUM @ DUP .
."  words found" CR
0 ?DO
  FUNCS I 2* + @
  >NAME TYPE SPACE
LOOP ;

: REGISTER \<Слово>
FUNCNUM @ MAXFUNC > IF
." Not enough slots!"
QUIT THEN
TIBWORD DUP FINDF
IF DROP
  ." Alredy registred!"
ELSE
  FIND ?DUP IF
    FUNCNUM @ 2*
   FUNCS + !
   1 FUNCNUM +!
   ." Registred"
  ELSE
    ." Not found!"
  THEN
THEN ;

: UNREGISTER \<Слово>
TIBWORD DUP
FINDF 0= IF
  ." Not registred!"
  DROP EXIT THEN
FINDID DUP >R
2* FUNCS + DUP
2 + SWAP
MAXFUNC R> 1+
- 2* MOVE
1 FUNCNUM -!
." Unregistred"
;
Пользоваться словами REGISTER и UNREGISTER просто.
Например, надо добавит очистку экрана: REGISTER PAGE
Аналогично и с удалением: UNREGISTER PAGE
Со всем этим вы можете писать программы обычным образом и "разрешать" их.
Но ProtectOS создавалась ради паролей...
Добавим их:
Код:
20 CONSTANT LEN
: STRVAR \(-->)
CREATE LEN ALLOT DROP ;

STRVAR PASSWORD
STRVAR ROOTPASS
STRVAR BUF
STRVAR BUF2

: ENTPASS  \(addr-->addr) Заменяет введённую часть звёздочками
769 @ SWAP
LEN ACCEPT
SWAP 769 !
DUP STRLEN
0 DO 42 EMIT
LOOP CR ;

: ADMIN \(-->b)
." Enter root password: "
BUF ENTPASS
ROOTPASS STRCMP 0= ;

: USER \(-->b)
." Enter password: "
BUF ENTPASS
PASSWORD STRCMP 0= ;

: BLK \(delay-->)  В секундах
769 @        \Запоминаем положение курсора
OVER 0 DO
  DUP 769 !  \Перемещаем курсор
  OVER I - . \Выводим число
  20 TICKS   \1 секунда
LOOP 2DROP ;

: WRPS \Стандартная реакция на неправильный пароль.
." Wrong password!" CR
." You can try after "
60 BLK CR ;

: FORTH \Выход в ФОРТ
ADMIN IF
  ." You can do enyfing!"
QUIT THEN
WRPS ;

: CHANGEPASS
ADMIN IF
  ." Set new password: "
  BUF ENTPASS
  ." Cunfirm new password: "
  BUF2 ENTPASS
  STRCMP IF
    ." Password not canged!" CR
  ELSE
    BUF PASSWORD LEN MOVE
    ." Changing the password was successful" CR
  THEN
ELSE
  WRPS
THEN ;
Слова ADMIN и USER оставят на стеке TRUE, если ввели правильный пароль.

Картинка на FORTH (by HitriyLis)

Код:
: COLONS (n-->)
0 ?DO
  58 EMIT
LOOP ;

: LINES (n-->)
0 ?DO
  0 EMIT
LOOP ;

: UPFRAMES (-->)
24 0 DO
  I COLONS
  16 EMIT
  23 I - 2* LINES
  14 EMIT
  I COLONS
  CR
LOOP ;

: BOTFRAMES (-->)
24 0 DO
  23 I - COLONS
  13 EMIT
  I  2* LINES
  29 EMIT
  23 I - COLONS
  CR
LOOP ;

: SQUARES (-->)
PAGE CR
UPFRAMES
BOTFRAMES ;

Таблица кодировок (by HitriyLis)

Код:
: TABLE
PAGE
256 0 DO
I 10 /MOD
SWAP 7 * 2DUP
SWAP AT-XY I .
4 + SWAP AT-XY
I EMIT
LOOP CR ;

Разное (by HitriyLis)
Код:
: ?KEY (-->)
CR ." Press any key: "
KEY DUP . SPACE EMIT ;
Ждёт нажатие клавиши, после чего выводит её номер и символ.
Для нескольких клавиш используйте: 5 TIMES ?KEY

Код:
: DUMP (addr,n-->)
0 DO DUP С@ EMIT
1+ LOOP DROP ;
Распечатывает содержимое памяти.

Код:
: TEST (n-->)
VOCAB @
SWAP 0 DO
DUP . 2 - @
LOOP DROP ;
Выводит адреса n последних слов.
 

Hel_ISR

妖怪
Команда форума
Лорд-Инквизитор
Adeptus Mechanicus
Инквизитор
Куратор проекта
Регистрация
24.03.2011
Сообщения
17 598
Minecraft
nope
Re: Подготовка RedPower на 1.2.5

Механизмы

Летающая машина (by VikR)
Летающая машина делается довольно легко. Главное, что нам нужно реализовать - движение во все стороны.
Для начала сделайте платформу, на которой будете размещать двигатели. Рассмотрим расположение двигателей подробнее:

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

Учитывайте, что каждый двигатель должен быть закреплен!

Теперь нужно соединить все двигатели:

Провода распределил следующим образом:

Вперед - белый провод
Назад - оранжевый провод
Вправо - пурпурный провод
Влево - голубой провод
Вверх - желтый провод
Вниз - лаймовый провод


Не забудьте обеспечить каждый двигатель блутричеством!
Моя конечная конструкция выглядит так:

Конструкция не отличается компактностью и красотой, но ведь она не для этого создавалась =) Вот еще один вариант оформленной конструкции:

Осталось дело за программой. Она очень маленькая, так что осилит каждый =)
Код:
: go  /движение вперед
2 0 DO  /задаем количество циклов, равное двум: во время первого прохода сдвигается платформа, во время второго двигатель возвращается на место
1 IOX! 5 TICKS 0 IOX! 30 TICKS  /подача сигнала, задержки можно выставить на своё усмотрение
LOOP ;
: back  /движение назад
2 0 DO
2 IOX! 5 TICKS 0 IOX! 30 TICKS
LOOP ;
: right  /движение вправо
2 0 DO
4 IOX! 5 TICKS 0 IOX! 30 TICKS
LOOP ;
: left  /движение влево
2 0 DO
8 IOX! 5 TICKS 0 IOX! 30 TICKS
LOOP ;
: up  /движение вверх
2 0 DO
16 IOX! 5 TICKS 0 IOX! 30 TICKS
LOOP ;
: down  /движение вниз
2 0 DO
32 IOX! 5 TICKS 0 IOX! 30 TICKS
LOOP ;
Собственно летающая платформа готова. Для того, чтобы передвинуться на определенно количество блоков используем TIMES:
Код:
5 TIMES up  /подняться на 5 блоков
Данную платформу можно легко модифицировать для бурения, причем в довольно крупных масштабах!

Для модификации требуется всего лишь присоединить к нижней части Разрушители блоков (см. Простые машины), но для начала крепятся Редстоун-трубы (см. Трубы):

Только потом крепятся Разрушители блоков:

И не забывайте, что все это должно прилегать к фреймам, иначе все останется на месте:


Как видите, между трубами есть свободное пространство. В это свободное пространство можно поставить сундуки для добытых ресурсов, при этом фреймы позволят открывать сундуки.

Осталось подсоединить трубы к сигнальному проводу (в моём случае будет розовый провод):

В края платформы обязательно должны помещены Покрытия (Cover), чтобы не цеплять лишние блоки во время добычи.

Когда конструкция готова, нужно добавить к программам движения еще две новых:
Код:
: break  /программа, которая будет посылать сигнал на Разрушители блоков
64 IOX! 5 TICKS 0 IOX! ;
: mining  /организуем добычу
break right break down left ;  /порядок действия: сломать, сдвинуться вправо, сломать, опуститься, влево
Количество проходов устанавливается по аналогии с количеством передвижений.

Лифт (by VikR)
Перед тем, как приступить к созданию лифта, нужно определиться с его комплектацией. У лифта должны быть следующие элементы:

Возможность передвигаться на несколько этажей (в моем случае 4).
Дверь, которая открывается/закрывается, когда потребуется.
Кнопки для каждого этажа в кабине.
Кнопки вызова на каждом этаже.


После того, как определились с комплектацией, начнем делать саму конструкцию.
Я в первую очередь создал саму кабинку, двигатели и разметку этажей, расстояние между которыми везде 9 блоков.

Как видите на скриншоте, у меня много двигателей на определенном расстоянии, это требуется для того, чтобы свести к минимуму вот этот столб:

От него можно избавиться совсем, если размещать двигатели ближе, но это существенно увеличит их количество.

Дальше сделаем двери. С ними думаю ни у кого проблем не будет:


Подобные действия проделайте на всех этажах. И не обязательно придерживаться именно такой конструкции дверей! Делайте так, как нравится вам.
Исходным этажом у меня является первый этаж. Поэтому открытыми оставляем только двери на первом этаже, на остальных закрываем.
Для тех кто не понял, что это за синяя "труба", поясняю: это Блутрические провода в оболочке.

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

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

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

После того, как сделана основная конструкция, принимаемся за соединение всего этого чуда проводами.
Перед этим я разбил составляющие на две части: движущие и кнопки. Для каждой части будет свой Декодер IO. Такое разделение позволит легко расширить функции лифта и количество этажей.
В первую очередь соединил двигатели лифта:

Точно также соединил все двигатели выше, причем цвета проводов те же!

Дальше соединил двигатели ворот:

Двигатели ворот соединяются той же связкой проводов, что и двигатели лифта.

С кнопками все немного сложнее. Редстоун, который у нас используется, не может передать сигнал в провода РП, поэтому нужно использовать какой-нибудь преобразователь, я использовал обычный повторитель. После повторителя присоединяется провод, причем не требуется много цветов, мне хватило всего трех.

Кнопки вызова а каждом этаже имеют свой уникальный цвет.
Связки проводов кнопок и двигателей не должны пересекаться!

В конце остается подсоединить связки к нужным декодерам. Кнопки я присоединил к декодеру с ID 3, двигатели с ID 4.

Настал самый сложный момент - организация всего этого.

Начал я с основных двигателей:
Код:
: wait  /простая программка, которая создана только для удобства, задает ожидание
10 TICKS
;
: up  /программа, описывающая действие подъема
1 IOXSET wait
1 IOXRST wait
;
: down  /программа, описывающая действие движения вниз
2 IOXSET wait
2 IOXRST wait
;
Дальше задал действия для дверей:
Код:
: open1  /программа, которая задает открытие двери на первом этаже
3 0 DO  /в моем случае дверь размером 3х3, поэтому для полного открытия\закрытия требуется три сдвига
4 IOXSET wait
4 IOXRST wait
LOOP
;
: close1 /программа, которая задает закрытие двери на первом этаже
3 0 DO
8 IOXSET wait
8 IOXRST wait
LOOP
;
: open2  /программа, которая задает открытие двери на втором этаже
3 0 DO
16 IOXSET wait
16 IOXRST wait
LOOP
;
: close2  /программа, которая задает закрытие двери на втором этаже
3 0 DO
32 IOXSET wait
32 IOXRST wait
LOOP
;
: open3  /программа, которая задает открытие двери на третьем этаже
3 0 DO
64 IOXSET wait
64 IOXRST wait
LOOP
;
: close3  /программа, которая задает закрытие двери на третьем этаже
3 0 DO
128 IOXSET wait
128 IOXRST wait
LOOP
;
: open4  /программа, которая задает открытие двери на четвертом этаже
3 0 DO
256 IOXSET wait
256 IOXRST wait
LOOP
;
: close4  /программа, которая задает закрытие двери на четвертом этаже
3 0 DO
512 IOXSET wait
512 IOXRST wait
LOOP
;
Теперь опишем действия, доступные на определенном этаже:
Код:
/действия, когда лифт на первом этаже
: one-level2  /программа движения на второй этаж
4 IOXADDR !  /переключаемся на декодер с ID 4, т.к. двигатели расположены на нём
close1  /закрываем дверь
10 TIMES up  /движение лифта, 10 TIMES означает, что лифт поднимется на 10 блоков вверх
open2  /открываем двери на втором этаже
3 IOXADDR !  /переключаемся обратно на декодер с ID 3
;
: one-level3  /программа движения на третий этаж
4 IOXADDR !
close1
20 TIMES up
open3
3 IOXADDR !
;
: one-level4  /программа движения на четвертый этаж
4 IOXADDR !
close1
30 TIMES up
open4
3 IOXADDR !
;
/действия, когда лифт на втором этаже
: two-level1  /программа спуска на первый этаж
4 IOXADDR !
close2
10 TIMES down
open1
3 IOXADDR !
;
: two-level3  /программа движения на третий этаж
4 IOXADDR !
close2
10 TIMES up
open3
3 IOXADDR !
;
: two-level4  /программа движения на четвертый этаж
4 IOXADDR !
close2
20 TIMES up
open4
3 IOXADDR !
;
/действия, когда лифт на третьем этаже
: three-level1  /программа спуска на перый этаж
4 IOXADDR !
close3
20 TIMES down
3 IOXADDR !
open1
;
: three-level2  /программа спуска на второй этаж
4 IOXADDR !
close3
10 TIMES down
open2
3 IOXADDR !
;
: three-level4  /программа движения на четвертый этаж
4 IOXADDR !
close3
10 TIMES up
open4
3 IOXADDR !
;
/действия, когда лифт на четвертом этаже
: four-level1  /программа спуска на первый этаж
4 IOXADDR !
close4
30 TIMES down
open1
3 IOXADDR !
;
: four-level2  /программа спуска на второй этаж
4 IOXADDR !
close4
20 TIMES down
open2
3 IOXADDR !
;
: four-level3  /программа спуска на третий этаж
4 IOXADDR !
close4
10 TIMES down
open3
3 IOXADDR !
;
Теперь свяжем действия с нажатием кнопки:
Код:
VARIABLE level  /создаем переменную, которая будет определять этаж нахождения лифта и доступные действия
1 level !  /задаем значение для переменной, всего значений четыре; значение должно соответствовать этаже, на котором находится лифт

: one  /организуем кнопки на первом этаже
IOX@ 1 =  /задаем условие, при котором запустится лифт, в нашем случае нажатие на определенную кнопку
IF one-level2  /действие, запускаеое при выполнении условия
2 level !  /меняем значение переменной на то, которое будет соответствовать новому этажу
THEN
/дальше все делается по аналогии
/записываю в строчку, т.к. дальше код не требует подробных комментариев
IOX@ 2 = IF one-level3 3 level ! THEN
IOX@ 4 = IF one-level4 4 level ! THEN
IOX@ 16 = IF one-level2 2 level ! THEN
IOX@ 32 = IF one-level3 3 level ! THEN
IOX@ 64 = IF one-level4 4 level ! THEN
;
: two  /организуем кнопки на втором этаже
IOX@ 4 = IF one-level1 1 level ! THEN
IOX@ 2 = IF one-level3 3 level ! THEN
IOX@ 1 = IF one-level4 4 level ! THEN
IOX@ 8 = IF one-level1 1 level ! THEN
IOX@ 32 = IF one-level3 3 level ! THEN
IOX@ 64 = IF one-level4 4 level ! THEN
;
: three  /организуем кнопки на третьем этаже
IOX@ 4 = IF one-level1 1 level ! THEN
IOX@ 1 = IF one-level2 2 level ! THEN
IOX@ 2 = IF one-level4 4 level ! THEN
IOX@ 8 = IF one-level1 1 level ! THEN
IOX@ 16 = IF one-level2 2 level ! THEN
IOX@ 64 = IF one-level4 4 level ! THEN
;
: four  /организуем кнопки на четвертом этаже
IOX@ 4 = IF one-level1 1 level ! THEN
IOX@ 1 = IF one-level2 2 level ! THEN
IOX@ 2 = IF one-level3 3 level ! THEN
IOX@ 8 = IF one-level1 1 level ! THEN
IOX@ 16 = IF one-level2 2 level ! THEN
IOX@ 32 = IF one-level3 3 level ! THEN
;
Ну и наконец последнее, что нам осталось написать:
Код:
: main  /последняя программа, которая все запустит
BEGIN
level @ 1 = IF one THEN  /обозначает действия, если значение level = 1, т.е. когда лифт на первом этаже
level @ 2 = IF two THEN  /действие, когда лифт на втором этаже
level @ 3 = IF three THEN  /действие, когда лифт на третьем этаже
level @ 4 = IF four THEN  /действие, когда лифт на четвертом этаже
AGAIN ;
Когда все написали, то запускайте программу main и начинайте эксплуатировать свой лифт =)

Музыкальный проигрыватель (by HitriyLis)
Запись музыки: Музыку можно создать при помощи Note Block Studio. Это гораздо удобнее, чем писать цифры в текстовый редактор (или в консоль). Моя программа использует .nbs файлы для воспроизведения, поэтому каждую мелодию вам придётся самостоятельно переносить в ваш мир и хранить на отдельной дискете. О формате самого файла можно узнать тут.

"Железо":
Для создания играющей части вам понадобится WRCBE. Я хотел использовать декодер, но он, к сожалению, оказался недостаточно быстрым. Всего (в предельном случае) вам понадобится 1 передатчик, 125 приёмников и сплошной диапазон частот соответствующей длины. А так же 125 нотных блоков и блоки-основания под них (задание инструмента). Я не рекомендую вам ставить приёмник вплотную к нотному блоку, т.к. помимо его активации, задействуются соседние с ним блоки. Лучше соединять их через изолированные провода.
Самое главное - настройка частот:
Все ноты нумеруются от 0 до 124 в порядке возрастания. Все ноты разделены по 25 штук на каждый инструмент.
Код:
0 - Пианино         - Земля / Воздух
1 - Бас-гитара      - Древесина / Доски / Тыква
2 - Большой барабан - Камень / Булыжник / Обсидиан
3 - Малый барабан   - Песок / Гравий / Песок души
4 - Клики / Палочки - Стекло / Светящийся камень
Номер вычисляется так: № ноты = № инструмента * 25 + нота (число ПКМ по нотному блоку).
Запомните число DELTA, оно понадобится вам в программе. Это число - сдвиг частот и оно должно быть больше 0. Например, при DELTA=100, частоты для пианино будут от 100 до 124, а для малого барабана от 175 до 199.
Ещё пример: настроены все блоки.

Благодаря WR, нотные блоки можно расположить произвольно.

Компьютер:
Вам понадобится минимальный набор для запуска и ещё 1 модуль памяти. Передатчик нужно поставить вплотную к ЦП и запитать (факелом или рычагом).


Элементарное чтение:

Данные читаются с дискеты байт за байтом (с возможностью переставить "головку"). Я предлагаю вам 2 способа. Вы можете использовать любой по своему усмотрению.

1)Простой и надёжный.
Суть: Нужный блок, размером 1Кб, загружается в память компьютера и читается из стандартного буфера.
Недостаток: при воспроизведении возникают паузы, необходимые для загрузки блока данных.
Код:
DECIMAL
1 BLOCK DROP  //Заранее создаём буфер
VARIABLE POS  //Положение "головки"
: READ (-->C) //Читает с диска 1 байт
POS @
1024       //Размер стандартного буфера
/MOD 1+    //вычисляется № блока и положение в нём.
BLOCK      //подготавливаем блок (возвращается адрес буфера)
+ C@       //вычисляем адрес в памяти и читаем байт из него
1 POS +! ; //перемещаем "головку"
2)Без пауз.
Суть: размер буфера 128 байт и он находится во 2-м окне. Данные с диска переносятся секторами соответствующего размера. Нужный сектор загружается заранее, т.е. программа сначала копирует содержимое буфера дисковода (там должен храниться нужный сектор), а затем посылается команда на чтение следующего сектора, но не ждёт её завершения.
Недостаток: если размер файл не кратен 128 байтам, то программа экстренно выходит в конце трека (особенно, если нет доп. информации в файле, например, названия уровней. см. в Note Block Studio))
А так же, сложновато для понимания и "вбивания" в консоль.
Плюс: Экстренно выходит, когда вы извлекаете дискету =)
Код:
VARIABLE POS    //Положение "головки"
VARIABLE SECTOR //Номер текущего сектора
HEX
: RS (n-->)       //загружает требуемый сектор
DUP SECTOR @ =    //если требуется стекущий сектор,
IF DROP EXIT THEN //то ничего не надо делать
DISKADDR @ RBP!   //связываемся с дисководом
DUP SECTOR @ - 1 = IF //если требуется следующий блок,
  BEGIN            //то загружаем данные не стандартным образом
   382 C@ 4 =      //сперва убеждаемся, что дисковод
   WHILE TICK      //не занят чтением
  REPEAT
  400 300 80 MOVE  //затем копируем данные в буфер компьютера
ELSE               //иначе, переносим данные
  400 OVER DISKRS  //стандартным образом
THEN
382 C@ FF =   //если дисковод возвращает ошибку,
IF QUIT THEN  //то экстренно выходим.
DUP SECTOR !  //сохраняем номер считанного сектора
1+ 380 ! 4 382 C! ; //и даём команду дисководу прочитать следующий

: READ (-->com) //Аналогично первому варианту
POS @ 80 /MOD  //только числа другие и в HEX-се
RS 400 + C@
1 POS +! ;
Для инициализации такого чтения, необходимо ввести: 1 RS 0 RS.
Ошибка в дисководе может возникнуть в нескольких случаях:

Нет диска (чаще всего)
Чтение за концом файла
Или сектор файла не имеет 128 байт
Неразрешённые действия с ФОРТ-дискетой (запись, изменение имени)

Программа:
Код:
DECMAL
VARIABLE DELTA //Не забудте внести это число перед запуском!!!

: NOTE (C-->)    //Играет ноту с номером С
DELTA @ + IOX! ; //Число отправляется в передатчик и меняет его частоту

: 2READ (-->N) //Читает 2-х байтное число
READ READ 8 << OR ;
Первая часть файла - заголовок, который содержит информацию о мелодии. Сюда можно вставить рисование менюшки с выводом этой информации, но я просто пропущу её.
Код:
: PART1
4 POS +!           //2 числа
4 0 DO
 2READ 2 + POS +!  //4 строки
LOOP
25 POS +!          //много цифр
2READ 2 + POS +! ; //ещё строка
Что это за данные, смотрите в описании формата.

Вторая часть содержит информацию о расположении блоков в пространстве и времени на сетке. Сверху вниз - уровни, слева направо - тики. При стандартных настройках 1 тик = 0,1 сек. (эту настройку я игнорирую в первой части). Для чтения этой части понадобится 4 шага, которые ссылаются друг на друга в зависимости от прочитанного байта. Для чтения удобно использовать логику конечного автомата (См. Вики). В зависимости от состояния, программа будет вызывать нужный шаг, а этот шаг в свою очередь будет менять состояние. Номер шага совпадает с номером состояния, нулевое состояние - выход.
Код:
VARIABLE ST //Текущее состояние
8 ALLOT CONSTANT STEP //Массив с адресами шагов
: PART2    //Работает в бесконечном цикле
BEGIN
  ST C@ 2* //читается номер состояния,
  STEP + @ //вычисляется адрес процедуры
  EXECUTE  //и исполняется
AGAIN ;
Далее, нужно расписать сами процедуры.
Код:
: STEP1   //переход к следующему тику
2READ DUP //читаем число
2* TICKS  //оно является необходимой паузой
IF 2 ELSE //если оно не нулевое, то переходим к шагу 2
   0 THEN //иначе выходим из программы (конец трека)
ST C! ;

: STEP2  //переход к следующему уровню
2READ IF //если число не нулевое,
  3 ELSE //то переходим к шагу 3
  1 THEN //иначе к шагу 1 (прочитаны все ноты аккорда)
ST C! ;

//3-й и 4-й шаги я объединил
: STEP3   //Играем ноту
2 ST C!   //В любом случае возвращаемся к шагу 2
READ 25 * //читаем номер инструмента
READ 33 - //читаем ноту
DUP -1 >  //Нотные блоки могут сыграть только ноты от 33 до 57
OVER 24 <
AND IF   //если нота входят в этот диапазон,
  + NOTE //то мы её играем
  EXIT
THEN
2DROP ; //иначе игнорируем
Далее, нужно внести адреса этих функций в массив.
Код:
' QUIT  STEP !
' STEP1 STEP 2 + !
' STEP2 STEP 4 + !
' STEP3 STEP 6 + !
QUIT можно заменить на EXIT, тогда программа будет выполняться после PART2 (для 2-го способа чтения с оговоркой).

Осталось главное слово:
Код:
: PLAY
0 POS !    //устанавливаем начальную позицию
REVERT     //Готовим дисковод при чтении 1-м способом
1 RS 0 RS  //ИЛИ для второго способа
10 IOXADDR ! //адрес передатчика
(он сбрасывается на это число при перезаходе в игру)
1 ST C!    //Устанавливаем начальное состояние
PART1      //пропускаем заголовок
PART2 ;    //Наслаждаемся музыкой =)
Обратите внимание на инициализацию дисковода: 2 способа чтения несовместимы друг с другом!!!
 

Hel_ISR

妖怪
Команда форума
Лорд-Инквизитор
Adeptus Mechanicus
Инквизитор
Куратор проекта
Регистрация
24.03.2011
Сообщения
17 598
Minecraft
nope
Re: Подготовка RedPower на 1.2.5

Frequently Asked Questions

Recipe Book не работает.
Да, не работает. Есть и другие моды с рецептами, лучше этого. Это не мой баг, не просите меня переделывать RedPower под него. Попробуйте Uristqwerty’s CraftGuide.
к сожалению, буккит и производные даже не рассматриваются.

"Мод X имеет тот же тип руды."
Именно поэтому я проводила дни, программируя кое-что под названием Forge Ore Dictionary (Словарь Руд). Любой поддерживающий его мод (в их число ВХОДИТ IC2) будет рассматривать одинаковые типы руд как неотличимые. К тому же, я добавила опцию отключения генерации руд в RedPower в конфиг-файле, если вы хотите пойти таким путем.

"Поддержка Bukkit..."
Полностью остановлена. Моем первое правило, связанное с портированием на Bukkit звучит так: Мы не говорим о Bukkit. Какое, полагаете, должно быть второе правило? Или третье?
алсо, она доверяет некоему анонимусу, которому сливает сорцы РП (ему и только ему!) и благодаря этому мы можем лицезреть РП на букките и производных +_+

"Вулканы и деревья..."
Еще не закончены. Я намереваюсь скопировать код размещения и улучшить вулкан. Обработка чанков в 1.8 серьезно испортила их. И нет, я не буду вводить опций, которые их отключают.

"Но вулканы..."
Останутся. И они будут лучше. Валидация будет улучшена, всегда будут бассейны лавы вместо луж. Они будут больше, перестанут терять края, будут появляться скорее в группах, чем равномерно, иногда они будут иметь кальдеры, полные лавы.

"Но деревья такие большие..."
Да, они такие. И они нравятся мне такими. Постройте дом на дереве, это весело.

"autoAssign отключен"
RedPower имеет хорошую особенность, называемая autoAssign, которая перераспределяет ID для избежания их конфликтов. К сожалению, если бы он делал это каждый раз, когда вы меняете моды, то происходило бы перераспределение существующих блоки и повреждение миров. Вместо этого, RedPower автоматически выключает autoAssign, чтобы защитить ваши миры. Если вам требуется перераспределить ID, то отредактируйте файл конфигурации и включите autoAssign.

"Каждый раз, когда я крафчу X на моем сервере, я получаю Y!"
Да, вы только что обнаружили, что конфигурационные файлы клиента и сервера должны совпадать. Если они этого не делают, то происходит именно это. Получите копию конфигурации с сервера и поставьте себе, тогда все будет работать должным образом.

"Когда я играю в Creative Mode..."
"...и игнорирую примечания к релизу?" Creative Mode на данный момент не поддерживается. Я планирую исправить это, но это потребует больших настроек Forge и это не сделать быстро.

"Моя ножовка используется только один раз."
Каким-то образом вы неправильно установили Forge. Есть много путей сделать это. Возможно, имеются конфликты с ModLoader. А может быть, вы установили ModLoader поверх Forge.
у нас нет модлоадера поэтому нет проблем с ножовкой.

"У *материал* есть применение?"
У одних есть, у других еще нет. Я решила добавить все материалы, использование которых я вижу сама, чтобы людям не пришлось генерировать новые миры, когда я введу вещи, использующие их. Запаситесь вольфрамом, вы будете рады, что сделали это.

"Тебе стоит сделать свет ламп того же цвета, как и они."
Я хотела, и когда я в первый раз увидела 1.8, я думала, что Notch добавил разноцветный свет. Вместо этого, он ввел мультитекстурность для света, которая сделала это гораздо, гораздо труднее для реализации.

"Сделай так, чтобы покрытие работало для мода X."
Это невозможно. Для этого нужно не переделывать покрытие под блок, а блок делать работающим внутри покрытия. Покрытие требует огромного количества кода и его нужно писать для каждого блока, использующего покрытие. Любая использующая его вещь будет требовать RedPower Core для функционирования, даже если это невозможно. Так что используйте эквиваленты RedPower.

"Латунь это сплав меди и цинка..."
И это прекрасно, если бы это было все, что было в истории. Различия между латунью и бронзой намного незначительнее теперь, есть много видов латуни и бронзы, которые не содержат ни цинка, ни олова, ни какой-либо их комбинации. Главное различие в том, что бронза предназначена для литья, в то время как латунь нужна для механической обработки (что означает "быть разрезанной острыми предметами"). Латунь это металл, который я хотела добавить. Что приводит нас к олову. Почему олову? Потому что у олова более второстепенное использование, и я хочу избежать головной боли для пользователей IC2. Представьте, если бы вместо генерирования олова, которое может использоваться вместе с IC2 при помощи словаря руд, RedPower генерировал бы цинк? Два белых металла, практически неотличимы, но несовместимы. И нет, я не собираюсь переименовывать латунь в бронзу или совмещать бронзу с IC2
 

Hel_ISR

妖怪
Команда форума
Лорд-Инквизитор
Adeptus Mechanicus
Инквизитор
Куратор проекта
Регистрация
24.03.2011
Сообщения
17 598
Minecraft
nope
Re: Подготовка RedPower на 1.2.5

Что нового?

Prerelease 5b1
Фиксы
Очищение Control. В настоящее время используются таблицы перевода, исправлена дискета которую майнкрафт принимал за блок, а не предмет и т.д.
Дисководы теперь дропают дискеты, при разрушении.
Исправлены баги с прорисовкой в SMP.
Ассемблер больше не приводит к вылету игры при включении кабельного режима в смежных Ассэмблерах.
Использование Отвертки на Насосе больше не приводит к вылету игры.
Рамки стали работать лучше с другими модами и стали дропать меньше вещей при движении.
Исправлено << word в MineOS.
Двигатель структур больше не теряют энергию при перезагрузке чанков.

Prerelease 5b2
Новое
Добавлены несколько достижений.
Поддержка нефти из Buildcraft.
Поддержка вагонеток из Railcraft / MCL.
Распространение мха.
Переплавка проволок, брони и инструментов.
Воспламенитель может управлять работой портала.
Независимый буфер у Сортировочной машины.
Добавлены железные, оловянные, медные и серебряные самородки.

Фиксы
IConnectRedstone (?) теперь уважают красные провода (исправлено для Railcraft соединений).
Используйте новый MCL getItemsDropped () для вагонеток.
Исправлена нижняя текстура Термоэлемента.
Исправлено колебание около коренных пород.
Установщик теперь может использовать отвертку.
Исправлено движение Фреймов к небу.
Исправлено передвижение Фреймов в загружающемся чанке.
Правильная генерация вулканов в SSP.
Врезавшиеся в Транспортёр тележки вызывают задержку. (?)
Сортировочная машина не теряет столбцы.
Упавшие на лицевую сторону Сортировочной машины предметы теперь правильно сортируются.
Исправлена HD текстура анимации Двигателя фреймов.
Исправлена ошибка в Ассемблере с заполнением ведер водой и т.д.
Загрузочные диски теперь могут быть найдены в сокровищницах.
При разрушении Аккумулятора все вещи из него выпадут.
Исправлена прозрачность у листы каучукового дерева.
Листва каучукового дерева при размещении не исчезает.
Изменена "редкость" загрузочного диска FORTH.
Получение самородков с помощью Плавильной печи.
Добавлены микроблоки из древесины джунглей.
Алмазные блоки теперь сложнее нарезать.
Исправлены проблемы с ID компьютерных приборов более 127.

Изменения в компьютерах
Исправлен KEY?
Новые слова: 0SP 2SWAP ( \ ” AT-XY
Новые слова: >NAME NAME> DOES>
Новые слова: U. / MOD U< U>
Новые слова: PROBE TOP FREE
Новые слова: IMMEDIATE LITERAL POSTPONE RECURSE
Новые слова: BLOCK FLUSH REVERT UPDATE LIST WIPE PP LOAD
WORDS не переопределяет TOS.
TIB не перезаписывает SCRATCH.
ERASE теперь называется FORGET.
TIBFIND теперь называется ‘
ЦП загрузчик больше не падает при загрузке с диска, который больше 64k.
TIMES может использоваться при компиляции слов.
 

Akakiy

Местный
Регистрация
30.09.2012
Сообщения
190
Minecraft
Android
Re: Подготовка RedPower на 1.2.5

Лифт (by VikR) замечательно работает, спасибо!
Но есть небольшая ошибка в коде, что касается кнопок
начиная со 2 этажа вместо "one-level1"
Код:
: one  
IOX@ 1 = IF one-level2 2 level ! THEN
IOX@ 2 = IF one-level3 3 level ! THEN
IOX@ 4 = IF one-level4 4 level ! THEN
IOX@ 16 = IF one-level2 2 level ! THEN
IOX@ 32 = IF one-level3 3 level ! THEN
IOX@ 64 = IF one-level4 4 level ! THEN
;
: two 
IOX@ 4 = IF two-level1 1 level ! THEN
IOX@ 2 = IF two-level3 3 level ! THEN
IOX@ 1 = IF two-level4 4 level ! THEN
IOX@ 8 = IF two-level1 1 level ! THEN
IOX@ 32 = IF two-level3 3 level ! THEN
IOX@ 64 = IF two-level4 4 level ! THEN
;
: three 
IOX@ 4 = IF three-level1 1 level ! THEN
IOX@ 1 = IF three-level2 2 level ! THEN
IOX@ 2 = IF three-level4 4 level ! THEN
IOX@ 8 = IF three-level1 1 level ! THEN
IOX@ 16 = IF three-level2 2 level ! THEN
IOX@ 64 = IF three-level4 4 level ! THEN
;
: four  
IOX@ 4 = IF four-level1 1 level ! THEN
IOX@ 1 = IF four-level2 2 level ! THEN
IOX@ 2 = IF four-level3 3 level ! THEN
IOX@ 8 = IF four-level1 1 level ! THEN
IOX@ 16 = IF four-level2 2 level ! THEN
IOX@ 32 = IF four-level3 3 level ! THEN
;
И перед запуском, на первом этаже нужно задать значение переменной level ("1 level")
 

1992Nick

Местный
Регистрация
25.05.2012
Сообщения
115
спасибо большое за форж :panda27: а то не мог нормального описания раньше найти
давно вопрос а движущаяся машина из фреймов не будет очень залагивать? :huh:
 

Hel_ISR

妖怪
Команда форума
Лорд-Инквизитор
Adeptus Mechanicus
Инквизитор
Куратор проекта
Регистрация
24.03.2011
Сообщения
17 598
Minecraft
nope
не проверяла работу фреймов на лаги.
 

Yukikaze

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