Jump to content

Система Желудь БАЗОВАЯ

Система Желудь БАЗОВАЯ
Разработчик Желудевые компьютеры
Впервые появился 1979 год ; 45 лет назад ( 1979 )
Лицензия Собственный
Диалекты
Атом БЕЙСИК
Под влиянием
Би-би-си БЕЙСИК

Acorn System BASIC и Atom BASIC — это два тесно связанных диалекта языка программирования BASIC, разработанные Acorn Computers для своих ранних микрокомпьютеров , таких как Acorn System 3 и Acorn Atom . Разработанные собственными силами, они имеют ряд существенных особенностей по сравнению с большинством диалектов BASIC эпохи домашних компьютеров .

В частности, в языке отсутствовали операторы для многих внутренних функций машины, и он обеспечивал это с помощью прямого доступа и манипулирования ячейками памяти с использованием операторов косвенности вместо PEEK и POKE . В обоих также отсутствовала поддержка чисел с плавающей запятой , хотя ее можно было добавить с помощью дополнительного ПЗУ , что привносило дополнительные особенности. System и Atom BASIC отличаются прежде всего тем, что Atom использовал одну и ту же систему косвенности для обеспечения элементарных манипуляций со строками, которых не хватало в Standard, и добавил небольшое количество новых операторов для компьютерной графики .

Большинство этих странностей было устранено, когда базовая система была значительно расширена для создания BBC BASIC на преемнике Atom, BBC Micro . ПЗУ BBC BASIC позже были предложены пользователям Atom.

Герман Хаузер использует Atom BASIC на 30-летнем юбилее BBC Micro.

Компания Acorn Computers была основана в 1978 году и начала свою деятельность с производства серии комплектных систем на базе еврокарт, начиная с Acorn System 1 в 1979 году. Для этих машин они разработали Acorn System BASIC, [ 1 ] диалект только целых чисел, для которого требовалось всего 4 КБ памяти. [ 2 ] Язык имел ряд деталей реализации, которые делали его «крайне нестандартным». [ 3 ]

Atom . , представленный в 1980 году, был построен из частей System 3, собранных на одной плате В стандартной комплектации системы поставлялись с 2 КБ ОЗУ и 8 КБ ПЗУ, включая BASIC и ряд драйверов устройств . В Atom BASIC было лишь несколько изменений по сравнению с версией System: добавлена ​​поддержка манипуляций со строками и небольшое количество графических команд. Atom можно было модернизировать: всего до 12 КБ ОЗУ и дополнительные 4 КБ ПЗУ, которые добавляли поддержку операций с плавающей запятой . При этом использовались отдельные функции и операции, которые над ними работали, обозначенные символом %. [ 3 ] Этот выбор символа был неудачным, поскольку Microsoft BASIC использовал знак процента для обозначения целых чисел, а не с плавающей запятой. [ 4 ]

Atom пробыл на рынке совсем недолго, прежде чем Acorn начал разработку своего преемника Proton. Первоначально это должно было быть двухпроцессорное устройство. Проект находился еще на самых ранних стадиях, когда ряд событий привел к тому, что он был выбран в качестве основы для однопроцессорного BBC Micro . [ 1 ] В то время прозвучали комментарии о том, что ему определенно не следует использовать разновидность BASIC от Acorn, которую «практически ни один другой микрокомпьютер не может понять» и что «если бы новый язык был основан на форме BASIC от Atom, это было бы катастрофой». [ 5 ]

В конечном итоге система BBC действительно использовала BASIC, написанный Acorn, но сильно модифицированный. Получившийся BBC BASIC был намного больше похож на Microsoft BASIC и позже предлагался как обновление Atom. [ 6 ]

Описание

[ редактировать ]

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

Редактирование программы

[ редактировать ]

Как и большинство BASIC того времени, Atom BASIC использовал построчно-ориентированный редактор с прямым (немедленным) и косвенным режимами. Ввод оператора без номера строки выполнил операцию немедленно. Вместо этого добавление номера строки поместило эти операторы в сохраненную программу. Одна особенность заключалась в том, что, хотя он допускал несколько операторов в одной строке, разделителем между операторами была точка с запятой. [ 7 ] вместо обычно используемого двоеточия, что требует от пользователя преобразовать этот символ при вводе программ для других компьютеров.

