|
|
![](/file/14481/cd49www.iso/info/aminus1/d9.jpg)
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
|
|