Wstęp

Reguły

Core War - Wojny Rdzeniowe

[A cóż to takiego? | Rys historyczny | Wojny Rdzeniowe w Polsce]


Wojny Rdzeniowe? A cóż to takiego?
Wojny Rdzeniowe (Core War) to gra dla programistów. Polega ona na pisaniu programów w specjalnym, nawiasem mówiąc dość ubogim, języku asemblerowym zwanym Redcode. Programy te walczą ze sobą na wydzielonej w pamięci komputera arenie, zwanej rdzeniem (core). Nad przebiegiem walk czuwa program-sędzia, który umieszcza walczące programy na rdzeniu i dba, aby wykonywały one ruchy na przemian, po jednym rozkazie. Walczące programy mogą przemieszczać się po rdzeniu, dzielić na niezależne procesy (multitasking!) lub starać się uszkodzić kod przeciwnika. Program-wojownik, który z powodu uszkodzeń nie jest w stanie wykonać poprawnego rozkazu, przegrywa. Jeśli po wyczerpaniu się ustalonego limitu ruchów walka nie zostanie rozstrzygnięta, ogłaszany jest remis.

Redcode jest asemblerem wirtualnego procesora o nazwie MARS. Ponieważ MARS jako urządzenie nie istnieje, jego działanie musi być symulowane programowo (stąd też jego nazwa: Memory Array Redcode Simulator), tak więc mianem tym określa się również programy, które potrafią pobierać z wirtualnej pamięci rozkazy Redcode, dekodować je i wykonywać, tak jak robiłby to prawdziwy MARS.

Rdzeń jest zamkniętym pierścieniem komórek, który nie ma ani początku, ani końca. Każda komórka rdzenia zawiera jeden rozkaz Redcode wraz z dwoma argumentami. Niektórym rozkazom wystarcza jeden argument, ale i tak w każdej komórce zawsze są oba. Bardzo ważną cechą rdzenia jest brak adresów bezwzględnych - wszystkie adresy liczone są względem bieżącej pozyzji. Oznacza to, że np. program nie może odczytać zawartości komórki o adresie 100, a jedynie zawartość komórki odległej od bieżącej pozycji o 100. W ten sposób jedynym punktem odniesienia dla walczącego programu jest jego własna pozycja na rdzeniu.

Zwroty "walka programów" i "zabicie programu" brzmią nieco abstrakcyjnie, ale łatwo je wyjaśnić. Jeden z rozkazów Redcode (DAT) nie może być wykonany - jeśli któryś z procesów próbuje to robić, zostaje zabity. Program przegrywa walkę, gdy zginą wszystkie jego procesy. Na tym właśnie polega walka - zmusić wszystkie procesy przeciwnika do wykonania owej zabójczej instrukcji, np. przez nadpisanie (czy, jak kto woli, skasowanie) jego kodu.

Wspomnę jeszcze, że Core War to nie jest zabawa polegająca na wyszukiwaniu dziur w spreparowanym systemie komputerowym. Zabawa ta, jakby jej nie nazywać, z prawdziwymi Wojnami Rdzeniowymi nie ma nic wspólnego.


Rys historyczny.
Gry opierające się na idei Core War podobno istniały w różnych wersjach już we wczesnych latach 70-tych. Wszak idea programów walczących ze sobą w pamięci komputera jest chyba tak stara, jak same komputery. Spopularyzowane zostały dopiero w roku 1984, kiedy to prof. A. K. Dewdney opublikował w majowym numerze miesięcznika "Scientific American" zasady gry, nazwanej przez niego właśnie "Core War". Dewdney wraz ze swym studentem z University of Western Ontario, Davidem Jonesem, opracowali szczegółowe reguły gry, składnię języka Redcode oraz pierwszego MARS-a, arbitra zarządzającego polem walki na rdzeniu.

Od tego artykułu zaczęła się również "kariera" wirusów komputerowych. Dewdney w marcu 1985 roku opublikował w "Scientific American" list dwóch włoskich programistów, którzy grając w Wojny Rdzeniowe wpadli na pewien kontrowersyjnie genialny pomysł. Zamiast pisać programy w prymitywnym Redcode, można to zrobić w "normalnym" asemblerze, a pole walki można rozszerzyć z rdzenia na całe środowisko systemu operacyjnego. Jak wszyscy dobrze wiemy, pomysł się przyjął. W owym czasie Wojny Rdzeniowe cieszyły się już dużym powodzeniem, toteż wspomniany list w krótkim czasie stał się popularną lekturą sfustrowanych i żądnych rozrywki programistów. Na efekty nie trzeba było długo czekać: jeden z pierwszych znanych wirusów komputerowych, Brain, powstał w roku 1986.

