
	Memriahbor  CoreWars
	

Mg mieltt a cm hallatn brkinek a ret-
tegett s (joggal) oly sokat szidott szm-
tgpvrusok jutnnak az eszbe, meg-
nyugtatunk  mindenkit,  hogy  most  nem
egy jabb vrusinvzirl szeretnnk hrt
adni,  hanem a gpunkre es adatainkra
teljesen  rtalmatlan  programokrl  lesz
sz.

Mi is a memriahbor? Kpzeljk el a
szamtgp memrijnak egy darabkjt
gy, mint egy csatateret, ahol csataprog-
ramok viaskodnak egymssal.  Egymst
bombzzk, tmadsokat szenvednek el
vagy kitrnek azok ell s ellentmad-
sokba mennek t, kijavtjk megsrlt r-
szeiket, szaportjk magukat es minden-
fle aknamezket hagynak maguk m-
gtt. Mindezt azrt, hogy letkptelenn
tegyk az ellensges csataprogramot a
megszabott id leteltig, ezzeI rve el a
vgs gyzelmet. Az egyik leglnyege-
sebb klnbsg a csataprogramok s a
vrusok kztt az, hogy a csataprogramok
tevkenysgket kizrlag a csatatren
bell fejthetik ki, semmilyen krlmnyek
kztt nem juthatnak ki onnan s nem le-
hetnek befolyssal a memria egyb tar-
tomnyaira. Legjobb bizonytk erre az,
hogy a csataprogramok egy kitallt prog-
ramnyelven  rdnak,  amely semmilyen
szmtgpen nem futtathat kzvetlenl,
csupn egy msik, a csatt lebonyolt
program segtsgvel.

A memriahbor szlatyja A.K.Dewd-
ney, a Western Oniario University tanra,
a Scientific American Computer Recreati-
ons (Szmtgpes szjtk) cim cikk-
sorozatnak egyik szerzje.

Az tlet lltlag onnan szrmazik, hogy
egyszer egy nagy szmtgplaboratri-
um  egyik  munkatrsa  rt  egy  Creeper
nev programot, amely semmi mst nem
csinlt, mint minden futsa alkalmval lt-
rehozta egy  msolatt a  memria egy
szabad terletn. A program a hlzaton
keresztl jabb s jabb gpekbe jutott
be. Egyre tbb rtkes memrit foglalt el
a laboratrium programjai s adatai ell,
mr-mr veszlyeztetve a normlis mun-
ka menett. Kzben a szakernberek telje-
sen elvesztettk uralmukat a helyzet f-
ltt, s gy tnt semmi lehetsg sincs az
elszabadult program megfkezsre. m
ekkor valakinek rdekes menttlete t-
madt. irtak egy msik programot, amelyet
Reeper-nek kereszteltek el, s egyetlen
feladata volt, hogy megtallja s trlje
az sszes Creeper-msolatot, majd miu-
tn nem tall tbbet, vgezzen magval
is. Reeper megtette a magt, es a labo-
ratriumban ismt minden a normlis ke-
rkvgsban haladt tovbb. Ha igaz trt-
net, ha nem, elg volt ahhoz, hogy meg-
mozgassa Dewdney fantzijt. A mem-
ria stt zugaiban tapogatz s harcol
programok  legendja  nyomn  agyban
minden idk egyik legrdekesebb szm-
tgpes jtka kezdett krvonalazdni.

David Jones-szai, egyik lelkes dikjval
kzsen 1984-ben kidolgoztk a memri-
ahbor  rszleteit.  Dewdney  a jtkot
Core Wars (maghbor) nvre keresztel-
te, utalva ezzel egyrszt a hajdani szm-
tgpek ferritmagos memrijra,  ms-
rszt a csataprogramok szmra fenntar-
tott kzdtr  (az gynevezett ARNA)
alakjra, amely maga is egy nagy gyr-
hz hasonlt, ahol az utols memriare-
kesz folytonosan csatlakozik az elshz.

A memriahbor teht nem jkelet do-
log,  az  Amerikai  Egyeslt  Allamokban
vek ta rendeznek belle vilgbajnoks-
gokat. A bajnoksgokon az International
Core Wars Society tagjai vehetnek rszt.
Szerencsre elkszletben van egy ma-
gyarorszgi  memriahbor  bajnoksg
megrendezse is, amelyen brki rszt ve-
het majd.
Nhny sz a jtkrl:

