Amiga Minus 1/2001 - Niekomercyjny Magazyn U┐ytkownik≤w Komputer≤w Amiga
  Wydanie internetowe Nr 1, Marzec 2001  

 Ok│adka
 Prze│amuj▒c schematy
 Prawa autorskie
 Stopka redakcyjna

 Amiga Inc. zabija AmigΩ?
 Amiga Inc. w ocenie Polak≤w

 Jay Miner, ojciec Amigi
 Amiga w Gazecie Wyborczej
 Opinie
 Zamiast narzekaµ na piractwo

 Lato, lato...
 Amiga-fiction

 Urban Mueller
 Marcel Beck

 Pirackie oprogramowanie
 Ile za oryginalny program?
 Jakie programy do Internetu?
 Zdania o firmie Elbox

 Gw≤╝d╝ do trumny
 Dobra robota
 Najlepsi na scenie

 ZShell - z Unixa na AmigΩ

 ªwiat gier tekstowych
 Wojny rdzeniowe
 HArbiter


Na AmigΩ dostΩpnych jest kilka wersji kompilator≤w Wojen Rdzeniowych (gry opisanej w s▒siednim artykule). Jednym z nich jest HArbiter - pakiet rodzimej produkcji, stworzony przez Paw│a Gawro±skiego. Od niedawna jest dostΩpny w Aminecie.

    Do tworzenia program≤w-wojownik≤w wystarczy dowolny edytor tekstu. Dozwolone jest wykorzystywanie etykiet (nie musz▒ siΩ ko±czyµ dwukropkiem), a jako parametr≤w instrukcji - sta│ych (np. abc=1) oraz wyra┐e± algebraicznych na liczbach ca│kowitych. Ka┐dy z program≤w mo┐na (ale nie trzeba) zako±czyµ pseudoinstrukcj▒ END. Gdy podamy po niej nazwΩ etykiety - kompilator rozpocznie wykonywanie programu od wskazanego miejsca. Miejsce startu mo┐na r≤wnie┐ zaznaczyµ etykiet▒ 'Start'. Gdy pocz▒tek nie zostanie przez programistΩ oznaczony, program bΩdzie wykonywany od pierwszej instrukcji.
    Dzia│anie wojownika sprowadza siΩ do operowania zawarto╢ciami kom≤rek obszaru gry. Autor walcz▒cych program≤w pos│uguje siΩ jΩzykiem Redcode, oferuj▒cym dziesiΩµ instrukcji analizuj▒cych zawarto╢µ kom≤rek. Ka┐da z kom≤rek zawiera kod instrukcji oraz dwa parametry. Parametry (argumenty) s│u┐▒ do sterowania instrukcjami jΩzyka i maj▒ postaµ liczb dziesiΩtnych, poprzedzonych operatorem '#', '$', '@' lub '<'. W zale┐no╢ci od rodzaju operatora zmienia siΩ charakter argumentu na jeden z czterech ni┐ej opisanych:

# - argument natychmiastowy (#15 jest r≤wnoznaczne warto╢ci 15)
$ - argument bezpo╢redni (wskazuje adres pamiΩci z kt≤rego ma byµ pobrana warto╢µ, np. $2 odwo│uje siΩ do zawarto╢ci kom≤rki znajduj▒cej siΩ dwa miejsca dalej)
@ - argument po╢redni (adres kom≤rki, kt≤rej pole B, czyli drugi parametr, wskazuje adres sk▒d ma byµ pobrany w│a╢ciwy argument)
< - argument po╢redni zmniejszany (jest to argument po╢redni, przy czym przed wykonaniem instrukcji w kt≤rej zosta│ u┐yty wskazany adres jest zmniejszany o jeden, a po jej wykonaniu zmniejszana jest o jeden zawarto╢µ  kom≤rki)

    Brak operatora zmienia automatyczne charakter argumentu na bezpo╢redni. Programista powinien pamiΩtaµ, ┐e odwo│ywanie siΩ do okre╢lonych kom≤rek regulowane jest zasadami adresowania wzglΩdnego. Oznacza to, ┐e kom≤rka kt≤rej zawarto╢µ ma byµ zbadana b▒d╝ zmieniona, wskazywana jest przez podanie liczby kom≤rek dziel▒cych j▒ od aktualnie wykonywanej instrukcji.
    Ka┐dej z istniej▒cych instrukcji towarzysz▒ dwa argumenty, jednak nie wszystkie korzystaj▒ z obydwu. Niekt≤re z instrukcji s▒ sterowane tylko jednym parametrem - drugi mo┐na wiΩc pomin▒µ b▒d╝ u┐yµ do przechowywania danych. Oto lista dostΩpnych instrukcji wraz z kr≤tk▒ charakterystyk▒:

DAT [A] B
instrukcja niewykonywalna - jej wykonanie spowoduje zniszczenie programu, s│u┐y wiΩc za bro± przeciwko przeciwnikowi, mo┐e byµ r≤wnie┐ u┐ywana do przechowywania danych

MOV A B
gdy A jest argumentem natychmiastowym - przepisuje jego warto╢µ do pola B kom≤rki znajduj▒cej siΩ pod adresem B; gdy A jest innym argumentem ni┐ natychmiastowy - nastΩpuje skopiowanie ca│ej kom≤rki z miejsca wskazanego adresem A pod adres wskazany parametrem B

ADD A B
gdy A jest argumentem natychmiastowym - pole B kom≤rki znajduj▒cej siΩ pod adresem B jest zwiΩkszane o podan▒ warto╢µ A; gdy A jest innym argumentem ni┐ natychmiastowy - oba pola A i B kom≤rki pod adresem B zwiΩkszane s▒ o zawarto╢µ p≤l A i B kom≤rki znajduj▒cej siΩ pod adresem A

SUB A B
instrukcja analogiczna do ADD, lecz zmniejszaj▒ca zawarto╢µ p≤l kom≤rki

JMP A [B]
skacze do adresu wskazanego argumentem A

JMZ A B
skok warunkowy do adresu A gdy w polu B kom≤rki pod adresem B jest zero

JMN A B
skok warunkowy do adresu A gdy w polu B kom≤rki pod adresem B jest warto╢µ r≤┐na od zera

DJN A B
instrukcja skoku warunkowego, kt≤ra najpierw zmniejsza o 1 zawarto╢µ pola B kom≤rki pod adresem B, a nastΩpnie skacze do adresu A gdy pole B jest r≤┐ne od zera

CMP A B
je╢li A jest argumentem natychmiastowym - por≤wnuje warto╢µ A z polem B kom≤rki pod adresem B i gdy warto╢ci s▒ takie same - przeskakuje nastΩpn▒ instrukcjΩ; gdy A jest innym argumentem ni┐ natychmiastowy - por≤wnuje oba pola kom≤rek znajduj▒cych siΩ pod adresami A i B, a gdy zawieraj▒ one t▒ sam▒ warto╢µ - przeskakiwana jest nastΩpna instrukcja

SPL A [B]
uruchamia niezale┐ny program (proces) od kom≤rki znajduj▒cej siΩ pod adresem A (instrukcje nowo powsta│ego programu s▒ wykonywane na zmianΩ z instrukcjami ju┐ istniej▒cych program≤w z tej samej dru┐yny)

SLT A B
gdy A jest argumentem natychmiastowym - por≤wnuje warto╢µ A z polem B kom≤rki pod adresem B i gdy A jest mniejsze od warto╢ci tego pola - przeskakiwana jest nastΩpna instrukcja; w przypadku gdy A jest innym argumentem ni┐ natychmiastowy - brane s▒ pod uwagΩ pola B kom≤rek znajduj▒cych siΩ pod adresami A i B - gdy A jest mniejsze od B przeskakiwana jest nastΩpna instrukcja

Najprostszy z mo┐liwych program≤w to tzw. skoczek:

MOV 0,1

    Kopiuje on sam siebie do nastΩpnej kom≤rki, systematycznie niszcz▒c wszystko co napotka na swojej drodze. Innym znanym i r≤wnie prostym programem jest tzw. karze│:

DAT 0
LOOP
ADD #5,-1
MOV #0, -2
JMP LOOP

    Zeruje on co pi▒t▒ kom≤rkΩ. Poniewa┐ sam zajmuje cztery kom≤rki - siebie omija. Mechanizm jego dzia│ania opiera siΩ na cyklicznym zwiΩkszaniu licznika DAT o liczbΩ 5 (instrukcja ADD) i zerowaniu kom≤rki odleg│ej od programu o stale zwiΩkszaj▒c▒ siΩ liczbΩ miejsc (instrukcja MOV). Nale┐y pamiΩtaµ, ┐e obszar pamiΩci w kt≤rym odbywa siΩ walka ma kszta│t pier╢cienia - kom≤rka nastΩpuj▒ca po ostatniej jest jednocze╢nie pierwsz▒ pozycj▒ obszaru.
    Maj▒c ju┐ przygotowane dwa programy (w pakiecie znajduje siΩ kilkadziesi▒t przyk│adowych program≤w) mo┐na rozpocz▒µ zabawΩ. HArbiter oferuje mo┐liwo╢µ pojedy±czej walki dw≤ch program≤w b▒d╝ turniej, w kt≤rym mog▒ wzi▒µ udzia│ wiΩcej ni┐ dwa programy, a walka bΩdzie przebiegaµ systemem ka┐dy z ka┐dym w ustalonej przez u┐ytkownika liczbie starµ. Aby rozpocz▒µ grΩ wystarczy wiΩc wybraµ jej rodzaj (pojedynek lub turniej) oraz wskazaµ programy.
    Pojedynek mo┐na ╢ledziµ w oknie przedstawiaj▒cym zawarto╢µ pola walki. R≤┐nokolorowymi punktami zaznaczone s▒ miejsca zajmowane przez programy oraz kom≤rki, kt≤rych zawarto╢µ zosta│a zmieniona skutkiem dzia│ania jednej z instrukcji. W dowolnym momencie mo┐na grΩ zatrzymaµ lub zmieniµ tempo walki. Istnieje mo┐liwo╢µ w│▒czenia okien s│u┐▒cych do obserwacji wykonywanych fragment≤w kodu program≤w.
    Program Paw│a Gawro±skiego pozwala na swobodn▒ konfiguracjΩ warunk≤w gry. Opcje znajduj▒ce siΩ w preferencjach to:
  - limit instrukcji (maksymalna ilo╢µ instrukcji przypadaj▒ca na program),
  - wielko╢µ rdzenia (liczba kom≤rek obszaru walki),
  - limit cykli (maksymalna ilo╢µ ruch≤w ka┐dego programu),
  - op≤╝nienie (zmiana tempa rozgrywki),
  - szeroko╢µ okna rdzenia (szeroko╢µ okna do ╢ledzenia walki),
  - limit proces≤w (maksymalna ilo╢µ proces≤w na jakie mo┐e siΩ podzieliµ program jednego z graczy),
  - liczba walk w turnieju (ilo╢µ starµ systemu  turniejowego),
   - w│▒czenie lub wy│▒czenie okna rdzenia oraz okien podgl▒du kodu program≤w.
    HArbiter jest solidnie wykonan▒ wersj▒ znanych na ca│ym ╢wiecie Wojen Rdzeniowych. Kompilator zapewnia zgodno╢µ ze standardem WA'91, bΩd▒cym rozszerzeniem systemu CWS'88 (Core Wars Standard of 1988). Jego jedyne wymagania to system w wersji co najmniej 2.0 i biblioteka reqtools.library. HArbiter jest programem typu shareware. Koszt rejestracji wynosi 10 z│otych, a wersja niezarejestrowana ma zablokowany zapis ustawie± konfiguracji oraz zapis wynik≤w walki. Warto go zarejestrowaµ, by spΩdziµ wiele godzin nad tworzeniem w│asnych wojownik≤w i zmierzyµ siΩ z pomys│owo╢ci▒ swoich znajomych. Zapewniam, ┐e o tej grze siΩ nie zapomina.

S│awomir Wilk

 Do g≤ry