Acorn BASIC, предназначенный для использования с компьютерными терминалами , не поддерживал полноэкранный режим редактирования. Напротив, в Commodore BASIC (и многих других диалектах микрокомпьютеров) можно использовать клавиши курсора для перемещения вверх по списку программ, внесения изменений на экране, а затем нажать Return чтобы ввести эти изменения. В Atom можно было перемещаться вверх по списку с помощью клавиш курсора , но для редактирования этого текста необходимо Copy была нажата клавиша, чтобы скопировать ее в область ввода, где ее можно будет редактировать. [ 8 ]

Еще одним отличием Atom было Break ключ, который выполнял сброс системы, потенциально удаляя программу из памяти. Чтобы сбросить это значение, если клавиша была нажата по ошибке, в Atom BASIC добавлена ​​опция OLD команда, которую также можно использовать для сброса случайного NEW. Более незначительное изменение заключалось в том, что LIST вместо знака минус использовались номера строк, разделенные запятыми, LIST 20,40 печатает строки с 20 по 40. [ 9 ]

В языке также была возможность использовать метки строк вместо чисел для ветвления . Метки состояли из одной строчной буквы, набираемой сразу после номера строки. Например: [ 10 ]

10s PRINT "*"
20 GOTO s

Преимущество этого метода заключается в том, что адрес оператора в памяти сохраняется в s, а это означает, что ветвь GOTO может перейти непосредственно к этой строке без необходимости просматривать каждую строку в программе в поисках соответствующего номера строки. [ 10 ] Acorn также позволял использовать любое выражение для получения номера строки для целей ветвления, например GOSUB 500+(A*10). [ 11 ]

Заявления

[ редактировать ]

Примитивы Acorn были похожи на другие BASIC той эпохи и поддерживали большинство элементарных операторов, таких как CLEAR, DIM, END, FOR..TO..STEP..NEXT , GOSUB , GOTO , IF..THEN , INPUT, (необязательно) LET, LIST, LOAD, PRINT, REM , RETURN , RUN, SAVE, STOP . [ 12 ] Отсутствует ряд общих утверждений, в частности ДАННЫЕ, ЧТЕНИЕ, ВОССТАНОВЛЕНИЕ используются для хранения данных в программе. ON..GOSUB, ON..GOTO вычисляемые ветки и DEF FN для пользовательских функций. [ а ]

К этим основам Желудь добавил DO..UNTIL для построения циклов на основе выражений с нижней проверкой. Циклы FOR высоко оптимизированы за счет прямого сравнения индексной переменной и постоянного значения, которое устанавливается только один раз при входе в цикл. Другая оптимизация заключается в том, что сохраняется адрес FOR, а не номер строки, поэтому при обнаружении соответствующего NEXT программа может немедленно вернуться к FOR. Хотя FOR подходит для многих циклов, когда требуется больший контроль, например, при сравнении с более сложным критерием, можно использовать оператор IF:

500 A=A+1
510 REM additional statements here
600 IF A>10 AND B>100 THEN 500

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

500 DO A=A+1
510 REM additional statements here
600 UNTIL A>10 AND B>100

В этом случае, как и в цикле FOR, адрес DO сохраняется при входе в цикл, что позволяет UNTIL немедленно вернуться в начало цикла без необходимости сканирования всей программы. [ 14 ] Обратите внимание на особый случай, когда за DO может следовать непосредственно другой оператор без необходимости разделителя точка с запятой - A=A+1 не является частью DO, это отдельное заявление. [ 15 ]

Среди более мелких дополнений — WAIT оператор, который приостанавливал выполнение до следующего такта, каждый раз 1/60 секунды . При этом ожидание не происходит в течение всего тика, а только до следующего тика, который может произойти немедленно. [ 14 ] LINK вызывает процедуру машинного языка , [ 16 ] аналог CALL или SYS в большинстве диалектов. [ 17 ]

Математика, операторы и функции

[ редактировать ]

