Бой в памяти

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Core War
Core War PMars Screenshot.png
Игра «Core War» под управлением симулятора pMARS
Тип

Игра для программистов

Автор

Д. Г. Джонс и А. К. Дьюдни

Первый выпуск

1984

Последняя версия

Бой в памяти (англ. Core War) — разновидность компьютерной игры «Дарвин» разработанная Александром К. Дьюдни. Помогал разрабатывать игру Дэвид Джонс, студент кафедры информатики университета Западной Онтарио, где преподавал Дьюдни.

В данной игре игроки разрабатывают компьютерные программы на специальном языке программирования, похожем на ассемблер — Redcode. Программы размещаются в циклически замкнутом участке памяти (core), состоящей из 8000 ячеек и зацикленной в кольцо. Каждая команда занимает одну ячейку. Redcode-программы работают под управлением MARS (англ. Memory Array Redcode Simulator — Симулятор Массива Памяти Redcode). Программы загружаются по случайным адресам в памяти.

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

Статьи, посвящённые игре, публиковались в журнале Scientific American в 19841987, в колонке Computer Recreations (Занимательный компьютер). Игра вызвала значительный интерес у читателей, и впоследствии было основано международное общество International Core War Society со штаб-квартирой в США и отделениями во многих странах мира, включая СССР. Также было разработано несколько стандартов, описывающих правила игры. Разработать «Бой в памяти» Дьюдни побудила история о двух противоборствующих программах CREEPER и REAPER (см. компьютерный вирус). Обстоятельства разработки CREEPER/REAPER дошли до Дьюдни в несколько искажённом виде, так по словам Р. Томлинсона, ни заражения ARPANet, ни «поединка» между двумя программами в действительности не было.

Redcode[править | править исходный текст]

Ниже приведены команды языка Redcode в том виде, в котором они были опубликованы в статье А. Дьюдни:

 Инструкция
     Аргументы        
          Описание
 MOV A B - переслать содержимое ячейки с адресом A в ячейку с адресом B
 ADD A B - прибавить содержимое ячейки с адресом A к ячейке с адресом B
 SUB A B - вычесть содержимое ячейки с адресом A из ячейки с адресом B
 MUL A B - умножить содержимое ячейки с адресом A на ячейки с адресом B
 DIV A B - разделить содержимое ячейки с адресом A на ячейки с адресом B
 MOD A B - делит содержимое ячейки с адресом A на ячейки с адресом B с остатком
 JMP A   - передать управление на адрес A
 JMZ A B - передать управление на адрес A, если содержимое ячейки
              с адресом B равно нулю
 JMG A B - передать управление на адрес A, если содержимое ячейки
              с адресом B больше нуля
 DJZ A B - вычесть единицу из содержимого ячейки с адресом B и передать
              управление на адрес A, если содержимое  ячейки с адресом B
              равно нулю
 CMP A B - сравнить содержимое ячеек с адресами A и B, если они не равны,
              пропустить следующую инструкцию
 SEQ A B - сравнить содержимое ячеек с адресами A и B, если они равны,
              пропустить следующую инструкцию
 SLT A B - сравнить содержимое ячеек с адресами A и B, если первое
              меньше второго, пропустить следующую инструкцию
 SNE A B - то же самое, что и CMP 
 SPL   B - породить новый поток по адресу B
 STP A   - сохранить содержимое ячейки с адресом B в складе ячеек
 LDP A   - загрузить содержимое ячейки с адресом B из склада ячеек
 DAT   B - неисполняемое выражение, B — данные.  При попытке выполнения
              программа останавливается
 NOP - нет операций

Ссылки[править | править исходный текст]

Статьи[править | править исходный текст]

Сайты[править | править исходный текст]