[1.4.6] RedPower 2 [Prerelease 6]
#2361
Написал 27.11.2013 - 21:52
#2362
Написал 27.11.2013 - 22:30
#2363
Написал 27.11.2013 - 23:09
То же, что и Транспортёр, но имеет 9 слотов, которые определяют допустимые предметы, машина будет работать только с ними[paste][/paste] Если фильтр с пустыми слотами [b]получит импульс[/b], то он заберет из инвентаря перед ним стак любого предмета[paste][/paste] Если в слоте будет предмет, то он заберет только этот предмет[paste][/paste] Если в слоте будет несколько одинаковых предметов, то он заберет столько же предметов[paste][/paste]
#2364
Написал 05.11.2015 - 16:18
Здравствуйте. Третий день мучаюсь. Как передавать значение переменных между компьютерами? И как можно реализовать следующее? Второй комп ожидает, когда первый отправит цифру, и если она 0<>, то выполнит слово slovo.
#2366
Написал 06.11.2015 - 11:29
Именно о red power 2 на 1.4.7.Да и я считаю, что этот топик незаслуженно забытЭммм.... Некропостить то зачем? Неужели до сих пор на 1.4.7 играете? Или ваш вопрос не о red power а по project red?
#2367
Написал 06.11.2015 - 13:04
Вполне заслуженно. Элораам плюнула на развитие мода, а старые версии модов большинству неинтересны.
Список модов на моей сборке.
#2368
Написал 06.11.2015 - 15:31
К тому же, возможности данного мода уже неплохо реализованы в других модах.
А Элораам респект, она сделала в своё время прекрасный мод, да и не только его ))
#2369
Написал 12.09.2016 - 03:30
Здравствуйте
Подскажите мне нужно что бы сортон брал с сундука со всех слотов, но определенное количество
т.е не с 0 слота, а искал если на 0 слоте нету предметов и брал с дргова слота
КАК ПРИМЕР
4 SORTADDR !
10 0 SORTPULL
#2370
Написал 07.06.2018 - 00:09
Ребят,может пишу не туда,но кто знает помогите.Программирую Sortron на MineOs 1.2Программа выглядит так: test4 SORTADDR !100 0 SORTPULL;При этой программе сортрон с ид 4 отправляет вещи в желтый цвет. Но он отправляет из 0 слота. Как сделать чтоб он отправлял из всего сундука,если нужно больше 200 предметов. Заранее спасибо.
Сообщение отредактировал IIoZiTiV: 14.06.2018 - 14:47
#2371
Написал 07.06.2018 - 22:21
Это не совсем правильная программа. SORTPULL кладет в стек количество перемещенных предметов. Поэтому нужно хотя бы удалить это из стека, иначе стек когда-нибудь переполнится. То есть, в данном случае после 100 0 SORTPULL нужно было добавить DROP.
А так тебе наверное надо 100 0 SORTPULL заменить на цикл:20010 0 DO DUP I SORTPULL -LOOPDROP
Число 10 заменить в соответствии с количеством слотов в сундуке. Также возможно стоит добавить выход из цикла при извлечении заданного количества предметов, т.к. при каждом обращении к периферии создается задержка в 1 тик, если я правильно помню.
Но что ты творишь? Ты же пишешь на еле живой форум в совсем мертвую тему. Да еще предыдущий вопрос в этой теме полностью аналогичен твоему.
#2372
Написал 16.01.2019 - 22:08
Ребят, кто хорошо знает FORTH и все прелести SORTRON просьба отписаться
#2373
Написал 10.11.2020 - 10:12
Скиньте Программу набора текста пожалуйста
а то ссылка битая
Добавлено спустя 38 секунд:
В этих вкладках собраны несколько гайдов, программ и механизмов. Надеюсь, вы найдёте их полезными.Скрыть
Гайдов по ассемблеру не будет.ГайдыУправление сигналами. (Декодер)
Скрытый текстМассивы и строки
Скрытый текстВзаимодействие между компьютерами
Скрытый текстПеренос дискет между мирами
Скрытый текстПеренос дискет на сервер через клиент
Скрытый текстПрограммыПароль на рычагах (by HitriyLis)
Скрытый текстБлокировка паролем (by HitriyLis)
Скрытый текстКартинка на FORTH (by HitriyLis)
Скрытый текстТаблица кодировки (by HitriyLis)
Скрытый текстДанный раздел содержит коды различных полезных функций и библиотек.БиблиотекиСкрытый текстОперации над 32-разрядными числами (by _random)
Скрытый текстРазное
Скрытый текстМеханизмыЛетающая машина (by VikR)
Скрытый текстЛифт (by VikR)
Скрытый текстМузыкальный проигрыватель (by HitriyLis)
Скрытый текстПолезноеВ этих вкладках собраны несколько гайдов, программ и механизмов. Надеюсь, вы найдёте их полезными.
Гайдов по ассемблеру не будет.
В этих вкладках содержится описание внутреннего устройства компонентов, а также как управлять периферией.Скрыть
Управлять периферией можно как из Форта, так и при помощи ассемблера.Форт позволяет использовать устройства не вникая в механизм их работы, но с устройствами можно сделать больше, чем предоставляет нам стандартный набор слов. Управляются устройства через собственную память, доступ к которой можно получить с помощью RBP! (память этих устройств как бы "отображается" в памяти компьютера). Я буду расписывать "карту" памяти каждого устройства, где число до двоеточия - смещение адреса окна (т.е. если написано 0хFF, то необходим байт с адресом 0х300 + 0хFF = 0х3FF), 2 числа через дефис - диапазон, а после двоеточия - смысл этого байта или диапазона.Введение
Исполнение микрокоманд:
Некоторые типы устройств имеют особый байт состояния, отвечающий за исполнение некоторого действия этого устройства. Использовать их очень просто: поместите номер микрокоманды в этот байт. Как только устройство закончит выполнять действие, оно изменит этот байт на 0 (если всё прошло нормально) или 0хFF (если возникла ошибка).
Некоторым микрокомандам необходимо больше времени чем остальным. Например на чтение и запись в дисководе требуется время, т.к. они обращаются к жёсткому диску.ЦП
0x0000 Нулевая страница
0x100 P-стек
0x200 R-стек
0x300 Основной порт ввода-вывода
0x400 Приёмный порт (заодно там хранится загрузчик)
0x500 RAM (Образ диска загружается сюда)
При нажатии на кнопку start с панели считываются ID дисковода и терминала и помещаются в начало памяти (0-й и 1-й байт соответственно). Затем по адресу 0x400 скидывается загрузчик, который копирует содержимое дискеты в память начиная с 0x500. После выполнения передаёт управление на адрес 0x500 и более не нужен (его можно удалить).
Список инструкций процессора.
MMU:
В таблице не задокументирована инструкция MMU, которая требует 1 байт в качестве параметра.
ID, адреса и смещения берутся/записываются в регистр А.
0x00 Переключает порт ввода-вывода на другое устройство.
0x80 Получает ID текущего устройства.
0x01 Устанавливает адрес смещения порта ввода-вывода.
0x81 Получает текущее смещение порта ввода-вывода.
0x02 Включает порт ввода-вывода.
0x82 Выключает порт ввода-вывода.
0x03 Устанавливает адрес смещения принимающего порта.
0x83 Получает текущее смещение принимающего порта.
0x04 Включает принимающий порт.
0x84 Выключает принимающий порт.
0x05 Устанавливает адрес программного прерывания (BRK).
0x85 Возвращает текущий адрес BRK.
0x06 Устанавливает адрес POR (не знаю для чего он).
0x86 Возвращает текущий адрес POR.Декодер
0x00-0x01: Регистр входа (это 2-х байтовое число считывает IOX@)
0x02-0x03: Регистр генерации сигнала (это число устанавливает IOX!)
Первые 2 байта - это совокупность сигналов, которые декодер генерирует и принимает (надеюсь, вы уже знаете как кодируются цвета =). Вторая пара байтов - только те сигналы, которые декодер генерирует.
Например, если нет никаких сигналов, то оба числа равны 0.
Если выполнена команда 2 IOX! и нет других сигналов, то оба числа равны 2.
И наконец, если выполнена предыдущая команда и на декодер подаётся сигнал только с белого провода, то первое число 3, а второе 2.Дисковод
0x00-0x7F: Буфер дисковода, размером в 1 сектор (128 байт).
0x80-0x81: Номер сектора
0x82: Команда для дисковода: (далее значения этого байта)
0: Ничего или удачное завершение предыдущей команды
1: Прочитать имя дискеты
2: Записать имя дискеты
3: Прочитать ID дискеты (серийный номер)
4: Прочитать сектор дискеты
5: Записать сектор дискеты
0xFF: Неудачное завершение предыдущей команды
Серийный номер:
Каждая дискета при создании получает случайный ID, состоящий из 16 HEX цифр в виде строки. Этот ID задаётся раз и навсегда (можно только "сбросить" на ID загрузочной дискеты с Фортом). Чтобы прочитать ID, необходимо выполнить команду №3. После выполнения команды дисковод оставит в начале буфера ID в виде текста (оставшееся место заполняется нулями). Дисковод выдаст ошибку только в одном случае: если нет дискеты.
Имя:
Каждую дискету можно назвать как угодно и переименовывать сколь угодно раз. Максимальная длина имени 64 символа. Чтение имени аналогично чтению ID, только используется команда №1. Для того, чтобы изменить имя дискеты, поместите это имя в буфер (не забудьте, что последний байт должен быть нулевым) и выполните команду №2.
Ошибка может возникнуть если нет дискеты или вы попытались переименовать загрузочную дискету (у неё защита от записи).
Данные:
Данные с дискеты читаются и записываются на неё только секторами по 128 байт.
На каждой дискете может быть до 2049 секторов, это значит, что дискета может содержать до 262272 байт или, примерно, 256 Кб. Чтобы прочитать с дискеты нужный сектор, поместите его номер в байты 0x80-0x81 и выполните команду №4. Прочитанный сектор будет находится в буфере и вам остаётся только скопировать его в память компьютера (всем этим занимается DISKRS) или изменить данные прямо в буфере для последующей перезаписи.
Ошибка может возникнуть если нет дискеты или требуемый сектор не существует (чтение за пределом файла-образа).
Примечание: если размер файла не кратен 128 байтам, то сектор, содержащий конец файла, может быть прочитан и размещён в буфере, но дисковод не обнулит оставшуюся часть и выдаст ошибку.
Чтобы переписать сектор дискеты, поместите данные в буфер, поместите номер сектора в соответствующие место и выполните команду №5. Ошибка возникнет, если нет дискеты или эта дискета загрузочная.Терминал
Курсор:
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: Содержимое строки
Разрешение монитора 80х50 знакомест. Нумерация строк и столбцов от 0 слева-направо и сверху-вниз.
Курсорсм. Трубы:
Тут всё просто, помещаете в байты 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 и ждите завершения команды.
[/list](Команда PAGE заполняет весь экран символом с номером 0х16(пробел))
Выделение:
[*]Координаты левого верхнего угла области для выделения поместите в байты 0x0A и 0x0B.
[*]Ширину и высоту выделяемой области поместите в байты 0x0C и 0x0D.
[*]Поместите число 2 в байт 0x07 и ждите завершения команды.
[/list]Например, можно "выделить" весь экран. Для этого введите:PAGE (Необходимо, чтобы прокрутка не сбила ваши настройки)HEX0 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 и ждите завершения команды.
[/list]Стоит обратить внимание, что копирование производится байт за байтом слева-направо и сверху-вниз. Об этом важно помнить, когда области пересекаются.
Например, пусть экран содержит следующий текст:ABCDEFGHIJKLMNOPQRSTUVWXYТерминал настроен копировать область 3х3 с позиции (1,1)(там где "G") в позицию (1,0)(там где "В"). Результат предсказуем:AGHIEFLMNJKQRSOPQRSTUVWXYНо, если копировать из (1,1) в (1,2), то результат будет иным:ABCDEFGHIJKGHIOPGHITUGHIYСортрон
0x00: микрокоманда
1: Определить размер инвентаря
2: Прочитать содержимое слота
3: Извлечь
4: Фильтр
0x01: Количество предметов
0x02: Номер слота
0x04: Идентификатор предмета (4 байта!)
0x08: Повреждённость предмета
0x0A: Предел прочности предмета
0x0C: Исходящий цвет
0x0D: Входящий цвет
Цвет:
0 - нет цвета/не окрашен.
От 1 до 16 - конкретный цвет. Порядок как у шерсти (т.е. обычный)
Слоты нумеруются от 0.
Для исполнения микрокоманд сортрону нужно блутричество.
Не работает с игроками, вагонетками и прочими сущностями. Только с блоками.
Определение размера инвентаря:
Определяется количество слотов у инвентаря, расположенного перед лицевой стороной сортрона. Результат сохраняется в регистре 0x01.
Ошибка возникнет если перед сортроном труба или нет инвентаря.
Чтение слота:
Позволяет собрать информацию о конкретном слоте.
Перед исполнением команды нужно занести номер нужного слота в регистр 0x02. После исполнения вся информация о слоте будет в регистрах 0x01-0x0A.
Извлечение предметов:
Перед исполнением нужно занести в регистр 0x02 номер слота, из которого нужно извлечь содержимое, а в регистр 0x01 - количество. Также в регистр 0x0С нужно занести цвет, которым будет помечен предмет (или без цвета).
После исполнения регистр 0x01 будет содержать число извлечённых предметов (может быть меньше запрошенного).
Режим фильтрации:
*тут мне нужно уточнить подробности...*В этих вкладках содержится описание внутреннего устройства компонентов, а также как управлять периферией.
Управлять периферией можно как из Форта, так и при помощи ассемблера.
замени ссылку на Программу набора текста пожалуйста пожалуйста а то она битая
Сообщение отредактировал oleg955: 10.11.2020 - 10:13
Количество пользователей, читающих эту тему: 2
0 пользователей, 2 гостей, 0 анонимных