Acorn использовал 32-битные целые числа со знаком для всех математических вычислений. [ 18 ] без стандартной поддержки чисел с плавающей запятой . Для обработки деления, которое часто возвращает дробную часть, они добавили оператор % оператор для возврата остатка. Например, PRINT 7/3 вернет 2, а PRINT 7%3 вернет 1. [ 19 ]

Имена переменных могут состоять только из одной буквы от A до Z. [ 20 ] Все комбинации двух букв зарезервированы как массивы, поэтому E было одним значением, а EE — массивом. Для всех массивов требовался оператор DIM, [ 21 ] он не предполагал размерность 10, как Microsoft BASIC . Во время выполнения единственная проверка, выполняемая над массивом, заключалась в том, что передаваемый индекс был положительным значением, поэтому можно было считывать его в память, передавая значения, превышающие размерность. [ 22 ] Он не поддерживал многомерные массивы. [ 23 ]

Включены базовые математические операции. +, -, *, /, % . Он также поддерживал побитовые логические операторы, например &, \, : используется для AND, OR и XOR соответственно. Эти операторы выполняют сравнения, поэтому 1 & 0 возвращает 0. Использование двоеточия для ИЛИ [ б ] вот почему в качестве разделителя операторов пришлось использовать точку с запятой. [ 24 ] Обратите внимание, что они отделены от логических связей, встречающихся в операторах IF, например IF A=1 AND B=0 THEN..., которые также поддерживаются. [ 25 ]

Было только две математические функции, АБС и РНД . ABS работает так же, как и другие BASIC, возвращая абсолютное значение заданного ввода. RND этого не делает, он возвращает значение между максимальными целочисленными значениями -ve и +ve. Чтобы использовать это в традиционной форме для возврата значения от 0 до заданного положительного значения, например, от 0 до 10, использовался ABS(RND)%11. [ 26 ]

Большинство BASICов той эпохи использовали PEEK и POKE для доступа к специфичным для машины функциям, которые не были встроены в сам язык. В Acorn не было PEEK и POKE, и они использовали новые операторы, чтобы обеспечить эту функциональность в более простой в использовании системе. Операторы были ? и !, первый устанавливает или возвращает байт в заданном месте, а второй устанавливает или возвращает 4-байтовое «слово». [ 27 ] Например, распространенные примеры PEEK в большинстве диалектов, такие как PRINT PEEK(4000), может быть достигнуто с помощью PRINT ?4000. [ 28 ] В большинстве диалектов отсутствовал эквивалент !. [ с ] Более того, тот же синтаксис можно использовать для установки значения в памяти, например, POKE: ?4000=200. [ 28 ]

Чтобы облегчить доступ к данным, расположенным в памяти в непрерывной форме, например к массивам чисел, операторы можно применять к правой части переменной. При таком использовании, например A?, система обращается к памяти в том месте, где находится переменная. Любое число, следующее за оператором, применялось как смещение, например: A?100 вернет значение байта через 100 позиций после местоположения A в памяти. [ 28 ]

Это часто использовалось с другой концепцией, используемой только в Acorn, - «вектор». Как ни странно, они были созданы с использованием тех же команд DIM, что и массив, но применялись к однобуквенным переменным. При обнаружении DIM система выделяла указанное количество ячеек в верхней части памяти, а затем перемещала указатель памяти вверх. В результате остался блок памяти, к которому затем можно было получить доступ с помощью операторов косвенности. Например: [ 28 ]

10 DIM A(100)
20 PRINT A?10

Который будет печатать значение байта в 11-м месте в A (все обращения имеют нулевой индекс). [ 28 ] Аналогично, можно хранить значения в памяти, используя тот же оператор, который применяется перед именем переменной:

!A=123456

Это преобразует десятичное значение 123456 из ASCII в целое число и сохранит его в ячейках памяти, начиная с базовой ячейки для A. [ 27 ]

Чтобы облегчить работу с векторами, Acorn добавил псевдопеременную TOP. При первом запуске системы она указывала на первое место после конца программы. Затем все DIM создавались с текущим значением TOP, а затем TOP обновлялся до конца нового объекта. Можно было создавать динамические векторы, напрямую манипулируя TOP. [ 30 ]