W roku 1985 w Boston odbył się pierwszy Międzynarodowy Turniej Wojen Rdzeniowych, w styczniu 1987 Dewdney opublikował nowe, wzbogacone zasady gry, które w roku 1988 zostały przyjęte jako obowiązujący standard CWS'88 (Core War Standard '88). W międzyczasie powstało Międzynarodowe Stowarzyszenie Wojen Rdzeniowych (I.C.W.S. - International Core War Society) wydające własny kwartalnik, "The Core War Newsletter", i organizujące coroczne turnieje. We wrześniu 1989 roku rozpoczęła swoją działalność polska sekcja I.C.W.S. Niestety, długo nie podziałała, a i późniejsze (w roku 1993) próby jej reanimacji spełzły na niczym.


Wojny Rdzeniowe w Polsce.
W latach 80-tych mało kto słyszał w Polsce o Wojnach Rdzeniowych. Nie ma w tym z resztą nic dziwnego, biorąc pod uwagę fakt, że rynek komputerów osobistych ograniczał się prawie wyłącznie do maszyn 8-bitowych używanych do gier. Pecety można było wówczas spotkać w niektórych zakładach pracy, gdzie zazwyczaj spełniały rolę kosztownych mebli.

Nie było jednak aż tak źle, pierwszy artykuł o Wojnach Rdzeniowych pojawił się w miesięczniku "Komputer", o ile dobrze pamiętam, był to rok 1987. Nic z niego wówczas nie zrozumiałem :-). Dużo później zaczęły sie pojawiać artykuły w innych czasopismach komputerowych, m.in. w "Bajtku", "PCvirusie" i, rzecz najważniejsza, w "Enterze". W marcu 1991 roku Andrzej Stasiewicz opublikował na łamach "Entera" szczegółowy opis zasad gry oraz zapowiedział rozegranie ogólnopolskich zawodów. Wydawnictwo "Lupus" zajęło się wówczas dystrybucją pierwszego polskiego MARS-a, "Wojownika" autorstwa Andrzeja Stasiewicza.

W grudniu 1992 roku odbyły się I Mistrzostwa Polski w Wojnach Rdzeniowych, wystartowało w nich 50 programów 22 autorów. Mój Shark zdobył wtedy drugie miejsce :-)) ulegając tylko mistrzowskiej Giseli. Obowiązującym u nas standardem był wtedy WA'91 (Wolna Amerykanka '91), nieznaczne rozszerzenie CWS'88.

W roku 1993 pojawiły się dwa inne polskie MARS-y: mój "Arbiter", będący następcą "Wojownika", oraz "Cordat Core Wars" krakowskiej firmy Cordat.

W latach 1993-1995 "Enter" opublikował cykl moich artykułów poświęconych Wojnom Rdzeniowym. Opisywałem w nich m.in. podstawowe strategie walki.

W marcu 1994 roku odbyły się w Krakowie I Otwarte Mistrzostwa Małopolski, zorganizowane przez firmę Cordat. I ja tam byłem, miód i wino piłem :-), a tak na serio, to na nich sędziowałem razem z Markiem Grzebykiem, autorem "Cordat Core Wars". W turnieju wzięło udział 37 programów prawie 30 autorów.

W kwietniu 1994 roku rozegrane zostały II Mistrzostwa Polski w Wojnach Rdzeniowych, wystartowało w nich 45 programów, każdy innego autora. To była niezła zabawa, miałem do dyspozycji chyba ze 4 maszyny 486 :-), niezły sprzęt, zwłaszcza jeśli w domu miało się wtedy AT 286...

Przy okazji tych turniejów okazało się, że programy pisane pod "Cordat Core Wars" nie działały poprawnie na "Arbitrze" i na odwrót. Było to skutkiem pozornie drobnych różnic w interpretowaniu standardu CWS'88. Jak się okazało, żaden z polskich MARS-ów (także "Wojownik") nie realizował standardu poprawnie. Cóż było robić? Trzeba było poprawić Arbitra... Od wersji 1.50 jest on całkowicie zgodny z prawdziwym CWS'88, pozostawiłem jednak możliwość pracy w trybie WA'91, żeby zachować zgodność z poprzednimi wersjami, "starym" CWS'88 i "Wojownikiem".

Odbyły się jeszcze III Mistrzostwa Polski w Wojnach Rdzeniowych, muszę poszukać bliższych informacji.

Na tym kończy się moja znajomość historii Wojen Rdzeniowych w Polsce. Jeśli gdzieś się pomyliłem lub ktoś zna ciąg dalszy - proszę o kontakt.

pozioma linia
Do chatki Na górę Ostatnia modyfikacja:
Copyright © 1998 by Adam Ryba