A csataprogramokat a REDCODE prog-
ramnyelven  kell  megrni.  A  REDCODE
egy specilisan ehhez a jtkhoz kifej-
lesztett programozsi nyelv. Ma a progra-
mokat ltalban magas szint nyelveken
rjk (ilyenek pl. a Pascal, a "C", a Basic),
amelyekben a programlista jl ttekinthe-
t s olvashat, a programoz szndka
szinte angol nyelven kvethet. Mieltt a
szamtgp vgrehajtan ezeket a prog-
ramokat, elbb le kell fordtsa a sajt gpi
nyelvre, ami pusztn szmkdokbl ll.
A szmkd-nyelv es a magas szint nyel-
vek kztt foglalnak helyet az alacsony
szint nyelvek, mint pldul az assembly,
ahol a szmkdokat a programoz sz-
mra n. mnemonikokkal (rvid,emlkeztet
szavakkal) teszik knnyebben megje-
gyezhetv. Az assembly-t a szmtgp-
nek a vgrehajts eltt mr nem kell
olyan fradsgos  munkval lefordtania.
Az alacsony szint  nyelven  rt program
tovbbi  elnyei,  hogy  az  futs kzben
megvltoztathatja sajt kdjt, vagy p-
pen tmsolhatja magt egy msik hely-
re. A REDCODE leginkbb az ilyen ala-
csony  szint  assembly  nyelvekhez  ha-
sonlt.

A csataprogramok kzdelmt a Memory
Array Redcode Sirnulator, rviden MARS
teszi lehetv.  Ez egy program,  amely
"megrti" a    REDCODE  programnyelvet,
ezltal lehetv teszi a csataprogramok
futtatst. A Memory Array Redcode Si-
mulator teht a processzort helyettesti a
jtkban. A csataprogramokat ez helyezi
el a kzdtr, vagyis az ARNA megfele-
l startpozciiba, s teszi lv a vgre-
hajtsa ltal. A MARS igazsgosan osztja
meg magt a kt csataprogram kztt,
vagyis els lpsben az egyik egy utas-
tst dolgozza fel, s hajtja vgre, a m-
sodik lpsben a msikt, s gy tovbb...
Igy a jtk vgre biztosan mindkt oldal
azonos idt hasznlhatott fel.

Maga a csataprogram egy kznsges
szvegfile, amely kielgti a REDCODE
szintaktikai kvetelmnyeit. A REDCODE
nagyon egyszer programnyelv, gy kny-
ny az elsajttsa. A REDCODE utast-
sok t mezbl llnak-

1. Utastskd
2. Az els ('A') paramter cmzsi mdja
3. Az els ('A') paramter
4. A msodik ('B') paramter  cmzsi mdja
5. A msodik ('B') paramter

mnemonic paramterek mkdse

DAT  B adat, nem vgrehajthat utasts 
       (bomba)
MOV A B  'A' mozgatsa 'B'-be
ADD A B  'A' hozzadsa 'B'-hez
SUB A B  'A' kivonsa 'B'-bl
JMP A       Ugrs 'A'-ra
JMZ  A B    Ugrs 'A'-ra, ha 'B' nulla
JMN  A B    Ugrs 'A'-ra, ha 'B' nem nulla
DJN  A B    'B' cskkentse eggyel, aztn
            JMN A B
CMP A  B Ha  'A'='B',  akkor  a  kv.
         utastsra tugrsa
SPL A    Vezrlsmegoszts 'A' s a
         kv. utasts kztt

Az  'A'  s  'B'  paramterek  (argumentu-
mok) egy-egy cmzst jellnek. A cmz-
sek kt rszbl llnak: cmzsi md s
maga a cm. A REDCODE ngyfle cm-
zsi mdot ismer:

1. (#) kzvetlen szmadat megadsa. Ez
a cmzsi md csak a MOV, ADD, SUB,
CMP utastsok 'A' argumentumban, il-
letve a DAT utasts egyetlen 'B' argu-
mentumban  szerepelhet.  Ennek  oka,
hogy az egsz jtk az ARN-val s az
utastsokkal egytt csak relatv cmzs-
sel zajlik, vagyis a esataprogramok nem
tudjk, hogy az ARN-ban pontosan hol
helyezkednek el; esak a sajt cmkhz
kpest relatvan szmolhatnak.

2. ($) kzvetlen cm megadsa. Ilyenkor a
mveletet nem  az argumerrtummal  v-
gezzk el, hanem annak az ARNA-beli
memriarekesznek a tartalmval, ahov
az argumentum (relatvan) mutat.

3. (@) kzvetett (indirekt) cm megadsa.
Ilyenkor a mveletet annak a rnemriare-
kesznek a tartalmval vgezzk, amelyik-
re az argumentum ltal (relatvan) muta-
tott memriarekesz 'B' argumentum-me-
zeje (relatvan) mutat.

4. (<) kzvetett cm, es automatikus csk-
kents. Ugyanaz, mint az elbb (@), csak
mieltt a cmkiszmolst elvgezzk, a
kztes memriarekesz 'B' argumentumt
eggyel cskkentjk.

Ha a cmzsi mdot jell szimblum el-
marad, akkor a cm alaprtelmezsknt
kzvetlen (relatv) cmknt ($) rtkeldik.

A kzvetlen adat megadsa (#) nemcsak
annyiban tr el a tbbi cmzsi mdtl,
hogy itt nincs mit relatvan rtelmezni
(mg a tbbit csak gy szabad), hanem
egy rdekessggel is br. Ha a MOV vagy
a CMP utasts 'A' argumentuma kzvet-
len, akkor csak az az egy szmadat mo-
zog a 'B' ltal mutatott megfel memria-
rekesz 'B' arg-mezejbe (illetve a CMP-
nl hasonltdik vele), mg ha nem kz-
vetlen,  akkor  az 'A' ltal  mutatott
memriarekesz mind az t mezeje mozog
a 'B' ltal mutatott memriarekesz t me-
zejbe (ill. hasonltdik). Igy nylik
lehetsg nem csak egsz utastsoknak
csak a 'B' mezejt megvltoztatni.
Sok sz esett mr a titokzatos kzdtr-
rl, az ARN-rl. Ez nem ms, mint a
memria egy krfolytonos rsze, amely a
csataprogramok szmra van fnntartva.
Az ARENA 8000  memriarekeszbl ll,
azaz 8000 utasts helyezhet el benne.
Az utastsok cmzstartomnya is ehhez
igazodik-  a  cm  REDCODE-ban  egy  
-8000..8000 intervallumba es egsz.

A REDCODE egyik legrdekesebb utas-
tsa az SPL A, amelyik megosztja a ve-
zrlst az 'A' ltal mutatott, s az SPL
utni utasts kztt. Ez teszi lehetv a
csataprogram  szaporodst; s gy egy-
szerre tbb gon vaI futsst. A MARS
a csataprogram fut gait nyilvntartja, s
ezeket sorban vgrehajtja (minden lps-
ben a kvetkez gat); gy egy kt gbl
ll program ktszer lassabb egy egyet-
len gbl llnl. Egy csataprogramnak
egyszerre legfeljebb 64 ilyen prhuzamos
ga lehet.

Nzznk pldt csataprogramokra. A leg-
egyszerbb  az  rdgfiknak  nevezett
program, amely csupn egyetlen utas-
tsbl ll:

           MOV 0 1

Lthat, hogy a program nem tesz egye-
bet, mint a 0. (relatv) memriarekesz tar-
talmt, vagyis magt a MOV 0 1 utastst
az 1 . (relatv), vagyis a kvetkez mem-
riacmre msolja. Mivel ezutn a vezrls
a kvetkez cmen folytatdik, ott addigra
egy jabb MOV 0 1 utastst tall; s az
egsz kezddik ellrl. Az rdgfika jra
meg jra vgigszguld a memrin: Ho-

gyan  lehet  "kivgezni"    az  rdgfikt?
Pldul az rdgfika-zvel. Ez a prog-
ram mr kt utastsbl ll-

            MOV #0 -1
            JMP -1

Az rdgfika-z egy bombt (#0) hajt
maga mg (a -1 . cmre), majd visszaug-
rik ugyanerre a (bombahajt) utastsra.
Amint kzeledik az rdgfika, egyszer
csak beleakad az ellene dobott bombba
s "elpusztul".
Mit is jelent az, hogy egy program "el-
pusztul"? Azt, hogy minden l, azaz fut
ga egy vgrehajthatatlan DAT utasts-
ba torkollik; vagyis minden g lell. A csa-
taprogramok feladata teht az, hogy mi-
nl tbb bomba clbajuttatsval az el-
lenfl program minden fut gt lelltsk.
Ha ez nem sikerl egyik flnek sem a me-
gadott idn bell (ez rendszerint 600 000
lps), akkor az eredmny dntetlen.

Az itt lert szablyok alkalmazsval
brki rhat csataprogramot, st a
vllalkozbb kedvek megrhatjk a sajt
Memory Array Redcode Simulator-ukat,
gy  a  gyakorlatban  is "sszeereszthetik"
a csataprogramokat.

					Scanned & corrected by John Zer