В Atom BASIC добавлена ​​поддержка строк, но он не поддерживает строковые переменные и не имеет концепции строки как атомарного типа. Вместо этого векторная система использовалась для манипулирования строковыми данными в памяти в виде ASCII . значений [ 28 ] Чтобы облегчить такое использование, $ оператор преобразовал значения в памяти в их значения ASCII. Этот оператор продолжал читать данные из памяти до тех пор, пока не встречал возврат, а при записи данных в память всегда добавлял возврат в конце. [ 31 ] Итак, пока PRINT ?A напечатал бы единственное значение байта в позиции A в памяти как число, PRINT $A прочитает значения, начинающиеся с этого места, и распечатает их как строку. [ 31 ] Например:

10 DIM A(12)
20 $A="HELLO, WORLD"
30 PRINT $A

Этот код может выглядеть очень похожим на использование строк в других диалектах, хотя расположение $ относительно имени переменной меняется. Он особенно похож на те диалекты, которые требовали DIM для всех строк, например HP Time-Shared BASIC или Atari BASIC . Внутри операции очень разные. В этих диалектах A и A$ — это две разные переменные, а $ фактически является частью имени. В Acorn A и $A — это одна и та же переменная, и $ применяет к этой переменной унарную операцию. Это также означает, что для строк можно использовать массивы, например $AA(10), который преобразует значение в AA(10) в строку. [ 3 ]

Эта концепция позволяет получать доступ к отдельным символам с использованием векторной записи. Например, A?5 вернет значение ASCII 5-го символа, в данном случае 79 для O, а PRINT $A?5 выведет «О». [ 32 ] Невозможно извлечь подстроку за одну операцию, приходится перебирать символы и перемещать их один за другим. Конкатенация возможна путем присвоения одной переменной концу другой, например, $A+LEN(A)=$B копирует строку B в конец A. [ 33 ]

В языке есть только две строковые функции: LEN который ищет завершающий символ возврата и возвращает длину, и CH чтобы вернуть значение ASCII символа. CH имеет нечетный формат без скобок, поэтому CH"A" вернул бы 65. [ 32 ] В остальном он похож на более распространенный ASC встречается в других диалектах. [ 34 ]

Еще одним новым оператором стал #, который преобразовывал числовое значение в шестнадцатеричную строку. Как и $, его можно использовать где угодно для выполнения преобразования. Например, A=#4000 устанавливает значение A в десятичное значение 16384, местоположение памяти экрана. Это часто комбинировалось с оператором $, чтобы позволить строкам содержать непечатаемые символы, такие как символ «курсора вверх». [ 8 ]

Плавающая точка

[ редактировать ]

Поддержка чисел с плавающей запятой может быть добавлена ​​с помощью дополнительного расширения ПЗУ на 4 КБ. При этом использовался расширенный 40-битный размер слова, 32 бита мантиссы со знаком, за которой следовал 8-битный показатель степени. [ 35 ] Это означало, что системе требовался какой-то способ различать данные при чтении и записи из памяти, что обрабатывалось аналогично строковому оператору с использованием оператора % префикс: [ 35 ]

 %A=123.45

Поскольку код содержался в отдельном ПЗУ размером 4 КБ, он не изменял существующие операторы, такие как PRINT. Вместо этого был введен совершенно новый набор утверждений, в том числе ФДИМ, ФИФ, ФИНПУТ, ФПРИНТ, ФУНИТЛ . Это означает, например, что нельзя IF A=B если значения имеют плавающую точку, вместо этого необходимо FIF A=B THEN.... Целочисленное значение можно преобразовать в число с плавающей запятой с помощью FLTи преобразовать его в целое число с помощью оператора с плавающей запятой %. [ 27 ]

