Перейти к содержанию

Поиск сообщества

Показаны результаты для тегов 'redpower'.

  • Поиск по тегам

    Введите теги через запятую.
  • Поиск по автору

Тип контента


Форумы

  • SimpleMineCraft.Ru - Форум
  • Поддержка
    • Помощь с лаунчером
    • Вопросы по игре
    • Вопросы по донату
    • Гайды и руководства
    • Ваши предложения и пожелания
    • Сообщить о баге/дюпе
  • Игровые серверы
    • Жалобы на игроков
    • Жалобы на модераторов
    • Набор в модераторы
    • Заявки на разбан аккаунта
    • Отзыв о работе персонала
    • Торговля
    • Города
    • Экономика
  • Общение и развлечения
    • Discord сервер
    • Радио
    • Турниры
    • Конкурсы
    • Обсуждение
    • Творчество
  • Другое
    • Архив

Поиск результатов в...

Поиск контента, содержащего...


Дата создания

  • Начало

    Конец


Дата обновления

  • Начало

    Конец


Фильтр по количеству...

Регистрация

  • Начало

    Конец


Группа


Любимое число

 
или  

Найдено: 5 результатов

  1. Что может дать такая сеть из нескольких компов? 1) Ускорение заводов. Ведь если несколько ПК будут одновременно работать с сортронами - завод будет работать быстрее, верно? 2) Создание баз данных. К примеру - имеем мы сеть из 30 компов, а нам нужно обновить базу данных предметов. Неужели в каждый ПК добавлять данные? В этом случае весьма полезны базы данных. Покажу использование сетей на примере чата. И так, давайте создадим чат. Примечание: Данный чат можно реализовать и через один пк, используя несколько мониторов. Идея: Есть два вида устройств - сервер и клиент. Сервер всего один, клиентов - множество. Для начала напишем сервер. Идея сервера: Получаем ID устройства, куда отправить данные, номер команды и получаемые данные. Отправляем по указанному ID ответ. Храним сообщения на диске. Команды: 0 - отправить кол-во сообщений(записать в 0x301-0x302). 1 - отправить сообщение по номеру(берём из 0x403-0x404 номер, записываем в 0x301-0x3FF ответ). 2 - Получить сообщение - в 0x403-0x4FF находится сообщение. Разметка сервера: 0x400 - ID 0x401 - номер команды 0x402 - Можно ли начинать работу? 0x403-0x4FF - получаемые данные. 0x300 - завершена ли работа? 0x301-0x3FF - данные клиента. Реализация сервера: Переменные: VARIABLE NOW_SIZE Для начала - напишем базу данных, для хранения сообщений: HEX : ADD_NEW_MESSAGE NOW_SIZE @ 1+ DUP NOW_SIZE ! BLOCK 70 MOVE FLUSH ; : GET_MESSAGE BLOCK ; Давайте добавим пару тестовых сообщений: Как можно увидеть, сообщения записались отлично: Давайте теперь доработаем наш сервер: HEX : CONNECT_TO_ID 400 C@ RBP! ; : PROCESS_COMMAND_0 CONNECT_TO_ID NOW_SIZE @ 301 ! ; : PROCESS_COMMAND_1 403 C@ GET_MESSAGE CONNECT_TO_ID 301 70 MOVE ; : PROCESS_COMMAND_2 404 ADD_NEW_MESSAGE CONNECT_TO_ID ; : SWITCH_COMMAND 401 C@ DUP 0= IF DROP PROCESS_COMMAND_0 ELSE DUP 1 = IF DROP PROCESS_COMMAND_1 ELSE 2 = IF PROCESS_COMMAND_2 THEN THEN THEN ; : START_SERVER 400 3 0 FILL BEGIN 400 C@ 0<> IF BEGIN 402 C@ 0<> UNTIL SWITCH_COMMAND CONNECT_TO_ID 1 300 C! 400 3 0 FILL THEN KEY? UNTIL ; Наш сервер готов! Теперь давайте напишем клиент: Для начала напишем функции для отправки/получения сообщений: VARIABLE MYID : CONNECT_TO_SERVER 0 RBP! ; : SET_READY 1 302 C! ; : WAIT_WHILE_EXECUTED BEGIN TICK 400 C@ 0<> UNTIL ; : GET_SIZE CONNECT_TO_SERVER 0 301 C! MYID C@ 300 C! 0 400 C! SET_READY WAIT_WHILE_EXECUTED 401 @ ; : RECEIVE_MESSAGE CONNECT_TO_SERVER 1 301 C! 303 ! MYID C@ 300 C! 0 400 C! SET_READY WAIT_WHILE_EXECUTED 401 ; : SEND_MESSAGE CONNECT_TO_SERVER 2 301 C! MYID C@ 300 C! 0 400 C! 100 304 70 MOVE SET_READY WAIT_WHILE_EXECUTED ; : SEND 100 80 ACCEPT SEND_MESSAGE ; И так, код мы ввели. Давайте всё это подключим: MYID у первого клиента - 5, у второго - 6. Давайте протестируем! Всё сработало отлично! Поздравляю!
  2. Многие недооценивают компьютеры из RP, а еще больше - не знают о них вовсе. В этом гайде я о них вам поведаю. Для начала вам понадобится: Центральный процессор, монитор, дисковод, объединительная плата, 8K RAM модуль, extended FORTH disk (желательно). Примечание: Позади ЦП вы можете установить до 8 8K RAM модулей. Устанавливаете центральный процессор, позади него - объединительную плату, на неё - 8K RAM модуль: Чтобы объединять разную периферию(дисководы, мониторы, ЦП и т.п.) - их можно ставить вплотную друг к другу, или же использовать плоские кабеля: Каждый блок может иметь собственный ID, устанавливать его можно используя отвёртку, нажав shift+ПКМ: Компьютер использует эти ID для подключения к устройству, рекомендуется делать их разными в одной сети. К слову про сети: Как можно наглядно увидеть, устройство(далее - узел) номер один видит лишь 3 и 2. То есть, узлы не могут пропускать через себя сигнал. Чтобы подключить первый узел к шестому - необходимо, чтобы между ними была связь в виде плоских кабелей. И так, вернёмся к постройке нашего ПК. Нажав ПКМ по ЦП, мы увидим такой интерфейс: Disk - идентификатор загрузочного дисковода, Console - идентификатор монитора, в котором мы будем работать, ID - идентификатор ЦП. START - Запустить устройство. HALT - Отключить устройство. RESET - Остановить работу устройства, при нажатии START - загрузка с дискеты. Датчики справа от кнопок обозначают, включено ли устройство. Сверху - включено, снизу - отключено. Итак, приступим к самому компьютеру. Чтобы он запустился - необходимо вставить в дисковод дискету и нажать START в ЦП. Если вы всё правильно настроили - вас должно встретить следующее сообщение: Во первых, нужно ознакомиться с синтаксисом FORTH. Этот язык использует для своей работы стек, то есть вводя какое либо число и нажимая ENTER - вы его добавляете в стек. Последнее число, которые мы добавили выйдет первым: Арифметические операции забирают последние два числа со стека и кладут на вершину итог. 2 2 * . выведет 4, 2 6 * . выведет 12, 1 2 3 * + . выведет 7. Чтобы исполнить какое-либо слово - достаточно просто его написать: Создание слов VARIABLE %name% - создать переменную с именем %name%. CONSTANT %name% - создать константную переменную с именем %name%. Для формирования исполняемых слов есть кое-что интереснее: : %name% %body% ; Где %name% - имя, а %body% - тело слова(то, что мы будем исполнять). Например, в словаре есть слово "EMIT". Оно берёт последнее значение со стека и выводит его в виде символа(ASCII). 42 в таблице ASCII - * Создадим слово STAR, которое выведет звезду: Ознакомиться со словарём и многим другим можно тут: http://minecrafting.ru/topic/6612/ В следующих частях я расскажу о более сложных вещах, со знанием которых вы сможете делать большие заводы, обслуживаемые лишь 1 ПК. Первая часть: https://f.simpleminecraft.ru/index.php?/topic/5936-redpower-компьютеры/ Вторая часть: https://f.simpleminecraft.ru/index.php?/topic/5941-redpower-компьютеры-вторая-часть-понимание-системы/ Третья часть: https://f.simpleminecraft.ru/index.php?/topic/5951-redpower-компьютеры-третья-часть-еще-глубже-ускорение-заводов/ Четвертая часть: https://f.simpleminecraft.ru/index.php?/topic/5965-redpower-компьютеры-четвёртая-часть-собственные-структуры-данных/ Пятая часть: https://f.simpleminecraft.ru/index.php?/topic/5989-гайд-по-redpower-компьютеры-пятая-часть-работа-с-сетью-дисками-чат/
  3. И так, вам необходимо реализовать структуру, в которой необходимо хранить больше одного числа? Два числа? Число и строку? Число, строку, исполняемый код? Вам определённо нужно прочитать эту статью. Для начала стоит ознакомиться с некоторыми командами: HIDE - прячет последнее слово из словаря. REVEAL - восстанавливает спрятанное слово в словарь. HEADER - берёт следующую строку из буфера, создает слово с этим именем. ALLOT - берёт n со стека, выделяет n байт и возвращает начало выделенной памяти. , - выделяет 2 байта, записывает в них значение со стека. ,C - выделяет и записывает 1 байт. ,S - Аналогично ',' , только для строки. Адрес должен находиться в стеке. Давайте узнаем, как работает VARIABLE: Она вызывает функцию CREATE, выделяет 2 байта, записывает туда 0. Давайте узнаем, что делает CREATE: Идёт вызов функции HEADER, определение которой нам известно. Выделяет один байт, записывает 0x22. Примечание: Во второй части гайда я рассказывал, что это инструкция ENT, которая определяет, что нужно далее делать. Выделяет еще два байта, записывает туда 0x534. Давайте узнаем, что это за функция! А это - функция DOVAR, которая записывает адрес следующего байта и возвращает нас в предыдущее слово. То есть, когда мы пишем VAR - исполняется функция DOVAR. DOVAR - то же, что и EXIT, лишь оставляет в памяти адрес следующих двух байт. То есть VAR @ можно на заменить 25FD @: Ладно, мы понимаем, как можно записывать переменные и строки. Но как записывать исполняемую часть? Давайте посмотрим на исходный код слова " : ": Определение HEADER, HIDE нам известно. Про 0x22 мы уже говорили... А что значит "[" ? Тут всё крайне просто - в STATE хранится режим, в котором мы сейчас находимся(1 - компиляция, 0 - диалог). Завершение компиляции - слово " ; " Выделяет два байта, записывает в них адрес EXIT. Вызывает " ] ", который возвращает нас обратно в диалоговый режим. Вызывает REVEAL, определение которого нам известно. Теперь, понимая всё это, давайте напишем слово для генерации структур данных, обозначающих предмет. Для начала разметка: Первый байт(он же 0x00) - 0x22, вхождение в строку. 0x01-0x02 - 0x0534(DOVAR) 0x01-0x02 - RedPower id #1 0x03-0x04 - RedPower id #2 0x05-0xXX - наша строка, где на 0xXX будет храниться 0x00, что является концом строки. Давайте напишем функцию, которая будет выделять память для этого: HEX : ADD_ITEM HEADER 22 ,C 534 , SORTSLOT@ DROP , , CR ." Enter string size: " 100 80 ACCEPT UATOI 1+ DUP 1+ ALLOT CR ." Enter item name: " OVER ACCEPT DROP ; Как можно увидеть по дампу - функция работает отлично. Чтобы получить нужные нам данные можно написать: Всё работает отлично! Давайте теперь создадим массив таких предметов. Вот и появилась первая проблема - размер строк не зарезервирован, то есть - он разный, и невозможно подобрать определённое кол-во элементов массиве, размер будет разным. У этой проблемы есть два решения: 1) Создавать массив с определенным кол-вом выделенных байт, каждая структура данных будет указывать на место следующей, кол-во элементов указываем в начале массива. 2) Создать массив с определенным кол-вом элементов, у которых будет точный размер. Давайте реализуем первый. Разметка: 0x00-0x01 - размер массива(байт). 0x02-0x03 - кол-во элементов в массиве. 0x04-0xXX - элементы массива(где XX - размер массива в байтах + 2). Разметка элемента: 0x00-0x01 - указатель на место в памяти следующего элемента. 0x02-0x03 - RedPower id #1 0x04-0x05 - RedPower id #2 0x05-0xXX - наша строка, где на 0xXX будет храниться 0x00, что является концом строки. Реализация: : ALLOCATE_MASSIVE CREATE DUP ALLOT ! ; VARIABLE MASSIVE_ADDR VARIABLE ELEM_ADDR VARIABLE MASSIVE_SIZE : MASSIVE_GET_ELEMSIZE MASSIVE_ADDR @ 2 + @ ; : MASSIVE_SET_ELEMSIZE MASSIVE_ADDR @ 2 + ! ; : ADD_ELEMENT_TO_MASSIVE MASSIVE_ADDR ! MASSIVE_ADDR @ @ MASSIVE_SIZE ! MASSIVE_GET_ELEMSIZE 1+ MASSIVE_SET_ELEMSIZE MASSIVE_ADDR @ 4 + ELEM_ADDR ! MASSIVE_GET_ELEMSIZE 0<> IF MASSIVE_GET_ELEMSIZE 1- 0 DO ELEM_ADDR @ @ ELEM_ADDR @ ! LOOP THEN SORTSLOT@ DROP ELEM_ADDR @ 2 + ! ELEM_ADDR @ 4 + ! CR ." Enter string size: " 100 80 ACCEPT UATOI DUP 4 + ELEM_ADDR @ ! CR ." Enter string: " ELEM_ADDR @ OVER 6 + ACCEPT ; Попробуем инициализировать массив: Всё отлично! Размер массива инициализирован. Попробуем добавить элемент "Diamond" в массив. Просмотрим дамп памяти массива: Всё отлично! Теперь по адресу 0x2FF2 размещен указатель на 0x2FFF, где будет находится следующий элемент массива. Удачи Вам в Ваших разработках! Первая часть: https://f.simpleminecraft.ru/index.php?/topic/5936-redpower-компьютеры/ Вторая часть: https://f.simpleminecraft.ru/index.php?/topic/5941-redpower-компьютеры-вторая-часть-понимание-системы/ Третья часть: https://f.simpleminecraft.ru/index.php?/topic/5951-redpower-компьютеры-третья-часть-еще-глубже-ускорение-заводов/ Четвертая часть: https://f.simpleminecraft.ru/index.php?/topic/5965-redpower-компьютеры-четвёртая-часть-собственные-структуры-данных/ Пятая часть: https://f.simpleminecraft.ru/index.php?/topic/5989-гайд-по-redpower-компьютеры-пятая-часть-работа-с-сетью-дисками-чат/
  4. Если Вы не читали прошлую часть - рекомендую её к прочтению. Без неё многое тут может быть непонятно. Вторая часть: Сейчас мы поговорим о том, как можно ускорять свои заводы, используя меньшее кол-во команд. Для начала Вам необходимо кое-что знать: Для того, чтобы подключиться к устройству - необходимо использовать команду " RBP! ", ID устройства должен находится в стеке. Взаимодействие проходит таким образом: На Вашем устройстве кусок памяти 0x300-0x3FF это 0x400-0x4FF на другом. И наоборот. То есть, изменяя байт 0x300 мы изменяем 0x400 на другом. Не нужно использовать во время диалога, т.к. любое отображение ставит в RBP! номер терминала, который указан в TERMADDR. Вот моя сеть: Попробуем написать команду, которая отправит данные другому устройству: : SEND CR ." ENTER MESSAGE: " 400 100 ACCEPT DROP RBP! 400 300 OVER STRLEN MOVE ; На 0x100 находится TIB буфер(для строк), мы не пишем сразу в 0x300 т.к. сейчас мы подключены к матрице, следовательно будем изменять её. Попробуем отправить устройству с ID 15 нашу строку: И вот, о чудо, мы получили нашу строку: И так, вернёмся к периферии. Во первых, таблица(взято с http://minecrafting.ru/topic/6612/ ) : Курсор: 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: Содержимое строки Это - память терминала (чтобы править, нужно использовать 0x300+addr). Зная всё это, мы можем понять, что, например, с монитором не всё так просто. Воспользуемся командой DECOMPILE, чтобы просмотреть, как работает EMIT: Давайте разбирать. 1) 0xF08-0xF12 Берёт из адрес терминала из TERMADDR и переключает устройство на него. 2) 0xF14-0XF18 В 0x300 записывается наш символ. Далее идёт смена координат, это не столь важно. А не так и сложно, как показалось с первого взгляда, верно? Воспользуемся таблицей(взято с http://minecrafting.ru/topic/6612/ ) : 0x00-0x7F: Буфер дисковода, размером в 1 сектор (128 байт). 0x80-0x81: Номер сектора 0x82: Команда для дисковода: (далее значения этого байта) 0: Ничего или удачное завершение предыдущей команды 1: Прочитать имя дискеты 2: Записать имя дискеты 3: Прочитать ID дискеты (серийный номер) 4: Прочитать сектор дискеты 5: Записать сектор дискеты 0xFF: Неудачное завершение предыдущей команды Давайте посмотрим, как работают функции взаимодействия с дисководом(про запись/чтение на дискеты, кстати, поговорим в следующих частях). SAVE" записывает на диск всё от 0x500 до HERE. Во первых, она использует слово DISKNAME". Давайте декомпилируем и его: Не так уж и сложно, записывает данные на 0x300-0x380 и записывает номер команды в 0x382. Вернёмся к SAVE". Далее идёт подготовка к запуску цикла, цикл записывает каждые 128 байт от 500 до HERE используя DISKWS. Давайте посмотрим и на него: И снова, не всё так уж и сложно. Приблизительно то же, что и в случае DISKNAME". Всё просто, не правда ли? Давайте перейдём к самому вкусному - сортроны. Таблица: 0x00: микрокоманда 1: Определить размер инвентаря 2: Прочитать содержимое слота 3: Извлечь 4: Фильтр 0x01: Количество предметов 0x02: Номер слота 0x04: Идентификатор предмета (4 байта!) 0x08: Повреждённость предмета 0x0A: Предел прочности предмета 0x0C: Исходящий цвет 0x0D: Входящий цвет Разберём команду SORTPULL: И снова, запись адреса в RBP, запись номера слота в 0x302, кол-ва предметов в 0x301. Использует SORTCMD. Давайте проанализируем и его: Во первых, что мы можем увидеть - снова запись адреса в RBP. Ожидание исполнения команды. Проверка на то, не случилось ли каких-либо ошибок при работе. Если случились - выводим Sorter Error и выполняем QUIT. Вы все ещё можете спросить, как это позволит нам ускорить свои заводы? А всё просто: Во первых, Вы можете убрать из SORTPULL последних две команды, если они вам, очевидно, не нужны. И две первых, если Вы все еще работаете с сортроном, к которому подключены. Давайте теперь попробуем написать очень быструю команду извлечения ВСЕХ предметов из сундука. Заменим SORTCMD, уберём проверку на ошибки и переключение SORTADDR. Оставим ожидание выполнения. HEX : BETTER_SORTCMD DUP 300 C! 300 C@ = 5 TICKS ; : GET_ALL_ITEMS SORTADDR @ RBP! 1 BETTER_SORTCMD 302 @ 0 DO 40 301 C! I 302 ! 3 BETTER_SORTCMD LOOP ; Вторая функция, использует стандартные методы: : GET_ALL_ITEMS2 SORTSLOTS 0 DO 64 I SORTPULL DROP LOOP ; Вот, мы убрали переключение на SORTADDR, убрали проверки каждый раз в SORTCMD. Давайте теперь сравним две функции: Наша GET_ALL_ITEMS справилась за 4.2 секунды. GET_ALL_ITEMS2 справилась за 6.9 секунд. Этот пример НЕ СОВЕРШЕНЕН, можно ещё сильнее ускорить. ВАЖНО: Оставляйте проверку на ошибки в конце функции. Почему? Требование международных стандартов. Просто если что-то пойдёт не так, сортрон зависнет например, или шину разорвёт на стыке чанков. В следующем гайде я покажу, как создавать и взаимодействовать и создавать собственные структуры данных. Первая часть: https://f.simpleminecraft.ru/index.php?/topic/5936-redpower-компьютеры/ Вторая часть: https://f.simpleminecraft.ru/index.php?/topic/5941-redpower-компьютеры-вторая-часть-понимание-системы/ Третья часть: https://f.simpleminecraft.ru/index.php?/topic/5951-redpower-компьютеры-третья-часть-еще-глубже-ускорение-заводов/ Четвертая часть: https://f.simpleminecraft.ru/index.php?/topic/5965-redpower-компьютеры-четвёртая-часть-собственные-структуры-данных/ Пятая часть: https://f.simpleminecraft.ru/index.php?/topic/5989-гайд-по-redpower-компьютеры-пятая-часть-работа-с-сетью-дисками-чат/
  5. Теперь перейдём к более сложным вещам. В том случае, если Вы сразу перешли сюда после первой части - не спешите, для начала попрактикуйтесь, узнайте получше FORTH. Сейчас я вам поведаю о том, как формируются слова в памяти. Для начала - создадим функцию DUMP: Она принимает на вход адрес, два значения. addr n1 n2 DUMP Выводит n1 строк по n2 байт по адресу addr. VARIABLE PARAM DECIMAL : DUMP 16 RADIX ! PARAM ! 0 DO CR DUP I PARAM @ * + DUP U. BS ." : " PARAM @ 0 DO DUP I + C@ DUP 16 < IF ." 0" THEN . LOOP PARAM @ 0 DO DUP I + C@ EMIT LOOP DROP LOOP ; Когда вы напишете в консоли ' %word% - в стек запишется адрес исполняемой части слова, которую можно выполнить написав EXECUTE. Перейдём к байт-коду данного слова. Инструкции RedCPU: http://www.eloraam.com/nonwp/redcpu.php Каждое созданное Вами слово будет начинаться с 0x22, что является инструкцией ENT. Каждая следующая инструкция после ENT будет указателем на исполняемую часть другого слова. Например: Примечание: Каждая цифра, адрес и т.п. записывается наоборот(записав 0x4488 в памяти окажется 0x88 0x44). Если процессор видит команду 0x22 - он понимает, что далее необходимо брать по два байта, переходить по адресу и исполнять данный код. У вас, возможно, мог возникнуть вопрос: -Хмм, что же находится по адресу 0x55C? Что же, давайте воспользуемся командой >NAME(добавляет в стек адрес строки) Не удивительно. Если бы там не было команды EXIT - он начал бы исполнять то, что находится по адресу 0x0000, где находится всякий мусор. Давайте теперь узнаем, как записываются числа и строки, ведь у них нет определенного адреса: Как можно увидеть - используются специальные слова, которые определяют вхождение в строку и число. Так же можно заметить, что строка заканчивается на 0x00. Давайте теперь, учитывая это, напишем декомпилятор: HEX VARIABLE NOW_ADDR : DECOMPILE OVER 1 + NOW_ADDR ! 0 DO CR NOW_ADDR @ U. BS ." : " NOW_ADDR @ @ DUP 550 = IF DROP NOW_ADDR @ 2 + @ . NOW_ADDR @ 4 + NOW_ADDR ! ELSE FE2 = IF NOW_ADDR @ BEGIN 1 + DUP C@ DUP EMIT ." " 0= UNTIL NOW_ADDR ! ELSE NOW_ADDR @ @ >NAME TYPE NOW_ADDR @ 2 + NOW_ADDR ! THEN THEN LOOP ; Давайте теперь попробуем декомпилировать функцию SAVE": Все сработало отлично! Если возникли какие-либо вопросы - пишите их в комментарии к этому посту, постараюсь ответить. Тема достаточно сложная для восприятия. В следующей части мы ознакомимся как взаимодействовать с периферией(дисководы, сортроны, мониторы и т.п.) напрямую(не используя стандартные команды). Первая часть: https://f.simpleminecraft.ru/index.php?/topic/5936-redpower-компьютеры/ Вторая часть: https://f.simpleminecraft.ru/index.php?/topic/5941-redpower-компьютеры-вторая-часть-понимание-системы/ Третья часть: https://f.simpleminecraft.ru/index.php?/topic/5951-redpower-компьютеры-третья-часть-еще-глубже-ускорение-заводов/ Четвертая часть: https://f.simpleminecraft.ru/index.php?/topic/5965-redpower-компьютеры-четвёртая-часть-собственные-структуры-данных/ Пятая часть: https://f.simpleminecraft.ru/index.php?/topic/5989-гайд-по-redpower-компьютеры-пятая-часть-работа-с-сетью-дисками-чат/
×
×
  • Создать...