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

Alleksh

Игрок
  • Постов

    140
  • Зарегистрирован

  • Посещение

  • Победитель дней

    10

Сообщения, опубликованные Alleksh

  1. 5 часов назад, MuTik сказал:

    Да, да, давайте каждый день вайп

    На клиент уже закинули Avaritia, с последнего вайпа прошло уже 3 месяца. Сколько еще томить людей?

    Поддерживаю! Хоть и не сегодня, но в скором времени ?

     

  2. Что может дать такая сеть из нескольких компов?
    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 ;

    Давайте добавим пару тестовых сообщений:
    image.png.f1aba42a3f3c1944f10566e74051229d.png

    Как можно увидеть, сообщения записались отлично:

    image.png.fa1fbb79bf593e2faffaee439537cdc6.png
    Давайте теперь доработаем наш сервер:
    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 ;

    И так, код мы ввели.
    Давайте всё это подключим:
    image.thumb.png.023654ff70073f3d278b0b37bb4fe5aa.png
    MYID у первого клиента - 5, у второго - 6.
    Давайте протестируем!
    image.thumb.png.c7bf3ba55f6152b162bdad43d66a0a6e.png
    image.thumb.png.42e8bdc7547004abcc25271701d50ff8.png
    Всё сработало отлично! Поздравляю!

    • Рейтинг 2
  3. И так, вам необходимо реализовать структуру, в которой необходимо хранить больше одного числа? Два числа? Число и строку? Число, строку, исполняемый код?
    Вам определённо нужно прочитать эту статью.
    Для начала стоит ознакомиться с некоторыми командами:
    HIDE - прячет последнее слово из словаря.

    REVEAL - восстанавливает спрятанное слово в словарь.
    HEADER - берёт следующую строку из буфера, создает слово с этим именем.
    ALLOT - берёт n со стека, выделяет n байт и возвращает начало выделенной памяти.
    , - выделяет 2 байта, записывает в них значение со стека.
    ,C - выделяет и записывает 1 байт.
    ,S - Аналогично ',' , только для строки. Адрес должен находиться в стеке.
    Давайте узнаем, как работает VARIABLE:
    image.png.5f80d16594ec467b6458167d7342c500.png
    Она вызывает функцию CREATE, выделяет 2 байта, записывает туда 0.
    Давайте узнаем, что делает CREATE:
    image.png.1e40bbd06e948e84a02a3a87b6c43f0e.png
    Идёт вызов функции HEADER, определение которой нам известно.
    Выделяет один байт, записывает 0x22.
    Примечание:
    Во второй части гайда я рассказывал, что это инструкция ENT, которая определяет, что нужно далее делать.

    Выделяет еще два байта, записывает туда 0x534.
    Давайте узнаем, что это за функция!
    image.png.48382c9eb468ba976ebfcb507667f46c.png
    А это - функция DOVAR, которая записывает адрес следующего байта и возвращает нас в предыдущее слово.
    image.png.5d914ce6efe04337dd7a079b19ceb892.png
    То есть, когда мы пишем VAR - исполняется функция DOVAR. DOVAR - то же, что и EXIT, лишь оставляет в памяти адрес следующих двух байт.
    image.png.a252c56b14c3a0ecc49d965101360227.png
    То есть VAR @ можно на заменить 25FD @:

    image.png.9fc8a9152f7f077ec45037459d9a1cf4.png

    Ладно, мы понимаем, как можно записывать переменные и строки. 
    Но как записывать исполняемую часть?
    Давайте посмотрим на исходный код слова " : ":
    image.png.b762128086dc4c43d9475aa22a312aee.png
    Определение HEADER, HIDE нам известно. Про 0x22 мы уже говорили...
    А что значит "[" ?

    image.png.665daf61c03a375d803a544c7ef0dac1.png
    Тут всё крайне просто - в STATE хранится режим, в котором мы сейчас находимся(1 - компиляция, 0 - диалог).
    Завершение компиляции - слово " ; "
    image.png.ec2e2cea329cb598b0c6740a2cffe3e7.png
    Выделяет два байта, записывает в них адрес 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 ;
    image.png.d7d70adc7bf7bb27884cbe08d8a45de5.png
    Как можно увидеть по дампу - функция работает отлично.
    Чтобы получить нужные нам данные можно написать:
    image.png.cbfd5569c68a2d03c04c728f4e7cfdba.png
    Всё работает отлично!
    Давайте теперь создадим массив таких предметов.
    Вот и появилась первая проблема - размер строк не зарезервирован, то есть - он разный, и невозможно подобрать определённое кол-во элементов массиве, размер будет разным.
    У этой проблемы есть два решения:
    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 ; 
    Попробуем инициализировать массив:
    image.png.0a581eff0d65d0f88364400273c6ea19.png
    Всё отлично! Размер массива инициализирован.
    Попробуем добавить элемент "Diamond" в массив.
    Просмотрим дамп памяти массива:
    image.png.4b8bd57dd1accc369ad9870cdb60b0ba.png
    Всё отлично! Теперь по адресу 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-компьютеры-пятая-часть-работа-с-сетью-дисками-чат/

     

     

    • Нравится 1
    • Рейтинг 1
  4. Если Вы не читали прошлую часть - рекомендую её к прочтению. Без неё многое тут может быть непонятно.
    Вторая часть:

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

    Для начала Вам необходимо кое-что знать:
    Для того, чтобы подключиться к устройству - необходимо использовать команду " RBP! ", ID устройства должен находится в стеке.

    Взаимодействие проходит таким образом:
    На Вашем устройстве кусок памяти 0x300-0x3FF это 0x400-0x4FF на другом. И наоборот.
    То есть, изменяя байт 0x300 мы изменяем 0x400 на другом.
    Не нужно использовать во время диалога, т.к. любое отображение ставит в RBP! номер терминала, который указан в TERMADDR.

     

    Вот моя сеть:
    image.png.8175d1132a912585f140e32a8e8419ff.png
    Попробуем написать команду, которая отправит данные другому устройству:
    : SEND CR ." ENTER MESSAGE: "

    400 100 ACCEPT DROP RBP!

    400 300 OVER STRLEN MOVE ;

    На 0x100 находится TIB буфер(для строк), мы не пишем сразу в  0x300 т.к. сейчас мы подключены к матрице, следовательно будем изменять её.
    Попробуем отправить устройству с ID 15 нашу строку:
    image.thumb.png.39bc66000fb7fa5aaf429d18465ff01d.png
    И вот, о чудо, мы получили нашу строку:
    image.thumb.png.fe11278f3c9622a9c2aed80324018bc1.png

    И так, вернёмся к периферии.

    Во первых, таблица(взято с 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:
    image.png.3915d7c2d1ff20400b4ba2702e9df2b5.png
    Давайте разбирать.
    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: Неудачное завершение предыдущей команды

    Давайте  посмотрим, как работают функции взаимодействия с дисководом(про запись/чтение на дискеты, кстати, поговорим в следующих частях).
    image.png.d6fc046a8f89ed26100265b11bd9844b.png
    SAVE" записывает на диск всё от 0x500 до HERE.
    Во первых, она использует слово DISKNAME". Давайте декомпилируем и его:
    image.png.54308a4df2ed85c8daf1518e8da3d8c5.png

    Не так уж и сложно, записывает данные на 0x300-0x380 и записывает номер команды в 0x382.
    Вернёмся к SAVE".
    Далее идёт подготовка к запуску цикла, цикл записывает каждые 128 байт от 500 до HERE используя DISKWS.
    Давайте посмотрим и на него:
    image.png.67b85e5f9c24ede67e27f0fb3443052f.png
    И снова, не всё так уж и сложно. Приблизительно то же, что и в случае DISKNAME".

    Всё просто, не правда ли?

    Давайте перейдём к самому вкусному - сортроны. 
    Таблица:
    0x00: микрокоманда
    1: Определить размер инвентаря
    2: Прочитать содержимое слота
    3: Извлечь
    4: Фильтр
    0x01: Количество предметов
    0x02: Номер слота
    0x04: Идентификатор предмета (4 байта!)
    0x08: Повреждённость предмета
    0x0A: Предел прочности предмета
    0x0C: Исходящий цвет
    0x0D: Входящий цвет

    Разберём команду SORTPULL:
    image.png.a43d093d1ebe431a0299702279c6b9ae.png
    И снова, запись адреса в RBP, запись номера слота в 0x302, кол-ва предметов в 0x301.
    Использует SORTCMD.
    Давайте проанализируем и его:
    image.png.abb9389279d32c3b384481050b487538.png
    Во первых, что мы можем увидеть - снова запись адреса в 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
    • Рейтинг 1
  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 будет указателем на исполняемую часть другого слова.
    Например:

     image.png.036da96be25eefd8754f7daca98641f9.png
    Примечание: 
    Каждая цифра, адрес и т.п. записывается наоборот(записав 0x4488 в памяти окажется 0x88 0x44). 

    Если процессор видит команду 0x22 - он понимает, что далее необходимо брать по два байта, переходить по адресу и исполнять данный код.
    У вас, возможно, мог возникнуть вопрос:
    -Хмм, что же находится по адресу 0x55C?
    Что же, давайте воспользуемся командой >NAME(добавляет в стек адрес строки)

    image.png.f0f7a8e94a7b0bdce408a6348d6b4758.png
    Не удивительно.
    Если бы там не было команды EXIT - он начал бы исполнять то, что находится по адресу 0x0000, где находится всякий мусор.
    Давайте теперь узнаем, как записываются числа и строки, ведь у них нет определенного адреса:

    image.png.82b548598d714158a14c5c61e876606f.png
    Как можно увидеть - используются специальные слова, которые определяют вхождение в строку и число. Так же можно заметить, что строка заканчивается на 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":
    image.png.ef6c444e48ba8d2a2de51b05d1ed2e45.png
    Все сработало отлично!

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

     

    Первая часть: 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
    • Рейтинг 4
  6. Многие недооценивают компьютеры из RP, а еще больше - не знают о них вовсе.
    В этом гайде я о них вам поведаю.
    Для начала вам понадобится:
    Центральный процессор, монитор, дисковод, объединительная плата, 8K RAM модуль, extended FORTH disk (желательно).
    Примечание:
    Позади ЦП вы можете установить до 8 8K RAM модулей.

    Устанавливаете центральный процессор, позади него - объединительную плату, на неё - 8K RAM модуль:
    image.thumb.png.3d427cd8670e3b22c4e8297579dc8957.png
    Чтобы объединять разную периферию(дисководы, мониторы, ЦП и т.п.) - их можно ставить вплотную друг к другу, или же использовать плоские кабеля:
    image.png.373aae33502f2edd9fe7d04d20cac466.png
    Каждый блок может иметь собственный ID, устанавливать его можно используя отвёртку, нажав shift+ПКМ:
    image.png.2153396c9b5f3e555a698bab7e24f181.png
    Компьютер использует эти ID для подключения к устройству, рекомендуется делать их разными в одной сети.
    К слову про сети:
    image.thumb.png.b3a69232a2bedad7a8a774edb858bae6.png
    Как можно наглядно увидеть, устройство(далее - узел) номер один видит лишь 3 и 2.
    То есть, узлы не могут пропускать через себя сигнал. Чтобы подключить первый узел к шестому - необходимо, чтобы между ними была связь в виде плоских кабелей.
    И так, вернёмся к постройке нашего ПК.
    Нажав ПКМ по ЦП, мы увидим такой интерфейс:
    image.png.de1ab96d2fcc583fce552645b40f9705.png
    Disk - идентификатор загрузочного дисковода,
    Console - идентификатор монитора, в котором мы будем работать,
    ID - идентификатор ЦП.
    START - Запустить устройство.
    HALT - Отключить устройство.
    RESET - Остановить работу устройства, при нажатии START - загрузка с дискеты.
    Датчики справа от кнопок обозначают, включено ли устройство. 
    Сверху - включено, снизу - отключено.

    Итак, приступим к самому компьютеру.
    Чтобы он запустился - необходимо вставить в дисковод дискету и нажать START в ЦП.
    Если вы всё правильно настроили - вас должно встретить следующее сообщение: 
     image.thumb.png.88ed0dadb4c8a3e69216cbef94211e32.png
    Во первых, нужно ознакомиться с синтаксисом FORTH.
    Этот язык использует для своей работы стек, то есть вводя какое либо число и нажимая ENTER - вы его добавляете в стек.
    Последнее число, которые мы добавили выйдет первым:
    image.png.bed01f49b90b9f0258f5cb936b8a0012.png
    Арифметические операции забирают последние два числа со стека и кладут на вершину итог.
    2 2 * .  выведет 4,
    2 6 * .  выведет 12,
    1 2 3 * + . выведет 7.

    Чтобы исполнить какое-либо слово - достаточно просто его написать:
    image.thumb.png.79a4ca62231ef58707c4c0b045ec000a.png
    Создание слов
    VARIABLE %name% -  создать переменную с именем %name%.
    CONSTANT %name% -  создать константную переменную с именем %name%.
    Для формирования исполняемых слов есть кое-что интереснее:
    : %name% %body% ;
    Где %name% - имя, а %body% - тело слова(то, что мы будем исполнять).
    Например, в словаре есть слово "EMIT".
    Оно берёт последнее значение со стека и выводит его в виде символа(ASCII).
    42 в таблице ASCII - *
    Создадим слово STAR, которое выведет звезду:
    image.thumb.png.068f1439c620b85b0e6e5a10829ec161.png
    Ознакомиться со словарём и многим другим можно тут:
    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
    • Рейтинг 6
  7. У extra utilities есть очень мощные генераторы RF. За первую неделю игры у меня было ~10^13 RF энергии, что = 2,5 * 10^12 EU. Мне кажется, добавление такого мода слишком упростит развитие.

    • Рейтинг 1
  8. 03.06.2018 в 01:01, maxvlod сказал:

    Из всех пунктов полезен только 7, занимался взломом всего чего только возможно.

    Вот солью я бд этого сайта, расшифрую пароли и всё. буду иметь базу вида email:pass потом закину её в софт и буду брутить ваши вк и т.д.

    лол, базы email:pass редко где встречаются, чаще используется email:hash. Естественно, есть шанс коллизии но это намного лучше, чем email:pass. И что же ты с хэшем будешь делать?

    Иногда используют email:cryptPass. Шифруют пароли собственным 1024-битным ключем. При таком шифровании чаще используется AES в связке с twofish/serpent. Иногда эти 3 алгоритма вместе. Существует 2^1024 этих ключей, на поиск уйдет очень большое количество времени.
    Если пытаться перехватить данные как MITM, при передаче данных через https невозможно влезть в соединения, пакеты зашифрованы. На расшифрование 2048-битных ключей уйдут годы.
     

  9. Мод носит название Waila
    Лучше ставить вместе с аддоном wawla. Он добавляет поддержку AE2, Thaumcraft и т.п.
    Добавляет удобную информацию о блоке, имеет тонкую настройку этой менюшки. 
    К сообщению будут прикреплены скриншоты.

    Screenshot_3.png

    Screenshot_4.png

    • Нравится 2
    • Рейтинг 2
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...