ПЗУ также включало гораздо большее разнообразие математических функций, в том числе ABS, ACS, ASN, ATN, COS, DEG, EXP, FLT, HTN, LOG, PI, RAD, SGN, SIN, SQR, STR, TAN, VAL . [ 36 ] STR преобразовал число с плавающей запятой в строку, как это было в случае STR$ в других диалектах, но в данном случае строка записывалась в память и функция возвращала адрес, где она хранилась. Поскольку для хранения строки требовалось достаточно долгое хранение, это часто достигалось с помощью TOP. Например:

 STR PI, TOP
 PRINT $TOP
 TOP=TOP-LEN(TOP)

Это преобразует значение псевдопеременной PI в строку, начинающуюся с ячейки памяти TOP, печатает строку с использованием $TOP, а затем освобождает эту память. [ 37 ]

Ввод/вывод

[ редактировать ]

PRINT и INPUT в основном работал так же, как и в других диалектах. Одна странность возникла из-за того, что двоеточие и точка с запятой уже использовались для других целей, а для разделения полей оставалась только запятая. Чтобы напечатать значения без пробелов между ними, значения были перечислены с пробелом между ними, например PRINT A B C, формат, который также был разрешен на многих других диалектах, хотя и использовался редко. Одно это не приведет к печати чисел в компактном формате, поскольку они обычно печатаются с пробелами справа, чтобы ширина каждого из них составляла 8 символов. Это можно отрегулировать, изменив значение в поле @ псевдопеременная. [ 38 ] Новая строка была напечатана с одинарной кавычкой, PRINT "HELLO" ' "WORLD". [ 27 ] COUNT возвращает столбец курсора, аналогично POS в большинстве диалектов. [ 39 ]

Устройством хранения данных по умолчанию для Atom была компактная кассетная система. Каждый файл хранился в виде серии блоков, каждый из которых содержал заголовок с именем файла. [ 40 ] Файлы, сохраненные с SAVE THISFILE можно было бы прочитать обратно с помощью LOAD THISFILE, в то время как *CAT перечислил имена файлов на кассете, прочитав их заголовки. [ 41 ]

Произвольные данные можно было открыть для чтения с помощью FIN или писать с FOUT, оба из которых вернули числовой дескриптор файла . Файлы были закрыты с помощью SHUT. Данные были прочитаны или записаны в числовом формате с использованием GET, PUT, как отдельные байты с BGET, BPUTи в качестве строк, используя SGET, SPUT. EXT вернул длину файла, а PTR вернул или установил текущий указатель в файле, [ 16 ] количество байтов, прочитанных или записанных на данный момент. [ 42 ] Если ПЗУ с плавающей запятой присутствовало, оно добавляло FGET, FPUT. [ 36 ]

Например:

A=FOUT"AFILE"
DO BPUT A,88; WAIT; WAIT; WAIT; WAIT; UNTIL 0

Будет использовать BPUT записать серию байтов, 88, пока пользователь не нажмет Escape чтобы остановить программу. Затем их можно прочитать обратно (после перемотки ленты вручную), используя: [ 43 ]

A=FIN"AFILE"
DO PRINT $BGET A; UNTIL 0

Знак доллара указывает системе преобразовать входящие двоичные данные в строковый формат, поэтому в этом случае выходные данные будут представлять собой серию X, а не 88. [ 43 ] Может показаться, что вместо BGET можно использовать SGET, но при этом будет предпринята попытка продолжить чтение из файла до тех пор, пока не будет обнаружен возвращаемый символ, который в этом примере не был записан. [ 44 ]

Графическая поддержка

[ редактировать ]

В Atom была элементарная растровая графика , и в Atom BASIC был добавлен ряд команд для ее поддержки. CLEAR очистил экран, MOVE переместил графический курсор в заданное место X,Y и DRAW нарисовал линию от текущего местоположения до предоставленных X,Y. [ 45 ]

ПЗУ с плавающей запятой также включало поддержку цветной графики с добавлением COLOUR заявление. Вызов COLOR с параметром от 0 до 3 устанавливает для последующего вывода этот цвет. На черно-белом дисплее цвета отображались оттенками серого. [ 46 ]

Примечания

