Miotacze bomb
Filozofia działania miotaczy bomb jest bardzo prosta. Rozrzucają one
po rdzeniu bomby w nadziei, że któraś z nich trafi przeciwnika,
uszkadzając tym samym jego kod. Robią to przeważnie bardzo szybko i,
mimo iż działają na oślep, potrafią być groźne. Rzucanymi bombami
zazwyczaj są pojedyncze instrukcje, ale mogą nimi być również krótkie,
kilkurozkazowe programiki. Jeśli uda się taką bombę wszczepić w program
przeciwnika, zostanie ona przez niego wykonana tak, jak gdyby to był
jego własny kod. W najprostszym przypadku bombą jest rozkaz
DAT
, którego próba wykonania uśmierca trafiony proces.
Jednym z takich najprostszych miotaczy jest Barnak:
;Barnak
bomba DAT 0
start MOV bomba <bomba
JMP start
END
Instrukcja MOV
przepisuje rozkaz DAT
(linię
bomba
) pod adres odczytany z jego argumentu B
i zmniejszony o jeden. Do przesuwania celownika po arenie wykorzystany
jest argument typu <
, więc Barnak bombarduje
arenę komórka po komórce.
Podstawową wadą Barnaka jest to, że jeśli szybko nie pokona przeciwnika, to po zbombardowaniu całego rdzenia zginie pod gradem własnych ciosów. Aby uniknąć ostrzelania własnego kodu, taki wojownik powinien liczyć rzucane bomby lub kontrolować położenie celownika. Tak może wyglądać liczenie bomb:
bomba DAT 0
start MOV bomba <bomba
DJN start #100
…
END
Liczeniem bomb zajmuje się rozkad DJN
, który po ruzceniu
każdej bomby zmniejsza wartość swojego argumentu B
. Gdy
osiągnie on zero, wykonanie pętli zostanie przerwane. Nieco inaczej
działa kontrola celownika:
start MOV bomba @bomba
DJN start bomba
…
bomba DAT 0 100
END start
Tu rozkaz MOV
zajmuje się wyłącznie rzucaniem bomb,
natomiast DJN
obsługuje celownik. Pętla jest wykonywana aż
do wyzerowania argumentu B
rozkazu DAT
, czyli
aż do momentu, w którym celownik wskazywałby linię bomby.
Wszystkie powyższe programy demolują rdzeń komórka po komórce, więc robią to niezbyt szybko. W ten sposób opłaca się co najwyżej kasować niewielkie fragmenty rdzenia, ale nie całą arenę. Na szczęście przy ostrzeliwaniu całej areny taka dokładność rzadko kiedy jest potrzebna, więc można przyspieszyć ostrzał zwiększając odległość pomiędzy rzucanymi bombami. Przykładem takiego miotacza jest Gnom, klasyczny już wojownik autorstwa samego Dewdneya:
;GNOM
;A.K. Dewdney, 1984
cel DAT 0 -1
start ADD #5 cel
MOV cel @cel
JMP start
END start
W Gnomie celownik obsługiwany jest przez rozkaz
ADD
. który umożliwa dodwolne ustalenie odległości pomiędzy
rzucanymi bombami. Gnom strzela w co piątą komórkę areny, więc ponieważ
sam liczy tylko trzy rozkazy (lub cztery, jeśli liczyć DAT
)
może być pewien, że nie uszkodzi przypadkiem własnego kodu. W ten sposób
nie musi liczyć bomb, ani pilnować celownika. Gnom działa poprawnie
tylko wtedy, gdy rozmiar areny jest podzielny przez pięć.
Istnieją również wojownicy, którzy nie używają rozkazów
ADD
czy SUB
, a mimo to potrafią sprawnie i
szybko ostrzeliwać arenę:
;ZOMBI
;Jarosław Chudziak, 1992
ognia DAT 0 0
oj DAT 0 660
obrona JMP obrona <-2
start SPL obrona
atak1 MOV ognia <ognia
DJN atak1 oj
switch MOV #660 oj
MOV skoczek switch
MOV #0 ognia
JMP atak1
skoczek MOV 0 1
To już bardziej skomplikowany program, podzielony na dwa procesy.
Pierwszy z nich, uwięziony w linii obrona, zajmuje się przesuwaniem
celownika (linia ognia
), a drugi ostrzeliwuje arenę i liczy
rozrzucane bomby. Oba procesy działają równolegle i w efekcie bomby
lądują w co trzeciej komórce. Po pierwszym ostrzeleniu areny
Zombi inicjuje wartości w liniach ognia
i
cel
oraz wstawia instrukcję MOV 0 1
do linii
switch
tak, by po ponownym ostrzelaniu areny proces
zamienił się w skoczka.
Zombi często wychodzi zwycięsko z konfrontacji z innymi miotaczami. Dzieje się tak między innymi dlatego, że jest on podzielony na dwa procesy. W przypadku śmierci jednego z nich drugi nadal funkcjonuje i nadal ma szanse, jeśli nie na wygraną, to przynajmniej na remis.
Warto sobie przypomnieć o zbliżających się II Mistrzostwach Polski w Wojnach Rdzeniowych. Może w nich wiąć udział każdy zarejestrowany użytkownik jednego z trzech polskich środowisk Wojen Rdzeniowych. Są to: Arbiter, CORDAT CoreWars i nierozpowszechniany już Wojownik. Wszystkie te programy działają na komputerach PC. Arbiter jest rozpowszechniany przez redakcję, wystarczy zwrócić się listownie załączając w kopercie kopię odcinka przekazu kwoty 100 tys. zł na konto Wydawnictwa. CORDAT CoreWars można natomiast kupić w firmie CORDAT-Kraków, będącej producentem i dystrybutorem tego programu. Adres: ul. Wadowicka 3, 30-415 Kraków. Cena: 345 tys. zł.
Każdy uczestnik może zgłosić do turnieju tylko jednego wojownika.
Powinien ob być napisant zgodnie ze standardem WA'91 oraz składać się z
co najwyżej 100 instrukcji. Wojowników prosimy przysyłać na dyskietkach
w postacji zarówno źródłowej (*.RED
), jak i skompilowanej
(*.OBJ
lub *.CMP
). Niech każda nadesłana
dyskieta będzie dokładnie opisana (dane autora, nazwa wojownika), a i
sam wojownik niech zawiera parametry swego autora w linii komentarza.
Proszę też wyraźnie zaznaczyć, że jest to dyskietka
bojowa.
Na nadsyłanych wojowników czekamy do 1 kwietnia br. Turniej zostanie rozegrany pod kontrolą Arbitra na arenie wielkości 5000 komórek, przy losowanej odległości początkowej i limicie ruchów ustalonym na 30000. Każdy zawodnik będzie walczył z każdym z pozostałych. Walki będą powtarzane 50-krotnie, przy czym za każde zwycięstwo przyznamy 10, za remis 5, a za porażkę 0 pkt.
Programy, które zdobędą identyczne liczby punktów rozegrają między sobą dogrywki o kolejność na liście rankingowej. Dogrywki będą polegały na serii powtarzanych 100-krotnie walk systemem „każdy z każdym”.