[ редактировать ]
  1. ^ Хорошим источником того, что уже считалось стандартом для BASIC в эпоху микрокомпьютеров, является введение в BASIC Computer Games , в котором представлены используемые в нем утверждения и говорится об исключениях из «обычного BASIC». [ 13 ]
  2. ^ Вероятно, потому, что он выглядит как вертикальная черта, которая используется в большинстве математических текстов для обозначения ИЛИ.
  3. ^ Различные расширенные диалекты, такие как Turbo-BASIC XL, включали такие команды, как DPEEK для «двойного просмотра», возвращающего 16-битное значение. По своей концепции они схожи с !. [ 29 ]
  1. ^ Перейти обратно: а б Газзард 2016 , с. 22.
  2. ^ Одди .
  3. ^ Перейти обратно: а б с Ссылка 1981 , с. 425.
  4. ^ Ссылка 1981 , с. 396.
  5. ^ BBC 1981 , с. 662.
  6. ^ Фрукты 1982 , с. 11.
  7. ^ Джонсон Дэвис 1979 , с. 14.
  8. ^ Перейти обратно: а б Джонсон Дэвис 1979 , с. 65.
  9. ^ Джонсон Дэвис 1979 , с. 7.
  10. ^ Перейти обратно: а б Джонсон Дэвис 1979 , с. 25.
  11. ^ Джонсон Дэвис 1979 , с. 26.
  12. ^ Джонсон Дэвис 1979 , стр. 3–4.
  13. ^ Ахль, Дэвид (1978). ОСНОВНЫЕ Компьютерные игры . Рабочий. п. XII.
  14. ^ Перейти обратно: а б Джонсон Дэвис 1979 , с. 37.
  15. ^ Джонсон Дэвис 1979 , с. 35.
  16. ^ Перейти обратно: а б Ссылка 1981 , с. 427.
  17. ^ Ссылка 1981 , с. 43.
  18. ^ Джонсон Дэвис 1979 , с. 67.
  19. ^ Джонсон Дэвис 1979 , с. 11.
  20. ^ Джонсон Дэвис 1979 , с. 12.
  21. ^ Джонсон Дэвис 1979 , с. 45.
  22. ^ Джонсон Дэвис 1979 , с. 50.
  23. ^ Джонсон Дэвис 1979 , с. 51.
  24. ^ Джонсон Дэвис 1979 , с. 15.
  25. ^ Джонсон Дэвис 1979 , с. 30.
  26. ^ Джонсон Дэвис 1979 , с. 24.
  27. ^ Перейти обратно: а б с д Ссылка 1981 , с. 426.
  28. ^ Перейти обратно: а б с д и ж Джонсон Дэвис 1979 , с. 53.
  29. ^ Фетцер, Рон (1985). Расширенная документация Turbo-BASIC XL (PDF) .
  30. ^ Джонсон Дэвис 1979 , с. 46.
  31. ^ Перейти обратно: а б Джонсон Дэвис 1979 , с. 58.
  32. ^ Перейти обратно: а б Джонсон Дэвис 1979 , с. 59.
  33. ^ Джонсон Дэвис 1979 , с. 61.
  34. ^ Ссылка 1981 , с. 45.
  35. ^ Перейти обратно: а б Джонсон Дэвис 1979 , с. 162.
  36. ^ Перейти обратно: а б Джонсон Дэвис 1979 , с. 161.
  37. ^ Джонсон Дэвис 1979 , с. 163.
  38. ^ Джонсон Дэвис 1979 , с. 13.
  39. ^ Ссылка 1981 , с. 73.
  40. ^ Джонсон Дэвис 1979 , с. 10.
  41. ^ Джонсон Дэвис 1979 , с. 9.
  42. ^ Джонсон Дэвис 1979 , с. 151.
  43. ^ Перейти обратно: а б Джонсон Дэвис 1979 , с. 8.
  44. ^ Джонсон Дэвис 1979 , с. 152.
  45. ^ Джонсон Дэвис 1979 , с. 28.
  46. ^ Джонсон Дэвис 1979 , с. 167.

Библиография

[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 58db198280fad9e31829310f3813be33__1697111280
URL1:https://arc.ask3.ru/arc/aa/58/33/58db198280fad9e31829310f3813be33.html
Заголовок, (Title) документа по адресу, URL1:
Acorn System BASIC - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)