Download as pdf or txt
Download as pdf or txt
You are on page 1of 151

ERDŐS IVÁN

COMMODORE 64 ASSEMBLY
ERDŐS IVÁN

COMMODORE 64 ASSEMBLY
nyelvü programozása

LSI ALKALMAZASTECHNIKAI TANACSADO SZOLGALAT


BUDAPEST, 1985
T A R T A L O M
OLDAL
1. Bevazatés

1.1 Progr~moz4si nyelve• mlkroszám a togepen 3


1. 2 Utmutató a 2 . -z. +e~ezethez B
2. Mit tud a 6510-es m1ktopro~es~zor . Progra mozási lO
modell

2 .1 Néhány alapfogalom 10
2 . 2 R~g1szturek o~ Je l zek 13
2.3 Cimzesmodok 17
2 . 4 Megszakltások 23
3. A&sembly ~ kényelmes gépiked 25

3 .1 M1 t tud egy assembler- mit kellene tudn1 25


e g y assemblernek
3 . 2 Ut asi t 4skészlet 27
3 .2.1 Töltoutasitábok 28
3 . 2 . 2 Tárolóuta sitások 29
3 . 2 . 3 Regl szter-utasi t ások 29
3 . 2 .4 Vezérlesátado ut asilások 31
3 . 2 . 5 Veremkeze l o utasitások 34
3 . 2 . 6 L eptetc utas1tások 34
3 . 2 . 7 Log1~a1 utasitások 35
3 . 2 . 9 Aritmetik a i utasitások 37
3 . 2 . 9 Osezehasonlító utas1taso• 37
4. Sof tware-eszkozol - assemblerek , monilorok , 39
debuggerek

4 .1 A HELP+ Bssembl y programozáat seg 1to eszkoze1 40


4.2 M akró~ssembler feJlaszte rendszer C-64-re 44
4.3 PROF IMAT 53
4.4 SM-K I T 64 58
4.5 PTD interaktiv dabugger 62
4.5 . 1 A debugger beto l tese 63
4. 5 . 2 Al apfoga l mak 63
4.5.3 Program-modu vegrehaJtás 64
4. 5 . 4 Szim~o l umok 64
4. ~. ~ DOS kiegé&zités b~
4.5.6 Memori~kezelés 6b
4 . 5.7 Program-nyomkovates 69
4.~.8 Csak program-modb~n hdsználha l d u t a~ i - 74
t4 sok
4.5.9 Kód-fo lt oz~s 77
4 . 5 .1 0 A PTD debugger érteke l é&e 79
OLDAL

5. M>L prugramo~~unk, hogy programoz:unk assembly 80


Ilylll \161 11?

5. 1 Memoriaqazddlkod~B 81
S.2 As~embly • s~erelés 93
::. . 3 A Commodore 6 4 "operác16s rendszere" , a I~ERNAL 105
5 .4 BASIC é~ a&semb l y bekés egymás mellett élé&e 108
5. 5 Gyors~bban , me&~zebbre, magasabbra... 116
5.6 Nagy feladatok megkozel>tése ! 26

~. t1.1Llqtd EH C 64 hodt.ái.Jl .. 130


8. fuggc:? l él A MOS 65 1 0 utasitáskeszlete 136
C. fuq.:,e l é l l ERNAL szubr uti110k 139
I rudalom 146

2
1. 1 Proqrilmoz &si _11Yiil l vek m.t kroszam~ tóg_epun

Az olvaso egy olyan konyvvt ~art a kezoben, ~melynek co lJ•


uQy b1~on y oa m1kro•~~milogép ugy b1zonyos programoz4a1
nyelvénok iamortetoae. M1elott azonban azu~on vett tem~n~ r a
t•rnenk , l~l4n nem +el oaleges par azot •~oln1 által•ban a
programoz4ai nyelvekrol. A mikroaz6m1tóqopekrol 4ltc~.lában
nem erdames e~en • h lyen értekezni, h 1 szon m1ndent éa
m1ndennuk a:: ellonk~~tzolét ulmondtál, le1 r<il< m.ar er rol ..
tém4rol . Bzegezzunk l• l 1aae homályos~n mindós&ze c&•k
c1.nny1t. , lloqy i t t és moat m1l<r·oszam1 toqdpen a Commodore 64
kataQóriá j u egyaz~ru azemélyi •~ámitogepet er tjU~.
A progt c~.mo74al nye l v k tbrténete nem vgy1doa a ez~ nl1 tógep­
pel, hanant anná l mesazobbre nyul1k v1asza. E11nak ellenere
·~ e l •o szám1togepel<el meo kozvetlenul oeplkOdban, taha l a
proceaazor által kozvet lenul meg~rthetb lodo k +e lhaa~nal~­
sáva l prooramozták. A mai erte l emben vett programo::&&l nyel -
vek ~l ala ~u l4aa az otvenea •vvl m4sodll< +oleben ~ ezdodott
meq lgc~.zán , amlkor a:: elso magdasz1ntu n ye lve~et , az ALGOL-t,
a COBOL- t , a FORTRAN-t dafin14ltak. Nem 1<1vánunl azonban
tórl ne l emmel fogla l kozni, l&sauk a mal halyzetat.

Ma a proqramoz4si nyel vek t ruletén az elmult 30 ~vben le-


zaJlott forradalmi feJ l ödes e l lenére, vagy ta l ~n óppen
anna l köve l~e zléban a helyzet elóg zavaros. I gen ac i proor~ ­
mo-ciai nyalvel haszn~lna~, •• ezek naha 6 lvgla ve~bé ~em ha
sonlttanal egymásra . Megle próbá l Juk meg meghatarozn1 , és
egy aranylao ! f ogadott modon osztályo~ni o~et.

Valamennyl programozaa1 ny lv kozos tulaJdonsag.a, hogy sza -


mitoqope~ vezerlé•at e al l almas. Ezt a vvzar leat nem kozvot-
lenul a qapnel azolo ulaai l 6ao~d< al vegz1k , loC\nem olyan nyel
v at haa::nalnak , amely konnyabbvn megtanulhato , ór telmazh to,
áll~thato .az ember sz ámara, m1nt a kezvet len 9*P ~ k.Od , uqy.aro-
alkot a:: Ilyen nyelven ir l proq t ~m egy~r t lmuan lufmdltható
gap1 utasításo l sorozatara. Ezt az átalal itást azlnten prog
ra.nok véqzil, amlá'lynek két al.apvetó lipuaa 1amerl, .az 1ntar
preter vagy ertelmazb és a compiler v aqy ford 1loprogram .

Az in terpretar a proor amozáa1 nyelv utas ~l áaa 1t az er~det1


forrási Odban, vaqy l 1ase 4t~odolt és tumoritett +ormab~n
sorra veaz1 •• ertelmc::1, maJd azonnal végrehaJtJa azo~al.
Enne~ lén yeges elonyel és h4~r4nyal va nna~ a ford l tciaho-
kDpeat . Elony, hog y a progrc~.m torraan y elv~n rcndelle::asr u
411, bármikor módos1tha~o as a ~odoaitott program a~onnal
llprob4lhalo. A Jobb interprelerak méq a ~orráanyelvu uta
sitá~ol nyomkovetéaal l S meganged 1l. , a pro~ramozo az .il-
tale~. j r t utas l tcisok hat6a4t kó~vetl enul meqvt :uag4 1 hatj .a .
Lenyeqea hátranya v1a~ont az interpre l raknak v1a:onylaqca
l.aasuaaqul. Ha agy utaaitast az interpretcr egy program
fu~áaa aoran egym1ll i oazor haJt vegre , akkor egym1 111 oazor
ertolma%1 J• l entesét,elcm~i hel yességet és cadl a : ut.in tudj~
vegrehaJtani.

3
A forditóproor•m ~ forrásnyelven irt utagitáso~nak kbzvet-
lenul vagrahajtható g•pikódu programot feleltet meg, amely
maJdnem (!) oly~n h~tékon y , mintha g*pikódban irtuk vo lna .
Nagy elonye ennek az alj4r4snak, hogy a laforditott prog-
ram onmag4b~n képes mukodni •s meglehetösen gyors. Hátránya,
hogy J dositása a fordit4si elj4r4s megismétlése t von ja maga
o· •4n , am1 kulonbsen mikroszámitógépen igen idöigényes. Ezen-
k vul a laforditott program nehezen nyomkovatheto , h1szen az
eredeti nyelvi elemek m4r Javarészt nem figyelhetók meg, kü-
lonithetök el benne.

Mindeze k böl következöen az igazán jó nyelvi rendszerek


ugyanannak a programozás i nyelvnek m1nd 1ntarpreterét , mind
forditoprogramJ4t tartalmazzák, sot a programtesztelést 1s
segitik az eredet1 nyelvi elemeket haszn41o nyomkovatési
eszkozokkel . SaJnos ilyen rendszerre a mlkroszámitógépek te-
ruletén al1g van példa.
A programozási nyelvak egy lehetseges felosztasa aszerint
osztályozza a nyelveket, hogy mennyire kell az ember1 nyel-
ven megfogalmazott vez erlés1 utasitást -programo t - át d ol-
goznl, hogy az adott nyelven helyes, az eredeti feladatot
megolda prog~amot kapJunk. Eszerint beazelunka

aasembj_~ nyel_y~k~ol •
- ~porientAlt ny~lvekro~ (szerencséra erre nemigen van
péld• mikroszám1togepen> ,
~ agassz1ntu nyelvekral <p l. BASIC, FORTRAN, PASCAL,
ADA>,
nagyon magalisz 1 nt L• vagy l egi ka1 ~rQ_g!"~z áa1 nyel vek-
rbl (pl. PROLOG, LISP, MODULA>,
UJtipusu_prog.r ai!!Pz<hu ny!Jlvekrol (pl . FORTH, C> .

A legutoisO csoport meglehetösen furcsán hangzo elnevezese


és az uJ csoport maga azért keletkezett, mart ezeket a nye l -
veket nehez nyugodt lélekkel besoroln1 az elózo négy osz-
t4lyba.
Az assembly nyelvek ( a mel ynek egy kapvlselojével +ogunk
ebben a konyvben foglalkozni) m1nd1g egy adott processzor-
család utasltáskészletéhez kötodnak, es csupán a gep1 utas i -
tások egyszerubb, konnyen megJegyezhete irásmodJAt , valamint
nem tul bonyolult kifeJezések használatát teszik lehetövé.
Az assembly nyelvre <a makrolehetoségektbl eltek1ntve> jel -
lemzo az aqy assembly utas1t~s - egy gepi utasit~• megfelel-
tetes.
A géporient4lt n y el v ek szint én egy hardware-hez kötodnek, do
n y elvl elemeik, utasttása i k már tobb gepikodu utasitásnak
felelnek meg. A gepek kezel olyan hetekany vezerleaét teszik
l~hetové, mint az assembly programozással elerheto.
A maQa&5zintQ nye lve k l eg f ontosabb j el lemzöje , hog y gep fug-
g e tlenek <tbbbé- kevesbé) es arany l ag bonyo l u l t felada to k
irh~tok le eqy-egy utasitásukkal . Ezért le kell mond a ni a
csa~ konkrét hardware-re jellemzó sajátosságok k l haszná l á-
sárol és a keletkeze (forditott vagy interpretált> gépiked
hatékonysáqa elmarad az assembly programétol . Ezek a nyelvek
algoritm1kusak, am~ azt Jelenti, hogy a program a megoldás
pontos mi k ént j et 1rja le, ha aránylag maqaa sz1ntu utasitá-
SOYI(.tl is.

A nagyon magas szintú vagy l oQik a i proQramozási nyelvek en


az utobbi inkább jellemzo megneve zés - irt programok nen1
a megoldás modszerét, han e m ink á bb a fe l ad a tot magát fogal-
m a zz a ~ meg, az u tán a feladatot egy , vagy néhán y a l gor i t mus-
ti p ussal oldj á k meg . Je l lemzó p é l d ája e nn ek a PROLOG . Itt a
gyo rs programozh a tós á gért , ~z ig e n jól olv a s hato progr amert
általában csókken t h atekon ysa gqe l k ell f i ze t ni . Ugyanekkor
ezek a nyelvek alka lmasak o l yan b o nyo l u l t f eladatok megfo-
g almazasara is, a me l yelt et a lacsonyabb sz.1nten e mb ~_ri kor l -a-
t o kból fakadóan lehetet l en vagy csak 1gen nag y ráfo rd ltá sok-
hal volna lehet séges megold a ni . I l yenek az un . szal~ ertb i
ren d szerek, a me lye k e t néha e gymasnak ~ e l J e s e n e l lent mon d ó
definiciokhal - ma sokat e ml e getnek .

Az uJt i p u su n y e lvek eqyreszt a mag as sz1 n tu nyelvekhez hasun -


l ltan ak u tMs i t á s ai k es p r ogr am sz e rk e z e t u k b onyol u l t ságág b a n,
más res z t az a ssembl y nyel vh e z a z elér het ó q é pl lehe t osé gek-
ben . Tu la j don k éppen ez elc a z 1g azán gep o rient á lt n ye l v e k , d e
nem egy bl z o ny os gept i pu s r a , hanem ál t alában a s zam i tog ep ek-
r e leg a lábbis a ma i , u n . negyedi k generác 1 o s gep ek re
or1 e ntál tak . A mik ros z ámit o gep ek esetéb e n igen i g ar e t esek a
FORTH nyel v által nyuj tot ~ lehetosége k .

A f en ti iq e n r ovi d esz mef uttatásb ól is l át sz i k , hog y iga zán


univerzá l i s nyelvi esz koz z ::el ma meg nem 1 g e n rendelkezun k .
Ezért eq y adot t felada t me qc l dás á n a k lényeges e leme a megfe-
lelb nyelv k i vá l aszt á sa. Ennek során eg y másnak e l lent mond o
sz e mpontok közös o p ti mu mát ke l l megtalál n i , h ogy a z ado tt
gépen rendelkz é sre álló n ye l v i eszközök közQ l mel y i kkel o ld -
ju k meg az adott felada t ot aránylag a leg k isebb ráf or ditá s -
sal é s a l e gnagyobb hatékon y ság gal .

Ugyana kk or az t l át j uk , h o gy ma c sa k nem ml n d e n f e l adat mik ro-


számitógépes meg oldásár a BAS I C-et h a sz nálna k , mi nt univerzá -
li s e szközt . A BAS I C , amel y talán a l e galac sonyabb sz i nt u
" magassz i.nt u" nyelv , valób an aránylag konn y en megtanu l h ato ,
segit s é g é v el gyorsan l e het kb z epes e n bon yo l u l t felad atokat
elfoga d t1at ó módon megoldani . . Ez e n k i vül egyet len elon y e vc:m,
e l t er j edtsége <igaz , hogy az egyes gepeken ha s zná l t BAS I C
n y elve k néha drámaian e ltérnek egymástó l) .

5
S:amos h át ránya v~n . Ahelyett, hogy rés:lelesen elemezn e n~.
e:eket, eléq 1tt annyi , hoqy mtelott e l~ ezdun~ eqy
adott fel~d~lol meqoldan1, vtzsqalJul meq azért"' rendel~e­
:esun l re állo t obbl lehetoséget ts . Persze, ~~arhogy s:td-
JUI is , a BASIC ol yannytra elterJedt , hogy meg hosszLo 1de1g
~ mtkroszamt l oqepe ~ , kulonusen d hobby-kalegorja "&:abvá-
nyos" nyelve lesz.

A ma s1k véqlet , ~mtvel •~•nt6n qyc\•r~n l~lálkozun~ ~z. hogy


~~ !:lASIC nyt l v .lnvaloan n em <dl.cc<lmas enneit es/vaqy b4rmtlyen
fel ada t nal< a l t so: tesseqes meqol dá sar c\, ezer t a pr oqr ilOJOl c<s -
soemblyben l el i mequnt . A •ovetkeztetes lét ponton ts htból ...
Eloszor ts nem mindtg iqdZ , hoqy"" EIASIC al~<Olrn .. tl"''' öo:::
adot l es kulonosen nem, hogy bár ni lyti'rt felad ..tr .... Ma&oo.:L.zor,
ha az ~dott esetben a I:IASIC allcüm~tl<HI ts, meg nem btztos,
hogy regton a legnagyobb r~ford1Last 1genylo esz~ozzel hall
a feladatnal ne~iesnt. Meg a: sem 1q•z , hoqy mtnden fel adatot
meq lehel oldant assemblyben, mtvel eqy adott szer~e:elt bo-
nyolult~ág felett az as&embly program to~eletes le&:lelasw
szinle lehetetlen . H~ m~q1s ltszlessegesen meg a l a~;uk oldM-
n~, o~~nny1ra szel kell"" feladatot Ilsabb reszelra bontant,
hogy ezzel s~1nte UJ prog~amozés1 nyelvel al~ot un ~, ezáltal
vesztunk ~ hatékonyságbal 1~ .

Ezután foglal;uk ossze nagyon rovtden , hogy mtlyen progrd-


mozésl nyelvelet valesitatta l meq a Commodore 64-en .

Az assembly nyelvrel nem s zelunk t t t , m~vel e:zel 1oqlal-


loztl ~z egész lony v h4t~alevo resza.

A ooporient~lt nyelvak szerencsere ellerultel a Commodore


b4-et es nem adlai hozz~ eqy spectal1s ~s masutt al l ~lm~=
IIJ.t ... tl.a~n eszkozt .

A mag;aazaz1ntu nyel v•k Lozul dZ elso t~rmeszetesen • BASIC .


A beepltett BASIC 1nte1 p r· etcrrel nem lehet Iulencsebben dt-
cse ledni, bar am1l tud, azl leq..,lább tobbé kevesbe hlbamen
teser tud J c..

8anlo h1ányossága1 a PRINT USING, az ELSE, az ERASE, a llsz-


tesseqes CHAIN htanya . A nem ~ts szamu BASIC k1ter 1es:::tesel
(cA leqlsmertebbek a SlMUN s BASIC es a GRAPHIC BASIC> 1s
saJnos nem a m•r-m~r •zabvanyosnah tellnlheto MICROSOFI
BASIC, vagy a szinten nem ross: naqyqepes BASIC4+ <DEC> Ira-
nyaba terjesztilt ki a nyelvet, hanem d Commodore spec1~11s
lehetoseqe1t tesz1k l.enyelmesen elerhetove.

Emltlésre érdemes~ C64-en elérhete nyelv~l kozul a PlLOT es


LOGO, amel yel, foleq qyermel,e l ollöll<lsában has:::nosal es a
COMAL, amelyet 01 Commodore c eq öl BASIC helyett aJanl, d~ né-
lunl öll1q tsmerl.

6
A többi magas szintQ nyelv közü l használha~O ~ormában egye-
d ül a PASCAL érhetö el Commodore-n . Itt nem a Data Becker
PASCAL 64 fordita p rogramjára gondolunk , a mi a PASCAL nyel v
és általában a ~orditóprogramirás p aródiája, han em inkább az
ugyes ZOOM PASCAL-ra , és méginkább az iga zán k o moly Oxford -
Pascal-ra. Gondot Je lent azonban, hogy a z ezek által el~oga­
dott nyelvek meg l ehetosen külo n böznek egymástol.

A Commodore 64-es ADA és microProlog forditó ill . inte~pre­


ter inkább a nyelvek - felülete s - bemutatására , mint fel-
adatmeqo ldásra való.

Az uj ti pLISLt nyelvek kozül a FORTH rneqfe l el o modcm he~ sz nál-


hato interpreter r el - sbt tobb, klsebb-naqyobb mértékben el-
tére .i n tet pr·eterrel - t· end el ~<ez i h Commodot·e 64-re. b~'ir ez e•,
a gepen vala s1kereirol méq nem sok hir érkeze~~-

E.:<: en r· ovi d bevezeto Lt tár.,, amel l yel t· emel J Lik nem Ltntat tLtk
az ol vasat., t.ér- jLtrÜ( •··a konyvunk ·t.argyára, a Commcldor·e 64
assembly programozásához szükséges isme retekre .

7
1 . 2 Utmutato _a 2_~~- fejezethez

Bevezetesul &zeretnenk el1gazitani az olvasot a tovább1 fe-


Jezetek felépltéseben es rendeltetésében, es nehány tanácsot
n yu~tan 1 a konyv használatához, valam1nt egy kics1t foqlal-
kozn l az alkalmazott term1nológiával.

A 2. feJeze~ a MOS 6510-es mikroprocesszor m~kodésével l S -


mertet meq. Igyekeztünk azokkal és csak azokkal az ismere-
tekkel foglalkozni, amelyek elengedhetetlen~! szakségesek a:
al~pszintű assembly programoz elsajátitásához.

A 3. fejezetbe_IJ a processzor utasitás-készletével foqlal~co­


zLtn~c, reszletesen tárgyalva valamenny1 utasitást.

A 4. fejez~t maJdnem kézikönyv-szeruen mutatja az assembly


programozásban felhasználható legismertebb software-eszközo-
ket. Celunk vele az, hogy az eredeti kézikonyvve l nem ren-
delkezo vagy annak nyelvet nem erto olvaso az 1tt le1rtak
alapJán kepes legyen ezen eszkezök legalébb alapfoku sz1ntu
alkalmazására. Igyekeztunk a Magyarországon leg1nkább elter-
jedt eszközoket összegyuJtenl, erényeiket es hibá1kat ele-
mezni.

A~ feJeze.>t,
5 . amely mind kozLtl a legterjedelmesebb, .az
~ssembly programozás modszere1be enged beplllantást, és meg-
próbál enyhitenl a kezde programozó sulyos gondjain, egy-
szersmind ötleteket adni a helyes assembly al~almazáshoz.

A fuggelékben nehány - talán hasznos - táblázattal segltJuk


a gyors tájékezadást egy-egy probléma eseten .

Kulon felhivju~~ a f1gyelmet az _ lrodalom -Jegyz~,.t r.J§!, amel y a


tovább1 - sajnos többny1re nyelvtudást igénylő - táJékozó-
dáshoz 1gyekszik segitséget nyuJtani .

A könyvben tárgyaltak elsajátítását nagymértékben eloseg1t1


a könyvvel együtt, de kűlön is megvásárolható l•m•z , amely
az osszes telJes programot és nagyobb lélegzet~ szubrut1nt
tartalmazza , természetesen Commodore 64 VC 1~41-es formátum -
ban . A lemezen többféle program is található:
Az /ASS-r e végzödo nevűek az assembly nyelvu forrás-
programot tartalmazzák HELP+, azaz BASIC interpreter -
ked formában. Igy m1nden segédeszköz n elkul llstázha-
tok, modosithatók .
Az /MC j elúek az azonos nevu /ASS program gépikodra
forditott változatai, amelyek LOAD "<programnev >" ,8,1
ut~sitássa! tolthetök ~ memoriába. Iqy a peldákat azok
az olvasók is kipróbálhatják, akiknek n1ncs assemble-
rLik.
A /BAS n~vvegzódeau file-ok az asa•mbly programn~k meg-
felelo BASIC programot tartalmazz4k - cs~k a bonyolul -
tabb progr~mok eseten.
8
A /TESZT jelú file-ok a megf elel ö program tesztelésé~
végzik, segitik elö , szintén nem minden programhoz van
i l y en.

A lemezen l évo egyet len /TRACE névvégzodésQ - BASIC -


file olyan speciálls /TESZT p rog ram , amel y a mQk ödést
nyomozó változó kiirásaival -reméljük - közelebb visz
a bonyolult algoritmus megértéséh e z .

Nagyon nehéz egy szakkönyv - s remeljúk munkánk annak mond -


hato- pontos olvasótáborát kiválasztani, másként foga l maz-
va, olyan könyvet irni, amely aránylag széles réteg igénye i t
elégiti k1 . Ez a konyv azzal a szándékkal iródot t , hogy a
~ Ollli!l.Qf.!..Q!:~__ _Q4 -::.~?J;__i_§!.!l~. r é?_,_. -~Jj.§.J...~_er o g r aJ!Lq z ~-s Qlill_..;L~h- t ci:\? , d e n em
b.tl sok assembly ismerettel rendelkezO §n·dek!_.Qc;;!..fL~\m~t;,.Q,r __y~Q.:t.
ke;o;..Q.o •. b.i v.§' tásp_§_,erpgr~.!!LC2.?_9.. igényei nek megfel el j en, számt.t kra
o l yan információkat nyujtson, a melyek segitségével öná ll óan
képesek lesznek egyszerubb assemb ly programozási feladatok
megol dására.

Végezetul a könyv terminológiájáról . Nap j ainkban elég sok


vita dul az idegen és kúlönösen a számitástechnikai szakmai
kifejezések használatárol, irásmodjáról. Ebben a munkában
nem kerul~ük görcsösen az idegen - j obbára angol - kifeje-
zesek haszn~latát , hiszen ezek meglehetösen elterjedte k,
ugyanakkor eleggé közismert Je lentésQek . Az idegen kife j e-
zeseket - kivéve a teljesen meghonosod otta k at mindenutt
az eredeti irásmód szerint irtuk, ami szintén v i tathato , de
legalább korrekt és következetes el j árá s .

9
Ebben a fejezetben azt az eszközt szeretnénk bemutatni,
ame l ynek vezérlese fö fel adatunk , a MOS Technology 6510-es
j el Q mikroprocesszorát. A 6510-es nem az egyetlen integrált
áramkör a Commodore 64-ben, de kétségkivűl a legfontosabb,
hiszen a kózponti egység szerepét tölti be, ha a régebbi
számitogép-fogalmakkal akarjuk megmagyarázni szerepét. M1nt
késobb utalni fogunk rá,s az olvaso bizonyára jól tudja, a
gépben <és a perifériákban> található egyeb c hipek input/
output vezérlek szerepét toltik be - bár néha igen-igen
kiter~esztett ertelemben <lásd pl. a VC-154 1 lemezegység
vezerlójét ,amely egyébként egy MOS 6502-es rnlkroprocesszor>.

A 6510-es mikroprocesszor-chlp a MOS Tech nology korábbi


6502-es gyártmán yának kismartekben modositott, továbbfeJ-
lesztet t v áltoza ta. MegJegyzendo, hogy a két processzor uta-
sitáskeszlete es az utasitások hatása teljesen megegyezik.
A 6502-es a Commodore VIC 20 es PET gepének, valamint az
Ap ple l l sor· oz a·t rl ak .l e .l ke tóbbek kózott . Ezér· t az ebben a
kbnyvben leir tak a speciállsan Commodor e 64-re jellemzö
reszletek elhagyásával az emlitett gépek programozásához 1s
segitséget nyu j thatnak, bar erre a kulbnválasztásra sehol
sem utalunk, mive.l feladatunk a Commodore 64 prog ramoz ásá-
nak támogatása .

A 6510-es lelrásában kizárolag a programoz ás szempontjából


lényeges jellemzöket fogjuk tárgyalni, ker Qlve minden, ebben
a tár· gyal asban felesleges hardware-részletet. Ezét•t szere-
pel a fejezet ci mében a "progr- amozási modell" ki fej ez és ,
mi vel i t t a mi l(r opt· ocesszor- egy "seftwar-e kép "-ét adjuk .
Ennek során leirjuk azt, hogy mik a 6510-es komponensei és
hogyan tartanak kapcsolatot egymással a m~ködés során.

A 6510-es egy olyan processzor· , amel y adat.Q.~.sl_t_~!..~I5J.-t _á .:LA


t§.r:_ol t program Ll~_§i t,_á_~ai fl ak engedel mes~~~dv~ Mi n d az ada-
tok,mind a programutasitások un. gépi mamóriában tárolódnak,
amelyek fizikailag integrált áramkörökkel vannak megvalesit-
va a C64-en belQl.Ennek a tárolónak két alapvetöen kQlónbözö
tip1.1sával ~~erülünk majd szembe , a ROM-mal és a RAM-mal . A
ROM <Read Only Memory> csak olvashato memoria, amelybe a C64
gyártása során infor mációt rögzitettek <többnyire programu-
tasitásokat, b ár nemcsak azt>. A RAM <Random Access Memory>
azaz félrevezetö neve szerint véletlen elérésQ tároló a fen-
tivel ellentétben Qres, de bármikor átirható, megváltoztat-
ható a tartalma, tetszésunk szerint . Ez a memóriatipus szol-
gál arra, hogy programjainkat és adatainkat benne tároljuk.

10
A memória byte-o kra , azaz a b1náris J e gy b ől ál l o részekre
oszlik, ame l ynek mi n d egyik e egy kQlön sorszámm al, eim-
mel r e ndelkezik . Egy byte-on 2A8 kQ l önb bzb számkom b inéeia
ábrázolható , amelyeket tetszés szerinti módon ertelmezhe-
tunk . Az egyik szokásos é r tel me zés szerint ezek O es 255
kozotti számokat jelölnek , egy másik szerint a karakterek
Cbet~k , számjegyek, Jelek) kódjait , ismét egy másik szerint
a kulönbözö kódok különbözö gépi utas i tásakat jelentenek .
Hog~_g_y adot t byte-o~. . ann a k tartal má t tLg_g_ya'=L.l~ l...L_ értet=
m~~ru_ , azt mind i g az é r telmezenek < a p r· ogramnak, illetve a
programozónak> kell tLtd ni, stzt .lf.ü l.ön_ _?....~..!!l.ID..L ...?.~..!.!L.l.!=tl.P.t1.. ~

A 6510-e s mikroprocesszor természetesen össze van kapcsolva


a memóriaegys~gakkel. Ezt a kapcsolatot adatbu5znak nevez-
zuk . Ezen a nyolc huzalon keresztül lehe t ősage van a mikro-
processzornak arra , hogy megváltoztasson egy memóriabyte- ot,
illetve kiolvassa tartalmát .· Hogymost éppen irni, vagy ol -
vasni kiván-e, azt egy másik adatkapcso l at, a vezérlőbusz
egyik bitjével jelzi. A többi bitek egyéb, a kúlvilággal
való kapcsolatokat vezérelnek. A megfelelő byte kiválasztá-
sa a memóriából természetesen a eim ével Csorszámával) tor té-
nik . Mivel a feladatok megol d ásához meglehetösen nagyszámu
programutasitásra és adatra van szukség , a cimek megjelölé-
sére nem 8 , hanem 16 bináris jegyból álló számokat haszná-
lunk , a megadásukra szolgáló busz 16 párhuzamos elektromos
kapcsolatot j elent a központi mikroprocesszor es a memór i a
között . Ilyen módon 2A 16 azaz 655 36 ei m és a neki meqfelelb
byte kQlonböztethetö, cimezhetö meg . A eimeket és tóbbnyi -
re a memóriabyte-ok tartalmát is hexadec1mális számokkal
szokás jelolni , amelyeket a 6510 -es assembler konvenciainak
megfelelben a $ jellel fogunk mindig bevezetni. lgy egy me-
moriacim mindig legfel jebb 4 -j egy~ hexadecimális s = ám $0000-
tól SFFFF-ig, egy byte értéke pedig $00 é s $FF kóze es1k , a
határokat 1s beleértve.

Ebben a munkában nem foglalkozunk olyan elemi ismerete~kel,


amelyek a hexadecimá lis és binári s számábrazolással kapcsola-
tosak. Tisztázni kivánunk v iszont néhány elemi fogalmat a z
egységes nomenklatura kedvéért. Egy b yte legbalo ldalibb bit -
je <a byte 7. bitjének is szokás nevezni) a szám e löJelét
hordozza, ha az ábrázolt értéket - 1 27 es +127 közötti szám-
~( ént értelmezzíH( . Ha a 7 . bit ~as a számot ket._tes k.o.lllil..le.-
me~~brázolásu negativ számna~' te~r. intJük. Két egybyt.e-os
szám összeadásával olyan számot kaphatunk, amelynek értéke
nagyobb 255-né l, igy egy byte-on már nem ábrázolhato. A ke-
letkezett szám jobboldal1 8 bitJét nevezzúk a müvelet ered-
menyének, mig a legmagasabb helyiértékU bitet átvitelnek
<car r y -nek ) .

Ha 2 55-nél nagyobb számokat kivánunk alkalmazni, termaszete-


sen tbbb byte-ot kell egyútt kezelnúnk. Ennek leggyakoribb
esete a ci me k áb~ázolása . amelyre mint tudjuk, a Commod ore 6~
eseteben 16 bitre, k Ot byte -ra van szukseg~nk. A kétbyte-os

11
eg~azeket ~ 6510-ea ~l~caony byt e - mag~• byt• aorrendben
kezeli a memóri4b~n. Ez ~zt jel enti, hogy~ az~m Jobbold~li
két he~~decimália jegye van ~ kisebb éa ~ b~loldali kettö ~
n~gyobb memóriacimen.

L4aaun k erre egy kis BASIC nyelvü példáta

Tegyük fel, hogy a memori~ $0014-es eimén egy kétbyte-os eim


v~n Cteh4t ~ $14 éa $15 cimeken, ~hol ~ $14 a k~sebb és $15
t~rt~lm~zza a nagyobb helyiértékü byte-ot>.
A következö BASIC sor ezt ~ cimet nyomtatja ki decim4lisana

KH=PEEKC20>aNH•PEEK<21> aPRIN~ 256*NH+KH


A 20 és 21 természetesen $14-et, illetve $15- öt j elent, mi-
vel a BASIC nyelvben cs~k decimális értékek irhatók .
A 6510-es mikroprocesszor az adatokon bizonyos előre megha-
tározott utasitáaokat képes végrehaJtani . Az utasit~•ok egy,
két vagy három byte-osak és míndig az elso byte tartalmazza
az utasításra utaló kódot. Az utasítások végrehajtásához a
mikroprocesszor maga is tartalmaz hét byte-nyl adattárolót,
amelyeket regisztereknek nevezunk és mindegyikQk speciális
célokat szolgál. Az utasításcik segitségével adatot c serél-
hetunk a memoria és a regiszterek kbzött, valamint logikai
és aritmeti kai múveleteket végezhetunk ezekkel a tárolt ad~­
tokkal. A mikroprocesszor múkódése programozási szempontbel
abból áll, hogy a memoriában tárolt programot utasitásról-
utasitásra végrehajtja.

A 6510-es regi•zterei kózúl az első kétbyte-os, ez a prog-


ram•z4ml4ló, rovid1tve PC <Program Co~nter> . Azert van két
byte-ra szúkségQnk, mert a 6510-es által elérhető 64 Kbyte-
nyi tár egy cimet kell benne tárolni, mégpedig mindig
éppen a soron következo utasítás c 1mét. Hogy melyik a soron-
következo utasítás, azt természetesen a mikroprocesszor maga
határozza meg a múködés során, attól fuggoen, hogy eppen mi-
lyen utasítást haJt végre. ~ltalában ez az éppen végrehaj-
tott utasítást a memóriában fi zikailag követő utas1tás, de
bizonyos utdsitások, vagy k~lsö állapotok változásai ezt
megváltoztathatják, mint a későbbiekben, az utasítások rész-
letes tárgyalásánál látni fogjuk.

Amikor a Commodore 64 gépet bekapcsolJuk es a processzorra


Juto f e szü ltség értéke eléri az 4,75 V-ot,egy un. inicializ~­
l~si ~ol yamat játszódik le, amelynek során a $FFFC-FFFD ei-
men lévo két byte értéke a programszámlálóba töltödlk,azaz ez
lesz a bekapcselás után v égrehaJtott elsö utasítás cime . Az
ilyen, a memór1ában tárolt kétbyte-os programcimet vektor-
nak szokás nevezni . A fent leirtakbol következik, hogy be-
kapcsoláskor a memória $FFFC eimén egy programcimnek, tehát
ertékes információnak kell lenni, ami csak ugy valesitható
meg, hamind ez a memóriacim, mind az, ahova ez a vektor
mutat, ROM-ban van .

A következo fontos regiszter az akkumul<itor, rövid í t ve A.


Szoktuk ar1tmetikai regiszternek is nevezni , mivel a leg-
több ar-itmetikai (és logikai> Lltasi tAsban résztvesz. Ezek-
nek az utasitásoknak a segits~gével az akkumulátorhoz egy-
byte-os értékeket lehet hozz~adni vagy kivonni belöle és az
eredmény mindig az akkumulátorban képződik. Ezt az uj tar-
talmat azután a memoria tetsioleges c1mén tárolhatJuk. Az
akkumulátor egybyte-os regiszter.

Az indeacregiszt.-rek <X és Y regiszterek> alapvetóen ~( ét cel-


ra szolg4lnak, bár ez a két feladat gyakran ös•zeolvad. Egy -
reszt egyszeru utasításokkal egyesével növelJ~k vagy csók-
kentJUk tartalmukat, igy számlAlásra használhatJuk oket.

13
Mésik funkciójuk az ut~sitásokban foglalt memoriacimek mO-
dositás~, amelyek segitségével bonyolult cimzésmodok való-
sithatOk meg . Ezek a nyolcbites regiszterek szintén a mem6-
riáb6l tölthetök, illetve értékek egy-egy memoriabyte-on
tárol hato.

A memória második 256 byte-Ját <az elsö lapot) tehát a


a $0100-tól SOlFF-ig terjedö ei mtartomán yt a 6510-es
v•r•mkent használja. A verem egy speeiélis tömb, amelyet
bizonyos ut~sitások automatikusan használnak. Itt tárolód-
nak a szubrutinok, illetve a megszakítások visszatérés i ci-
mel. A szubrutinok olyan alprogramok, programreszek, ame-
lyek a program több helyéröl aktivizálhatók, s a hívás he-
lye örzödik meg a veremben. amelynek segitségével talál
vissza a program a szubrutinhivást követö utasitásra. A
verem soronkövetkezo szabad helyét <a lapon belQl) tárol -
ja egy ujabb regiszter, a ver•mmut.;ató angol nevenek rovi-
ditésével SP <Stack Pointer> . A veremmutató kezdeti értéke
bekapcselás után SFF lesz, ami mint eim SOlFF-k ént érte l -
mezhető. Mivel a felsö byte mindig $01, ennek tárolására
nincs is szGkség, igy a veremmutató is egybyte-os regisz-
ter. Az első szub~utinhivás <JSR utasitás> hatására a ve-
remben tárolOóik a visszaterési c1m Ckét byte-on> és a
veremmutató értéke kettövel CSFD-re) csökken. A szubrutin
ujabb szubrutint hívhat. ami ujabb cimet ment e l a verembe
és ez a verem méretéböl követk•?zöen l eg-fel J ebb 1 28-szor
ismételhetö. Hinden szubrutinhivás <logikailag> egy vi ssza-
térési <RTS> utasitassal ~( ell, hogy végzodJön, amely az
utasításszámláloba tölti a verem tetején lévó két byte-ot
és növeli a veremmutató értékét kettövel , ezáltal folytatja
a program végrehaJtását a szubrutinhivást kóvetö utasit á s-
sé:'\1.

A szubr~tinhiváson kivQl az un. megszakit4aok okoznak még


automatikus verem m~ veleteket . A megszakítások a kQlsö vi-
lAqból érkezö jelek a mikroprocesszor számára, tehát nem
a saját áll~potaiból következnek közvetlenQl. Két típusát
kulönböztetjQk meg ~ 6510- es esetében, attól fQggöen, hogy
~zok a mikroprocesszor két megszakitásvonalának melyikét
aktivizálJák, a mikroprocesazor melyik kivezetésének v ál-
toztatják meg az állapotát. Az egyik, a nem maszkolható
megszakitás <NMI - Non Maskable Interrupt> felfQggeszti a
program futását, tekintet nélkOl arr~, hogy milyen állapot-
ban v~n a processzor . Erre a gép kQlönbözö egységeinek
pontos idözitése miatt feltét l enQl szúkség van . Ezzel szem-
ben a második vonalon jele n tkező megszakítások a program
által kizárhatók, maszko l hatók. Ez a maszkolható megszak i -
tások vonala <IRQ- Interrup t Request) . Mindkét tipusu meg -
szakitás a verembe menti a z utasitásszámláló aktuális érté-
két Chason l oképpen, mint a szubrutinhivás) és az állapotre-
giazter <lásd késöbb> értékét is. Ennek me gfe l e l ö e n a verem-
mutató értékét hárommal csökkenti .

14
Végsci tenykedésként az ut~sitásszámlálóba tölti a megszaki-
táakezelö azubrutin eimét tartalmazó vek~ort . Ez NMI eseten
a $FFFA- $FFFB, IRQ esetén a $FFFE-$FFFF memóriacimekrö l tör-
ténik.

Termeszetesen a meqazak1táskezelo szubrut1nok is egy specl-


álls utasitassa l <RTI) érnek veget , amely visszaá llítJa a
megsza~itás elotti állapotot.Ezt meqelozoen ujra engedélyrzi
megszakitást a megszakitásjelzo Cl ásd késobb> magasra állita·
sával . Ez hasonlcan mukódik, mint a fent leirt RTS utas1tás ,
de az utasitásszámlálon kivúl a= állapotreg1sztert is vissza
menti a verembol .

A fentieken kivü l külön utasitásakkal 1s keze lh etJük a ver-


met, amelyet pl . szubrutinok paraméterátadására használha-
tunk.

Az utoisO regisztert tulajdonképpen b1ten~ent ertelmezzu~.


Ez az áll~potr eQ iszter, róvlditve P <Program status regls-
ter> es egyes bitjelnek kulbn elnevezese ls van, ezek a
jelzok.

A P regiszter 7. <legbaloldalibb) bitje a negativ jelzö , az


N. Ennek értékét <mint a tobbi Jelzdét is) bizonyos utasitá-
sok megváltoztatják, mások h at á sta lanek rá. Nevét onnan ka p -
ta, hogy ertéke magas, ha egy aritmetikal muvelet eredménye
negativ, azaz legmagasabb helyiérték~ bitje magas. Ezt az
értéket feltételes programelágaztatásra használhatjuk.

A V Jelzo , vagy tu l csor du l ~sj e lzö a kettes ~omplemens tul -


cserdulást jelzi k1vonás esetén. A BIT utasítás szinten
kezell , mint majd ott reszletesen tárqyaljuk . Ez a jelzo az
állapotreqiszter 6. bitje. Az 5. bit értéke kozombos prog-
tamozási szempontbol.

A e vagy software megsz ~ k it 6s jel zö a= állapotregiszter 4.


bitje . Akkor állitedik magasra , ha az éppen végreh a Jtott
utasitáa egy BRK Cmegszakitás) utasitás . Ennek hatása ugyan-
olyan, mintha egy maszkolhato megszakitáskérelem érkezett
volna , igy JOl használható prograrnek kiprobál4sa során. Az
egyetlen dolog, amiból a megszakitáskezelo szubrut1n megtud-
hatja, hogy software-megazakitás tör tént, az a e Jelzo. Jó
megJegyezni, hogy bár aBR~ a maszkolhato megszakitást v ált-
Ja kl, hatása nem mas ~ko lhat6. ezert h1báa <BRK-ra futo >
megszakit4skezelo szubrutinok konnyen végtelen megszakitás-
ba torkollhatnak .

A D jelzó, az állapotregiszter 3. bitje a binárisan kódolt


deci m~lis üz emmó dqt jelzi, ha értéke 1. Ez az osszeadás
<ADC> és kivonás CSBC> utasitásra érvén y es. Ebben az eset-
ben <decimális módban> egy byte k ét, négy biten ábrázolt
decimális számjegybel áll, az ábrázolható. érték tehát a
0-99 tartományba es1k . A decimális mOd beállitasára és meg -
szüntetésére kQlön utasítások szolgálnak.

15
A 2. bit az I, neve .-qazakit~• Maazkol~• jelzö. Ha értéke
1, amit külón utasitással <SEI> érhetunk el, a meg•zakitá-
sok maszkolva lesznek, hatástalanok. Ekkor caak a nem masz-
kolható <NMI > és software <BRK> megszakitáa hajtódik végre.
Torléséta CLI utasitás végz i, amely után a program ismét
meg•zakitható.

A Z vaqy nulla j elzö szerepe az N- éhez hasonló, de nem .a ne-


gativ, hanem a nulla eredmény állitja magasra . Egyébként az
állapotregiszter 1. bitje.

A legkisebb helyiértéku, O . bit az ~tvitel <c arr y> jelzö,


a C . Sok utasitás kezeli , nevét az aritmetikai utasttásokban
betoltott szereperel nyerte. A falteteles programelágazás
gyakor1 eszkbze a Z jelzóvel egyútt.

A reqisztereken kivul a memória elso két byte-ja is (a $0000


és $0001 cimu> kituntatett szerepet Játszik, tulajdonképpen
regiszterként viselkedik. A O. byte-ot adatirány-regiszter-
nek, az 1.-et 1nput/output kapunak szokás nevezni. A $0001
c1mu I /0 kapu hat also bitje a 6510-es mlkroprocesazor-chip
egy-egy kivezetésének felel meg. A $0000 cimü adatirany-re-
giszter egy-egv. bitje mondja meg, hog y a neki megfelelo bi-
tet az 1/0 kapuban olvassa vagy ir·Ja a processzor <l~olvasás,
O=irásJ.Ennek segitségével a hat kivezetésen át a processzor
kapcsolatot tud tartani a periférivezérlokkel és egyéb kulsó
eszkozokkel. A perifériális eszközókkel való kapcsolattartás
bonyolult folyamat, és nem is csak az I/0 kapun át folyik,de
vezérlesében a ROM-ban lévo KERNAL szubrutinok is segítenek,
igy ez elég egyszerűen végezheto, mint majd késbbb látni
fogjuk.
~ - 3_ Ci mzésmódo!s_

Az egyes utasitások a következö feladatok valamelyikét hajt-


ják végre :
§'daj;_.Q_t___j;_g,l_ten"ll~ a memor·i ábel val amelyik L~Ja1.? *-t~ri:J.~.•
az elözó forditottjaként valamely regiszter tartalmát
egy memóriabyte-ba tárol ják, vagy más módon IT)ódgsl_t;_an~~~
egy memóriabyte-ot,
~_gy_!j_s._ reg i szterböl ~g_y___ rnási ki:J_a tól tene~, értéket,
meg vá l t oz...:~.At.J...:!~...2l.§l..!!\.!~J~gl...?._~ "t;g_r_,.Si !J.!'...Q9.!:..§i t . ,
megváltoztat j ák az utasitásszámláló értékét, azaz
2!:_0...Q.t::',E-.!!L~.l_ág a;...~.s.LJJ~JL_~t re.

Az utasítások elsö byte-ja, mint már emlitettGk, mindiq az


utasitáskód, amely nemcsak magát a feladatot adja meq, hanem
a cimzésmódot is, azt hogy a kiegészitö információt <több-
nyire cimet> hogyan kell meghatározni . A c4mzésmod ezenfe-
lül azt is megadja , hogy az utasitáshoz még hány byte infor-
máció kapcsolódik, kettö, egy vagy egy sem . A 6510-es mikro-
processzor igen változatos ci mzésmódokkal rendelkezik,
ame l yeket a következökben részletesen tárgyalunk .

Az ab5zol u t c imzéshez hár· ombyte-os ~o.ttas i t.:.shossz tar" t o z ik ,


tehát a eim 2 byte-os. Ekkor az utasitáskódot kóvetó két
byte a eim maga, kisebb he1yier·té ~cü byte - nagyobb he1y~e~-­
tékü byte sorrendben . Ilyenkor tehát az utasi~ás maga tar-
ta l mazza a cimet, amelyet a eim-buszon el ke ll helyezni .
Ha pl . a soronkövetkezd utasitás igy fest :

$AD , $0l,$08

a SAD utasitáskod azt jelenti , hogy egy byte-ot a memoriábol


az akkumulátorbakell tölteni <LDA) abszolut cimz ésmóddal,
tehát a cimet a második és harmadik byte adja meg.
Ezt az utasitást assembly nyelven igy irnánk :

LDA $0801

Az utasitáskodot az assembly nyelvben a könnyebben megje -


gyezhetö mnemoni kkal CLDA - LoaD AccLimul ater·> helyettesi-
tettuk, a eim a jobban o l vasható természetes sorrendu, a
cimzésmódot nem kell külön jelölni, ez i t t abszolut cimzést
jelent. Az assembler ezt az utasitást éppen az elözö alakra .
a gépi meg+elelöre konvertálja .

A null~ s lapu c imz •• a 6510~es mik roprocesszor azon speci-


ális tulajdonságát használja ki , hogy az a memória elsb 256
byte-ját ($0000-$00FF memóriacimek> ki tantetetten kezeli .
Az utasitáskódok egy külön csoportja nullás lapu cimzést je-
löl , ekkor az utasitás csak két byte hosszu, az operandus
csak a eim második <kisebb helyiértékQ> byte-ját tartalmaz-
za, mivel az elsö byte mindig $00 . Igy az utasitás rövidebb
lesz és a memória elérése is kevesebb idöt igényel . A legtöbb

17
assembler a nullás lapu cimzésnél sem kiván kOlön Jelölést ,
hiszen a eim nagyságából maga is ki tudja számolni, van-e
lehetöség a rövidebb cimzésmód alkalmazására. Mint már em-
li tet tQk, a nullás lap mel l ett az egyes lap is kiemelt sze-
repet j átszik , mint verem-memoria.
(lf'.t--C.II'Jt
A közvetlen cimxJsmód eaetén szinten csak két byte-ra van
szQkség az ut as itás megadáaára. Ebben az esetben a második
byte nem cimet, hanem magát az operandust Cegy konstans ér-
ték~t > tart almazza , ily~nkor nem kell kQlön a memoriához
f ordulnl a processzornak.

Pl. a
LDA #$FF

<assembly) utasitáa a $FF értéket tölti az akkumulátorba.


A közvetlen cimzés assembly jele a #. Az utasitás gépikódu
megfelelő j e a

:fA9 ,$FF,

egymást követő két byte-on elhelyezve látjuk, hogy az LDA


<Load Accumulator> utasitás kódja közvetl en cimzésmód ese-
tén $A9, mig abszolut cimzésnél :fAO volt. Ez, mint már emli-
tettGk, azért van igy, mert az utasitáskód nemcsak az uta-
sitásra magára, hanem a cimzéamódra is utal . Az utasitás és
a cimzésmod egyatt már egyértelmGen meghatározza az utasi-
táskódot, és megforditva. " J , .,J
( '·~-· '"·..
: ,L .",. : ,. "cl~.~.p < .. -a c-~.
A bele•rtett cimz• mód esetén ~2 utasitás egyetlen byte-ból,
magából az utasitáskódból áll . A legrövidebb alaknak megfe-
lelóen az ilyen cimzémódu utaaitások vég~ehajtási ideje a
legrövidebb . Mivel nincs lehetöség operandus megadáaára,
ezek az utasitások mindig csak a 6510-es regisztereivel és
jelzöivel és esetleg a veremmel vannak ósszetQgg ésben. Egy-
szerG példa regiszterböl regiszterbe vala át vi telek esete,
mint pl. a

TAX
assembly utasitás, amely az akkumulátor tartalmát az X re-
giszterbe viszi, de vannak bonyolultabb funkcióju utas i t á-
sok is, mint pl. az

RTI
megszakitásból való visszatérési utasitás, melynek több fel -
adata is van.

Ebben a könyvben egy kissé eltérün k a 6510-es gépikódu prog-


ramozását tárgyalo munkák gyakor l atától . Ezekben egy- i t t
nem használt további cimzésmodot is tárgyalnak , az un.
~kkumulátoros cimzést. Az a kkumulátoros ci mzést a léptet ö
utasitások CLSR,ASL,ROL,ROR> esetében lehet alkalma~ni, ha
az operandus az akkumulátor .Mi v el ez esetben az utasitás egy
18
byte iloSSZLI és minder·• te~ontet.ben rneqfelel «~ beleér·tett. c~Hr•­
=e~mod )ellemzoinek , a t~v~~b1akban ~k~umuláLutos Lim~~~mo0
helyet. L m1. n dl q bel eertet L t.: i mzesmódoL h.:>oLm~ h ...;,s:: nal n 1. l'ltto
~~ ell LIUy.anakhot eml.1ler·1.1. ..~..:L , hogy a +ent.1 utas:~.tások b t •le-
ert.et.t c1m~esm odu változaténál az assemblere~ meqktvánják •..:
A +1kt.1v operandus kilrás~t. (pl. ASL A>, amelyet ezert t i l -
tott Llmkekent hasznaln.1 .

A r elati v ci mzésmód ot a feltételes vezetlesatado utas1.tasu~


használ Ják . Ezeknek a segitsegevel a proqram b1zonyos fel-
tetelek Lel jesulese eseten 11em a fi z1kdllaq soronkovet.kezo,
h<>.nem eqy, az. 1..1t.as1 t as r.3per<..'\nd1..1~:>.:>. ál tal n•egc 1 mz et t utas l tas-
s.:\.1 folyLat.:ódik. Ezekt "O l ,;u ut.asitásoht C::1l a k.ésobbie~ b~11
rész letesebben is szOll.tnk, most a cimzebmOcJ bemllt.c..t.ás<ilto.:
1smer JL\nk 1neq c:sak eqyeL , "" BEQ <Br-a nch on Equal) 1..1tas.1 ta=L,
amely akkor okoz vezér lesatadast, ha a nulla jel:o maqas.
E: állalaban akkor kovetkez1k be, ha az .~~umulátort nulla
ért~ kel toltottuk . vaqy ha egy osszehasonlttás eredménye
eqyenloseqre utal. A kovetke:o kis proqramreszletben az ak-
kumul4torba a nullas lap $14 cimú b yt e-Janak tartalmát tolt -
JUk, m.;~ }d •neqnovel JUk eqqyel az Y r·eq1. sz ter tat tal mát <t NY
- lncrement Y reoister>. ha .:>. $14 tartalm.:>. nem nulla. Az
assembly nyelvu uta&itás&otok elott az ut.asitás kezdoc.1me,
es az utas1tás hexadet.:1m~l1• kOdJa szarpel byte-onként :

Cl liO A5 14 LOA .f:14


C102 F-0 01 BEQ N
C104 ce Il .J Y
C105 A5 15 ~ LDA ~15

A fen t1 form~tum egyebkent assembler 11. sta alakJa .

Ha a •c1u0 c1.men lévo LOA utas1tés véqr~haJtása során a $\4-


es c1m t.ar·ta lma n1..1lla, a;! 1..1tas1.tás aqylk lcovethezménye .:>.z,
hogy az ST regiszterben levu nulla-Jelza b1t magas lesz. A=
ezl kóveto BEQ utasÁt~s végrehajtása - mivel a fel~etel
1qa:: azl jelent1. , hoqy a~ utasitasszamlálohoz hozzáadOd1k
a:: opet andus (el o jel esen) 1 gy a soronl:.;ovetke::ó Llt.:>.si tás t nem
a $C104, hanem a :$C104+1=l>C105 c1mrol foqJa venn 1 a ml.kro-
processzor . Az assembly itásmodban a ve::erlesátadás helyet
c1mhével <N> Jele::tuk , s a forditas soran az .:>.ssembler gon-
doskodlh ..1 relatív oper·and\..l5 (esetunkben 1> kiszam1tásara1.
M1vel egy byte érteke, a határokat 1s beleertve, - 128 es
+127 ho:: e esik, a l egnaqyobb r· el at~ v 1.,1grás távols~Q.e_J s cs-aF
~kkora lehet, m1 v el az operand~s m1ndig pontosan egy byte-
os . Az utas1tások reszletes tárgyalásánál majd látni faq-
Juk, m1 a teen db, ha messzebbre kivánunk ugrani egy felte-
teltol füqqoen.

Hogy a negati v sz~mok ~br~zol4s~t meqertsuk , tegyunk egy k1s


k1.térot . A 6510-es mikroprocesszor (és éltalában a számito-
qépek) a negativ s::amokat un. kettes komplemens kódban ab-

19
ni%ol Ják. Negatj_v .~~z~m~ amelyl']eli_ !eqbaloldal lbb b1tj~
<amit elejeibitnek is szokáa nevezni> m~aJI. Most te ~(lnt­
suk az egybyte-os számokat, de az alábblak igaza~ a tobb-
byte-os számokra ia . Ha egy n&gativ s~ám egybyte-cb <B blt-
es) kettes komplemen--s--kódu ábrázolását akarjuk megkapn1,
a számot hozza kell adni $1 00-hoz (decimalis 256>, a:: ered-
meny a keresett ~bráZölas lEltiZ. Igy a -1 k"et"l.:e$ komplemens
kodja $100-1=$FF . Ez a megoldás igen leegyszerusiti ~z arit-
metikát, hiszen -1+1 számitása

$FF vagy blnáriS>an 11111111


$01 1

1/.$00 1/00000000

A keletkezett szám legfelsó helyiértéku bitjé ~ <amelyet a


byte-on már nem is tt.tdunk ábrázol ni> a gép a C (carl' y> Jel -
zebe v1szi , ezt nevezzuk átvitelnek. A B bit en v1szont csu -
pa nulla maradt, az eredmény tehát a vartnak megfeleleen
eloállt . Legegyszerubb, ha megJegyez2uk , hogy az egybyle - o~
poz1t1v számok .t:OO es $7F keze esnek <0-127>, a neqat1 v a~
ped1g .fFF és $80 keze (-1-tol -128-ig) .

Az indirekt cimz •smOd eqyetlen utasitás, a JMP- felte~len


ugroutas itás esetén has zná latos. Az utasítás assembly ira s -
modjában ~

A579 6C ll4 03 JMP ($0304)

a zarOJel Jelzl az assemblernek , hog y a cimzesmod 1nd1re~t.


M1 a teendo, ha a kovetkezo utasítás 1nd1rekt ugras ? Az uta-
sitasban szerep lo ketbyte-os c1m egy memOrlabyte-ra mutat.
A megJeltilt és kbvetkezö c 1 men lévó byte kerül a PC- be , azaz
ez les:: a kovetkezo utas1tás ctme . A fenli példában tehal a
.f304 - es es $305-os eimen leve er· téke~{ <pl. $0304 érte le le-
gyen .f7C és .f0305 értéke $A5> keru inek a PC-be m1nt also es
Felso byte (azaz az utas1tas : ugrás a •A57C e i mre) . A:: 1 lyen
ketbyte-os, a mamoriaba lerakott ugráseimek e t vektoro~nak
szekas nevezn1. A BASIC 1nterpreter, m1nt a kesobb1e~ben
peldát fogunk látn1 rá, éppen a vektorok segitsegével tesz1
lehetevé a felhsználo gépikodu programszegmenseinek beszu-
rását az interpreter feldolgozási foly~matába .

Az inde~elt cimz ••mOdok talán a legbo nyo l ultabbak,ugyana~~ or


a leghajlékonyabb adatkezelésl lehetoséget nyuJtJák.
Az X es Y regis::~ere~et a:: 1ndexelt cimzesre valo felhasznal -
hatosaqukról lndexregisztereknek is szekták nevezni. A:: ln-
de x eles az~ Jelentl 1 hogy eqy adatbyte c1mét nem kbzvetlenul ,
hanem két mennyiség osszegeként 1rjuk le. Az alsót ba:1snak,
v aqy kezdoc1mnek, a másodikat pedig 1ndexnek hivjuk, amely
meqadja, hoqy a kezdeeimtol hanyadik byte lett megcimezve .
E:: uoyan~= a mechanizmus, m1nt am1kor eqy egyméretu tomb n-
edll elemérol beszélunk, aho l n az elem lndehe . A gép1kodu
utas1tas megadJa a kezdoc1met és a:: inde~et. A kezdbeim
meq•dhato abszolut c1mmel , vagy relat1v c 1mzéssel, az ln-
deh ped1g az X vaqy Y req1szter valamely1ke. E:: a ·c lmzes -
20
ti p1..1s azért nagyon hasznos, mert az indexr-egi sz ter- értéké-
nek megváltoztatásával ugyanaz az utasítás egy másik byte-
ot cí mez meg, ezt jól ki lehet használni ciklusok szerve-
zésére. Most nézzuk az idetartozó három cimzésmódot!

Az abszolut indexalt ci mz••módn•l az utasitás egy abszo l ut


cimet - a kezdöcimet -tartalmazza, pl.

0 400 STRI NG::::$400

200 0 A2 OA LDX :IH O


200 2 BD 00 0 4 LDA STR ING , X

Az elsö sorban egy eimkét defi niálunk az assembler számára,


azaz egy szimbólumot ,amel y a programban a $400 érték helyett
fogunk használni. Másszóval a kezdöcim $400. Az LDX utasi-
tás 10-et tölt C$0A> az X regiszterbe. Az LDA utasításban
" ,X" 1..1tótag Jelzi az assemblernek az abszol1..1t indexelt cim-
zésmódot, ez a gépikódban a $BD utasításkódban tQkrözödik,
amely az LDA ilyen cimzésmódu kódja. Hogyan haJtja végre az
utasítást a gép? Elöször veszi az abszolut cimet C$400>,
ehhez hozzáadja az X reg iszter tartalmát C$400+$A=$40A> és
az igy kiszámított eimen lévö értéket tölti az akkumulátor-
ba. Ha X értéke az utasítás végr-ehaJtásakor történetesen
nem $A, hanem pl. $30, akkor az A-ba a $430 cimü byte tar-
talma kerül. Az abszolut indexelt cimzésmód mind az X, mind
az V regiszterrel használható, és megvan a nullás lapu meg-
felelöjQk is, ami természetesen csak két byte hosszu utasi-
tást eredményez és gyorsabban is hajtódik végre .

Az indirakt indexelt cimzésmód az indirekt és abszolut in-


dexelt cimzésmódok bsszeolvasztásaként ér-telmezhetö. Ez csak
nullás lapu cimet tartalmazhat,ennek megfelelöen az utasítás
csak 2 byte hosszu, pl.

A~57 91 22 STA ($22>' v

A ",Y" utótag a zárójellel együtt <ami az indirekcióra utal>


jelenti az assembler számára az indirekt indexelt cimzésmó-
dot. A megjelölt nullás lapu eimen ($22) és soronkövetkezö
byte-on C$23> egy kétbyte-os eim található, amely az indi-
rek t címzés kezdöcime . Az ilyen, általában adattömb kez deté-
re mutató cimet nem vektornak - az a programba mutat -, ha-
nem pointernek <mutatónak> szokás nevezni. Azt mondhatjuk,
ho.gy a $22, $23 egy tömb point er. e. Az utasit álli végrehajtá-
sának megértéséhez tegyük fel, hogy a $22 tartalma $00 és a
$23-é $CO. Ekkor a kez döcim a $22, mint pointer értéke
($C000) plusz az Y regiszter értéke Cpl . $02>, azaz példánk-
ban $C002, erre a eimre kerül az A r-egiszter tartalma . Ez a
cimzésmód a leghajlékonyabb az össze• között, igen jól al-
kalmazható.

21
Az indexelt indirekt cimz•smód elsö pillantásra igen hasonló
az elözöhöz, pedig igen fontos, hog y a különbséget lássuk.
Ez nemcsak abból áll, hogy a fen t i cimzésmód c s ak az Y, ez
pedig csak az X regiszterrel használatos. Az assembly irás-
rnod

2000 Al 20 LDA C$20,X>

már Jelzi, hogy i t t elöbb az indexelést kell végrehaJtani és


csak azután az indirekciót . Mit Jelent ez a gyakorlatban ?
Tegyü k fel, hogy az u~asitás végrehajtásakor X értéke 2 , mig
a memór ia a következO értékeket tartalmazza:

C IM ER TEK
$20 $00
$21 $CO
$22 $ OA
$23 $CO

VégrehaJtáskor a processzor elöször az utasitás operandusa-


ként megjelölt nullás lapu ei mh ez C$20) hozzáadja az X er-
tékét (20+$02=$22>, ' majd az ezen pointer által mutatott ci-
mQ C$COOA> ~yte értékét tölti az akkumulátorba. Ez a cim-
zesmod talán a legritkAbban használt a 6510-es assembly
programozása során, mivel segitségével általában egy speci-
álls, ritkán szükséges feladat oldható meg <ráadásul azt is
meg lehet másképpen ol d ani). Tegyük fel, hogy van egy poin-
tertömbünk a nu ll ás lapon, ame l y kétbyte-os pointereket tar-
talmaz . Az X regiszterrel, mint indexszel ilyenkor ki tudjuk
választani a tömb elemét és általa a hivatkozott címen lévö
byte- ot. Ez igen hasznos lenne ugrótáblák kezeléséhez <CASE
programstruktura), de ezerencsétlen módon ez a címzésmód ve-
zérlésátadó utasitások esetén nem használható.

22
A megszakítások olyan eseménye~( , amelyek fé l beszakítják_~
processzor "_,_!flükóq.!1~ét, meg v ál t oz tatják b í zonyes reg í sz terek
tartal mát és §Lf!.!:.Q.Q..r am f_\:-ttását ál tal ában uj pontróL_fgJ,..yt_~j;, =­
ják. A megszakításokat külsö <pl. per·if ér i a> és belsó (óra-
j el, BRK utasitás végrehaJtása) tényezök is kiválthatják . Két
alapvetö tipusuk van, maszkolható és nem maszkolható megsza-
kitáskérelem. A megszakitás maszkolásán a processzor egy o-
lyan állapotát értjük , amikor a befutó maszkolható megszakitá-
sokat figyelmen kivü l hagyja. Erre nagy szúkség van pl.
a megszakítást kezelb szubrutinban, amelynek mükodése során
kellemetlen lenne egy ujabb megszakitás, amely ujrainditaná
a rutint. Tulajdonképpen van egy harmadik megszakitás is,
amellyel már találkoztunk; ez a reset, ami a bekapcselás
esetén való indulást, i l l . a tisztázatlan helyzetböl való
ujrai n dul ás folyamatát vá l t ja ki . Azért nem szokás ezt meg -
szakitásnak nevezni, mert egyrészt nem ·szakit meg semmilyen
tevékenységet, másrészt v égrehajtása is különbözik a meg-
szakitásokétól, mivel itt a kezdeti állapot elmentése a
megszakitett tevékenység zavartalan folytatásához hiányzik.

A megsza k i t ~sok kezel é sének el so lépése tehát az Allapot re-


giszter <P> és az aktuális eim elmentése a verembe. Ezután
az I megtelelö beállitása <ha szükséqes) és a megsza k itás-
kezeib rutin e iméne k betöltése az utasitásszámláloba követ-
kez ik. Utobbi t a proces szor a memoria utolsó háromszor két
byte-jának valamelyikéből veszi a következ6 táblázatnak
meqfelelöen :

:t:FFFA $FFFB Nem maszkolható megszakitás


$FFFC $FFFD Reset
$FFFE $FFFF Maszkolható meqszakitás

A szub rutinok elóbb -utóbb egy RTI utasitAssal fejezednek be,


amely visszaállítja a megszakítást megelözö ál l apotot, a zaz
visszamanti a veremből a P és az utasításszámláló értékét,és
folytatja a program futását . A maszkolható megszakítást ke-
zelo prograrnek (és más megszakításra kényes tevékenységek)
tartalmazzák a SEI <Set Interrupt F l ag> a megszakitás masz -
kelására és a CLl <Clear Interrupt Flag ) utasítást az uJra-
engedélye?ésre.

A megszakításokat á ltal •ban hardw•re okok idézik elö , pl.


az órajel, amely a C64-en minden 60-ad másodpercben megsza-
kit Ast okoz <bár ez programból ki kapcsolhato>.

De lehet megszakitást kelteni softwara uto n, azaz program


által is, a BRK <Break> utasitás v égrehajtásával .
Ez egy szabályos maszkolható megsz akítást okoz, a z egyet-
len különbséq a hardware okokból bekevetkezetthez képest ,
h ogy az ST r· egi s z ter· B jel zaj e magasra áll i tódi k. Innen
tudható a megsza k1tást kezelö szubrutinban, hogy a meg-
szakítást BRK utasitás idézte elö . Ez ~z utasítás nagyon

23
hasznos a program hibajavitá&a során, mivel a hibás ágra
futó programot a BRK jól követhetöen megállitja. Ennek
hasznos;i tásár· a természetesen gondoskodni kel l az $FFFE ál t .al
hivatkozott megszakitáskezelö rutin megfelelö átiráaáról. A
gép bekapcsalást követö állapotban a BRK BASIC meleginditást
hajt végre, ha~~sa megeg yezik a RUN/STOP és a RESTORE bil-
lentyök egyide jQ lenvomásával .

24
~ .L Mi~ tud egy ~_embler - mit kellene tudni ~
~Q'Ible~k

Ha gépi kodu programozásról beszélünk,szinte mindig assembly


programozásra gondolunk. Természetesen megvan a mod és lehe-
tőség arra , hogy a gépikódu programot byte-ról byte-ra pl. a
POKE BASIC utasitás segitségével elhe l yezzük a memóriában
és elinditsuk. Kétségkivül ez a legfáradságosabb és a leg-
több hibalehetőséget magában foglaló megoldás . Nem sok ennél
~c evés bé szot·akoz tat ó mód j a van a sz ám i tögépes i d ötöl tésnek ,
éppen ezért ez a legrosszabb lehetőség, ha a program hossza
az 1-2 utasitást meghaladja .

Szerencsére vannak a gépikodu p rogramoz á snak olyan eszkozei,


amelyek kombinálJák a gépikód maximális hatékonyságát a
gyors, b i ztonságos és jól nyomonkövethet ő munkáva l és ezek
a kulonféle assemblerek . Az elképzeleseink szer1nt készOlt
program azonban a Mur phynek tulajdonitott aforizma szer1nt
nem vágyain~nak , haneffi utasitásainknak megfelelben múkódik ,
e~ért a megirt program még alapos cs iszo lásra szarul. Ebben
ny1.dtanah segitséget a c;,JéP1 kod1.1 moni tor· ok, rJeb1.1ggere~~ ; ame-
lyekről szinten ejtünk pár szót a késóbbiekben.

Elóbb azonban az ~ssemblerekről. Ezek tulajdonképpen olyan


software-eszkozők , speciális célprogramok, amelyek a_g_épi;::.
c §lrngft _i J:: ás.~ •~'L ____:f_g,r_: d i j; ás~r:.e..s __Q_o kLI..!!!_g_Q_'t;•.~..!. ás_á_r.::~ val ól<.
~( OJ:tL..I ,gr og_
és alapvetb céljuknak megfelelben a gépikodu programozás
legegyszerubb és egyszersmind leginkább hibamentes módját
teszik lehetové . Sokféle assembler van, amelyek külonbőzö
tipusba sorolhatók, de egy - egy tipuson belul is eltérnek
szolgáltatásaikban és az elfogadott nyelv szintaxisát ille-
toen .

Az assemblerek három fő tipusa

makroassemblerek,
szimbolikus assemblerek és az
azonnali (instant> assemblerek.

Szol gáltatásaik a fenti


sorrendben egyre csökkennek . Az
~zonnal i jobb qépi kOdLI moni torok tartozé ~~ a >
assemblerek <
eqyidejuleg egyetlen gepikódu utasitás forditasát v éqz1k,
szerepuk az utasitásmnemonikok és a cimzésmódok felismeré-
sér e és leforditására korlátozódik. A Jobb megoldások a
relativ cimzésmodnál az ugráshoz sz~kséges gépikodu operan-
dus kisz ámitását is elvégzik. ha operandusként abszolut
c imet ad Lm k meg.

25
A szimbólikus •ssemblerek már bonyolultabbak . Nem egy uta-
sítást, hanem egy egész programot <vagy programrészt> egy -
s~erre v1zsqálnak meg . Az értékekre Ccimek , operandusok)
szimbólikus megnevezéssel hivatkozhatunk, ami nagymerté~ ­
ben leegyszerusiti a p rogramok javítását . ~ltalában Ctobb-
-kevesebb) lehetbséget adnak az adatteruletek kijelole~ére
es kezdet1 értékekkel valo feltoltésére. Ezt az un. dlrek -
tivák segitségevel teszik , amelyek az utas1táskOdhoz hason -
lo mnemonikok, de nem kerulnek be a lefordított programba,
csak a forditást v ezérlo, az assembl ernek szóló utasítások.
Mivel az egyes utasítások leford ításához sokszor olyan in~
for má elo is szüksége l tetik, ami a program szövegében csak
késöbb következik , az assembler kénytelen többször is végig-
olvasni a programot, igy a szimbóli kus assemb l er forditók
maJdnem m1ndig több <legalább két-> menetesek .

A mAkróAssemblerek a s;;:imbolikus assembler- funkcióin k i vLtl


a makrodef1n1álás és fordítás képességelvel 1s rende l kez -
nel;. . A mah· olc fordí tás1 idoben müködö progr· amok , amelyet .az
assembler 1nterpretal Cm1nt a BASIC interpreter a BASIC ko-
det> es futasuk eredménye ként assembly utasítások keletkez -
nek , amelyeket az assembler l e f ordít. Ez a kicsit talán bo-
nyo l ult kép l eeqyszerusitve ugy is jell emezhetö, hogy a mak -
rók ker d o1vek , a melyeket a makroparaméterekkel kitóltve he -
lyes assembly utasitások.at nyerünk . En ne k a konyvnek nem
célja a makrOprogramozás oktatása, bá~ a témat még é rintjuk
egy makro~ssemb ler ismertetese kapcsán .

A kovetkezokben részletesen egy szimbolikus assembler pé l -


dáJán ismerJuk meg az assemblerek és az assemb ly programo-
zás lehetosége1t . Az eqyértelmü tárgyalásrnod kedvéért vá-
lasztanunk kellett egyet a C64-en rendelkezésre állo a ssemb-
lerek kozul , mi vel , mlnt már emlitettúk , a z ok szinta x 1~a
es szo l qaltatásai kismértékben eltérnek . A választás a ta-
lán le~inkább elterjedt , mindenki kezeügyében lévo HELP+
BASIC bövit•• assemblerére esett , amely az also kóz épmez öny-
bbl származó , de ezért méq has:n á lható p rogramtermék . Kezelé -
sere a 4.1 fejezetben viss:atérúnk , i t t csup án azt kiv~njuk
leszoqe:n1 , hogy az ebben a fe Jez etben szerepe l tetett szin -
tax ls <meq a konyvben tatálhato ósszes program l ista> a HELP+
assemblerére é s csak arra vonatkozik, a tob bi assembler re
cs•k tobb - kevesebb modos1tással igaz.

26
Az ~ssembly utasttások a kovetkezo formaJuak :

<sorszám> <c lm ke> ~ mnemonik> ~o perandus > < megJegyzés ~

A fent1 elemek közöl minden esetben kotelezó a < sorszam? es


a <mn emonik > , mindiq elhagyható , a <meqJeqyzés> , a mnemont k-
tol fuqgden köteleze a ( cLmke > es az ~operandus ~ .
Eqy sor csak sorszámból es megJeg yzesbol lS állhat .

A <sorszám > csak a pr o grarnek sor ainak sorbarendezésere szal-


gal , lehét a progr~mszerkesztes támo g~tas~ra, •~ assembly
nyelv szempontJából kozombos.

A <::c: imke ;> az Lttasitás vagy a direkttva cilzonositás-:.-~ra szolqál,


a.: Ltt~s itás memoriacimet ill. a direkti va ál tc\l kl Jelo lt
memortacimet vaqy értéket helyettesitt, ~helyett hc\sznalhd-
to. Eppen errol kapta nevét a szimbolikus ci\Ssembler.

A <. mnem_ontk > eqy gépikodu Litasi tás hérembetus emléke::tet o


r· ovi d t t ese vaqy eqy ". "-tal bevezetet t d t re~~ ti va . V~ l ~rneny­
nyi utasttással és direkttvával megtsmerked~nk ci~ tovabbLa~­
ban.

Az ' operandus • ertelrnezese a mnemoni~tol tuqg, á.ll.:d ábciln


ctmet vagverteket Jelel. Az operandusbal kovet~, e.: tet az
assembler az utasttások ctmzésmOdJéra ts , a kovetlezolep-
pen :

< ct mki te Je:.: es .::· Ut.as1 tasi( Odtol 1 Ltggoen r- el at: 1 v


vaqy abszolut . utobba eueten,
ha a cimkif~jezes erteke ~ slúu,
nullas lapu abszolut c1mz es.

< ... ci mki fe )ez és >) lndtrekt.

(<.ci mkt feJezes ;·> . Y lndtrekt tndexelt.

<<ci mktf e jezes>.X> Indexelt indirekt .

< cimktfejezés > ,X es


' ctmktfejezea> , Y Abszolut tndexelt.

Kozvetlen .

Ha ntncs operandus, beleértett c1mzémódot használ a~ assemb -


ler (ha az utas1táskód is megengedi) . A ROL, ASL, LSR es ROR
Cld. később) léptetö utasitások beleértett modu ctmzese ese-
tén <amikoris ezek ~z utasitások az A reqiszterre vonatkoz-
nak, az "A" oper.andust ki k ell 1rni, atnl egyébként c 1mkekent
tilos az eqyértelmúség m1att. Az operandusban s~ereplo

27
<cimkifejezés ) szimbólumok <cimkék>, decim~lis , hexadecim~­
lis ($-ral kezdödö>, bináris (%-kal kezdödö>, oktális (§-cal
kezdöd ö) sz~m, illetve ezek + é s - jellel összekapcsolt ki-
fejezése lehet. Speciállsan a < cimke> ut~n (egyes assemble-
rek esetén elé) irt " <" jel a ei m alacson yi\bb , ">" jel a eim
magasabb helyiértékQ byte-j át j elenti. A fentiekre péld~t a
késöbbiekben még böségesen találunk .

A < meg j egyzés > ; -vel kezdödö tetszöleges karaktersorozat,


amelyet az assembl~r csak kilistáz, egyébként figy el men ki-
vOl hagy .

Most ismerkedjOnk meg végre az utasit~sokkal is.

LDA a ( cimkifej ezés > ~ltal megjelölt byte tartalm~t az


akkumulátorba tö l ti
Alkalmazha tó cimzésmódok : KV ,N,NX,A,AX,AY,IX,I Y
Befolyásolt j elzök : Z . N
Példac
' LDA C IM

LDX a < cimki fe jezés ) által megjel ölt byte tartalmát az


X regiszterbe tölti
Alkalmazható cimzésmódok : KV ,N,NY,A,AY
Befolyásol t jelzök : Z,N
Példa :
LDX C IM

LDY a < cimkifejezés> által megjelölt byte tartalmát az


Y regiszterbe t teiti
Alkalmazható cimzésmódok: KV,N,NX , A,AX
Befolyásolt Jelzök : Z,N
Pel da:
LDY CIM

STA az a k kumulátor tartalmát a < cimkifejezés > által


meg j el öl t byte-ba menti
Alkalmazhato cimzésmódok: N,NX,A,AX,AY,IX,IY
Befolyáso l t j elzök :
Pé ld a :
STA CIM

28
STX az X regiszter tartalmát a <cimkifeJezés~ által
megjelólt byte-ba menti
Alkalmazható cimzésmódok: N,NY ,A
Befolyásolt jelzök:
Példeu
STX CIM

STY az Y regiszter tartalmát a <cimklfej ezés > által


megjelölt byte-ba menti
Alkalmazhato cimzesmodok: N,NX,A
Befolyásolt jelzók :
Példa:
STY CIM

INC a <c imkifejezés ~ által megJelolt byte tartalmát


eggyel megnöveli
Alkalmazhato cimz ésmodok: N,NX,A,AX
Befolyásolt Jelzök: Z,N
Példa:
INC C IM

DEC a <c:i mkife )ezés> által megjelo lt byte t<wtalm~t


eggyel e sekkenti
Alk~Jmdzhato cimzesmódok: N,NX,A,AX
Befolyásolt Jelzök : Z,N
Példa:
INC CIM

.
3 . 2.3 . Reg i. s.:f:t!f!rLt_t~si tás_p_l:~

r AX az A r· egiszter tar· talm~t az X reglsz·tet· be tolt1


Alkalma z hato c1 mzesmOdok: BE
Befolyásolt jelzök : Z , N
Példa :
TAX

rAY a: A regiszter tartalmát az Y r eg1s:terbe tölti


Alkalmazható c1mzésmodok : BE
Befolyásolt jelzok : Z,N
Példa:
TAV

TXA az X regiszter tartalmát az A regiszterbe tolti


Alkalmazhat o cimzésmodck: BE
Befolyásolt Jel zök: Z,N
Pél da:
TXA

29
TYA a z Y r eg isz ter t a rta l mát az A r e giaz ter be tölti
Al k a l mazhato ci mz ésmód ok : BE
Bef o l y ásol t Je l zok : Z, N
P é ldw. :
TYA

TXS az X reglszter tar t al mát a veremmutatoba tö l t i


Al kalmazhato cimzésmódok : SE
Befoly á solt Je l ::ok :
P é lda :
TXS

TSX a veremmutató tartalmát az X reqiszlerbe tolti


Alkalmazhato c1m~ésm6dok : BE
Befolyásolt jelzok :
Példa :
TSX

SEC az átvltel-Jel:ot magasra állltJa


Al~almazhato c1mzesm6dok : BE
Befolyásolt Je l zok : C
Pel da:
SEC

SED a dec1mális mód-Jelzot magasra állítJa


Alkalmazhato c1mzesmodok: BE
Befo l yásolt je lzc~: D
Példa:
SED

CLC az at vltel-Je l ::ct aldcsonvra áll1lJ~


Al~almazhato c1m::é~modo~: ~E
Befolyasolt Julzok : C
F'él da :
CLC
CLD - a decimál.is mod ·· h:tl::öl ala ~o.sony ra állit.Ja
Alkalmazhato c1mzesmodu~ : BE
Befolyasol t Jel~ok: ~
Példa :
CLD
CLV d tulcsordulás -JEd- c>t clldC.....,CIIYI"~ alllt.ja
Al~almazhato ~ 1m z~sm6du~: BE
Befolyásolt JE.>lozol.: V
Példa :
CLV

CLl a meqszakitás- jelzot alacsonyra állitJa,azaz


enqedelyez1 a maszkolh~tó megszakításokat
Alkalmazhato cim::ésmódok: BE
Befolyásolt Jelzok: l
Példa:
CLl

30
SEl a megszakitás-jelzot magasra állitja, azaz
letiltJa a maszko lh ató megszakitásokat
Alkalmazható cimz ésmódok: BE
Be-folyásolt je lz ö ~o I
Példa:
SEI

DEX az X regiszter tartalmát eggyel csökkenti


Alkalmazható cimzésmódok: BE
Be-folyásolt Jelzók : Z,N
Példa :
DEX
DEY az Y regiszter tartalmát eggyel csökkenti
Alkalmazhato cimzésmódok: BE
Be-folyásolt jelzök : Z,N
Példa :
DEY

INX az X regiszter tartalmát aggvel noveli


Alkalmazhato c imzésmodok: BE
Befolyásolt j elzők : Z~N
Pél d.a:
INX

INY az Y regiszter tartalmát eggyel noveli


Alkalmazhato c1 mzesmodok: BE
Be-folyásolt jelzők: Z . N
Példa:
INY

JMP az utasitásszámlálo értéket a < cimki-fe Jezés >


által meqhatár-ozott eimr- e állitj,~, ez lesz a
kbvetk ez ö végrehajtandó utas itás
Alkalmazhato ci mzesmodok : A,I
Befolyáso l t Jelzbk :
Példa:
JMP ( $.304)

JSR szubrutinhivás . Az utasitásszámláló értéket kettö-


vel megnoveli es ezt a cimet a ve~embe menti. Ezu-
tán a programszámlálot a ~cimki fejezés > á l tal meg-
határo z ott eimre állitja, ez lesz a kovetkezo vég-
rehajtandó utasitás. Meg jegyzendb, hogy a veremben
nem a JSR-t követö uasitas cime van , hanem annál
eggyel kisebb érték , de ezzel a programazonak ál-
talában nem kell törődnie , mivel ezt a szubrutin-
ból va lo visszatér és1 utasitás <RTS> meg-felelben
l ekezel i .

31
Alkalmazhato ci mzésmodok : A
Befolyásolt Je lzök :
Példa =
JSR SETTIM
RTS szubrutinbol valo visszatérés. A verem két ~elsd
byte-jának eggyel megnövelt értékét az utasitás-
száml álóba tölti . Ezzel a soronkdvetkezö végrehaj-
tando utas i tá~ a JSR- t kóvetd utasitás les~ a szub-
ru ti nt hivo progamrészben.
Alkalmazhato cimzesmodok: BE
Befolyásolt jelzbk :
F'elda:
RTS

R1I meqszakitáskezelö szubrutlnbol való vi•szatérés .


Az állapotregisztert a verem teteién talált érték -
kel tölti . A verem soronkovetkezc két byte-janak
eggyel meqnovelt értekét az utasitásszamlálóba töl-
t i . Ez. zel C::< sot- onkov~:;.·t~~ezcl vecwehaj ta ridO Ltta si tás a
meqszakitást kovetö utasitás les2.
Al kal ma.::. r-1c:\ l o C:l •'"~es modok: .E(E
Betol yáscll l je L z Öl:;: vc:. l ame••nyi
F'élcla:
R'l I

E•Rf<.. .ueqs.:: c:l f, i t a s t C.:) le .:J~ o Ll t.. a cs .i t.. ás (~~c) + LWr.ö\r l? m~qs;.: ah i t. ás) .
A BRI< utf.:l:::oll..á<St f:.cn.;et. u b v t.e c.1.rn~ a ver-e.n tetejér·e
kt:r L.tl. '"""' iu .~.: áll c:~pt.>lt f.; ;'lpszl er· ér· téke~ i s l, lnlento··-
d J.h . Ezl.tt.~ll· '" v~;-~zerle::, "' .!I:'FFFE.-·.$FFFF t.::i•ll altal mu-·
t.atc.• Lt Ltl.,=ol t.:i\l::.t e\ k~t·' ul. l- t<t i l t. ie~ ,". 1112\l::;zkolt o .::~ L C>
n11~osz aki Lá~c,hc.l..
Alk.a.lmd;:llé.tLO C: Jolo.; esmodul.: BE
BE?folya>:ool.t. lt?lzuh: B, l
F'~~ldc:~:

8 CC o:~.:: Lt l. c!<Sl tás~·.;: ..~olll ~l o t ~r t. a. J t•r ·31ro;.: elo leltlfi.dyeseco


hoz::.a.~dc:)(Jlk a.::: CJPF.!I"'~~ndt..ts tc;,r-·ldlm.", ha C.\ Z <!!.t .n tel·-
)E:dZ.Cl .:\l<ALSOrl'y' .
Alkalmazhato c 1mzes modok : RE
.8~;-~f<::>ly.á~:;oll ie!zok :
Pel da :
BCC CII<LUS

BCS é:\ :i: Litasi t áss:: ám l ál'(j t.ar"'t.~ü máho•: e l ö ü~ l he~ l yes er.
ho.::.::ao:~ d 0d1k az operandus tart alma. ha az átvi l e .l. -
jel<:ó mag.;,•.
Alkalma.:::hato c imzesmod o k: RE
Befolyásolt jelz ö k:
Féld ..~ :
BCS CH.. LUS

32
BEQ az utas1tásszámlálo tartalmához elő J elhelyesen hoz-
záadódik az operandus tartalma, ha a nulla j elző ma-
gas.
Alkalmazhato cimzésmodok: RE
Befolyásolt jelzők :
Példa :
BEQ CIKLUS

BNE az utasitésszámlálo tartalmához eloJelhelyesen hoz -


z áadódik ~z o perandus tartalma. ha a nullajelzö
alacsony .
Alkalmazhato cimzésmodok: RE
Befolyasolt Jelzők :
Példa :
BNE CIKLUS

BMI az utasitásszámláló tartalmához előjelhel y esen hoz -


zaadodi~ az operandus tartalma,
magas.
Alkalmazhato cimzesmodok : RE
Befolyásolt jelzők:
Példa:
Bt1 I C I k:LLJS

BPL az utas1tasszamlálo tartalmához elojelhelyesen hoz-


záadedik az ope r andus t a r talma, ha a n eqativjelző
al.::~cson y .
Al k alma.::hato c irnz esmódok: RE
Befolyásalt j elzok:
F'élda:
BPL Cif<.. LUS

&VC az utasttásszárnlálo tartalmához elojelhelyesen hoz-


záadedi k a z operandus tartalma, ha a tul c sor dulás-
.Jelzo alacsony .
Alkalm•z hato cimzesmódok: RE
Befolyásolt Jel z ok :
Pél da:
BVC CIKLUS

evs az utasitásszámlálo tartalmához eloJelhelyesen ho:-


zaadOdlk a z operandus tarta l ma, ha • tulcsordulás-
jelzo magas.
Alkalmazhato cimzesmodok= RE
Befolyásolt Jelzok :
Példa :
BVS C I t<:. LUS

33
3.2 . 5 . Vere~keze l ö utas1t aso k

PHA ~=akkumulátor tartalmát a verembe menti, a verem-


mutato altal mutatott c1 mre , maJd d veremmutato
erteket eggyel cso kkenti.
Alkalmazhato c 1mzesmodok : BE
Befolyasolt Jel=ok :
Példa :
PHA

F·LA "' ver·ammLitato <ll t al


h i vat ko::: ott c.:. :i 1111? 11 l ev o ert ehet.
az akk umulátorba talt1, maJd a veremmut.ato erteket
eqqye! meqnovo1i .
Alkalmazhato c 1 m:::esmodok : BE
Befolvásoll Jel.:::ok :
Példa :
FLf-1

1-''HF a ll apult ~qJ.s.:Lot te<rtalmát ~ ver·emue mentJ. • "' ve-


e\.:::
remmutato alle<l mutatott c1 mre , maJd a veremmu t ato
erteket eq~ywl ~sokken tJ..
lU kal rnazhato ~i mzesmodol:. : BE
Befolváso!t. i~::~l.:D ~~ =
Pé l da :
PHP

PLP a v eremmutato ~ l te< l hivatkozott c1men leve erteket


~= állapotreQls:::terbe tolt1 . majd a vcremmutato ér -
teket eq q ye l meqnovel1 .
Al ka l ma:::h~to c im:::es módok: BE
Befolyá so l t Jel:::oh : valamenny1
Pel da :
PLF·

HoL a.:: ~kkumul.ator v""qy i::\ memor- L abyt~ L<lt tdllllát wqy
blt - p o::: lClO va l balra léptet1. A leoa l ~o b 1 t nulla
les::: , ~ IJ.lépo b1l az á tv J.te l - Jel:::obe kerul . H.::
utasitás ~-vel v~ l o s:::orzasndk felel meg . A ROL
u t asilá~~e< l kombinál v a ketbyte-os e rtek ~zor :::asat
lehet elvege.::ni .
Al h a l ma::t.e<to c imz e s;modok : BE , hl,t.jX , A , ?\)(
Befolya solt Je l zok : Z , N, C
Példa:

vagy
ASL HAT VNY

34
ROL az akkumulátor vagy a memoriabyte t~rtalmát egy
bit-pozícióval balra lépteti. A legalsó bitpozi-
C10ra az átvltel-jelzó utasítás elötti érté~e lép,
akilépobit az átvitel-jelzebe kerul . Az utasítás
2-vel va le szorzásnak ~elel meg.Az ASL utasítással
komb1nálva kétbyte-os erték szorzását lehet elve-
gezni .
Alkalmazhato cimzesmodok: BE,N,NX , A , AX
Befolyásolt Jelzok: Z, N, c
Példa :
ROL A
vagy
ROL HATVNY

LSR az akkumulátor vagy a memoriabyte tartalmát egy


blt -poz l cioval Jobbra leptet1.A legfelso b1t nu ll~
lesz, a k1lepo b1t az ~tvltel -Jelzobe k erul . Az
utas1tás 2-vel va le osztásnak felel meg . A ROR
utas1t~ssal komb1nálva kétbyte-os erték osztását
lehet e1vegezn1 .
Alkalmazhato c1mzesmodok : BE , N,NX,A , AX
Befolyásolt jelzok : Z , N , c
Pel da :
ASR A
vagy
ASR HATVNY

HOR az akkumul~tor vagy a memor1abyte tartalmát egy


blt-pozicioval JObbra leptet1. A leofelso bitpozi-
C lOra az átvltel-Jelzo ut-sit~s elottl értéke lep.
akilépobit ~= dtvltel-Jelzobe k erúl. Az utas1tás
2-vel vale osztasnak +e l ei meg. A: ASR utasitassal
komb i nalv~ ketbyte-os erte~ osztását lehet elvege:-
nl.
Alkalmazhato cimzesmodok : BE , N,NX,A,AX
Befolyásolt Jelzok : Z, N , C
Példa :
ROR A
vagy
ROR HATVNY

AND az a kkumulátor es a specif1kall ad~tbyte kózott


logikai ES muvelet végzese bitenként . Az eredmeny
az akkumulátorba kerül . Az eredmér1y va l amely bitje
maqas , ha mindkét megfelelo b1t magas volt, ala-
csony minden egyeb ~setben . Ezállal egy memóriabyte
bizonyos bltJeit lehet az akkumulátorba vinnl, mig
a tóbbi bit O lesz.

35
Ezt a byte maszkolásának is szokás nevezni.
Alkalmazható cimzésmódok : KV ,N,NX,A ,AX,AY,IX,IY
Be+olyásolt jelzók: Z,N
Példa :
LDA #$7F
AND BYTE

ORA az akkumu lát or és a specifikált adatbyte kozött


logikai VAGY muvelet végzése bitenként . Az eredmény
az akkumuláto~ba kerúl.Az eredmény egy b1tje magas,
ha legalább az egyik bit magas volt, alacsony ha
m1ndketto alacsony volt . Ezáltal két byte tartalmát
lehet egyesiteni az akkumulátorban .
Alkalmazhato cimzésmódok: KV,N,NX , A,AX , AY , IX,IY
Befolyásolt jelzök ~ Z,N
Példa :
LDA #$OF
AND BYTE!
STA BYTE l
LDA #$FO
AND BYTE 2
ORA BYTE l

EOR az akkumulátor és a specif1kált adatbyte kbzött


logikai klzáro VAGY mOvelet végzése b1tenkent.
Az eredmény •= akkumuláto~ba kerOl.Az eredmeny egy
bl~Je magas, ha pontosan a: egyik bit magas volt,
alacsony m1nden egyéb esetben. Az utasitás inver-
tálja az egy1k byte azon bitjeit,ahol a másik byte-
ban 1 áll .
Alkalmazhato cimzésmodok: KV,N , NX,A,AX,AY,IX,IY
Befolyasolt Jelzeke Z,N
Példa :
LDA # $FF
EOR BYTE! :LOGIKAI kOMPLEMENS-KEPZES

BIT az akkumulátor as a specifikélt adatbyte kozot~


loq1kai ES muvelel veg:ese bitenkent. Az akkumu l á-
tor értéke nem valtozik a muvelet végrehajtása so-
rán . A nulla Jelzo maqas lesz, ha az eredmeny nulla,
a neqatlv-jelzo a memor iabyte 7 ., a tulcsordulás-
jel~o a 6 . bit ertekét fogja kapni. Az uta•itással
elbnybsen lehet a 6. es 7. b1t artékét v1zsgálni .
Alkdlmazl1ato cimzesmodok : KV , N,NX,A , AX,AY,IX, I Y
Befolyásolt jelzok : Z ,N,V
Példa :
LDA #$FF
BIT BYTE
BMI BIT7
BVS BIT6
BEQ URES

36
ADC 059Zeadó utasitás . Az akkumulátor, a megc1mzett
adatbyte és az átvitel jelzö értékét osszeadja és
az akkumulátorba viszi.Ha a decimális-jelzö magas,
a számolást eco alakban végzi (ritkán használatos
a C64 esetében> . Az átvitel-jelzö hozzáadásának a
többbyte-os összeadás megvalositásában van szerepe ,
ha egyetlen vagy az elsó byte értékét kivánjuk ki -
számolni , az utasitás elott az átvitel jelzöt toröl -
ni kell .
Alkalmazható cimzésmódok : KV,N , NX , A , AX , AY,IX,IY
Befolyásolt Jelzok; Z,N,v,c
F'elda:
CLC
ADC MEM

S BC klvon ás . Az akkumulátorból k1vonja a megcímzett


adatbyte-ot es az átvitel jelzo ertékének inverzét
és az eredményt az akkumulátorba v1szi . Ha a dec i-
mális-Jelzo maq~s , a számolást BCD alakban végzi
<ritkán használatos a C64 esetében>. Az átvltel -
Jelzb levonásának a többbyte-os kivonás megvalosi -
tásában van s :;~ en:pe, ha egyet l en vagy az el sö byte
értékét kivánJuk kiszámolni, az utasitás elott az
átvitel j elz o t maqasra kell állitani .
Al k almazhato cimzésmOdok : KV,N , NX,A,AX,AY,IX,IY
Befolyásolt jelzok : Z,N,V , C
Példa :
SEC
SBC MEM

CMP osszehasonlltja az akkumulátor és a specifikált


adatbyte lartalmát , oly modon, hoqy az utóbbit ki-
vonja az elobbibol , de az akkumulátor tartalma nem
változik , v 1s:ont a j elzoket az eredménynek meg -
feleleen állltJa. Ez azt Jelenti, hogy az össze-
hasanlltás eredményét az alábbi utasitásakkal le-
het vizsgálni:
BPL - > A>=memoriabyte
BMI - > A<memóriabyte
BEQ -> A=memóriabyte
BNE - > A< >memóriabyte

37
Alkalmazható cimzésmódok : KV,N,NX,A,AX , AY,IX,IY
Befolyásolt Jelz ök : Z,N
Példa:
CMP #$FO
BNE CIM1

CPX összehasonlitja az X regiszter és a specifikált


adatbyte tartalmát, olyan modon, hogy utóbbit ki-
v on j a elóbbiböl, de az akkumulátor tartalma nem
változik, viszon t a Jelzöket az eredményne k meg-
felelöen állitja.
Alkalmazhato cimzésmódok : KV,N,A
Befolyásolt jelzök: Z,N
Példa :
CPX #SFO
BNE CIMl

CPY bssz ehasonll tj a az Y regiszter és ~ specifikált


adatbyte tartalmát, olyan módon, hogy utóbbit ki -
vonja elöbbiböl, de az akk umulátor tartalma nem
változik, viszont a Jelzöket az eredménynek meg-
feleleen állítja .
Alkalmazhato c1mzesmódok : KV,N,A
Befolyásolt jelzök : Z,N
Pé1dá:
CPY #$FO
BNE CIMl

NOP üres utasitás , teljesen hatástalan .


Alkalmazhato cimzésmodck : BE
Befolyásolt Jelzök:
Példa :
NOP

38
4._?gLtw~re eszközek- ~ssemblerek, monitorok, debuccerek

Az assembly prograrnek 1rásához szerkesztoprogramokat, le+or-


ditásukhoz assemblereket használunk. Programszerkesztéare
egyes assembler ek esetén a BASIC képernyoszerkesztöJét al-
kalmazhatjuk <mintha csak BASIC programot irnánk>, m~s ese-
tekben viszont speciálls szerkesztöprogramokat. Az assembler
1s lehet kOlon program, vagy egy általánosabb +e j leaztö
r endszer egyik funkcióJa, mindkettore láthatunk példát a
késobbiekben .

A p rogr~mozás természetesen nem ér véget a program lefordi-


tásával , bizonyos esetekben e z csak az elso lépés . E zut 4n
kovetkezik a p rogram ki probálása, tesztelése, javítása egé-
szen addig , mig meg nem gyezedtünk arról , hogy va lóban azt
a +eladatot hajtJa végre, ame lyre terveztük . Ennek a mun-
kának a során l & lega lább o l y an mértékben rá vagyunk szo-
rulva seftware-esz közök seg1tségére, m1nt a pr ogram 1 rása
és forditása alatt. Ugyanakkor ennek a tevék enységne k a tá-
mogatására i gen nehez k1 d olgozni altalános célu eszközoket ,
m1vel a tesztelendo programok sokkal vá ltozatosabb ~e lad a­
tok megoldására lettek tervezve , mint egy átl~ gos BASIC
program. GondolJuk csak meg, milyen sulyos probl é mák at vet
f el egy gépi~ddu monitor tesztelése , hiszen nagyon nehéz
ugy elemezni mukodését , hogy ne avatkozzunk abba bele. Ennek
~oszonhetoen , kulönosen a személyi számitógépek terule tén
csak általános és elég egyszerü eszkezek terJedte k el . Ezek
a monltorok és az ezek szolgaltatasáin némileg tulmenö debug-
ger•k (Jobb magyar szo hiján). Mindkettöre lát unk példát
ebben a fejezetben. Látszolagos egyszerusé~ük ellenére is
igen Jo sze l gálatot tesznek egy-egy uj program. keszitésene l.
Nagyobb lélegzet~ munkák esetén azonban igen lényegessé
válik az egyedi, fel ad atra szabot t teszt-ágy és a részletes
tesztelés1 terv elkészítése. Ez nem m1ndig fedhete le a
debuggerek szolgáltatasa1 val és bizonyos feladatok esetén
magan~k a problémának a megoldásával azonos mértéku progra-
mozási feladatot jel ent . El hagyásával viszont igen rossz
minoséqu, megb1zhatat lan programt erm éket nyerünk, amellyel
tobb utolagos hib~j~vi tási feladatunk l esz , mint amenny1
munkát a tesztelés következetes megoldására kellett voln~
szanní.
A HELP+ program elég ;ol ismert a hazai C64 felhasználők
kbrében. Bár valamennyi területen azolgáltatá5ai ink~bb
csak átlagosak, nagy elbnye, hogy a software-fe;lesztés
elég széles körét, eszköztárát átfogja. Itt csak az
assembly programozáshoz kifejezetten hozzátartozo szolgál-
tatásait tá~gyalJuk, hiszen ei kbnyvQnk témája.

A HELP+ betöltése és elindítása után a BASIC szerkesztöj ébe


lépunk be, amely lehetbvé teszi, hogy a HELP+ assembÍere
számára forrásprogramot irjunk. Ennek menete teljesen meg-
egyezik a BASIC programok rögzitésével, persze i t t szintak-
tikusan helyes assembly utasitásakat kell írnunk. Ha for-
rásprogramunk elkészúlt, azt mentsük ki a BASIC program-
nál megszekott módon egy lemezfile-ba.

Az a&&émbly utasítások irástnódjáról már szóltunk, most is-


merJük meg a HELP+ assemblerének diraktivéit is. A direkti-
vék az utasitásakkal ellentétben az assemblernek szólO pa-
rancsok és a fordítás folyamatát vezérlik. ~ltalában a mG-
veleti kod mezóben szerepelnek és pont karakter vezeti be
oket.

. BYTE egy byte tárolóterületet lefoglal és azon elhe-


helyezi a direktíva után álló kifejez és é rtékét .
Ha vesszövei elválasztva tóbb értéket adunk meg,
a megfelelo számu byte kerül lefoglalásra. A ki-
fejezés megengedett ér téke O és 255 között van,
a határokat is beleértve.

.WORD mint a .BYTE, de egy szót, két egymást követö


byte-ot foglal le a C64-nél megszakott alacsony
helyiértékű byte -magas helyiértékű byte sor-
rendben.
Igy pl.
CIM .WURD $B7F7
$F7, $B7 sorrendben lesz lerakva.

.TEXT a direk~ivát aposztrófok vagy idézöjelek kózött


követö string karakterei ne k ASCII kódjai lesz nek
lera kva az aktuális cimtöl kezdve.

.DISP mint . TEXT, de 6 bites ASCII kódok kerűlnek le-


rakásra (azaz C64 screen-kódok).

. END a forrásprogramot záró direktiva, ha n em tesz-


szük ki, az assembler a forráskód után generál-
ja 6~535-ös látszólagos sorszámmal.

.LOAD a direktiva után irt nevü programmal folytató-


dik a fordítás folyamata. Az assembler "kedves"
hibája folytán a név hosszának pontosan meg
kell egyeznie az éppen fordítás alatt álló prog-
raméval. ~
<egyenlőségJel> a szimbolum értékadás dlrektl-
váj.a . Az elötte C.a cimke mezoben> álló sz1mbo-
lum .az utána <az operandus mezoben) áll o klfe-
je:és értékét veszi fel . Mind elett e, mi nd
utána szerepelhet a "*" szlmbOlLtm , amely CA for-
ditás .aktuális eimét tart.alm.azza, azaz azt •
memóriacimet, ahova a soronkbvetkezo byte-ot
el foqja helyezni az assembler . Néhány példa :
*=$COOO

A kovetkezo utas1tás ~agy a da t a S COOO- ra kerQl.

ALFA az elhelyezés-mutato aktuális értek et veszi


fel .

TEXT . TXT ' ABCOE '


THOSSZ=*-TEXT

THOSSZ a szoveq hosszának erteket k apJ a .

E:: is szabályos . 20 byte lef oq l alását Jele11 ti.


Az ••sembler el i nd í tása a sot e leJ éte 1rt "( " l o:\t al· ter· re l
kezdod1k , ezután az assembler három kerdést tes: +el:
az elso kérdesre a l emezf 1 le nevevel kell válc:~s::o l n1.
amely a forrásprog ra mot tartalmaz:a.
a második kér· des (" He>ea korr . Pl?l<e : "> lehetoseget ad
arra, h ogy a leford1t ott gep1kcdu proqram ne a saJát
helyére, hanem az i t t megad1::>tt ó t"t ékkel losebb <! >
eimre ker~l jbn . Erre pl . akkor van sz~ kség, ha a prog-
ram tervezett h el ye a HEL P+ állal lefoqlalt $ 8000-tól
kezdödo 1 6 Kb-ba esik . Ha 1.tt "RETURN "-t ii1dLu1k , a
program a forrás ban eloi rt hel yt· e k er~ l,
a harmadik kérdesre egy három Jegy~ b1.náris sz ámm al
kell válaszolni , ame ly a l i s taz a ara utal. A: e l só jey y
helyén álló l - essel hibaJelzéseket, a másod ik p oz1cion
állóval fo rrás li stát , a harmadikkal a szimbolumtábla
kinyomtatásat válthatJuk ki . Utobbi a eimkék neve és a
hozzá j uk rendelt e rt ek hexadee1málisan . Bekc:~pcsolt
nyomtatc esetéD a forditásl l1sta ot t is meqJelenlk .
Az assembler felhas::nálJa a BASIC lerul etet C$ 801-lo l > cl
s zi mbólumtábla tárolásához, 1gy a memcr1ában lévo program
torlodik .
Sa]nos a leford1tott proyram lemezrementéséhez vaJm1 keve•
segitseget nyu j t a HELP+. A f ord itas eredménye • lár~a ke-
rul, a for rásprogramban meghatározott helyre . A forditásl
l i st ából <és csak abból > meghatározhato a pr· e gr am el sö é s
utolso utasit4sána k a cime. azaz a p roqra m kez d ete es veg e .
Ha a memór 1 a $ 2B-$2C eimere belr ]uk a program el~o by te-
Jának a e i mét, mig a S 20-S 2 E e imér e .a: ut o l so byt~-enal

41
eggyel nagyobb cimet <a . END direk t íva mellé irt eim a lis-
tában> a BASIC programterület kezdeté t és végét Jelzo poin-
tereket állitottuk át . Az ezt követö SAVE BASIC utasitás
éppen leforditott programunkat viszi lemezre. A pointerek
átállítását akár PDKE BASIC utasítással, akár a HELP+
manitor funkciójával végezhetjük. Utóbbival egyszerűbb, mi-
vel ebben az esetben a hexadecimális értéket nem kell deci-
málisra átszámolni. A program kimentése után ne feleJtsük
el a $2B-$2C és $2D-$2E mutatókat egyaránt $801-re, a BASIC
terulet elejére állitani, majd egy NEW-t végrehajtani, mert
egyébkén t n•m kivánt módon átirhatjuk a memori át. Ehely~tt
egy SYS 64738 utasitással szintén alaphelyzetbe hozhatjuk a
BASIC interpretert.

A kovetkezökben foglalkozzunk az á l talunk ismertetésre kerü-


lö programteszt e lési eszközök l e gegyszerübbikével, a HELP+
manitor funkcióival. Ezek sajnos igen szegényesek , ezért rá-
juk is igaz, ami a HELP+ assemblerére, csak igen kisméretu
prograrnek keszitésénél nyujtanak értékelhetö s e gitséget.

A moni t o rba a "] " kar-akter sor el e jén val ó ki adásával l ép-
hetünk be . Ekkor ~ögtön megjelenik a képernyön a legutolJá-
ra kezelt ~emor iab yte cime es értéke hexadecimális szám
form.ájában. Ezen akt1..1ális eim értékét a "+" kara~~ter 1..1tán
beirt <mindig hexadecimálisan ~rtendö> értékkel változtat-
hatjuk meq. A "RETURN" megnyomásával a követkazó byte-ra
ugrik a monitor. A memória tartalmát a "/" megnyomása után
irt ertékkel megváltoztathatjuk . A "RETURN"-nel a következo
byte-ra áttérve modositási modban maradunk egészen egy
ujabb <pl. "+") parancs kiadásáig. Legyünk nagyon avatosak
a memóriamodositás kipróbalása során! Az elsö két l ap bizo-
nyos eimeinek és persze a HELP+ által elfoglalt terület
($8000-$AOOO> megváltoztatása kellemetlen következményekkel
járhat . A manitoron belül a " C" kiadásával a nyomtator- a , a
" J '' meqnyomásával a képernyére i rányi that j 1..1k az outp1..1tot.
Hasonlóan kapcsaló szerepet játszanak a "<" és " >" jelek .
"<" kiadásával a géphez csatlakoztatott VC 1541-es lemez-
egységének memoriájára kapcsolunk át, ezután m1nden-müvelet
arra és nem a C64 központ i tárára vonatkoz ik egészen ~ " )·"
utasítás kiadásáig, ami helyreállitj~ az eredeti állapotot.
A "*" karakterrel az aktuális eimen kezdödö gépilcód1..1 prog-
ramra adódik a vezérlés. Megjegyzendö, hogy ez a parancs
lemezegyseg-módban <tehát "<" után) ilii müködik, de akkor a
lemezegység processzorara és tárolójára vonatkozik. Kladá-
sával természetesen óvatosan kell bánni.

A manitor maradék funkciói a disassemblerre vonatkoznak.


Ennek segitségével a memória tartalmát assembly formára
emlékeztetö listává lehet visszairni. A visazaírhatóság
természetesen korlátozott, nem vontkezhat a eimkére es
megjegyzésre, hiszen ezeknek semmi nyomuk a gépikódu prog-
t- amban. A "-" paranccsal az aktuális ci mtöl kezdödö egyet-
len. utasitást. di!Dasaemblálhatunk. A mzóköz billen tyt:.1 megnyo-
masával az aktuális cimtöl kezdödö folyamatos v isszafordí-
tást indithatunk meg, amely egészen a "RUN/STOP" magnyomá-
sáig tart. Hosszabb programrész visszaforditását természe-
42
tesen célszerG nyomtatóra végezni, i gy utolag kénye lme s eb -
ben elemezhetJ~k az eredményt . A C64 és a VC 1541 ROM - ján~k
tanulmányozásához azonban csak v éqsö eset b en a j án l juk e~t a
módszert . mivel ebben a vonatkozásban igen Jó k onyvek áll-
nak r e n delkz esre, ha nem is magyar nyelven ~ld . fögyelek> .

A HELP+ manitorából a BASIC - hez az " = " pari:>.nccsal tér h e t ünk


vissza.

43
A Commodore Bus1ness Mach1nes által forgalmazott fejleszt6
rendszer leirását inkább szemléltetónek , el1qaz1tásna~ szán-
juk , semmi nt ke~ikonyvnek es külbnösen nem tankonyvnek, mi -
vel a teljes le1rás által megkivánt terJedelem messze meg-
haladJa azt, am1t e konyv kereteben rás:::ánhat unk . Iga~ ez a
4 . fejezet soronkovetke~o alpontJa l ra is .

A makroassembler fejlesztb r·ends.:er m.:!.r- sokkal 1--omolyabb


proqramfejleszto eszköz a~ clozóekben megismert HELP+-nál .
A: assembler forditaprogram makrok has:;:nálatát is megengedi,
gazdagabb hibaJelzessel rendelkezik, használata kényelme-
sebb . A DOS-szal, a forrásnyelvi szer~esztovel, a keresztre-
ferenela kesz1tovel, a ket lóltöproqrammal es a manitorokkal
egyt:1t t kerek r· enrJszert képe<:, JOl h.:.-..sz nál hato nagyobb l él eg-
zetü á\ssembl er· pr" t::>qre=~mol' l~ ész .l. tese során is .
Bár - mint a késobb i ekben látn1 fogju~ létezne~ jobb, az
assembly progr~mozást jobban Lámogato esz kezek 1s,1qen elter~
Je~l d C64 proqramozok koreben .

A pr e grami r~ s és fo rd i tás esz köz e i t a "8001 (~LL" p t egram-


mal lel thetjLih bo . Ez u tár, ·~= ''EDI fOR64" program ve~ cr l ése?
ala lerulunk . A látsz.t •z, m1ntha s:okványos BASIC r end -
sz€~r·bt:n J ennén~:, de ez nem igaz , me~r ·L az EDI1"0R64 alatt
a ~Ji oqt .. c<msoro~· i n Lerpr· eter -kodba val tás c:.\ r"lem Lor Len ik meq,
e:::erl a: ekkor be1rt BASI L proqramok h1básak lesznek . Az
EDI TOR64 tehát CSdk assembly nyel vLI pr oqramoh bev i tel er· e
és J.:\Vltasar~ alkalmas . A proqram s~erles=tésében hasz-
n~llla L J Lik a BASI C-keper- nyos.z ct kes:: to nu n den l ehetoseqet es
m~q neh-iny l Qt?ll prc:~kt.1kus ~aeqesz1teset . Ezek d10h~jban a
kovctl•czok :

AU10 automatikus sors:amprompt .


Az AUTO n mindaddlQ sor~zampromptot ad az uJ
sot eleJére n nove~mennyel , m1q az AUlO <ope-
randus nélkul> parancsot kl nem adJu~ .

1-1Ut1BER - serek Ldras:amo .:asa .


A NUMBER nl, n ~ , n3 paranLs ujraszámazza ni-tól
n2 kazdöértékkel nZ rtovekmennyel a pruqram so-
r c.u t .

GET toltes lemezrol .


A GET "nev" . nl, n2 , n3 parancs a "nev" 1"1evLI
lemezes f1le tartalmaval a~ nl sor-számu, már a
memoriaban leve sortol ~ezdve felullrJa a proq-
rarnek tárolásara szolgálO teruletet . n2 és n3
•~ eqyseq- ~s csatornaszam , alapertelmezes
mzer1nt 8 Cha nem adJuk meq) . Az nl 1s elhagy-
hato , de ha meqc:\d l Lik , a 1-1arancs fel has~ nál ható
forrás f1 le-o~ eqymas után fu~ésére 1s.

44
PUT mentés lemezre .
A PUT "név", nl-n 4, n2 , n 3 parancsban n2 és n3
jelentése , mint GET-nél . Ha nl - et és esetleg
n2-t is megadjuk , a parancs csak a két sorszám
közé esc programrészt ment1 a "név" nevü file-
ba .

CPUT tömoritett mentés.


parameterei és hasz~álata magyegyezik a PUT-
éval , de a file-t tömöritve , az összes feles -
leges space elhagyásával menti .

FINO karaktersorozat keresése.


A FINO /str/ , nl - n2 utasitás az str karakter-
lánc valamennyi -elöfordulását kilistázza a
teljes programban , vagy nl es és/vagy megadá-
sa esetén a Jelzett sortartományban. A "/"
kat-akter helyett tetszöleges , . a stringben nem
szereplö delimiter használhato .

CHANGE - szövegcsere .
A CHANGE /strl/str21 , n1 - n2 ugy müködik , mint
a FINO , de a megad o t t sorsz ámtar t o mányb an
<vagy a teljes p rogramb an> az strl valamennyi
elofor d u l ását str2- re cseré l i.

DELETE - sorok törlése.


A DELETE n1-n 2 parancs <szintaxisa mint a LIST-
é) a megadott sorszámtartomány sorait törli a
memot· i ábel .

FORMAT - formázott l1sta .


A FORMAT n1-n2 parancs a listázást f or mázva
végz 1, azaz külon oszlopban kezdi a cimeket,
utasitas-mnemonikokat , operandusokat és meg-
Jegyzéseket az assembler l istához hason l oan .
Ki cs i t buta , igy ei mkének tekint minden, az
elsö p ozicion kezdodö s z ót és mnemoniknak min -
den sor elsö szavá t , ha nem az elsö oszlopban
kezdődik .

KILL kikapcsolja az ED I TOR64-et , visszatér a BASIC-


editorba . Az editor egyébként a SYS 49152
BASIC paranccsal indithato ujra .

Az assemb l y program meg ir ása során lényegében ugyanazt a


formátumot kell alkalmazni, mint a HELP+ esetén az alábbi
el térésekkel . A ki fejezésekben a ·• és - j el ek me ll ett a *
és a 1, azaz szorzás és osztás is használható. Az operandus-
mezöt követö megjegyzések elött nem kötelező kitenni a pon -
tosvesszöt, de ajánlatos az egységesség kedvéért, hiszen
nem minden utasitásnak van operandusa . A eim alsó ill. felsö
byte-jára a szimbólum elé irt < vagy > jellel utalhatunk . Az
operandus nemcsak szám, ill. számtan1 ~ifejezés lehet , hanem

45
egy "'" (G.\posztróf> Jellel megelözött karakter is, ekkor az
operandus értéke a kar akter ASCI I kódja. A. d irektivák köre
szélesebb, mint a HELP+-nál . Az ugyanolyan jelentésü .BYTE,
.WORD, .END és az "=" jel mellett a következök használhatók:

. DBYTE ugyanugy 2 byte elhelyezésére szolgál , mint a


.WORD, de a byte-okat magas helyiértékü byte -
alacsony helyiértékü byte sorrendben rakJa le,
eltéröen a 6510-es konvenciótól .

.PAGE lapdobast okoz az assembler-listában. A direk-


tíva után aposztrófok közé irt szöveg a direk-
tivat követö minden lap tetejére kiiródik,amig
egy ujabb szöveggel ellátott .PAGE nem jön •

• SKIP az utána álló kifeJezés értékének megfelelö


-ha hiányzik , egyetlen- sort emel az assembler
listában. Sem a .SKIP, sem a . PAGE nem jelenik
meg a listán.

.OPT a forditasi opciók beállítására s z olgál a for -


dítá~ közben. A lehetséges opciók:
ERRORS NOERRORS hibafile keletkezése
LIST NOLIST listázás
GENERATE- NOGENERATE a stringek kinyomtatása

Elegendö az opciók elsö 3 karaktarét megadni.

.FIL hatásában magegyezik a HELP+ .LOAD direktivá-


jával, azaz a fordítás a direktíva után álló
nevü lemezes file tartalmával folytatódik.

. L:IB ugy müködik, mint a .F I L, de a könyvtári file


végigolvasása után az assembler folytatja a
fé l behagyott fi l e fordítását. A .LIS-bel ak -
tivizá l t fi l e nem tartalmazhat . LIB-et , de
. FIL-t igen . Nagyon hatékony eszköz szubrutln-
könyvtárak létrehozására!

A maradék direktivák a makródefinicióval kapcsolatosak . Eze-


ket egy kicsit részletesebben tárgyaljuk és eközben megpró-
bálunk bepillantani a makrOprogramozás rejtelmeibe, ami ;ol
alkalmazva igencsak megnöveli programozói hatékonyságunkat.

A ma.k róprogramozás tl.tl aj donképpen méilkródef i ni ál ásokból és


makróhivásokból áll. Ezek az elemek szabadon keverhetök az
assembly sorokkal . A ma kró-definició a k ö vetkezö szerkezetü:

<cimke > .MAC <makrónév >


<utasítások>
<ci mke> . MND
A eimkék elhagyhatók, egyébként a makró által generált elsd
és utolsó utasitáshoz tar toznak. Az <utasitasok> t etszőleges
szöveget tartalmazhatnak,kivéve a .MAC és .MND direktivákat .
A makrOhoz legfel jebb 9 db paraméter tartozhat. A formális
paramétereket a makrO-definicióban ? 1,72 •. . ?9-cel jel öljük.
Ezek ugynevezett pozicianális parameterek, azaz az ? 1 utal a
makrOhivásban szereplö elsö, a 72 a második stb. aktuális
paraméterre. A paraméterek szövegtipusuak, azaz a formális
paraméterek a makródefinicióban a makrOhívásban szereplö
aktuális paraméterek szövegév~l helyettesitödnek, minden
formai ellenőrzés nélkül. Ha az assembler egy

< makrónév > < paraméterek >

alaku makrOhivást tal ál a ~rogramban , ahol a < paraméterek >


szövegek vesszevel elválasztott sorozata,a következőt teszi:

sorra veszi a makródefinició sorait,


egy adott sorban minden formális " paramétert szöveg-
szerüen helyettesit a hívásban sorszámának megfelelő
aktuális paraméter-stringgel. Ha nem adtunk meg egy,
a makródefiniclóban hivatkozott paramétert,az assem-
ler egyLxxxalaku parameter-stringat generál, ahol
xxx 00 1 -töl folyamatosan ndvekvci szám.Ez biztositJa,
hogy a generált paraméterek minden hiváskor különböz-
nek egymástól.
ha minden behelyettesitést elvégzett , az assemb ler
ugy tekinti a sort , mintha az a forrásf lle-bó l jott
volna , azaz leforditja.
a makródef inic1ó utasitásat kozótt tern1ész etesen a
behelyettes i t ések után elbállhat makróhivás is, az
ilyen hivások azonban legfeljebb 8-as mélységig
ágyazhatók egymásba . A makro hivhatja ön magát i s.

Ez persze igy egy kicsit tul tömény, lássunk néhány példát.


Ezek a példák tulajdonképpen az 5. fejezetbe illenének~
amely a programozás technológiájával ~oglal koz ik, tekintsük
öket egy kis elörelapozásnak. Az assembl y nyelvü programo-
zás során kOlönösen gyakran fordul elö, hogy ugyanazokat
az utasitásakat ir j uk l e, egymástól alig -a lig kOlönbözö
elemekkel. Az ilyen . utasitás-sorozatok az assembl y progra-
mozás elemi épitökövei , amelyek szinte ma kr óba kivánkoznak.
Pl . két egybyte-os szám összeadása elott törölnünk kell az
átvitel-Jelzöt <c arry>, ha helyes eredményt akarunk kapni.
E»zerint a C=A+B összeadást

LDA A
CLC
ADC B
STA C

módon irhatjuk le .

47
Ha a feladat történetesen X•Z+22, az utasitáasorozat:

LDA Z
CLC
ADC 4t22
STA X

A haeonlós4g szembeszőkö. Sokkal egyszerübb, ha írunk egy


makrótt

. MAC OSSZlEt
LDA 7 1
CLC
ADC 72
STA ?3
.MND

alakban, amelyet ha a következöképpen hivunka

OSSZ1B A,B , C

éppen az els~, ha !gy :

OSSZ1B Z , 4t22 ,X

a második példát kapjuk a makró kifejtésekor .

Egy mási k , kicsit összetettebb illusztráció az igen gyakran


szükséges ciklusszervezést kbnnyití megr

. MAC CFEJ
LDX 72
?lK CPX ?3
BEQ 74
BPL 7 1V
74 . MND

.MAC CVEG
INX
JMP ? l K
71 V . MND

A két makróból álló együttes egy alkalmazása2

LDA 4t0
CFEJ C1,4t1, 4t 10
STA ALFA, X
CVEG Cl

48
A makrOprogram kifejtésez

LDA ~o
LDX *1
C lK CPX *1 0
BEQ LOOl
BPL Cl V
L001 STA ALFA,X
INX
JMP C lK
Cl V

A CFEJ makronak három paramétere van , a c iklu s neve - ebböl


képezzuk a ciklusfej és a c iklusvég c im kéit - , a ciklusvál-
tozo kezdeértéke es a ma x imális Clklusváltozó erték , amelyre
meg le kell futtatni a c1klust. A makrok termeszetesen fel -
tételezik, hogy az X regisztert, am1t c il lusváltozoként al-
kalmazunk, a ciklustorzs utas1tása 1 nem modos1tják . Az al-
ka l ma:asl példa egy memor1atömb nul~ázása <ALFA+l-töl
ALFA+lO- lQ) . A CFEJ makro h1vásakor hiányzonegyed ik para-
meter <? 4) he l yere az assembler egy c1mket generált, meg-
pedig olyat , ame ly a CFEJ eqy másik h1vásában generálttól
feltetlenGI kúlbnbbz1k , ~vvel biztositja a eimkék egyedi
voltát . A c iklus vég termeszetesen ugyanazt az e l so par amé-
ter kapJa, igy válik lehetövé a visszaugrás a c iklus ele-
jere, a generált C1K cimkere. MegJegyzendo meg , hogy a cik-
lus felsö cik lusvég-vizsgálatot alkalmaz, l1a tehá t belépés-
kor a Clklusv ég-feltetel nem elégul kl Ca c iklusváltozo
kezdoertéke nagyobb mint a vegétték) a ~ iklus eqyszer sem
fut le .

Reméljuk a fenti példák felkeltettek az olvaso érdeklbdéset


a makrop r ogramozás iránt . M1elott azonban továbbhaladnánk a
makroassembler fejlesztol rendszer meg1 s mer eseben , nem sza-
bad e lh a llgatnunk azt, hogy az ismertetet~ makroassembler
ta lán m1nden makroassemblerek legszegényesebb példá~a . A
kicsit bonyolultabb fe lad a tok megoldásához rettenetesen
hiányoznak a makrováltozek <lokális és globális egyaránt) .
Ugyanugy szegényes a makro konyvt ár kialakitá si lehetőség is
<egyedu l a . LIB direkliva áll re ndelkezesünkreJ , bár sok
nagygépes makrOassembler sem nyujt tobbet ! Vegyuk viszont
fiqyelembe a proqram~ermek megitelesénel , l1ogy mas assembler
kesz 1 tok a makrólehetoseggel még csa k nem 1s foglalkoznak .

Az ed1tor seg1tsegevel meqirt és lemezre mentett assembly


proqramot • következokben le1rt mód on fordithatjuk le .
E loszdr toltsuk be az ASSEMBLER64 programot és RUN-nal in -
ditsuk el . A forditas sorari az assembler ket file-t hoz
letre, a b~tdltö prograrnek számára készite~t tárgyprogram-
flle - t és a c im keh1vatkozasokat tartalmazo file - t, amely -
böl a CROSSREF64 programmal kész1thet~nk keresztrefererlC la -
llstát. Az assembler néhány kérdéssel 1ndul, amelyek <es az

49
elvárt 1nformacic>:

OBJECT FILE l efordított program file neve


Ha a név úres , nem kés::ül OBJEC.T
file, csak ellenőrzes és/vaqy
keresztrgfer encia
HARD COPY sornyomtatc lista kell vagy nem
kell
CROSS REFERENCE keresztreferencla-file kes:::ül-
.i bn-e.
l"leg.)egyzés : Ha a pr· aqram tar··-
talmaz . LIB dlref~tivá'l, az
OBJECT file es a keresztrefe-
reneia egyszerre nem készithete
el !
SOURCE FILE NAME forrás f1le neve
Ha az assembler futását meg akarjuk szakitani, hogy a kep-
ernybn megjelenb lis~át megvizsgáliuk, ezt a RUN/STOP bil -
1 enty1..1 meqny<::>másával érhet h.1k el. A Lc)vábbi ndi tá<.:. bát"mi-
lyen billentyúvel lehetséges. kivéve a B-L, amely befe .lezl
az assembler f1..1'tását és viss.:.;;1 ·t er· a BASIC operációs rend -
szer·hez.
Az assemble~ által elbáll1tott lárqyprogtamol a k ét töl tö-
p rogram va1amely1kevel tollheLJuk a mamoriába (Vlayá.:at,
a tárgyprogram még nem vegr·ehaj ·th ató pr ·oqr.,m 1 >.
,:.:, hét pr· ogrc:\m muköc:leséber1 a:::or1as, dt"' m.ás le e 1yr- e.• tölt.ödi k a
memor· iába < .l>800-ra i l l . :fi:C800-r·c.-..> , 1gy megkonnyitl a fel-
használói program tetszóleges helyre tbltését .
Betöltés <LOAD "toltonév",8,1> Lltán a LOLOAD64 RUN, a
HIL OAD64 SYS 51200 1.1tasitáss.al indithe~tó. A töltöprogramok
e l fogadnCik egy eltolási eim (offset> ertéket 1s, igy lehe-
tevé válik, hogy Cl programokat az eredeti c1m + eltolá~l
eim helyre töltsük be. A tciltöprogramok lefut~sa után a
felhe~sználói program futásrel kész.
A töltöprogramokhoz hasonlcan a fejlesztöi rendszerneh k ét
moni torpr o9ram j a is van, e~mel yek sz i nt én cseH~ a bel öl tes .i
eimeikben kúlőnboznek egymástól, 1gy lehetövé téve a memó-
ria tetszaleges helyén lévo <nem tul hoss2u> progre~m vlzs-
gá l e~tát . Az XVM4 . 8 a hexadecimális $8000, az XVM4 . C a
$COOO eimre töltődik be és SYS 8*4096 i l l . SYS 12*4096
u tas i tassa l indithe~tó . A pare~ncsok e~ gépikódu manitornál
szokásosak, de Cl szinte~ xis megismerése végett röviden
ö s szefogla l juk azokat . A cimek mindenQtt négy j egyG hexade-
cimális számoke~t jelölnek a bevezető $-jel elhagyásával .
Az egyetlen kivétel az azon nali assembler nullás lapu cim-
zése , dmit kétJegyO h e xadecimál1s eim Jelez .
A par a ncsok c
R A regiszterek te~rtal m ának kiiratása . A kép e r n ybre
kiirje~ PC , P, A, X , Y regisztereket és a verem-
mut.;~tót . A kiirt sor ele j én lévo";" tulajdonképpen
mód o sitó pare~ncs, ezért ha a sort megváltoztatJuk
és RETURN-t nyomunk meg, a reglszterek erteke módo-
sul.

50
M Memóriatartalom kiiratása. A paran cs utáni el•ö a
kezdöcim, az elhagyható második a végcim. A kiirás
hexadecimális ~ormáju, soronként 8 byte kerül l i s -
tázá!iira. A kiirt sorok elején lévo ">" i t t is módo-
sitó parancsként müködik, mint R-nél.

I Memória kiiratás karakteresen is .Mint az M par ancs,


de a byte-ok karakter-Megfelelöjét is ki irja soron-
ként .

D Visszafor dítás <disassemblálás> a megadott tarto-


mányban. A disassembler által kilistázott utasitá-
sok megfelelnek az azonnali assembler szintaxi-
sának, ennek megfel~lben megvan a lehetöség a kép-
ernyöszerkesztö segitségével az utasitAsok helyben
történö módositására. Vigyázat : Az utasitAsok hosz-
szabbra cseréjével a mögötte álló utasitAsok át-
iródnak, jelentésük megváltozik! Rövidebb utasitás-
ra való csere esetén a felszabadult byte-okat tölt-
sük ~el gondosan NOP utasitásokkal, hasonló meggon-
dolás;ból!
A listázó CM, I, D> parancsok álta l teleirt képe r-
nyö a cursor-mozgató billentyü használatával fel -
le görd ithetö a parancsban megadott határokon tul
is Ckár részletesebben elmagyarázni, t essék kipró-
bá ln i, nagyon hasznos lehetöség>.

A Azonnali assembler. Utasitás-szintaxi sa megegye-


zik az assemblerével, de termeszetesen cimkék, di-
rektivák, makrók nem használhatOk . Igen rövid, né-
hány utasitAsos prograrnek kipróbálására, illetve
programjavitásra tanácsos csak használni.

G Program inditás. A mögötte álló eimre adja a vezér-


lést . Ha a eim elmarad, a programszámléle akruális
értékétól indul tovább CR parancs!).

F Memória ~eltöltés. Az elsö eimtól a másodikig a


harmadik paraméterként megadott értékkel tölt ~el
minden byte-ot. Pl. az

F co oo C1 00 00

parancs $COOO-tól $ C100- ig nullázza a memóriát.

T Memóriaterület áthelye~ése.A paraméterek jelentése:


elsö az átmásolandó terület kezdöcime
második az átmásolandó terület végeime
harmadik a ~ogadó terület kezdöcime

N Program áthelyezése . Az elsö két paraméter egy


memóriaterületet jelöl ki, amelyen a parancs ha-
tásos lesz. A harmadik paraméter értéke (offset>
hozzáadódik minden hárombyte-os <abszolut és in-

51
direkt cimzésmódu) utasit~s operandu&~hoz ugy , hogy
a 16 bitről esetleg tulcsorduló eredmény utolsó 16
bitje iródik csak be természetesen a memóriába. Az
utasítás hatása korlátozható a negyedik és ötödik
paraméterrel , ame lye k azt az átkéd elas elötti e im-
tartományt jel ölik ki, ahova az átkódolandó operan-
dusok mutattak . A parancs Jól kiegészíti a T
parancs hatását, ha programról van szó . Mindazon-
által igen könnyQ vele programot tönkretenni, kQ-
lönösen , ha a programutasítások között adatok is
vannak; mint általában. Ilyenkor néha egész meg-
lepö módon átalakulhat a program. Ha az assembly
forráskód is rendelkezésQnkre áll, kül önösen hosz -
&zabb program esetén , tanácsosabb a programot uj-
raforditani a megfelelő helyre.

H Byte-sorozat keresése . Az elsö és a második para-


méterek által meghatározott cimek tartományában
megkeresi a harmadik, negyedik, stb. byte-ok egy-
mást követö alófordulásait és ezek k ezdőeimeit ki-
írJa. A byte-f üz ér aposztróffal bevezetett ASC II
karakterláncként is megadható. Pl. a

H 0801 0 9 00 ' ALFA

parancs «Z "ALFA" kar«kter'aoroz«t el öfordul ~sai nak


kezdőeimét adJa meg $801 és $900 között .

A fennmaradó k ét parancs « programok töltéset és mentését


végzi o

L Az elsö p«raméter (idézöjelek közötti string> á l -


~al megjelölt programfile-t a második paraméter
által meghatározott perifériaról < 01 - kazetta;
OB, 09- lemez ) az eredeti helyére töl ti . ·

8 Az elsökét paraméter j elentése megegyezik L-ével .


A mentés a harmadik és a negyedik paraméter által
megadott eimtartományra vonatkozik . A negyedik
paraméter az első olyan byte cime, ami mar nem
lesz kimentve (végcim+1> .

Az elözöekben megismert fejlesztői rendszer mikrogépes rend-


szerek átlagos, ugyszélván klasszikus eszközének tekinthetö,
amel y alkalmas a komoly fejlesztö tevékenység támogatására,
de a makrólehetöségen kivü l egyéb csemegével nemigen büsz-
kélkedhet .

62
1·3 _f'ROFIMAI

A PROFIMAT, amelyet az NSZK- beli DATA BECKER cég +orgalmaz,


szintén rendszernek mondható, bár mindossze két, lazán kap-
csolódó programterméket tartalmaz, a PROFI-MON monitorprog-
ramot és a PROFI-ASS assemblert. A mon~tor kisértetiesen
hasonl1t a 4.2 fejezetben ismertetett fejlesztöi rendszer
monitorjára, ugyhogy csak a kulónbségeket irjuk le pár szo-
ban.

A man itort a LOAD "PROFI-MON 64",8, 1 parC\nccsal tölthetjűl(


be és SYS 12*4096-tal aktivizálhatjuk. Hiányzik az A és az
I parancs, utóbbi funkcióját a~ M teljesíti. Az A, vagyis az
azonnali assembler hiánya bántó hiba. Egyebekben minden pa-
rancs és azok szinta~isa megegyez1k az elözö fejezetben meg-
ismert monitoréval .

Egy k1csivel több figyelmet érdemel az assembler, ha nem 1s


kűlonös erénye1, de elterJedtsége miatt. Szabályos szlmbOll-
kus assemblerröl van szo, nehány eredet1, bár nem tul hasz-
nos böv1téssel.

Az utaaitások szinta xisa szinte megegyezik az eddig ismer-


tetett assemlerekével . A kifejezések lehetoségei igen ki-
bövultek, a következö muve1eti jelek alkalmazhatók c

+ összeadás ,
kivonas,
* szorzás ,
logikai vagy müvelet,
~ logikai és muvelet,
logikai kizáro vagy művelet,
> nagyobb helyiértéku byte <egyoperandusos muvelet>
< kisebb helyiértékű byte Cegyoperandusos mű ve let>.

Az egybyte-os értékek negativ számként i s irhatók <-1-töl


- 128- ig) , ezek kettes komplemens kódu alakjukkal helyette-
sitödnek .

A direk tiv~k köre is kibövult a már más assemblereknél meg-


ismerte khez képest . Változatlan jelentéssel használható a

. BYTE
. WORD
.FI LE
.END

direktíva • Erdekes programozási lehetoségeket biztosít az

• IF
. GOTO

53
direktivák alkalmazása. Segitségukkal f eltételes fordi tást
vég e zhetunk , pl. elóre megtervezhetjuk a tesztelest szelgá-
ló r észek késbbb1 ki hagy4s4t a programból. Az .I F direktiva
utá n logikai kifeJezés, maJd az egyébkent .IF né l kul 1s
használható . GOTO kovetkezik. A .GOTO után tetazoleges prog-
rambeli sorszám állhat.

M1elott tovább folytatn4n~ a d1rekt1vák ismertetését, fog-


lal koznunk kell a PROFI-ASS egy érdeke• saJátoss4g4val, ami-
hez tovább1 direktivák kapcsol ódnak . A PROFI-ABB tervezei
igen élénl< forditásideji tevékenységet képzeltek el es igye-
keznek támogatn1. Bár i t t n1ncsenek makró-lehetoségek,
mégis nagyon fontos, hogy élesen megkuldnboztessu k a fordi-
t4sldejl tevekenyaegeket a leforditott program futása kez-
ben leJ4tszódóktOl , még akkor 1s, ha ez - mint Jelen esetben
erosen oss:efonod1k. A PROFI MAT assemblere fel~é s:u lt
arra, hogy h 1vását <ami egy BASIC SVS utasitásl programból
adJuk kl és forrásszoveqét lB ugyanott a ''BASIC' programban
találJa. Ezáltal a BASIC nyelvet, m1nt egy nagygépes ope-
ráclOSrendszer munkavezerlo <Job-control> nyelvét használ-
va elore megtervezhetJul a forditáa, tesztel4& munk4Ját.
A programban talált assembly utas1tásokat leforditja az
assmbler és a neki~ megfe l elo gépikódot kozve tlenul a me·
mariába tblti a HELP+-hoz hasonlóan, a direktivá k at azon
nal végrehaJtJa , BASIC utas1tásra talalva ped1g vla~zaadj­
a vezerlést a BASIC interpreternek . Nézzuk, milyen dl reht1-
v4k segitik elo ezt a mukodésmOdot •
<- Az assembly programban egy sz1mbólum csal egyszer
szerepe lhet a c1mke mezoben, ezzel érté ket kap és
a kovetkezokben ezzel az ertékkel helyettesitodlk
m1nden elofordulása . A < - sztmbólum <értekadásl
lehetoséget ad arra, hogy a szimbolumnak nem 1lyen
egyszeri, hanem szabadon változtathatO érteket ad-
Junl • ezáltal a forditás vezérlésére használhas-
suk fel . A hatás nagyon hasonlO a makroassemb l er-
nel h1ányolt makrOvá l toz ók használatához.
Egy példa:

BO CIM1•S 33C
90 CIM2•$COOO
100 MUTAT0<-0
110 LDA CIM 1+MUTATO
120 STA CI M2+MUTATO
130 MUTATO < -MUTATO+~
140 .IF MUTAT0< 1ó r.GOTO 11 0

A fenti programrészlet fordit4sldejl ciklust


szervez. A futó programban hatása lehet, hogy
hasonló egy fut4sldejl cikluséhoz, de gyekeresen
m4skepp v alós1tJa azt meg. Megfelel a hagyom4-
nyosan <.IF nelkul es v4ltoz0 n~lku l l 1rt kovet-
keze programnak, vagyis ~g~anazt a_tárqykodot
eredményez1•

80 CIM1•$33C
90 CIM2•$COOO
100 LDA CIMl
110 STA CIM2
120 LOA CIM1+:5
130 STA CIM2+:5
140 LDA CIM1+10
1:50 STA CIM2+10
1ó0 LDA CIM1+15
170 STA CIM2+1:5

Ugyanezt a feladatot futésldeJ1 c1klussal hd~on­


lokeppen <de nem pontosan ugyanugy és más t~rgy­
koddal> a kóve~kezo programreszlettel oldhatJul
meg:

80 CIM1•$33C
90 CIM2-$COOO
100 LDX #O
11 (l CIKLUS LDA CIMl,X
120 STA CIM2,X
130 TXA
140 CLC
1:50 ADC #:5
lóO CMP #16
170 8Ml VEGE
1 80 TAX
190 JMP CIKLUS
200 VEGE
A peld4k ertelmezését és osszehasonlitás~t az ol-
vasora bizzuk.

A kovetkezd direktiv~k a szimb6lumt~bla kezeléset veqz1k.


A sz1mbolumtáb1a az assembler által felép1tett t~blázat,
amely a sz1mbolumokat es a hozzárendelt ertekeket tarlal-
maz4.a.

.SST -.. eqységs::am > , < m~sodlagos C1m > ," < f1lenév ;> "
A tel1es sz1mbolumtáblát a megadott eqysegre , ai-
talában egy s::ekvenc1ál1s lemezflle-ba menti, ké-
sobb1 felhasználás céljából.

LST < egysegc!m > , < m~sodlago~ C1m ;> , " ( fllenév ' "
Az elozo direkt1va ellentéte , a korábban .SST-vel
kimenlett szimbolumtáblát a memor1ába tolti.

65
A k•t diraktiva alkalmaz~s~val lehetőség nyilik nagy prog-
rarnek részlateinak külön forditás4ra, da az egyes részak
kezott a kapcsol at megteremtésére (hasonlóan a &zerkeszto-
programok - linkage editorok- mukódéséhez ) . A korábban
ford1tott programban szereplo sz1mbólumokra hivatkozhatunk
a késobb ford1tott programban, ha az elso forditás során
a sz1mbólumt~bl~t kimentj\.lk, a m~sodik ford1taw elsö lepé-
s~ként pedig VlS&zatoltJuk.

Végul ismerkadJunk meg az .OPT <opclOk) dirakt1va lehetsé-


ges paramétere1vel . A diraktiva után vesszevel elválasztva
akárhány paraméter 4llhat.

P Hatására az assembler formázott forráslistát ké-


szlt a képernyon . Ha nincs érvényben, akkor is
listá:ásra keruinek a hibás sarok es a .FILE
direktivát tartalmazó sarok .

P <filasorsz<6m >
Hatás~ra a l1sta az assembler el1nd1tásd elott OPEN
utasttással megny1tott flle-ra - leggyakrabban
pr1nterra- karul .

O A tárgyked egy spec1ális memóriaterületre - a BASIC


tombek helyere- kerul, s onnan tetszés szer1nt k i -
mentheto

OD A tárgyked az eredeti helyere kerul, a programban


magában megadott tárolóteruletre. Ha ez a terulet
va lamilyen okból foglalt, az elozo mods:er~ <D>
ke ll használni.

O< filesorszám >


A tárgykód az assembler ellnditása elott OPEN uta-
sitással megnyitott file-ra kerul. A kazettás egy-
ség i t t nem alkalmazható.
N Az utána falsorolt paraméterek hatását torl1. Ha
egymagában ~11, valamennyi opetot hatástalanitja .

Az aasambler használatáról is szólunk néhány szot•


Az assamblert a LOAD "PROFI-ASS 64",8,1 utasttással tolthet-
Juk ba lemezrol, maJd az akár programbol, akár kezvetlen
utasttásként ktadott SYS 9•4096-tal indithatJuk el.
Az ~saembl&r a BASIC terulet v~gén helyezkedik el, mintegy
34 Kbyte szab~d teruletet h•gyva ~ program és a szimbólum-
táb l • sz á már a.
Egy tipikus PROFIMAT program•

10 OPEN :5,8,:5,"TARBYKOD"IREM EBBE A FILEBA FOG FORDITANI


20 OPEN 3,41REM NYOMTATC MEGNYITASA
30 SYS 9*4096 1REM ASS HIVASA
40 .OPT 0:5,P3J TARGYKOD :5-0S, LISTA l-ES FILERA
:50 .LST B,S,"KONYVTAR"J SZIMBOLUMTABLA TOLTESE

66
óO • •FOPRV ; FORD I TAS A FORPROGRAM UTANRA
70 KODJ•S Cl t KODTABLA
80 Koo.::- • c9
90 ELLEN LOA PARAt1
1 00 CMP tt l OD l
J JV BEO l 1
1 2(1 MP tttOD:!
t-o EtE O l-;:
1 40 l-il BAS LDA tt.$FF
1~0 F.TS
l bO ~ 1 LDA tt l
170 l'\ TS
1 80 K2 LDA tt2
190 RTS
200 ELLENV "'*
210 . SST a.a . .. : ~ ONYVTAR"
220 . END
230 CL OSE 3 : LLOSE ~: FR INT "VEGE A FORO I TASNAt "

Neh.tny dolqot. erdemes n·eoflqyel 11 oa l 1t1 pre"urambar,. A::


50-e~ •atbdn leve d1r ~~ t1v•v~l betoltJul a l orabban ~lmen­
t tl s::-1mbolumtabl&t a memorHiba . E.:altal lahetoseq~nl
ll\>'1111. .. jelen progran•baro nem - d e felletEC>Iezheloen a lo-
rábban l1mentett sz1mbolumt ~ b l aban •zereplo PARAM es
FOF'RV S.lntbr:>lumolro~ lll vat l,ozru. A 2 1 0-as aorboiln"" fent1
~ONYVlAR nevu f1le- felu l lrJul a Jelen program fordllasa
soran lleqea::ttet.t s::lmbolumt6blaval , e~altal eqy kovell &zu
ford1tas m3r az 1tt. meqadot.t sz 1mbolumolat <pl . a szubrut.1n
~e::doc1met1 has::nalhalJa.

Ossze4oQlalva • PROFIMAT alt•l nyuJtott s::olqaltalásol at


(amelye t lo•ul a leqbonyolultabbalat es leqnehezebben tel-
hoi'&:: r ~<Hhatolat nem 1s tar·qyaltull meqall<~oplthatJul, hoqy
~rdeles lehetaseoelet. felvonultata tDJlesztal rends::crrol
v"'n szo, ..•mely ... zanban nem eppe11 a strul,tur.ált prograrno::-.llli
ea m•rnol 1 teve~eny&eq t\pusu •=ervezatt progr•rn+eJiaa~L•~
támoq .. L.ás..1r .. a::olq<'ll, 1t1lllbb &\~ erdellodo .. m.. tur a l 'io:>.am.ér ..
l ~a~ult.

57
4. 4 SM-IOT 64

Az SM-~' IT 64 lányeg~bell • HELF+-hoz h.asonlo, de .annál val.a-


mlvel szélesebb lehetos•qeket b1zto~1t0 alapaoftw.are. Haram
ré&zbol áll: a BASI C programozast e~ programteazteléat, .a
g•pl~Odu progr.amozást és v ~gul a VC 1541-es lemezegyseg pro-
cesszorán.ak progr.amozását tamagata része~bol. A lovet cezol-
ben termeszete~en cs.al a téman~at, a: asa embly p - Qrdmoz&st
ér 1 nt o res z l elei ro l !lóZOl1.•nl . Erdei e~ nocdon, n11 q .a rend\>:: er·
az edd1g 1smertatett esz~ozo~nél val.am1vel hatékonyabban
lámogal).a a programal tetr.zlelC!set, l 1próbál.as4lt, a;: a&EOembly
programal f orditásat s:inle egyáltalán nem, m1vel m1ndo~s~e
eqy dubuqgerhez 1llo a.:onnal1 .a5sembl~~trl tartalm .. :: . Terme-
szetesen egy tetszelagas ~•sembler által leford1tott prog~•m
mAr ~e;:elhelo az SM-~lT ~•q•tsegevel.

Az SM-VIT 64 haram rés~e egyetlen progr~mul lepez, ~melyel


a 1-'rOQrclmleme.:rol • LOAD " • "',8,1 ut.as1L& .. I' .. l t;oltheturol .a
memor 1aba. E.: u tár d.: SM-1 I T " . "-tal l·e.:t.ludo p•r oancsa1 hOlsz-
nálll.alol. , ...melyelel olZ al.íbbl lb.an l'i>merl&Lllrll.

c 1m d1soaasembler funl c 10, .. me.>ly .,qy l eper r•yurr yl


oulpotul old , maJd RETURN-re UlOlbboll. RUN/STOP
pal leallllhoiltó . A d1sa~semblálás kezdeelmét M
c1m '"'d)OI meg .

. Cc 1m >< •~•embly utas1t~s >


lehetos~get c<d egyellen ulas1t.)s Jpfor· dltása.-•
~ . c1m ~ ált.al Jelolt memo.-1•turulwtre. A c1mel
meqadas .. al apáll•pot.ban dec lnt•ril • tac<r1 tor t&n 1 1• •
Ez hexadec1m~l1s.-a v•Jto~L•t.hato .H megddas~­
voil l , .am1 do,>ClmUl>tora változlatll .. t o . f - r..>l. A
'li:: :tm után 1 r t H vagy s egys::erut!n lre>. c<decl ma-
ll 5 - deC l máll S lll . deC: l m.t ll D - IUl'X .ldEIClRioll i b
átvállial lesz lehelove .... k1 Qlzesl mod meg-
tarlá\öav .. l .

A Cclm )-tol lezdve dec1m~l1s modban ~ . hex a-


declmalisboln 8 byte-ot 1r l i. RETURN megnyo-
mas-ival UJabb sor l<e.-ul l11ráari/l. .

A < eim > <lllal mul.atott é~ c<.: a::t lovetc byte-


on elhelyez~edo veltor <•l•o byte felso byte l
ertelt e llerul l l u- asr.A . ~. ulono5RI"' dec 1mal1 s
modban has::nos.

c: 1m <aposztrofl A .c •m > áll.1l mut&ttott memor1 .... te


r·ulet elso 8 byte-Janed le11rasa l.aral leres
formában .. +ent1 utas1 t4sol t m1nd .ali oillm.asa.l
a.-.-a , hogy seg1tségukke l • memor1a ta.-talmát
ne k1 1ra ssu~ , hanem megváltozt&tasuk. Ez oal~o.­
kovetkezlk be , ha a kod <B , A, , dlsassemb-
lerné l semml ) után ann.ak megfelelo fo.-mátumu
e.-tek ál 1. sa
r<c 1 ml , , ( c1m2 , <ctm~>
A c >ml >-tol a <c>m2>-1 t~w 1edo l.;ar tom'ir>vl oH.-
ma sol •~ a <c tm3 ,- tol Le.: eJ odo
( l r c<nst er ·)

. P <c tml >, ( clnt2 .>


SCQllséy(.>v<>l &\-lY ~,...oqr c<ITtl«::t <.ll etet )Pl olhL~l<.trtl
kl a l~ove ll e::o ut.as1tás tozamDr a . p,.;-anoet~r·
n~JI.ul '""q.;odv,, l 1 jel:: 1 •= ..
1 ll1ál11> I·H oor am -
ter Ll lll'le l •

• ! cuni , , <ellol.is ;>


A Ct.: tm l )-l.:.'n t :o:- úudo pruqt "'"" l'!i:-lelet- r1 v(.-uét
. P-vel d!i! f illl'' l t uk - .. tnL•y ...dult fé!rtel, lel o.~l-
tol 1ot . •• Jt1P ~G JSF< ul .. !ál L.;~~olcc~t al<..1m::~ , to
l <.<l du t.erLtl P t r t NOP ul .. !n l.l&ut.k .. J tul l l l w l ,
a . P .i l l .al klJ~!oll ~rot.l'"etml~Jrulclet kde1-
Jes::lt t l l . lcs~lllotl ner.~at1" ollo1.1i> ·~s.~l r.tn
<c~::col..! .;o ""lJClm il:" r:ltolt. proQr .. m vt:.>qc:tn•"' le'"::,
.;o le~do~•m c~:: ~·•~~t• m.;ar~dl •

• F ~~"' 1 "'", l OLI upet' andtts)


1:<1 ..:u11yuso Lit Lt!állac.ul, l .cr·vt.cs& l ,Qq: 1 a m"rn':" .1
,jtJ"''· lter·f:'I!H~ttl
H aqy, "' "C. l til <il t..al n.ut..,d olt.
L~LJl ~;:il\ L ti .. t.Jt •r• l v.:'\4.1..: 1.. &\fh\;.• l v .. -2 Li •••t..•t L<r'll•-
ldltlo-'1.! . euv lu~uu- es e1.1y v>~UC.lt""L tt•ltodt::ll
pr 001 '""t.lc.l. l 1 ••· ._, loll> l u.::""l:ol l &l Ullt..lr l'ii "
bvle .: .tr 1 .. It.:. (, l er&t&ull lltc.o~tl.a.-ul .ill lt L .. ~J-
L..:.,.Iod C,s;/vcH,I\- u!JC't .OI1Úll50é• lOI 1ö.!L't lill r<..:LHJU-
s lll ,..,t, l\ tit . A l Cld ,. vayv lHJ v ul. •<l:> l t Ll 5 Qí!P 1 ku<l •
Jd ,. "•~lY ~ tövulJ\• .. u !.:J~ul•\..JlL•mc.d V-.\lr•fttCl"w" ll\!:

s IOlrfdPit _,}.,_.t,!~ .. bs.: u l u L l;. l tn.: É! bort Oti~· •


.Oifll,!l, •<.11 C.lt•o L .. rtoo!outll "'"'<l".al-
t;u.:loltlt.~ lpl. G til , IIJC, f ·SL. s,ol.u.l,

sr l~q,.._4ltl-... ..:._ ú~ c tU& .:u lt,t.,lttd~xall <.. 11"


.o! éti•IIOdt v •

91 1 liCfY•tltto•.:,.
tndtrel.l
dl:!
lrtd"'xel l
1 ll(.lt.J><f:'l t 1 11d1 r._., l
ctm.:05noOdr d ,
..,. .
L,l.l,Lll
ontlll f._.r,t. d.• o t .,. .. l l ul,.;~.>ll.a~c..lró!l.
~!'ftPl ,.r•~ ..:1qy lhf:!ruór t-...U yt.t?- OL t~~~~ .:­
l"'' Lit. lollL~nL'I "'•'LIY muv(tll.d el ha J-
lulll vi?U r "' v&<lll l (~l. LD~1 , ECJR , AOC
t.>lu . >, Leto.at. '-"4Y Yl!qn;..:let tswl•l -
m~l m~yv.altu= l att~ l .

69
fl• .... : ,u ,..~er d t •dtt• J. ~ tllt>1Jc1t.J Jtt~" d J -»r t•~k::!~
c-,cd u..:.1lyE... n CJJ,J~~" ~o\ndll~l u1.c..t~lld~u t ......,t llsl-3~.!'"
~J t..I J 'G.::'~\II.e "'blf:•• f orm '..I LJ,.~I l .. A~ l tl .;:l\'-1torl;w ll..Jt..!lt ll
'·•l no..< " p..-owr.M•ototb.~ l fEJli \ILc<l-:.•"'11'.-.
,·, ~ UY't"'t l r. l Pt,··Care
1 •l"lt\1• 1 '-J tttl:" t f wr Ltlu utcV·;~l L..l~O~ a gép ..1.kódu
pr e gr' amok nyomköveté sét ~"'q 1 l) l '-'l o . !:iE! cH L séuuld., >l v "ti• ._,, , '
L :i•, l u .· I:Jl!ll '·'"-W.:tlh""l Illi L' po U<.lr "'"'ul loL·d.á"..~l. lw <.:r o l tL'\b.:rtuS
t:b:'lu..!l l•! l t- ·ll l.L'Itt..J tltt;'"·U •• l u t c:.t~ fEtiii iLcH L.aC:a..::t~v.,•L l'-,, IU.llfY 'lll. V\..' l
c< prou rdm~Ltl•1s tdwv l "'•' UitYdJ t ,.J.,~vt:l uwo muqv-.lllo.:LL•Ll·~l ,
IJl..:Ortyt->S> "'t...8L"' Ilo'-''" h.";,..:ro<.llh<.<lcJ.ll,oiiUI l l l . 11.,>1111\o. t.!rL'I:.IoiiCot o y ~
,::, lépésenkénti végr-eha Jtá s hoz ct..: SM-~IT-nt>h s::uS..séq o vdll "-WY
olyan te,.-ulelre. dmel yel .... 6~1v- e 2 m•lrup..-uLess::=ur t:setebe"
1-llLonletet t fon toslt>cHI'-'' (l .l s é b 1 -."~ l .;~p helyell lta!i..:ll<ll .
E~ t La tszés szer-1nt1 mem0r1ateruleten klJelo lhelJul •

A fent~ utas1tásr-a a mon 1tor- egy

. ? AAAXXXYYYSSS--++----
a x y s nv bdi~ c

alaku vál~s&t ad , ahol a fent1 sor- a= ala1rt r eq1s::t~tel ~s


Jel zek ertéket mutat Ja . A~ elso sor v egere tets=oleges c 1met
•r- va a monttor végrehajtJa a c 1men leve utas1t~st , a ~entlol­
nek megfeleleen kijel~l a reg t szter- tar-t almd kat , a k ovet l ez o
utas1t~s ctme t es magat a:: utas1tást d1sa ssembler formába n . A
RETURN megnyomasaval a folyamat a kovetkezo u tas itassal meq-
lsmetlodi k .
Ha a sol' vegen , a 'c tm > helyen -,e lm > formaban egy voqc•m-
kl fe J ezest 1runk , a program a magadott c 1m1g nyomozas nel-
k ul fut, m<i~Jd ott a s~ol~sos r- eg • szterkijel::éssel meq&::alad .
Termesz et ese n , ha a pr-ogr-am nem erinti a megadoLt ~ 1m e t , a
v e z e r ies ~1csusz 1 k a kezunkbel , a programná l mar-ad .
A már kip r ób á l t - vagy például ROM-b ol h 1 vott - szubr uL 1nol
n yo mozá&~ feles l egesen laBsílana a nyomo::ast . Ezert leheto-
seg van ~r.-a, h o gy a nyomozást egy JSR utasttásnál megsza-
kitsuk es az RTS vegrehajtása utan automattl us an folytd&Su~ .
Ha a lépésenkénti vegr- e haJtás sor-án a kovet k ezo utas i lás egy
JSR - szubrut1nr-a Logr ásutas 1 tas, a kovetkezo so,.. iill e )él1 egy
"-R" sz imb ó l um megadasa a fenti elJarást váltJa l i ._, nyomo-
zásban , tehát az ot log1katlag ::ár o RTS-1g a lépésenkénti
végr-ehaJtás felfugges::tod 1 k .
Az S M-K IT egy e r dekes es ~gen h a sznos tulaJdons~qa , hogy a
lepésen k é nti végr-ohaJtás során a memOr1akt1r-.isok uJr a meg
uJra v eg rehaJ tásra kerulnek . En n ek seg1tsegeve l a nyomo:as
során f 1 gyelemmel klsérhetJuk a k1v.ilasztott memor1amezo~
vá l tozását. A nyomo:as alatt a képernyd tele J en tet s ::=és $;:e-
r-i nt l memóriak1ir- áso kat ~érunk <A , B, l ,maJd a keper nyu al -
so részén el l nditju k a lépésenként1 vegr-eha j t~ st . M1nden uta-
51tás után a memoriak1 1 r-ások 1smetelten veqr-ehajtodnak, tgy
a k épernyon m1 nd1g a:: aktuál • s mem0r1atdrlalmat láth a t Juk .

60
A: utolao nyomozáai eszkez ao~tware megszak1táai pont elhe-
lyezését biztositJa a programban. A .B<c1m > utaaitassal egy
csapdát helyezunk el a megadott c1men, a program ~ulása meg-
szakad, a regisztereket és a jelzoket k1l1stázza a monitor ,
maJd ujabb parancsra var .
Az bM-KlT utolso i t t 1smertetesre kerúlo lenet:osege "'"''" ,.
prograrnek k1próbálását azolgálJa. Az 1gaz1 helye az 5.1
~eJe<:etben lenne, ahol tobbek kezott azzal is ~oglalkoznl.
~ogunk, hogy hol helyezzunk el olyan rov1d assembly rutino-
kat , amelyeket BASIC nyelvu programbel a~arunk h1vn1. Erre
egy - elég bonyolult, de sok szempontbel prakt1kus - lehe-
tóség magában a programban, egy BASIC sorban, a REM után
alhelyezn1. Az 1lyen szubru t1nt s.:okás REM-ru t inn a k 1s
h1vn1. Az 1lyen rut1n kesz1teset segit1k a kovetkezo SM-~IT
parancsok•
.z , sorszám> A megadott sorszámu BASIC sor kezdo-
elmét k11rJa a kep~rnyore . Ha a sor
nem letez1~. az elso nagyobb sorszamu
sor adatal keruinek k11rásra sorszámos-
tul. Ha a sorszám naqyobb bármely1k sor-
számnál a BASIC-programban 64000-es sor-
szám es ket O kerul k11rásra .
. TP, Z < sortDz~m >
A .P által elózoleg megadott programot d
BASIC programba 1lleszt1 a megadott sor-
szamLt sorba, mint REM-rutint. Igy pl . a

.P 828,833
. TP, Z 10

parancssorozat a 828-tól 833-ig terjede


c1meken leve programot REM-rutinná ~or­
malva betlles=t1 a tárban leve BASIC-
program 10-es számu soraként.
A REM-~ut1nn~k kó~e lezoen 0-val kell
végzodnl.e <BASIC-alol.rásbol kovetkezoen>
Az 1gy létrehozhalo REM-rutinokkdl kapcsoldtea leg~ontosabb
korlátozások:
hossza leg~eljebb 250 byte lehet,
nem tartalmazhat onmagara hivatkozó JMP vagy JSR uta-
lUtoist ,
~elh1vasa kicsit ~orulményes, mivel a BASIC program
azerkesztesével helye változhat a t4rban, hacsak nem
lrJuk azokat a program legeleJére.
Az SM-KIT-et, m1nt az assembly programoz~~t seg1co eszkozt
ö•szR~OQlalva megállapitható,hogy minden eddig ismertetett-
nél szélesebb koru lehetoséget b1ztos1t gépikodu prograrnek
beJárat~sára, elemzesere, egy jominosegu debuggert nyuJt .
HibáJaként róhato ~el viszont, hogy nem ad esz kezoket a
prograrnek l~tehozására, nem tartalmaz a monitor-debuggerrel
egységben mükodo assemblert, ezért csak jOm1nbségu assembler
editor kornyezettel k>egészitve ajánlott - ugy viszont kulö-
nösen - az ass•mbly ~ejlesztoi tevékRnységhez.

61
4.~ pro interaktiv debu~ger

Az ebben az a l fejezetben ISmertetesre kerulo debugger ( PTD


6502/65 10 DEBUGGER, PTERODACTVL SOFTWARE, CA USA l eqy sol--
kal magasabb rendu, ennél fogva bonyolultabb eszkozt Jelent ,
mant a: eddigiel- . Ezert talán nem ~rdektelen r~sz~nna egy
kicsat terJedelmesebb szavegrészt a megismerésére, mint a:
edd1g ISmertettetokkel tettuk. M~r elolj~róban megemlltJuk ,
hogy ez a program nem ~ötodik k ifeJezetten a Commodore 6 4 -
hez - m1nt konyvunk zome sem - , hanem m1nden 650216510 mik-
roprocesszorral azerelt szamélyl sz~mltógéphez , igy pl . az
Apple I l sorozathoz es a nagyobb Commodore modellu~hez is
h•szn<ilhato.
Talán nem árt már eloljáróban felsorolni a PTO debugger
j ellemzöi t , .amelyelet .a Lovább:ie<lt ban részletesen is tár-
gyalunk . Term~~zetesen rendellezik a m1nden debuqgerre
szante lotelezo min1mál1s u t asl tás-csoport t al :

memoraa- dump hexadecimalla és ASCli formátumban,


memoraa-modosat~s lehetosege,
d1aasaembler ~unkc10
gepakodu progra ~ lépésenkent1 végrehaJtás• ,
tetszés »zor1nti lnform4caók nyomtaton 1s meqJelenat -
hatol ,
azonnala assembler.

Ezenlavul a ~óvetkezo , egyáltalán nem .Ul alános


is te1Je'li1ta :

utasa lások batch tapusu vegreha;tása, által lehe-


toseg nyi li k teszt~gy k a a lakitására,
lil<:lmbOli k us címzes lehctbsége a bajoiratás &or.tn ,
beépltett, rezadens Mzimbólikua assembler ,
ondokumentálo, érthete parancsnevel, amelye~ a gya-
korlott felhasznalo ~ltal lerovidlthetok,
ertelmes , angol nyelvu hibauzenetek,
klterJes<:t&tt ki fe jezésfogalom,
lulonbozo szamrends zerbell számok a.:•bad keverese ,
a prograrnek reszenkánt1 nyomkovetéai lehetosege,
~ód -foltozáa <patch1nq- Jelentésót ld . ké•obbl ,
képernyofelosztás a nyomozás alatt felhasznaJOl és
nyomoz~&l ablakra,
a végrehaJtott gép1 c1klusol szaml~lása, amely elo-
seg1t1 a kod utólagos hangolás-it ,
a JOy&tlck hasznalala a nyomozás vezerlésehez.

62
4.'5.1 A debugger betoltese

A lem&~rol LOAD "LDADER.OB~",B,l utasit~95al tolthetj~k b& a


programot - alietcileg a toltaprogramot - , maJd SYS 52000-rel
i n d i tha t j lll.. A progr· am e:- utan ker1 "' deb1..1gg&>r s~ á ma r· él sz ul~ ­
~eqes 28 Kbyte-nyl terulet kiJelölését.
A v4lat>zthcttö opcaolt:

r felso memória ($bbOO-~OU00)


(i alsó memór1a (;f8f)0 -•78\)CI)
·<:. erttl'lt> kezdőeim < t••t .. ::oll?ges .t8ú(l-llál nagyobb er ték)

Utobbl esetben gondeskadn kell a kepernyo-memOrla számara


kul on 2 K byte-nyl t<?r·ul et 1·1 1e> l ol es er·ol • Erre a ter ul et re
a;: ér t van •z ük ség, .neu· 1.. a d&bugger ml n den beavctU·o;::ás el ot l
me11l1 '"' 1\ epernyo-memorta e& a s;::in-memor·l.a területet, l1ogy a
felhasznál01 programot a lRgkevesbé befolyA•olJél. T as B
elö"'tén o1 me11tesi pufferek ld jelelese e~ut.omatll : u ... A debuggEw
futása alatt a felhasználOt képernyore a~ F3, a debuyger
la~j:Jenlyor~ a:: Fl "'ey11yon•&!Oáv.al l<apcsol11atunk ál.

n debugger betöltese utan a verem értekes reszének 1<1Jelze-


sévcol J~lentkezik c\ kepernyon.

1'1 debugqerbol dZ END paranccsal l~phetunk ~i. A vezerJQ~


VlSii;::&II( E.'I"Ul B hl voprogr · ~lml1oz, .al tal áb.an .a BASIC-p.ar· c~ncs
modho::.

4.b.L Al~pfogalma~

A debut,~qw• · ~ltal elfogoAdott s-z: ~mok lehalto&JI( decimál1sak,


heKadec;.lrnalis ... h <l'-rc~.l bavezetve>, b1t1ólr1sak <1~>, neqaot•v
de1..1 rn~l i !:Oélk <->. .~ k.arakt.ersorozatok"'t tetszés szer111t.
..pos:ztr·ofol< vagy tdé::ojelel: kozé ::<'!irhatJl.lk. A lo-fe.Jezésel,
+, - , *• 1, XUR, XAND es XXOR müvelelt JPlekat, v.aldrnil1t
z~rOJeleket Lartalrnazhatnal • .a s::okásos ertelmezesben.

A debuqger m1nden p.ar· .ancs vegreh .. ;tás.;& Latáll a sor ele;en


vessza kilrásaval Cprompttal) Jelzt, hogy lesz"' kovelkezo
ula~lláiö foqadas~ra.

A ? utasit4st has::ll.llhal .Juk - a BASlC-Il&Z hasonlOcul - L~­


feJcrzeseL értékenek lnr•yomtatá5ara. A l :épernyon megJelenll<
a kl feJezem ertekénele dec1m<ll1s és hexadecimal i s .fot·máJa
egyaránt. Néll~ny b1llentyu 5peciál11D Jelentésvel b1r:

RETURN eqymaq.ab•n megismétli az &lo::o parat•Csot,


Fl átkapc~ol a debugqer-képernyore,
F3 ~tkapc:&ol a telhasználOi k~pcrnyorc,
RESlORE "meleqinditja" <ld. késobb) .a debuggert,
RUN llat.a10a m&geqyez 11~ a RUN par·anccsal
(ld. késobb>

63
4.~.3 Pro~ram-módu végrehaJtás

A PTD debugger parancsatt a BASIC-hwz hasonlcan két+ele mod-


ban lehet végrehaJtani; parancs vagy azonnali módban (1mme-
dtate mode> és program- módban edeferred made >.
Elobbi esetben az utas1tás a rendszer promptja u~án regton
begepelendö es azt a debugger azonnal végre 1 • haJtja . A
program-modban viszont a debugger uta•ité•a~t a BASI C prog -
ramo~ m1nt&J~ra sorszámmal bevezetve gépelJuk be, amelyeket
a rendszer ilyenlor csak tudomásulvesz. A végrehaJtá• a RUN
parancs hatásara tortén1l meg . A debugger 1 ~ byte-ot tart
+enn alaphelyzetben a program-módu uta•1tások tárol4•4ra . Ez
rendszertnt elegendo, de szulség esetén ~i is terjesztheto .

A program-modu utasttások kezelésehez négy parancs áll ren-


delkezosre . A LIST, RUN , NEW parancsok kezelese es hatása
megegyezik a BASIC megfeleloJével. A serek torlesét sorsza-
muL egymagában va l o megad~sával, JaV1lását az EDIT parancs-
csal vegezhetjuk.

4.5.4 Szim~olumol

A szimbolumo~ lehetnek

v áltozol ,
reg1szterev es Je lz ek neve1.

A vál t ozók l egfelJebb 1 5 karakteresek lehetnek, numert k us


va g y karakteres t1pusuak . A numerikus v áltozak kétbyte-os
egQs~ sz ámo kat tartalmazhatnak tetszeleges s zámrendszerbelt
ertékad4s s al . A kar a kteres vá l tozók neve k otelezoen S Jellel
vegzodtk . Csak program-modban ka phatna k érteket, amely leg-
fel jebb 2~5 b yte hosszu lehet.
A + ennta rtott nevek nem adhatók meg változonévként, ezek az
•ssembly utas1tasok, parancsok, va lamtnt a regi szterJelzek
nev&l .
Utóbbuak:

A akkumulátor
X 1ndexreg 1szter
Y 1ndexregiszter
PC utaslt~sszáml~lo
P 4llapotreglszter
S v e rem-mutato
'l.C ~tvltel-jelzó
'l.D decim~ lis mód Jelzö
'l.l mog szak1 tás-ervenyes1tés jelzó
'l.N negat1v érték jelzo
'l.V tulcsordulás Jelzo
'l.Z nulla j elzo
A ~~ •mbolumok é rtékado utasitásokk~l ny~rhetnek értéket,
~maly a BASIC-ben meqs~okotl formáju. Vonal~o:.::1~ e~ a r e-
g1 s z terekre e s a ; el .:ok re 1 s' Ig y a:.::

helyes utas1tás <hatása ekv1valens TAX gep1 ulds>táseval> .


A ;ol:.::ok erteke magas l esz nem nul l a ~lf &Jezéssel tort~no
erté~•dassal, ellenkeze setben alacsony l ea:.:: . A kifeJeze-
sekben a ra~1szterek és Je lzek szabadon haszná l hatol . Azok
ertoka termeszetesan mind 1 g a f e l hasznélei program álta l
"'lálott" éa nem a debugger 411tal p1ll4matny1 lag hasznoill
va ledi re~iazterek ~ el és ;el:.::okkel egyez1k m g .

4 . ~. ~ DOS k1eg esz1tE!s

A VC 1541 lemezegység vezeriesere a dabu~ger


parancao~at nyu;t.

A DOS "' S '' pata.ncs a leme:.::~atalogust l1stc1 ::;:a a IQpernyon .


A DOS parancs után ldézo}elel ~o:.::otl tetszolege~, ~ dls~­
vezat lonel szolo parancsol ~••dhatunk, pl. DOS "S : T~t" t ör-
11 a T betuvel kez dodo nevu file-okat .

LOAD " < filenév > ""' < l zdocim ) "'

al,.lu uta~1l~st has:.::nálhat;u l. A parancs LD-re rov >d • lheto,


a < le:.::doclm / elhaqyhato, 1 l yen~or a lame:.:: n t4rolt lazdo-
Clmre toltod1~ be a program.

SAVE "' fllené v > " C ke:.::docim >~ v~gc•m +l

alaku paranea szolgal. ASAVESV-nek 1s róv1diLhelo , a Llmel


megadésa ~otelezo .

Oebugger-utaallásokat tartalmazo program- file- ok tólt••• az


eltére

LOAOP " < filenev "'

utasitáasöll <LOADP helyett LOP elég> , ment••• a

SAVEP " filenév > "

ala~u <SAVEP helyett SVP 1 rható> utan1tá~sal történik . LOAD


és LOAOP utas1tá~ok vogreha;tá~a után a debugger ~11rja a
program áltöll elfoglalt utolsó byte elmét .

65
4.5 . ö Memoriakwze~é~

A DUMP < kezdoc•m >< hossz > alaku parancs sze l gal • memor1a egy
reszenek hex adecim~lis és ASCII form~ju ~i1rására . A < hossz >
elhagyhato , ekkor wgy sor - 8 byte - kerul kiir4sra .

Emellett használható a BASIC PEEK fuQgvényh8z és POKE utast-


táshoz igen hasonló k~t l ehetoség a memoria vi~sgálatára és
áttrás4ra . Felhasználásuk nyilván program- modban elonyos . A
szintax is megegyez1k a BASIC megfelelokkel, de szabadabb ,
a záróJel 111. a vessze az utaa1tásban szókozzel helyette-
sitheto.

A c>m > alaku utasitásaal egy k étbyte-os értéket 1rathatun k


ki. Az utasitás természetesen figyelembe vesz 1 a 6510 szaká-
sos alacsony helyiértéku byte - magas hely1er téku byle sor-
rendjét.

A mem0r1akezelés másik oldala a d1sassembler es assembler


funkciók, tehát programok l1stazása a memór1ából, 1lletve
programrészlet&~ <vagy telJes programok > be1llesztése.

DISASM < kezdöcim >< sorok s z~ma >< c•m >

alaku utas 1 tással aktiv>zalhatJuk . Valamenny• paraméter el -


hagyhato. A parameter ek és alapértékük (zárójelben>•

< kuzdocim > a visszafordltando proQram kezdeelme


<az utasitásszámlálo ál l ása)
< soro"k száma > a l1stázand ó utasitások száma <15>
< eim > a disassembl e r i de hel yez 1 (ha meg.-d-
tuk> a vtsszaforditott programot ASCII-
assembly forráskód formájában. Innen
késobb SAVE paranccsal k>menthetö le-
mezre . A terulet végelmét DUMP utasl -
tással kereshetjuk meg .

A PTD debugger, mint már em l itettuk , egy Jöminosegu, ketme-


netes az1mbölikus assemblert tartalmaz, amely azonban csak
aránylag rovid, mintegy 100 soros programok fordltására al-
kalmas. Fo h1vatása nem is az onállo programozás, hanem a
lod-foltoz4s <ld . késobb> támogatá~a. Az a~svmbler 4ltal
elfogadott nyelv sz1ntax 1sa megegyez1k a szokványoa form~­
tummal. Egyetlen korl~toz4s , hogy program- modban csak meg-
jegyzést tartalmazó serek nem megengedettek.

Az • • ••mbler tula j donképpen egy k úlbn alrendszert képez a


debuggeren belul . Ennek legfontosabb kbvetkezménye az, hogy
az assemb l er aktiv>z4lása után debugger parancsok nem adha-
tó~ ki, egészen a debuggerhez való v1sszatérést klváltó RET
assembler direktiváig.

66
Az <Ui&emblert kétfé l eképpen
ram-mOdb an .
Parancs-módban az

ASM <kezdoc1m >

alaku parancs ut~n a debugger megszekot t v e&sz ö <",") prompt-


Ját felkiáltójel (" 1 " ) v.iltJ<a fel, ez utal arr.a, hoQy i t t
assembly uta~ltá&okat vár el a program az addig1 debut;~ger
parancsok helyett . Az assembly sorokat s orsz ám nélkul (')
adhatJuk be. A sorszámma l be1 rt sorok nem kerulnek fordit ás-
r.a , hanem a Qr.QQ~:amteruleten tá-r~dn--,.k . A-n ok~s~s assembly
uLas•tások megengedettek, de az oper.andus mezbben a debut;~ger
a l att def1n1ált változök használhatok, értékuk az a&sembler-
ben 1s elérheto . A~ ASM p~rancsban meg.adott kez d De lm h&t~­
rozza meg a~t, hogy hova kerul a leford1tott p rogram a me-
mOrtáb~n. H.a ez elmarad , a program&zámlálo aktuál1s érteké-
tol ke=dodtk a kód lerakáaa. A ford itás befe jez ése után a
programszáml álo az elso szabad helyre mutat . Az assembly
utasitásaken kivQl k6t direkt1vá t tar ta lma zhat & p rogram, a
OUP és a RET direktivakat . Használatuvra a kod-fol to zás tár-
gyalasánál torunk It, de mármost megem l1 tJuk , hogy a para-
meter nelkul 1 rt RET egyszeruen lezárja a z assembly fordl-
tást és vis•zaadja a vez é rlést a debuggernek. Lássunk egy
rövid peld•programot az assemb ler parancs-modu használatára i

,ASM $ COOO
1
SZAMX NOP
'SZY TYA
RTS
'BELEP STX SZAMX
CPY SZAMX
BMI SZV
TXA
RTS
'RET
A programhoz nem art et;~y k1& magyarázat .
Az elso sor felh t vJa az assemblert étii kbz l1 a prográm kez-
doctmét ( $ COOO>. A program f e lada ta, hogy X és Y regisz ter-
ben l évo két szám kozu l eldontse , melytk a kisebb és azt a z
A reg1szterben v i sszaadJa . A klcliiit lt tekert irátiimódot az
k ivánta meg, hogy a PTO assembleréb an p ~s-módban n1ncs
l ehatöség elore h1va~kozésra , minden sz1mbólumnak a felhasz -
náláskor m~r defin1á l tnak kell lenn1e. Ezer~ & SZAMX memo-
ratváltozót és az SZY programc1m~ét elore kellett megadn1 .
A szubruttn végrehaJtása a BELEP ponton kezdodtk . A zár ó
REl v1sszaadja a vazérl•st a debuggernek.

Sol lal hatékonyabban használható az assembler program- mód-


ban . El· l or oA: ASM ut'*s1 t~st éso az assembly prot;~ramot egy-
aránt, m1nt egy PTO debugger program utasttásait kell meQ-
&dnl. Ebben az esetben természetesen elore hlv&tkoz4sok is
használhatol a programban. Az assembler haszn~lata program-
modban nagym•rt•kban emlekez~et a PROFIMAT assembleréhez és

87
annak megfeleleen itt l& felhasználhatJuk a parancs-nyelv
falteteles vezérlésátadását makroszerü lehetoségek igénybe-
vételére. A megoldá~ &zint~ tökéletesen megegyezik az ott
bemutattal :

10 Zl=$14
20 MUTAT0=2
30 SORSZAM•l
40 ASM $ COOO
50 LDA # Cl
60 STA Z1+1
70 LDA f+O
80 STA 21
90 RET
100 C I KLUS
11 0 ASM
120 LOV #MUTATO
130 LDA #SORSZAM
140 STA <Zl> ,Y
1:50 RET
160 IF SORSZAM<3 THEN SORSZAM~SORSZAM+1:MUTATO~MUTAT0+5:
165 GOTO CIKLUS
Bár a program két olyan lehetoséget is tartalmaz, amelyról
meg nem volt ~zo <ci mkét és if utas1tást> Jelentése igy l S
elég világos . A ciklusszervezéssel elértuk azt, hogy a kó-
zépso reszt <120-140 sorszám-tartomány> csak egyszer kel-
lett leirni. A programrészlet egyebként egy, a $C1 00-on el-
helyezett táblázatot tölt ki. Az egymásutáni 5 byte-os be-
jegy~ések 3. byte-jába a beJegyzés sorszámát <1-3) teszt.
A programot hagyományos módon 1gy irtuk volna :

10 21=$14
20 ASM $COOO
30 LOA #$Cl
40 STA 21+1
50 LDA # O
60 STA 21+1
70 LOV #2
80 LDA # 1
90 STA (21). y
100 LOV # 7
1 1o LOA #2
120 STA <21> ,Y
130 LOV #12
140 LDA #3
1::50 STA <21> ,Y
160 RET
A két program által generált gépikód tökéletesen megeQ_Y-e'Zik .
Vís&zatérve az elózö megoldáshoz, vegyük é&zre, hogy az ASM
utasitást a második <c i k lusba ágyazott> esetben paraméter
nélkul hivtuk,ennek eredményeként a forditast oda folytatta,
ahol az utolsó RET után félbes'Zakadt.Igy a generált kód fo -
l yilm.atos lesz.

68
Az assembler a kovetkezo d i rekt iv ~kat 1 s m~ r1 1

.BA program k~zdocime <• helyett i


.OS byte-o~ fog l al~••( darabszám kovell)
.BY ~g y b yte foglalása <kezdoért.kmegadás kovet1l

Meg ehhez a z a lfeJezethez sorolhato , b~r által~nos ervenyu


a ~ovetkazo parancs:

PORT egysegszám

HO!. l41iM h&son l o a BASIC OPEN es CMD utas1lasol egyLtlle'io lh.,-


táséh oz . PORT 4 k1adása utan ~ felhasznalel program output-
Jal cs•l a pr 1 nt.eren, 011 debugger outpLt l j OA> a pr1 n leoren t>s a
képernyon Jelenne~ meg . A ~ép ernyos l 1Jel zes > mOdho:: valo
v 1sszat erest a PORT O utas 1 t. a s vallJa l • ·

4. ~ . 7 Program-n yomkovotés

Elerkezlunl • debugger .J.zon szolgáll.aláto.J.llloz,,..melyel ot leq-


f ontosabbölk +elhaszn~lh.-tosag.a s::empontJabol. A PTU deb<tQ -
ger szelas loru lehetosegel b1::tos1t a programal nyomlove-
tésére, a fo prob lém~t leq1nlább az es~lozol ~o~o l l1 v~lo­
gat.és es a pe~ rancsol nll>l•"' bonyolL<lt s.:::inLi\ lS.:lnal mrql.a-
nu law.- Jelent l.

A STEP utas1t as seg1tsegova1 ;;;;. felh.-~oo::nálot pr-oqrClmot lép•-


senként haJtheilJuk veqrc;. . A.:: L•tas1t.as lor m!!J•:

STEP Iepesszám PC<ctm DISP/NODISP /JO 'T

A lepés»zám , • vE>gr ltOAJl.-ndo gép1lotlu ul•s•l.lSCJI s.::aon.ll


Je lenll. Ha nem .ad JLII meq , a debuqqer eqyli'Liell utotslt:h.t
haJl véqril' , ha O-ál .J.tlwll "'"'Q , 65535-ot . Ha c OU:iF' J•é<té<mO -
tert meq,.d Ju l , m1nden lapo10, a:: e~.;: m1ndon voqr-ll'tt ~<J tot t ut .. -
Sl tus ul.an 1nfor-mac1ol .olt 1 ~ 11 a detJuqq"'r , ,,,.. r~oorst-=-el
vagy aamm1t sem adun!- mtrq , csli'.l a;, utol'l>O utasttás ut~n
-tehát r. .. elértu~ • l&pé•s=ám ) olllal meg.adott llmttc.>l
1r0dnal l 1 tnformac101. Ez utobbt esetben a nyomozott proq-
ram fut.a&.- lenyegesen qyor-s .. bb, m1ntegy tuu~ utastláb ma-
sodpercen~ént.

A PC c 1m >
parame t er a nyomoz.as ke;,doctmot .allttia be .. =
utas ttás száml~loba , teh.lt ugyanazt a: eredmenyt nyuJtJa,
m1 ntha a STEP parancs k1ad~sa elott a

PC • <e im

ertekad~st elvegeztu~ volna. Elhagya&a ~10elén ~ nyomo.::.l~ö


kezdo•rt•~• az uta&it~sszámlálo aktuálts értéle.

69
A JOY p~ramet e r ugyanugy klvá l t ja minden ut a s it~ & u t ~n
a ~ilratást, m1nt a DISP , de a 2-es számu joystick-csa tla-
kozoba dugott J oys t ic k -ke l l ehetoségunk van a vegr ehaJtás
sebességét csokkenten l 11 1. a gomb megnyomésava l telJesen
fe l fugoeszteni. E;;;á l tal lehetoseg ny1l1k a képernyon f ut.o
1 nformac10k alaposabb elemzésére.

Egy-eoy vegrehajtott utasitás után a DJSP vagy a JOY ervd-


nyessége estén a kovetke~o sor Jelenik meo :

r 1m > utasitás >A, érlek l >Y< ertek >X< érték >P < értek > op >< ertek2 ~

~hol

c1m a végrehajtott. utas1tas cime


ut.asltas .> d1sassemblalt utasitás
... er Lel 1 > az A reg l szter erte~e hex ~d c1mál1san es
ASCII - ben
érlel > a megfel~lo reg1s<:ter ertéle hexadec1m&l1~an
op a l1s<:ám1totl memor1ac1m
ll'r ltH.2 > az ezen a c1men lévo ertel hex adec1má l 1san
az utaaitás vegreha j tása elot t .

A~ a l áhu;;;olt betuk a ~ópernydn reverse modban jelenne~ meg .

Ha a STEP végrehaJtása ko;;;ben bármely billentyut megnyomJul ,


a STEP végrehajtása megs;;;akad . Eklor egy e l bre deklará l t
változo , BRKFLG fogJa tartalmazni a bl l lentyunev megfelel o
laralter ASCI I kOdJát . Ezt az erteket a nyomo;;;~st vezérlo
programban fa l teteles vezérlésátado utas1t~sban has~nalhat­
JUY fo l.

A DISP/NODISP / JOY parameterek add1g maradnal érvenyben , am1g


egy más1kat kl nem adunk , tehát nem kell meg1amé t elni azokat
a lovell e~ o STEP ut;uH tásban . Igy pl . a kovatke~o utas 1 t .ás-
soro;;; at :

,STEP PC # COOO DISP


,STEP

Jelentese a kovetke:o ( a magaban .álló promptok azt J&lzlk ,


hogy ott csav a RETURN-t nyomtuk meg , ami az uto l J á ra v é g-
rehaJ t ott utas 1 tást lsmetli) :

egy utastt á s v e grehajlása a S COOO ci mr b l és a: in+or-


mációk kiir .is a
a kovetkezo utaa 1 t.ás vegreh a jt.ása k i jel z é asel
utóbb1 ismételgetés& .

MegJegyezzuk , hogy ez a d~bugger leggy a kor 1 b b és leg e g yaze-


rubb haszn~lat1 mod a~

70
A S UB par a ncs s z i ntax 1sa é s a p araméterek jelentese tel -
j esen megegy e z 1 k a S TEP-ével. A kulonbseg m1ndoss~e csak ~=.
hogy D I SP é s JOY mó d b a n , ha JSR <szubrut1nh1v~s> utas1t~sho=
er , a debugger mégkQr d ezi, vaJon a felh1vott ~zubrut1nt
gyorsa n <nyomoz~s nélku l l akarJul -e végrehaJtanl. Ha RETURN-
ne l v~ l as~o l unk, a szubrutin teljes sebesseggel fut le . Igy
klkerulhetjuk már biztonsagesan letesztelt ill . oper~c10s
rendszer-bell szubrut1nok felesleges lepesenkentl vegrehaJ-
tás~t . NOOISP eseten a végrehaJtás mOdJa semmiben sem kulon-
bozlk STEP-étó l Cb~r ezt a kijelentest maJd a tarlomanyai
megismerése után pon t osltjuk).

A teljes sebesseggel v egrehaJlott szubrutinból v>sszat•rve


a vegrehaJt~s az eredeti nyomoz~s1 feltetelei ~zer1nL
fol y ll< tovább.

A kovetkezb , igen fontos eszl6z a nyomoz~s sor ~n a felhasz -


nálpi megszaklt~sok alkalmazasa . A megszak1tásl a proqram
ban egy BRK utas1tás vegreh~jtása 1dez1 elo, amelyet a SR~
debugger paranc csal <és nem assembly utas1lással'l célszer~
elhelyezn1 . Ennek formátuma:

BRK < név >< clm ,;>

ahol a<. c1m > egy meg nem használl azonos 1to, ame l lyel a meq-
sza~ilásl pontra sztm bo li ~us ~n htvatko~halunl , a • ~lm azon
utas1tás elsoo byte-) anal. c ime, i<hol a megszal1tas1 ponto
el kell helyezna. A meqadott camen leve byte-ot d debuqger
eg y táblázat ba ment1 es helyere egy BR~ C$001 ut a ~ 1tast
tesz . Ha a oebugger a telha ~zn al 01 program tel )es sebessegu
végrehaJ tása sor an egy BRI o..olas>.lásba o..otl oz 11 , a lovell eze-
ket vegz 1 el :

v1ssz,;omenti a reg1s::terelt et <c~onelye l aBR~ llclt<ls.<lrd a


mikroprocesszor elmentett a veremb el ,
vegrehajtja a-.: t az ut Cis> tás t, amelynel a t1elyen a f<RI
van , m>.ntha arrö< egy STEP DISP o..ota!áltást adtuni vulroa kl ,
nem ment1 v1ss:a a t~blázatba ~1mentett utasllas.lodol
a BRK helyett ,
a BRKFLG valtozot 2-re állltJa,
program-módban át ter a kovetkezo u lasi tas véqret•'•<Jl·i-
&ar-a,
p a rancs-rnódba n promptot ir k l es utas1tásr a var

Program- módban való végrehaJtas eseten a l ovet~ezo utastt~s


elágazást hozhat létre a BR~FLG alapJan, amely Jelzl .. meg
szakitas okát . A megszakitás1 pon tot a

BRKCLR ALL
SRKCLR MEGSZl

tipusLI utasitások va l;,o.me l yikevel leiH2t torolnt .Az elso tapo..os


valame nnyi megszakitásl pontot torli és a kodot h~ ly rehozza
Ca kimentett utasitáskodot visszamenttl . A másod1k cs,;ol a
meg adott nevure hatásos. Itt vesszevel elválasztva tobb meg-
sz a kitási pont as felsorolható .
71
Az eddig e l mon d o t t a k a z UQynevezett sof t war e-megsz a ki t~st
jelentették . A debugge r ezenkivül lehetoséget ad az un .
lassu megszakitás1 pont elhelyezésére 1a. Ezt hasznalhat -
juk a ROM-ban lévo prograrnak nyomkovetéaére, mivel 1tt a
program modositás~nak lehetoségv nem ~ll fenn. A megszakl-
taal pontot 01

SLOWBRK < nev >< c1m >

paranccsal álllthatJuk be, ahol a paraméter~k Jelentése meg-


egyezik a BRK parancséval. Ettbl az utasitástól kezdve a
felhasználOl program m1nden utas1tása után megszakad a es
debugger ellenorz1, hogy elértük-e v alamelylk lassu megsza-
~itáal pontot. Ennek megfelelóen a program v égrehaJtá sa
nagymértékben lelassul. Ha a debugger egy lassu megszaklt4-
Sl pontra ér

uz e netben kozll, hogy magszak1tás1 pontra tal~lt,


a BRKFLG változot 3 -ra állitja.

A megsza ki tás1 pontokat a BRKCLR-hez igen hasonló SLOWCLR-


rel torölhetJu~· .

A beáll1tott megszak1tási pontokat <csak a software-tlpusu -


-.kat) a

DISPLAY BRK

paranccsal kllistázhatJuk.

Ha a STEP utasitással ~apott ~iiratás kifutott a képernyo-


ral, a

SHOW < lepéss=ám >

utasitassal ~=~toljar~ v~grehaJlOtt~ legfelJebb 128 u tasi -


tá~Q&J:!~~f_elelo gut,_putot uJr-. ~unyomtathatjuk. A SHOW csak
a STEP-pel nyomozott utas1t•sokra vonatkoz ik, telJes sebes-
séggel vegrehaJtott kodot utólag nem lehet nyomozn1 vele .
A SHOW eg ysz erre csak egy képernyony1 outputot 1r ki, RETURN
megnyomásával tovább lapozhatunk.

A lepésenkénti <STEP vagy SUB utaait~ss~l kiváltott> vegre-


hajtaa során lehetoseg va n a rra, hogy a memór ia b izonyos
r •sz eit fi g y elemme l kis*r j ü k . Erre szolgál d

WATCH ~ nev > <c 1m >

parancs, ahol a < nev > tetszaleges mnemon1kus változó, amely-


nek kezdbértéka a <eim > lesz . A debugger egy külon ab l akot
nyit a képernyo teteJén, mégped1g minden WATCH utaait4s ha-
tására egy sort. A sorban a < cim >-tol szarnitott 8 byte ér-
téke jelenik meg OUMP formátumban és ugy változik, ahogy a
memória tartalma, a STEP v agy SUB futása során. Legf e ljebb
19 WATCH változó adható meg. A v áltozók a késöbbtek •aran
72
egyszeru ér té k~ dással uj érté ket nyerhetnek , ekkor a~ ab-
lak ban 8 terulet tartalma Jelenlk meg :

30 WATCH ABLAKl $ 800


40 WATCH ABLAK2 $880
50 STEP 30 PC $900 DISP
60 ABLAK l • $830
70 STEP 30

A fenti programtesz l et egy, a ~900-as c1men kezdodo progr· am


nyomkovetését vezérl1. A 3 0 -as és 40-es sorbdn ké t sornyi
ab l a•ot veszunk el a debugger képernyö- teruletéböl annak
felso részen. A legfelso sorban a $800- $808- íg, a~ a l atta
le vdben a 1880-$888- ig te~Jedo memoriabyte-ok tartalman~nak
változását klserhetju ~ f1gyelemmel . A~ 50-es utasílas vegre-
llc,Utása - 3 0 l..ll.J.Si Lás l épesen~énti nyollll övelé~e - ko.!bf.lfl a
képernyo "'lBó 22 sor·.tlb.;m a nyomkovaté!iil 111formácJ.Ok fulnalt ,
a felso ~ét sor helybenrnarad . A 60- as utasilás átállitJ~ a
legfelso sorban lathato mumorla-ablakot · ~ $8 3 0-~838- lg ter -
Jede teruletre . Ez lesz láthalo a 70-es Utdsilás halá•~ra
a nyomo.!olL 30 gdpikódu utasilás vegrehajtása soran.

A nyomo~ás során is , de kulöno!iien a: 1gényelnek eleget Leve,


helyesen muk ödo program v1zsgálalánál nyu J t nayy seg1tsege L
a cik lussz 4mlálók használat4nak lehet~sége. A ciklu~s=ámlé­
lóL .._

TIMESET < név >


vagy a
T IMESET , né~l >, név2 .

u t ae.J.tással aktiv1zálhalJU ~ és agy1deJuleg nullázhatJuk. A


másod&k alakot ak~or alka l mazzuL , ha eloreláthatólag a
c 1klu ss:ám~ meghaladja a 65535-oL , ek~or a név2 a négybyte-
os sz~mlaló felsó helyi~rtéku byte- Ja1L tartalma~za. A &~ám­
látó (vagy az egy1deiu l eg érvényb en levó számlálaLJ m1nden
gép1 c i klusná l eggyel , e~enk1vul eggyel laphatáron turténö
átlépesnél és m&nden ugró utas1tásn~l. A s~amlálás csak a
STEP vagy SUB ldeJér e vonatko~ J.k. A s~ám lál Ok értéke d

DISPLAY CYCLE

u t~si Lassal 1 r l1at JUk l i . Leáll i tá su~ ..

T IMEHALT < név >

utar.ilás5a1 torten1k. A clklusszámlálólc<t igen elonyesan


alkalmazhatJuk a kód hangola~a során, anna~ felder1tesére ,
llogy a program mely1~ reszen tartozkodik legtobbet a ve-
zér l és, h1szen enne~ opllmal&zálásáva l Jelentosen felgyor-
sithatJuk a program egés~ének lefutásal . Ugyancsak jól
használhato ez a lehetoség a kulonbozo módon , ugyanarra a
felada t ra megirt prograrnek futási 1doszukség letenek ossze-
h asonlltására (benchmarkJ .

73
A nyomozáshoz tartozó utolsó parancskor a tarta.~nyokra
vonatkozik. A tartomány a mamór1atarulat egy olyan része,
amelyen elhelyazkedó programo at a debugg•r minden kérdés
nélkul telJes seb•sségg•l hajtJa végre, akár STEP, akár
SUB van érvényben.
A tartományokban a végrehajtás akkor is taljes sebességu, ha
aSTEP-at NODISP paraméterral adtuk ki.

A tartományt egy változó kettö& ( l )

SUBRANG paranccsal dafinl4lhat juk :

' név > = < kezdoc1m >


<nlltv > . - < végc1m
SUBRANG < n~~tv >

A formátum bnmagáért bes zél. Figye ljunk fal a másodi~ - v e g-


cimet magadó - utasitásban szereplo pontra l

SUCLR < név >


vtagy a
SUCLR ALL
utasitás&al tbr ö lhatjuk. Utóbbi valamennyi tartományt torli .

A tartományokat, lassu megazakitást pontokat es ciklusszám-


lálOka t a debugger egyutt l ezeli . Belelul osszesen egyldeJu-
leg 32 lehet érvényben. A már emlitett

DISPLAY CYCLE

utasitás valamannyit ki1rja .

BafeJezasul agy tartomány-példa. A

KERNAL "' $EOOO


KERNAL."' SFFFF
SUBRANG KERNAL
utasttássorozat végrehajtá s a után a kernal rut1no k at mtnden
esetben teljes sebasséggel hajtja végre a debugger.

~.8 Csak program-modban haszn4lh.ató uta_s1tásol_

Az elso ilyen utastt4s az


IF < feltétel > THEN <u ta stt4sok > ELSE < utasltások >

struktura .

74
A fel t étel é~ az utas 1 tások , va l amin~ az uta~itás-s~ruktura
jelentese a s zok á sos , igy feles l eges reszletezni . Az utasl-
tásokat kettösponttal választJuk cl az I F mindkét ágéban. A
f eltételekben haszná lh ató operátorok :

> nagyobb
< k1sebb
>~ nagyobb vagy egyen l o
<: kisebb vagy egyenlo
<> nem egyenlo
# nem egyen lo
egyenlo
AND es
OR vagy .

t1ugenged"'t t a. kar· ak ter· es v .'ll to:: ok élö ken s lan sok , v •.>.l amio•t
numerikus kifeJezések o~szehas onl1lása. Ekkor a numer1kus
klfeJezés ~~értéke lé sre ~erul é~ az altala hivatkozott
memória-teruleten leve adatok kerulnel a karakteres kifeJe-
zessel osszeha&onlltásra. V1gy!!zat_, az qsszehasonlllás krl-
C'>'kteres esetben a r _ov! d@b str1ng hos~zá1_g tart! lg.Y " ABCD '_
e.9_Yenlo _lesz !:!_~C _:_-vp l Az AND E.>~ OR muveleti Jelek :;<iiróje-
len belül nem 1rhatok .

A debugger programban bárhol e l hel yezhetek ci mkék. A cimke


egy utasitá~ helyén állo azonos1t6, a mely csak egys::er for -
~ulhat 1gy elo a programban , egyebként csak GOTO utasitás
után . A c1mke 4 11 hat egyedul egy sorban , vagy bárhol kettos-
pont után, sor kez ben vagy sor végén is .

A c1mkére (pontos~bban az ot kavetc utasitásra) GOTO uta-


51tással adhatjuk a vez érlesL . A GOTO IF THEN vagy ELSE
ágában irva fe l té~e l tbl fuggo vezerlésátadást te»z lehetove ,
ami kO l bnesen érdekes lehet STEP utas1tás után , annak meg-
Vlzsgá!ására , hogy a STEP hogyan zaJlott le . Ez a BRKFLG
elóre definiált válLazo alkalmazasaval lehetséges , amine~
ertéke

O ha a STEP utas1tás rendeaen befeJezödott ,


2 ha lassu megszakitási pont m1att,
3 ha software-megszak1tás1 pont m1att maradt ~bba ,
) 3 ha bármely billentyu megnyomására szakadt meg ,
1lyenkor a BRKFLG a b1llentyOnek megfelelö karak-
ter ASCII kódjá t tartalmazza .

A fent e l mondottakaL az alabb1 pelda segítségével világ i t -


j~1k meg:

10 PLUSZ "" 43
20 MINUSZ ., 4:5
30 SBETU = 83
40 LOAD "PROGRAM" $COOO
50 BRK MP SC lOO
60 7 "A PROGRAMOT LEPESENKENT HAJTOM VEGRE"
75
70 ? " MEGSZAK I TAS S-SEL"
80 ? "AZ ABLAKOT +-SZAL 8 BYTE-TAL FELJEBB"
90 ? " --SZAL 8 BYTE-TAL LEJJEBB"
100 ? "TOLHATOO"
110 WATCH ABLAK $C200
120 PC .. $COOO
130 UJRA:STEP O OISP
140 IF BRKFLGsO OR BRKFLG~3 OR BRKFLG• SBETU THEN GOTO VEGE
150 IF BRKFLG~PLUSZ THEN ABLAKcABLAK+BaGOTO UJRA
160 IF BRKFLG=MINUSZ THEN ABLAKcABLAK-B : GOTO UJRA
170 GOTO UJRA
180 VEGE:?"VEGE A TESZTNEK!"

A program lépésröl lépésre :

10-30 az ASCII kodo~ beírása a megfelelö változokba


40 a "PROGRAM" nevu gép1k6du program betoltése
lemezrel a $COOO cimtöl kezdedden
50 software megazakttási pont beállitása SC100-ra
60-100 kezelés1 utasitás kiiratása
110 ablak def1niálása a képernyo legfelsé sorába ,
a •C200-$C208-ig terjede memórla- teruletre
120 az utasitászámláló beállitása ~COOO-ra, a
Rrogram kez depontJára
1 30 a lépésenként1 végrehajtás megind1tása . Az
utasttássz~m 65535 , minden lépés után kiJel-
zéat kérunk. A nyomozást valoszinuleg nem az
utasltásszám-korlát, hanem a megs:akitasi pont
fogja l eáll1 tan i
140 a ST EP befejezedésénel v1zagálata. Ha
- az utasításszám lejárása,
- a SC1 00-on való megszak1tás vagy
- az 9-betu megnyomása miatt
kovetkezett be, a VEGE elmkére ugrunk
1:50 . ha a megszakitás oka a + megnyomása, az abla-
kot 8 byte-tal feljebb 4111tJuk és folytatjuk
a nyomozást
160 mint a 150 , de - billentyure és az ablak me-
mória-teruletének csokkentésére
170 m1nden egyéb megszakitáat veletlen blllentyu-
megnyomáanak tek1nLun k és folytatjuk a nyomo-
zá&t
180 program vege, buc&uuzenet.

76
4.5.9 Ked-foltozás

Ha .. beJáratás alatt lévo progr•unban lnb.1t; talóálunk, tobb


lehetoség kozul v .ilaszthatunk . Az el~o és legog yszerubbne~
tunc a:, hogy helyben k1javi t J u k a kódot, pl. a beépatetl
assembler segatsegevel . Oe ez nem olyar problemamentes,m1nt
a: elso p lll anatban l ats z 11 . Ha a Jav l t .a& r ':)v a debb, NOF-
utasltAsolka l tolthetJul fel a felszabadulO programterule
tut , ha v1s~ont hosszabb, &L az elJ.ir.is nem al~alma:hato .
Ilyenkor lat s:Olag nem marad más hátra, mint forrásaz1n ten
kij avitan1 a programot , maJd u)ra leforu 1 tana. Ez persze
e lég sok~ag tart. A harm~d1~ megoldás, am1rol att szo lesz,
a kód- folt oz ás. Ekkor a Jav>tás helyen egy ugro-utas1tást
helyezunl, el a momóraa egy hasznalaton l ivul1 részére , maJd
olt belrJul a s:ukseges kiegesz1test ee vasszauqtunk a prog-
ramba. Persz e ekczben agen konnyu h1bá:n1 es az 1lyen hevo-
nyeszelt Javit-isol altal bevatt h1bá~ felderatese altalaban
a leqkellemetlenebb feladat.

Ezert 1• nagyon kellemes szolyállatása a FTO debuggernek ,


~ ked- foltozás támogat••~, azéltal habaleheto s&q~anek l>-
luszobol•~e. A foltu~aa el Le lepese annal a pontnal ~ ~i ­
Jelölése, ahol a programba az UJ kódot tllesLt:Juk. Ezt ~

PATCH < nov ? < progr~mcam ~ < uJ ~.m .

utauat4ssal tehetJul meg . A < n~v a folthc~ rendelt n~~.


prcgr ... mclm enrael a pontn~l c< ptogramb 11 c1me , < uJ c1m
a: UJ ~Od elhelyezésore kiJe l olt terulet lezdoc\me . Az uta-
~•tás hatá~ára a ' progr~mcam -en lóvo byte-ot a debugg~t
k1eme l1 és helyere egy BR~ utas1tást tesz , eppen ugy, m1nt
a soft wa r e megszaklt-is esetén. A k1mentett utasitast c< OUP
utasít4ssal vihetJul át az UJ teruletre, azáltal elérhet;-
Juk , hogy a kód cserbita tlan maradJon. Az UJ teruletre ~
kOdklegQazitest a reztdens assmblerrel fcrdllhc<tJu k la.
A kOdr~szlel utcl~o utaa 1tása eg y

RET Cnóv .>

alaku utasa táli>, iimel y a kodba egy Jt1P ut;uu l 4 st hel yez el
vasszc< a~ eredet1 programba, a foltoz&sl pontot lcvetó uta-
Sltáa4ra. A I1Cs1t bonyolult el;arást legJobban egy egy~-eru
példával világithat;ul meg.

Tegyu~ fel, hogy a ~ovet~ezo programot l avánJu~ beJáratnl:

10 MEGNOVELJUK AZ AK~UMU~ATOR TARTALMAT


20 $FE- VEL ES AZ EREOMENYT ~ETBYTE- OSAN
30 1 AZ X-Y REGISZTEREKBE TESSZUK
40 ASM $800
50 LLL
óO ADC *$f'E
70 TAV 1 ALSO BYTE Y-BA

77
8(1 LOA •w
90 ROL A 1 ATVITEL A-BA
100 TAX l FELSO BYTE X-BE
11 O RTS
120 RET

A programot RUN-nal lefordithatJu~, ez~ltal a ~od a S 800-ra


kerult. A azub ruttn ktprob~14sa lazben Jovun~ ra, hogy •~
azt felhtvo program nem 1 a X-Y-ban, han10m a l'880-S881 c:tmen
v~rJ~ az eredményt. A Jav1taat foltozassal oldjuk meg. A
progr~m vtss::tafordiláaavalt

OISASM .11800 10
megtudhatJuk, hogy a TAV ut~sttas c:ime S803, a TAX-é ~807 .
Ezek leaznek a foltoz6al pontok:

PAlCH VT SB0 3 $ 9 0 0 ELSO FOLT. PONT


PARAM• t:BBO PARAMETER
ASM $900 AZ ELSO FOLT FORDITASA
OUP YT ATMASOLJA A FOLT. PONTO~
STA PARAM MENTES, ALSO BYTE
RET YT FOLT VEGE, FOROITAS VEGE
PATCH XT ll807 S910 MASOOIK
ASM .J910 MASOOIK FOROITAS
OUP XT MASOLAS
STA PARAM+l MENTES, FELSO BY1E
RET XT FOROITAS VEGE
STEP ll P C sBOO OISP TESZT

A folto:=as eqy.._t_]en blbA~ . hoSjy_ a _ p r:oJ;tr-amot lQY nem tudJ Lll


l1menten 1 , a forr-ásszav egen UJra el leli vegeznun~ a J avt -
t~& t .

A ~ebuguer egvutt ke~e l i a BR ~ és PATCH utastt~ssal deft-


nl~lt pontolat . Megny1lvénul ez abban la, hogy azt a

DISPLAY BRK

utaa1 t~a•u•l l i stazhatJul 1, 1 • • a BR ~CLR utas 1 tással torol -


hetJuk. B~nJurh avatcaan •
BRKCLR ALL

Ha a progrAmot teljes aebeasággel k1vanJuk l lprobalnt, ezt


az

EXECUTE < c:i m>


paranccsal \nd lthatJu k el. Ilyenkor a foltazasok ts mü~od ­
~ m•liil.e•dtg_az i nt•n t•.!..J•• aeb.!!!!_s~el. A <. c: im .> el hag yasa
esetén a prjgram az utasit4asz4mlaló <PC> értékétol 1ndu l .
A programb6n eloforduló BRV utasttasak segitsegevel 111. a
RESTORE gomb megny omas4val viaszakeru l hetunk a debuggerbe.
78
A fsnt1ekben egy olyan p~og~amozá~1 e~zkozt 1sme~tunk meg,
amely - ha némely mRgold~s~n v1tatkozn1 is lehet , mégis -
!t9Y _e.!tl da~;;: e~U!!.[l_ ft11!!.9.fll d_ot t _ R~QQ~am.=.beJoi'=-at.isa ~or n yez etn
~d a 6510-ea assembly prograrnek feJlesz t ésében. K1váloan
alkalmas arra, hogy a program teszteléset a prog~amozással
párhuzamosan megte~vezzuk , a p~og~amban vizsgálat1 pontokat
i ~junk elö, ott bizonyos feltételek teljesulését várjuk el,
prog~amozott teszt-ágyat készitsunk. Alka l mas a szub~ut1nok
egyen kenti k 1probálására , ennek során a ko~nyezet szlmula-
l.isé~a . Seg1tségével az elkészult p~og~amot elemezhetJuk,
hangolhatJuk, sebessegi összehasonlita vizsgálatokat v egez-
hetunk. Nagyobb l&legzetu assembly prog~amoz4sl munka ese-
tén fellétlenul Jav.c..;;olJuk a l l..almaz41iiát .

~e~sokk~n~l_ _ nagy_mérJ;_eJ.<ben .e_ §...Oftware-terméh ~~té~c et né-


hán y bánto h1anyo1iis.iga sem , amelyek legfontosabbJal
a sz1ntaxis nem hovetkezetes,
a monitor-szolgáltatáso~ CmemO~lamodosll.is , kereses>
szegenyesek,
az INPUT utasitás ~ettenetesen h1ányzik .

A mon1tor-szolgáltatások szinle telJes h1ányát nyilvan az


okozza , hogy a debugger eredetileg APPLE mikrogépre kés~ult,
ahol a mon1tor ROM-ból elé~heto, de ez a Commodo~e-n sze~eny
vigasz. Pótolhato ez egy egyszeru mon1to~ betólteaevel, ha
van e~~e helyunk a tá~ban. A tobbi problémára nem tudunk
o~vo.aságot.

79
5. Mit proaramozzunk, ho9.Y..._2rogramo::zunlc assembly fl'L&lven?

Az eddigi feJezetek az asseMbly prDQramoz~s eszközt~r~t


1gyekeztek is~ertetni. Ennek a feJezetnek a ~élja az assemb-
ly proQra~oz~• mód•zertan~nak bemutat~sa . Ez sokkal nehezebb
feladat, mint az 1-4. fe jezet lexik~lis jellegu osszafogla-
l ása i .

A fo neh•zséget az okozza, hogy egyar~nt ~1v~nunk szolg~lnl


az érdeklödb amator és a tanuló (majdani) profi igényelnek,
sok érdekes részletét fel kivánjuk v1l lantan i a programozás
ama fejezeténe k, de meg lS kiv~njuk alapozni a kovetkezetes
munkát.

M~r az elso feJezetben vol t rola szó, de nem lehet elégge


k1hangsulyozni azt, hogy maga ~~ramozás a fela~at meg =
oldásának fontos de nem_~yetlen, sót nem lS a legelso le-
peaa. Ha azt a ~imben feltett - kerdést kivánJLik megvála-
azolni, hogy m1t programozzLlnk assembly nyelven, elós::or is
le kell szogezn1, hogy a programoz~si nyelv- és az egyéb
felhasználando soft ware-eszközok - k1választ~sának kérdeae
~sak a problama pontos felmerése és az 1gények meg1smerése
után dontheto el. Altalánosságban kimondhato, hogy csak azt
programozzuk assembly nyelven, am1 elkerulhetetlen. Elke-
rulhetetlen azert, mart a kiv án~ hatékonys~g, spe~1ál1s
lehetoségek igénybevétele, s~b . ~sak ezzel az eszkezzel
valosith&tok meg . Ne programozzuk assembly nyelvan azok~t
a feladatokat , vagy fel~datrészeket, amelyek mag~sszintu
nyelven i s elfogadhatcan megoldhatók , mert az a~sembly
programozás emberi és gép1 idóráforditása sokszorosa a
magasabb sz1ntu feladatmegoldásénak. Ne h&bozzunl: , ha egy
feladatot részekre kell szabdalni és egyes részelt assembly,
mas reszeit magasabb sz~ntu nyelven <pl . BASIC> ke l l megol-
dani. A tobbletráforditás , amit a kulönbózo nyelvu részek
lnterfa~e-inek kidolgozására forditLlnk, busásan megtárul a
magassz1ntu nyelven valo programfejlesztés hatékonyságával.

A fent1 mondatban elöfordult egy szó- interfa~e - amelyet


sok értelemben, sokféle ~élra használunk . Akár hardware,
akár software ertelemben baszelünk róla, m1ndig részrendsze-
rek ka p~solatán ak jellemzésére szolgál . Ha ki~s1t képszeruen
akarJuk lefordítani az angol eredetit, &zt 1rja le, hogy az
egy1k részrendszer milyen ar~át fordítja a más1~ felé . A
programozás során lepten-nyomon programegysegekk el es azok
lnterfa~e-ével találkozunk, amelyek pontos, hatékony megfo-
galmazása a feladat dekomponálását jelenti es oriási lépes a
megoldás felé. Kulbnosen fontos az 1nterfa~e tökéletes i sme-
rete, ha a progr~mot egy más által irt progr~mrészlethez kl-
vánJuk illeszteni, amelyre boven találunk példát ebben a fe -
Jezetben. Ebben az esetben nem az interfa~e meghatározása -
mivel abba már nin~s beleszóláaun k , hanem alapos meg1smerese
a záloga a aikeres feladatmegoldá•na k.

80
A Commodore 64 memor1aofe l osz t ásának ismerete inkabb a mikr·o-
proce~szor tsmerteteséhez k 1 vánkozna, 1tt v1szont nem hard -
w are- l alrá~t akarunk róla adn1 , 1nkább azt a naqyon 1~ gya-
korlatt kerdest. probálJuk meqválaszolnl , h ogy h ov~ helyezze
el a z assembly programozó program j ~t es adc.tta l L . l, ulonosen
-fontos ez abban az esetben, ha nem onálló programot 1runk ,
ha11em - m1nt által ban- m<ls a.ltal 1rt sooftware-he::, l eq-
gyakrabban a BAS I C rendszerhez, a ~ERNAL-hoz és eselleg egy
f e ! ll"'s::nálOl BASIC programhoz is akat ju l ka pcso!n1 progra-
munkat . Ekkor naqyon -fontos, hoqy ne használjunk olyan
memor 1 ateruletet, amelyet az eml i tett , egyuttmu kodb so-fl
ware-ek is hasznalnak, olyan Célra, amely azok funk c lOJaval
osszeoferhetetlen . E::ert ebben a fe Jeze lben memoriaqazdalko-
dáson m1nda::o~at a:: 1smerete~el értJuk, ame ly a hardware ,
a fontosabb f ir mw<H e-ek és seftware-ek memor l.allas.:nálatána k
Jellemzese .

A Commodore 64 memo•· iáJ"' B lbyte-os res::e~re van o~.:tva,ame­


lye~ ~özul nehanyan tobb példányban 1s l étRzhetnek . E~ azt
Jel enti , llogy f l.< i kailag ugyandzon ct memOrldterLi l etell töbl:!_
memor1abyte <általában letlel is találhato . Pontosabban,
a~okon a c1muken ($A000-S BFFF ,S0000-$0FFF,SEOOO- ~ FFFF> , ahol
ROM van , RAM l S van , ném1~éppen elrejtve. Ha az llyen kettos
memoriabyte-okC\t lrJul , d~ ertele m1ndiq a:: adott c1rnu RAM-bil
Hcl v1s:ont olvassuk, akkor vagy a ROM vagy a RAM tartalmát
l á t Juk , a t tol fuggoen , hogy az 1 . c1mu lnpul - oulput req1sz
ter megfel elo bltJelnek értéke m1lyen. A bitek es a memort.-
s::eletek oss~efuqg&se a ~bvet~ezö:

o. bl t $AOOO-S BFFF
l . bi t $EOOO-$FFFF
2. bi t soooo- ~: oFFF

Het~ meqofele!o bit etté l e m~q.as , a mll r o ptocess:or az adolt


elmen levö ROM-byte-ot o l vassa, ha alacsony , a RAM-byt e-ot .
A $0000-S OFFF- J g terJede terulet ~e::el é se ~ 1csit sp ~cJa l l s ,
mtvel annak egyes resze1n haram memor 1 a-ch1p fedi at eqymá.t .
A ROM-on es a RAM-on l 1vul erre a teruletre esnek a néqy Jn-
terface-chip, a V I C I I kepernyokezelo, a SIO hang ve~ érlo é s
a ket C IA általános lnput /output ve~erlo ch ip reg1szlere1.
E~ek kepe~ek arra- , pontosabb.an a VIC II képes arra-, hogy
arrn kor s::ukseges 1 o l vasrti tudJon a $ 0000-tól a $OF-FF-l g t er-
J edo ROM-ból , amely a képernyön megjelen 1 the t o karakterek
képet tartalmazza .

A ROM- ok alatti RAM-ok has;ználatára r·ov1 dosen v1ss::aterunk ,


de elötte szóljunk egy pár szot a memor1a egyéb resze1rol .
Nem e~kar juk 1 lt rész l etesen 1smertet.n1 a memor1a fontosöbb
c1meit, h1s::en azt igen sok mun l ában megtal~lhalja a: ol -
vaso <ld. a mellél e l t lrodalom-jegy::eket> , hanem •nl.éibb a

81
memori~ ~eve&bé fontos rés~eil akarJul fellér~épezni, a=o-
kat a terulete~at , ahov~ elholyezheto általunk 1 rt program .

H~ egymag ában mulodo gRpliOdu programot a~arunl l~sz1ten1


-ami eléq r 1 t l • - az 1 . byte meg~elelo állitás~val rendel-
kezé•ünkre ~ll a teljes b4 K memória. E l kor l& l eFulendo a
0-~s és 1-s lapuna programal tárolása , hiszen - Iulonosen
a~ ulObbit - ~ proce~szot spec1álisan hasznalja .
MegJeqyzendo , hoqy az I /0 ch t pek a SDOOO-SDFFF - >Q Ler1edo
on••onoriaterulet vgyeL rés;zel csa l olvaii>hatOI. 64"- RAM <iqC!..:il
cs.al a bov1to eqyseq <carl1 d qe> OAME é!. EXROM vono\loikiflul< ak-
llvl=~ lá ii>aval érhetö el .

H~ proqramunkban támd&Lkodunk c~ ~ERNAL ruL1nol r a é~ / vagy •


BASIC ROM- ra, a: a la t luk l9vo RAM-ot már csal ré~zlwuu~Qn e~
Ct:>cll .AbiJ .. n .az 1 dci1Jlllo<nalbc~ro l ooikli.:n..il h cll J Lll , .anli l~" <.\ fent>
ROM okra ninc& s.zulséq.
H ..fiASIC progr •.ttnm .. l i& eqyult l. iv,)rounl mul.ödni,
bonyolOdlk . Ilyen~or lS s.~abadon haszná l hatol

e1 null .is l apon az $FB-$FF .;.i mel ,


h.. nem ll as.: ná l1-1n l It oa.: ot l ás egysoqt.•t ,
t erJede elmul 1s,
lmenet 1l eq egy soerag byte a nul l 4s l.apon, példi\lénl
S4E-$6 0 és $ 26-$29 vagy $14-:Jl5, am~ lye ket '-4Y SVS
BAS I C ulasitás~~ l h ~ vott assembly rutin~an ul r on tr. a
tun~, de~ BASIC ~s ~rhoatJa azoke~.t,
$ 200 _+elo l t & c i_fl!e!" a S_3_;s4-!:ol S FF-19. <h• ner11 h~s.:-
náluni laLeltás egyseget l,
a ~COQO-tól JCFFF-1g.

A l &vul, amel yek kuzul a X334-X3FF rov t dcbb


+e n tie~en BASIL
kiegés~ltések, a $COOO-$CFFF h osszabb proqroikmol szaméra eló-
nyo~ , erlophatunl helyet v. BASIC-programol· tarolás4rd ~~ol­
g.ilo tlilrulotbol 111. A BI)SIC -programo! tarolásara rwndclt.
memor &~rész (SU801-J9FFF> felos.:tás~l a lovethezu po1ntere k
mutoal J 1. :
[iASI C pr egrarn l e.:delo <r endszrr 1 rot .t>BOt)
BASIC v a ltozo l kezdaLu, e~.mely ·ilt.ol.:lbv.n
l o:vetlenul a pr ogr .. m utlln lovl?tl~oo~::>l,
ert él e annak hosszátal +ugg
S..2F -*'30 BASIC tombo~ lezdet~
$3 1 :5>32 BASIC tombo l vege+l
:J3> l>3 4 str 1 ngek lezdete+l (v1gy -dl, c.: d l~qmaga­
sabb c1m , am1n s t ring van, 1nnen v&sL=afelé
l er)ed a S.31-S.32-lgl , rends~er1nt $AOOU
J 37 - -l 38 BASIC ter u let v~ge, r nds:erinl •AOOO

Ezen pointerei áll1tásával helyet s::ab .. dllhv.tunv +el as~emb ­


ly programunl-n~l. Igy pl. a l'2B-:T2C f al Jebb ll t tasával a
:J801 ~sa becillllett eim lö.:olt1 terulet telJesen szabadon
használható. A BASIC memOria vegén a $33-$34 es .. ~ 37- $38
leJJebb állit..laávall nyertu•tunl memori..lt ~AOOO-ig, ahol a
BASIC ROM kezdadi l . Egy betoltott BASlC program moqott a
82
S20-S2E fel Jebb ~llitásaval szab~d1thatun~ fel memor&ateru -
letet a reg1 értektol Ca pr ogram valosáqos vogel az L'J er
téklo Ca BASIC változek kezdete> . M1ndezen muveletek u tár
kl kell ..dra egy CLR BASIC ul .. &l lát.t v o\Qy L'OY JSR • A56E!
assemb l y utas1t<.1st , hogy a változtatáso~at a BASI C llltwr-
prcler tudoma•ar a ho:: zu l . l q y qy•l or 1 meqol d ás, hogy "'~ «5-
semb l y betetek a BAS l C p r egr am moqot t vannal , és a.::: al
eqyut l Ló l todnel be a l át b<L Eid or a S AVE a z eges::et l 1 men-
t> . Termeszelesen a BASIC pr'Og r am i l yenkor már nem szer -
kesozthetö!

ferJunk v 1~SZo\ a ROM alatt •elve RAM hdt>znalataho ..:. Hd ezt


ugy akar J ul megtenn1, hogy egy EAS I G programmal egyu ltmul od
JUnl. vagy a t<ERNAL-L ll<u• ..:nál JUk , l ot ulmeo1vttS. 1du IJroqr donulal
tollen l . A:: 1 l yen programr és:: l et hot .lSo n l«t l .> ROrl 1 n ... l t1 v ,
lt?loc'lt diohoz nem ford u lhat, me-q hlv<.l:o>ál 1 => c qy , a nurrndl RAM-
ban leve ~1mrol kell megv~l0s1tan1 a:: 1. byte meofelelu at -
all>lás.a után . f, iváloaol alkc~lma!t> v1s::ont ..-z a. ltHLtlel adat-
lárolásra . Erdemes ebbol 1 izárn1 a. •oono-sOFFF - •g ter J ede
r· eb:: l elet, amel y nek hoz ;z~ fer ese kor~•l meroy e .. ebb, 1 gy ~ s J 6
Kbyte Lá rol oter~tl etet nyer l.tnl , am t nem 1 s keves "' E(ISIC- le
o mu l el mtnleqy 3 8 l -J ához v1szony1 t va . A kovetle= o pruqram
e-:zt a Leruletet tesz1 elerhetov e, meg1Jed1g 8ASIC progr•mbol.
E::altal egy ~tcstl e l uresz.ladunk , belekoslolun~ a BASIC-kl -
egébzltesek vtl~qaba, am1rol még les~ szo.

A proyram feladdta • BASIC lerulet végetol • tár vOge tg let-


jedö RAM has::nalata , eltel1ntve a ~0000 és $0FFF laz6 esc
c tmektol, ~ határo~al i s beleértve . Ezt a lerulctet, mt n l
egyetlen oss=efuqgo mezot kezelt a p roqrarn, sorszamozas. l -
tol addlg ~ vegcimtg l erJed, amelyet a P I ~ belepes1 ponl o
c tmmel torténe h1vása ad v1ssza <USR lO l > . A programn.l harom
belepés1 pont J a van . A PO nevu <SYS828> a Pm E BASIC u tasi -
tashoz hason l O , a let elvart paraméter a memor1ateruleten
bel ul1 Irela tt vl ctm eb a byte- on elhelyeHedo erlél . A RESET
nevu belépést pont ot <SYS9 18 > celszer-u legeloszor rnegh>vnl a
BASIC programból , m1 vel ez az USR vektor-t a P I K belepes1
pontra áll1t Ja . Ezután USRlc1m> alaku fuggvenyhivással - a
PEEK BASIC utas1táshoz hasonlc a n - a tároloterulet adott c l -
mu byte- jának er tékét kap Juk v1ssza . Most lássuk a programal
utasitásrol utasttásra :

100 ;PI K-POK/ASS


110 :FELSO TAR< BAS I C TERULET VEGETOL-CFFF , EOOO-FFFF- >=
11 :5 ; 20K > HASZNALAlA BASICSOL
120 ;PDK FUNKCYD SYS 82B , C 1 M , ERTE~-KENT HIVHATO . CJM
125 1 LEGK l SEBB ERTEKE l" .
1 30 ;MAXIMAL l S ERTEKET P I K O CIMMEL TORTEND HI VASA ADJA
135 ; VISSZA, ERTEK 0-255
140 ; PIK FUNKCIC USRCC JM >-t<ENT HIVHATO
150 ; RESEl FUNKCIC SYS 918-KENT HI VHATO
160 Zl = $ 14
170 FAC • $61
180 Z2 ,.SA9
190 USR - t:3ll
200 * • t'33C
83
210 BASVEG •$37
220 CHRGET - $73
230 GETADR • S:B7F7
240 VTOFAC • S:B3A2
2:50 FRMEVL • 4AD9E
260 AYTFAC • $8391
270 POK JSR CHRGET ;VESSZO
280 JSR FRMEVL. ;CIM FAC-BA
290 JSR GETADR JFAC-BOL CIM FORMABAN Zl-BE
300 JSR NOVEL ;l2=Z1+BASVEG
3 10 JSR CHRGET J UJ.ABB VESSZD
320 JSR FRMEVL ;ERTEK FAC- BA
330 JSR GETADR JFAC-BOL CIM FORMABAN ll-BE
340 LOY * O
3:50 LDA ll 1ALSO BYTE-JANAK
360 STA Cl2l , V JTAROLASA A MEGADOTT C IMRE
370 RTS ;VISSZA A BASIC-HEl
380 NOVEL CLC Jll-HEZ HOZZAADJUK A BAS IC VEGPOINTER ERTEKET
390 LDA BASVEG
400 ADC l l
410 STA l2
4 20 LDA BASVEG+1
430 ADC Z1+1
440 STA Z2+1
441 CMP lt$00 JIF l2 >0000
443 BMI RET~ JV
1

44:5 CLC
447 ADC *S: l u JZ2•Z2+$1000
449 STA Z2+1
4 :50 RE T NOV RTS J VISSZA
460 PIK JSR GETADR JFAC- BOL USR PARAMETEREKENT MEGADOTT
46:5 JCIM Zl-BE
470 LDA Zl JHA Zl•O, A MAX CIMET KERDEllK
480 BNE PIK1
490 LDA Z1+1
:500 BEQ MAXCIM
:510 PI Kl JSR NOVEL ;Z2•Zl+BASVEG
:520 LOV tt O
:530 LDA tt:53 JADATOK ELOKESZITESE
:540 SEI JMEGSZAKITAS MASZKOLASA
:5:50 STA 1 1 ROM KIKAPCSOLASA
:560 LDA <Z2> ,V JERTEK KIOLVASASA
:570 TAV ;Y-BA
:580 LDA tt:5:5 1ROM VISSZA
:590 STA 1
600 CLI ;MEGSZAKITAS ENGEDELVEZES E
610 RET JMP YTOFAC ;Y FAC-BA ES VISSZA A BASIC-HEZ
620 MAXCIM SEC ;$CFFF-BASVEG
630 LDA ttS:F F
b 40 SBC BASVEG
6:50 TAV tALSO BYTE
660 LDA tt$CF
670 SBC BASVE13+1
730 CLC J+$2000
740 ADC tt$20 ;FELSO
7:50 JMP AVTFAC ;FAC-BA ES VISSZA A BASIC-HEZ
760 RESET LDA *PIK< JUSR -> PI K
770 STA USR
780 LDA ttPI K>
84
270-290. sor - A POK belépeai pontnal a; elso feladat a
parameteratvetel. A CHRGET hivása atlépl a
BASIC azovegben szereplo soronkovetkezo
karaktert, ami a SVS82B után állo v essz e .
A FRMEVL interpreter rut 1 n, m1nt a késob-
blekben részletesen 1a tárg yalJU~ maJd, az
elso par~m éter <a eim) ertékét tolt1 lebe-
gopontos formában a FAC lebegopontos alku-
mu látorba , amelyet a lovetke:o::.o GETADR hl-
vas Ionvert ál Petbyte-oa Clmme ea helyez
Zl - be ( $14 -Sl~ ) .

300 . sor A NOVEL s~ubrut1n , amelyet aláb b meg meg -


Vl zsqá l un i , e:: t a:o::. értekel megnoveli a
BASIC terulet végmutatOJával, ~m1 ~
s ~a c1men talalhato es ertele alaphely::et-
•=7-
ben :JAOOO.

.3 1u -.;~o . sor - Itt a.: er telet - masCJdlh paraméter -Ile-


lye:o::.::ul az elobb1ekben meo1~mert modon Zl-
b u.

34(1-3ó0 . sor

'370. .. or POk szubrut1n v eg e , viaszateruni a hivo


BASIC progr~mbc..

380 4 ~0. sor -A már eml1telt NOVEL szubrut 1 n Zl+BASVEG-


et he l ye::1 el Z2-ben .

4óu . sor Az USR-rel h 1 votl PU, be lep &sl pont. Az


USR h1vaaa eselén az 1nterpret~r már elo-
re gondoakodll a ::árOJelbEm lévo er tel
FAC-ba toltésérol, 1gy csa l a mas.od1~ le-
pés, a GETADR-ral torteno lonvertalá~ ma-
rad.

4 70-:500 . sor - Zl ertOI (et . Ha a:: l .:.t!JytlC'-o ..


Meg vlz~>qalJU I'
nulla, a meqallapodas azer1nt ~ legnagyobb
megadhato cim&t. l erde:: ll , MAXCIM-re Ltqr ltn l.

~10 . a or A mar 1amert NOVEL hlváaa, az abszolut c1m


~1s::ám1t.ás~ BASVEG ho::::aadas.aval.

~20-~~0. s o r - Itt torténll a ROM -o~ l1lapcsolasa. Az


odd umLo l atorb;a betol t J Ul a:: 1. byto. s.::ul-
aeqrs érteket, masz l.o l J ul a megszal .l t4soo-
kat e• ~ta l lltJuk az 1. c1mu byte-ot . A
meg10zal1t~5 maszkol~sa~~ azért van s~uk­
ség - lul.;;.Jdonl(éppen e:: csal. .;a ~.ERNAL-ROM­
~a vonatkozik -, mert egy érkezo megszal.l-
t~• a k1k;a pc10olt resz rr adn4 a vezerlest ,
ahol most nem • megszaklt4s-kez elo szub-
rut 1 n, hanem a m1 ;ad;atal n~t v annalt.

86
~60-570. sor - Az adatbyte ktolvas~sa es ~ttóltéae a:: y
reoiszterbe .

~80-600. sor - V1sazakapcaolJuk a ROM-ot ea engedélyezzuk


a meg~zakit~st.

610. aor -Ez a azubrutin utolao utaal t4aa,de ez elog


sok magar4zatot k t v 4n. M1vel a ktolvaaott
ertéket a FAC-ba kell helyeznun~ a v1&a::a-
ter•s elott, i t t 1s a m•gfelelo interpre-
ter rut1nt h1vjuk meg a feladat elv~qze ­
sére1 ahelyett , hogy meg1rnánk uJra. E:: a
$93A2-n lévo YTOFAC-nak nevezell 5::ubrutln ,
amely az Y regtszter •rteket lebegopontos -
ra konvert4lva a FAC-ba tolt1.Erdeme~ fel
f1gyeln1 egy, az assembly programoz4sban
azo~ásos fog~sra . A az ubrut1nt , amelynel
htvá•a a m1 szubrutinunk utol ao utas1tasa,
neno J SR-rel tu vtuk meg , hanem JMP-pal ug-
runk r4 . Az 1nterpreter- rut1n vegen lévo
RTS tgy nem a m1 p~ogramunkra, hanem eqyu-
nesen a mtn l et htvó programhoz ter v 1 s~::a,
h1~zen annal visszatorest c1me van a verem
tetejen. Ez az elJ4r4s, amely nem nagyot
strukturált, es hatasa a programból L~~~
nem1 gyakorlattal olvashato kl , 1gen hat~ ­
kony, mtvel megtaka~ilunl vele egy c1me l
menté~1 -v 1 sazamentés1 muveletet es L byte -
ot a veremben , am1 neh.a nem elhanyaqolt. .. to
szompont .

620-740. s o r - A m4r hivatlazott MAXCIM programre~z fela-


data a megengedett maM1mál1a c1m vl~sza­
adáaa. Ezt a $CFFF-BASVEG+S2000 ~1foJezes
adja meg. A $CFFF- BASVEG a $0000-tg, a
$ 2000 az azon felul rendelkezesre ál lo by-
te-ok száma.

7~0. sor A k1~zám1tott ertéket, amelyet Y-b.. (also


hely1értéku byte> és A-ba <fe lao hvlytér-
teku bytv> he lyeztuni, az AYTFAC lnterp re-
tar rut1n az elozokbvn haszn4lt YTOFAC-hoz
hasonlóan - de ket byte-bel óaszerakva -
hel yvz 1 el a FAC-ban , am1 az USR fuggv•ny
vtaszater e ai ertéket lall, hogy tartalmaz-
za a azubrut1n lefutása után.

7ó0-800 . s o r - A RESET szubruttn feladata csup4n az, hogy


PIK eimét az USR vektorba <S311> toltse .
A kovetkezokben ugyanezt a teruletet egy k1cs1t bonyolultab-
ban , de sok esetban pra kttkusabban használjuk fel. A sortá-
roló rutin ugy mukodi k , m1nt egy FIF O-ve~em , azaz egymásután
to l the t Juk bele a byte-okat, majd a belehel yezés sor rendJé-
ben k 1 is szedhet juk oket anélkúl, hogy a s oronköve t kezö by-
t e eimét tudnunk k ene , azt a szubrutin maga tárolJa. Elöször
nézzuk magát a p r ogramot• ~
110 MC RUTIN BASIC SORTAROLOHOZ. TAROLAS BGAOR-$CFFF ,
ll :5 :f:EOOO-:f:FFFF <>•20K>
120 PUSH FUNKCIC USR<ERTEK>-KENT Hl VHATO , O HA OK, - 1
12:5 HA NEM <TUL SO~ PUSH>
130 PULL FUNKClO USR<O>-~ENT HIVHATO, ERTEK HA DK, - 1
13:5 HA NEM <TUL SO~ PULL)
140 SETlN FUNf CIO SYS94:S,BGAOR-KENT HIVHATO, AOATIRANY:
14:5 PULL
1:50 S ETOUT FUN~CIO SYS977-KENT HIVHATO, AOATIRANY : PUSH
160 Zl ~ s14

170 FAC .s$61


180 Z2 • SA 9
190 USR• S 3 11
2(10 * • S 33C
205 CHRGET = $ 73
2 10 GETADR • SB7F7
220 YTOFAC = sB3A2
230 FRMEVL • $A09E
240 ILEGAL • $8248
2:50 PUSH JSR ADRINC k.OVEn.EZO CIM
270 JSR GETADR USR-BEN MEGADOTT ERTEK FAC-BOL
272 Z l-BE
27:5 LOV # O
280 LDA Z l
290 STA <Z2>, Y TAROLASA A ~OVETKEZO CI MRE
300 LOA # O FACaO -_, Ok.
302 STA FAC
304 STA FAC+ l
306 JMP RE TOK VISSZA A BASIC-HEZ
3 10 PULL LDA NX TAOR VEGE A BEIRT ERTEKEKNEK PRINT
320 CMP ENDADR
330 BNE ADR 3
340 LOA NXTAOR+l
35() CMP ENOAOR+l
360 BEQ OVER l IGEN -~ HIBAJELZESSEL VISSZA
370 AOR3 JSR ADR INC C IMET NOVEL
380 LD Y' # O
39(1 LOA # 53 AOATOV ELOKESZITESE
400 SEI MEGSZAKITAS MASZKOLASA
41 0 STA ROM f IKAPCSOLASA
420 LOA <Z2> ,Y ERTEK ~IOLVASASA
430 TAV Y-BA
440 LDA tt:S:S ROM VISSZA
450 STA 1
460 CLl MEGSZAKITAS ENGEOELYEZESE
470 RET JMP YTOFAC Y FAC-BA ES VISSZA A BASIC-HEZ
480 ADRINC INC NXTAOR CIMET NOVEL
490 BNE AORl
500 LOA NXTADR+l
:510 CLC
520 AOC ttl
530 BEQ OVERFL CIMaOOOO -> ~EMORIA BETELT
:540 CMP #$00 HA A CIM >•50000 ES ,SEOOO
550 BCC AOR2
560 CMP tt$EO
87
570 BCS AOR2
580 CLC
590 ADC tl$1 0 AKKOR HOZZAADUNK $1 000-T
600 AOR2 STA NXTAOR+ l UJ C IM FELSO BYTE
61 0 AOR1 LDA NXTADR UJ CIMET Z2-BE
620 STA Z2
630 LDA NXTADR+1
640 STA Z2+ 1
650 RTS
660 OVERFL PLA VISSZATERESI CIM VEREMSOL
670 PLA
680 OVER1 LDA tl$81 FAC•- l
b 90 STA FAC
700 LDA tl$80
710 STA FAC+l
715 STA FAC+5
720 LOA fl O
730 RETOK STA FAC+2 J VI SSZ A A BASIC-HEZ
740 STA FAC+3
750 STA FAC+4
760 RTS
770 SETOUT LDA tiPUSH< 1 USR - > PUSH
780 STA USR
790 LOA tiPUSH >
800 STA USR+l
810 JSR CHRGET TERMINATOR
812 JSR FRMEVL CIM - > FAC
8 14 JSR GETADR FAC - > Z 1 <$1 4 / $1 5)
816 LOA Z1
818 STA BGADR
820 LDA Z1+1
822 STA BGADR+1
842 SETOUt LDA BGADR 1 NXTADR•BGADR
84 4 STA NXTADR
846 LDA BGADR+l
848 STA NXTAOR+1
850 RTS
8b0 SETIN LDA ti PULL< 1 USR -> PULL
870 STA USR
880 LDA tiPULL>
890 STA USR+l
900 LDA NXTADR 1 UTOLSO C IM ELMENTESE
9 10 STA ENDADR
920 LDA NXTADR+ l
930 STA ENDADR+1
940 JMP SETOUt 1 ES NXTADR BEALL I TASA AZ ELEJERE
950 NXTAOR .BYTE 0 , 0
960 ENDADR . BYTE 0,0
970 BGADR .BYTE 0 ,0
A progrAmot érdemes részletesebben 1s meqszemléln1. Néqy be-
lépésl pontJ• v•n BASIC-bals

88
1. A progr~mot - amely a $ 33C-tol 1ndul - eloszar a
SYS 94:5 , KC BASIC utaaitáasal hlvhatJuk fel. A lliváa a
SETOUT belépés i pontnak felel meg, amely elokész iti az
ért ékek beirását a memoriába s egyuttal tudomására
hozza az assembly programnak a rendelkezésére alle te-
rület kezdee lmét <KC> , ez egyszeru esetben $AOOO lehet .
2 . Ezután tetszés. azerint sokszor hivhatjuk a programot
az USR <E> függvény a k tivizálásával, ahol E az elhe-
lyezni kivánt byte értéke . A fuggvény értéke O, ha a
tá rolás rendben ment, -1 1 ha átleptuk a memória felso
határát ( $FFFFl .
3 . Az értékek k>olvasása a SYS 987 BASIC utasttással fé-
SZltheto el ó.
4. Az egymásután h1vott USR<O> fuggvények visszaadott ér-
téke a soronkóvetkezo byte értéke, ill . -1 , ha tul lép-
t ük a beirt byte- ok mennyiaegét . A v1sszaadás FIFO t i -
pusu,tehát az elsonek beirt értéket k ap juk vissza az
elso olvasáskor.

Vegyük •orra a belépési pontokat:

770-800. aor - A BASIC USR f üggvén yne~ ~gy vektor felel


meg, amelynek cime $ 3 ll-$312 .Ha akttvlzál-
Juk az USR függvényt a BASIC programban, a
zárójelben lévo kifejezés értéke a FAC le-
begopontos akkumulátorba kerul ($61-$6:5,
$66 a FAC eleJ elét k ulon is tárolJa) es
megh1 vódik a $ 3 11 -$3 12 v ektor által hlvat-
kozott gép1kódu program. A program output
paraméterét , amely szinten lebegópntos szám ,
a FAC-ban adja vissza . Ezek a programsarok
a $ 3 11 - $ 312-be a PUSH cimke által hlvatko-
zott cimet töltik, igy a kov etkezo USR hl -
vá& oda a dJa ma jd a vezérlést.

810-840. aor - A SVS utasításs al h1 vott géplkódu program-


részlet futásakor a BASIC interpreter ál-
tal olvasandó kóvet kezo kar akter <ame l yet
a $73 cimu CHRGET •zubrutin ad meg> a gepl-
kodu program eimét meghatározó kifeJ~%ést
koveto byte. Jelen esetben z egy vessze .
Ezt a CHRGET hiv4saval lépJu~ ~t, ellenor -
zés nél kul. Ezut~n egy n 11mer1 kus kl-feJez est.
v •runk el,amelynek érteke a felhaszn4lando
terulet kezdócime . A BASIC interpreter
$A09E c1 men kezdodo szubrutlnJa, amel y a
FRMEVL <Formula Evaluat1onl nevet v 1seli,
a kovetkezoket haJtja végre•
meghatározza a ki-feJezes erteket es azt
elh e lyezi a FAC lebegopontos akkumulá-
torban. Ez nagyon Jó, de nekunk a c1m
kétbyte-os egesz alakra konvertált alakjá-
ra van szukségunk. Ezt. a konvert4 lást tel-
Jesen fe lesleges megirnun k ,mi vel éppen ezt
89
~z in t erpreter $ 87F7 kezdöc i mu GE TADR azub-
ruti n j~, a mely ~ FAC ér téké~ kétbyt e - oa ,
e i m + ormátumu <~l~csony b yte - m~gas byte)
egésszé alakitja és elhe l yez1 a $1 4-$ 1~ ci-
me k e n <ll> . Ezt ~z érték et áttöltjuk a sa-
ját terúleten lévö BGADR é s NXTADR válto-
z o~b a . Utobbi m~Jd a tár oló utolso +oglalt
eimét mutatja .

8~0. sor Visszatérés a BASIC p rogramba.

2~0 . sor Ezt a belépési pon t ot i r t uk a $ 31 1-$31 2


v ektorba, tehát az USR hi v á s a kor ide kerul
a vezérlés. E kkor a z á r ó j el ben lévo ki+e-
Jezés érték e FAC-ban v a n . El óször a tárolás
po1nterét <NXTADR> n övelj uk meg egy byte-
tal . ezt az ADRINC azubr u t in végzi, amel y
~ 4 80-650 sorok b an helyez kedik el .

480-~20 . sor - Itt nevelJÜk a kétbyte -os NXTADR mutatót.


A kisebb helyiértéku byte- ot helyben, a
nagyobb hely1értékut (ha szúkséges, lap-
határoni az akkumulátorban.
~30 . $cr -Ha ~ +elso byte is nulla, kimeritattuk a
t ár~t , több értéket nem tudun k elhelyezn1,
~z OVERFL eimkére ugrunk.

5 4 0-590 . sor - Ha a eim $ DOOO és $DFFF közé esik, átlap-


Jük ezt a tartományt ugy , hogy a magasabb
he l yiértéku byte-ot $ 10 hozzáadásával SEO-
ra noveljuk. Azoknak, akik a v1zsgála tot
<>= $DO és < SEOOO > +elesleges avatosság-
nak tar tják, hiszen a $DO-ra vale egyenlo-
ség -vizsgálat is elegendo lenne, ajánlom
tanulmányozásra Murphy torvenye1t •.•

600-650 . sor - A m~g~s helyiértéku b yt e tárolása, maJd az


aktuál1s c 1m áttoltése Z2-be ( $ A9J, amely
~z lndirekt cimzesmodhoz kell, mint nul lás
lapon leve pointer. Ez a ketbyte-os mut~to
moat a tárolásra használt byte eimét tar -
talmazza . Ezután v1sszatér a h1vás helyere .

660-760 . sor - Mielott visszaugran ánk, nézzuk meg gyorsan


a tulcsordulás esetét. Eloször let erteket
kiveszunk a verembol, mivel 1tt ki +ogunk
hagyn1 egy szubrut1nbol va lo v1ssz~térési
<RTS> utasitast és ennek vektora még a
stac k-ben van . Peraze ez nem szép m~gold~s,
nem strukturált, nem illendo, csak haté-
kony. Ezután lebegopontos -1-et toltünk a
FAC-ba ($8l,$80 , 0,0 , 0J és sao-at a FAC
külon elöjelébe, amely Je lzi, hogy a sz4m
kisebb, mint O . A rutint z~ró RTS a BASIC
programba viaz v1asza.
90
270-280 . M1vel ~ fuggvdny p~r~métere már ~ FAC-ban
sor -
van, ezt a már jól 1smert GETADR szubru-
tlnnal visszuk $14-• 15-re (Zll. Ebböl csak
~z alsó byte-tal foglalkozunk - teh4t a
256-os osztás maradékát vesszuk, ha a kl-
feJezés nagyobb 256-nal Az Y regiszter-
be nullat toltunk az ind1rekt 1ndeMelt
cimzesmed medos1tó értékeként .
290 . E.: a lenyeq, a byte-ot lerakju~ a Z2 altal
muto\tott helyre.
300-~06 . sor - A visszMtéreshez a O fuqgvenyerteket ($6Í-
$66-ig csupa O> tess:u~ el es a RETOK eim-
kén at - kJhasználva MZ ott mar ~Qy&zer
le1rt utas1tasohat vLsszaterunk a h1ve
BASIC proqr~mhoz.
860-940. sor - Ez a belepes1 pont <SETINl az olvasas elo-
~eszltese. A;: elso lepes az USR ve~torénal
átallllasa proqramunl PULL c1mkejere. A
NXTAOR most a lequtolJ~ra b~1rl bytP cimet
mutalJM, ezt elmentjul ENOAOR-be, ma)d a
SETOUt c1 mkere Llgrunk , alle l 1 smét "' E<GADR
tartalm-it - a terulet l:e.:doc1met - tolt 1ul.
NXTADR be es v1sszaterun~ a BASIC prog~am­
ho.:.
310-360 . sor Az u1onnan be•llilott USR belepesi pont.
Az elso lépés annal v1zsgélata, hogy vege
van-e a beirt érteleknek -ENOADR o\lapJan-,
azaz az elozo lepésben Vl&szaadott byte
már az utolse byte volt-e .Ha 1gen, v>s&za-
teres az OVERl c1m~én ~t, amely megeg y ezik
OVERFL hatás~val, k1veve a veremmutató
~ettbvel vale nbvelését, h1szen ~z i t t fe-
lesleges <~root, ártalmas) lenne .
370-380 . sor - Az ADRINC h~vasaval a mar ~smert rut1nnal
novelJul NXTAOR ertelet. Itt tulaJdonlep-
pen a4 ADRINC-ben lévo v~zsgalat, hogy
NXTADR negh~ladJ~-e $FFFF-et, felesleges,
h1szen az ENDADR-ral vale osszehasonlttas
elobb Jelez, de 1g y nem lellett egy kulon
t>ZLtbr1..1tlnt 1rni , meg egyébként ~s
<Murphy . . . l . Az Y regL&<:ter nullára allt-
tasa 1tt 1s a: 1nd1re~t ~ndeMelt c~mzest
szolgál Ja.
390- 47u. sor - lásd az elozo programhoz fuzott megJegy-
z ese~ et.
Ezzel k1s programun~ tsmertetesenek a veqere ertunk, amely
tobb szempontbel l& tanulságos volt. Eloszar ts szemléltette
az elreJtett ROM-ok használatat. Masodszor je peldáJ~t adta
a BASIC programmal egyuttmuködo program tnterface-ének, fel-
vonuitatva a ~et fontosabb valtozatot :

91
SYS utasit~• esetleges paraméter-4tadassal, és
USR fuo ovény alkalmazása és paraméter-kezelése.

Harmadazor bemutatta azt, hogyan kell a BASIC- interpreter


rutinokat felhasz nálnl az a5aembly n y elvu programbetétekben
a BASIC rendazerrel való kapcsolattart4sra.

Ebben a programban tobb olyan dologról lS szó esett, amelyet


a keaobbiekben reazletesebben foguni tárgyaln1 , de talán
hasznos e~eket az elemeket aldazor egy gyakorlati alkalma-
z~aban l~tn1.

A fent1 program egy spec1ália feladat megoldás4ra azolgál ,


arra, hogy a BASIC-terulet végétol a rendelkezesre állo
helyen, amely 20 kbyte-tól akár ~~ Kbyte-ig is terjedhet,
hogyan lehet egy puffertarclót létea1teni. Jó programozás1
gy•korlat ennek át1rasa k1cs1t más - hasznos - feladato~
negoldására, pl. fent1ekhez hasonló rut1nokka, de nem egy -
Jyte-os értékel ,hanem p l. BASIC- lebegopontos számok (~byte>
tárolásara <seg1tséqul: az FRMEVL-lel átvett lcifeJezes érté-
cet FAC-bol tölthetjuk a memóriába é~ v1szont>.

92
5.2 Ass~mblY ~ szer elés

Kicsit kitekerve az assembly szó Jelentését - pontosabban


az eredeti jelentését véve alapul azt mondhatJuk , hogy az
assembly programozás nem más, mint alkatrész~k összeszere l é-
se. Aki egy kicsit is bel ekóstolt már az assembl y programo-
zásba , biztosan észrevette , hogy általában ugyanazon vagy
roppantul hasonló elemeket, néhány utas1tásból álló program-
reaz le teket kell kombin4lni . Nyi~ván ezért is kézen4e kvö
- ha lehetoség~nk van rá - a makróassemblerek használata .

Ismerked junk most meg az assembly programozás néhány egy-


szerű é p itókóvével , alkatrészével! Hogy a programrész l etek
Jelentése anélk~l is nyi l vánvaló legyen, hogy soka t magya-
ráznánk, baloldalt egy BASIC programréazlet et, jobboldalt
a meg+elel ö vagy nagyon hasonló assembly utasítássorozatot
adjuk meg.

Ertékadások :

AA= l 2 LDA #1 2
STA AA

LOA 8
STA C
Aritmetika egybyte-os értékekkel :

SM=SM+ 20 LDA SM
CLC
AOC # 20
STA SM

S M=SM-1 3 LOA SM
SEC
sac tH 3
STA SM
Z•Z+F-2 LDA z
CLC
ADC F
SEC
S BC # 2
STA z

ASL z

93
Z• Z• l O LOA z
ASL A *2
ASL A *2 -> *4
ASL A *2 - > *8
CLC
ADC z
CLC
ADC z B*Z+Z+Z
STA z
N=N+ l I NC N

N•N-2 DEC N
DEC N
Programstruktur•k •
FOR 14•1 TO 5 LDX til
CFEJ
NEXT N
INX
CPX 1t5
BNE CFEJ
FOR N•O TO 100 STEP 4 LDX ti O
CFEJ
NEXT
CLC
TXA
ADC ti 4
TAX
CPX tll OO
BNE CFEJ
FOR NmS+S TO t: LDA s
CLC
NEXT ADC tt8
TAX
CFEJ
INX
CPX K.
BNE CFEJ
Meg1egy:zéa : .a Clklus legalább egyszer lefut'
FOR N•10 TO ST EP-l LDX til O
CFEJ
NEXT
DEX
BNE CFE.J
IF K<>O THEN GOTO 500 LDA K
BNE CIM500

94
IF K+3 < F THEN GOTO 5(11> LDA t(
CLC
AOC
CMP F
..
~

BMI CIN500
IF FF ) • O THEN GOTO 500 LOA FF-
BPL CIM~OO

IF l > O THEN 1', "' 1 3 LDA t•


BMI NEXT
BEO NEXT
LDA 1+13
STA l.
, NEXT

LDA N
BNE NEXT
LDA s
EOR #$FF LOGII AJ t OMF'LEMENS
CLC:
"oc #1
STA s VETTES IOMPLEMENb
NEXT '
MeQieqv;:~s : S 10'4 'ti.Jyle-o'lio let.l~<~» lomp t emlo!rlli .abr ·1 -ol,.)~~~ -..:~m.

IF ~ .::O ANI) O LOA


THEN GOTO l OO Ct tP ll ..~.
BPL I~EX1
CMP ~o
BPL CH1100
I~EXT

JF l.< F OR l = 32 LOA l
THEN GOTO 100 CMP F
BMI ClMlOO
CMP 113~
BEO ClMlOCJ
létbyte os drltmett~a:

1NC N
BNE FOLYT
INC N-+1
r-OLY T

él 1'&ltou b v le llOvl•l és•: &ti l or s:::ukseyu10, to a L\ ó!


•l sO t.Jyl~ O-ra uqr1l.

t~-1~-1 BtT N
RNE FOLT1
DEC N
FOLYT DEC N+l

95
Az alsó byte-ot nem DEC, hanem SBC utasit4ssal caökken-
tettuk, mivel a DEC nem 41litja a C jelzöt , amelyet a O-
ról caokkenés f1gyelésére haszn4lhatunk. A Z Jelzo nem
Jó , mert nem abban a l~p~sben kell a felso byte-ot csók-
kenteni, amikor az alsó byte O , hanem a kovetkezöben. A
programresztetet még sokféleképpen meg lehet irnt, ez i s
egy Jo megold4a.

NN• C+B <C és B egybyte-oaak, LDA •o


NN klttbyte-os) STA NN+l
CLC
LDA C
ADC B
STA NN
BCC FOLYT
INC NN+l
FOLYT

MegJegyzés: az alsó byte-ba az egybyte-os bsszeg , a felso-


be a C jelzo érték e kerul .
NN• KK+B <NN Ita KK kétb yte-oaak , LDA K +1
B RgybytR.,-OS) STA NN+l
CLC
LOA KK
ADC B
STA NN
BCC FOLYT
INC NN+1
FOLYT

NN•KK+LL <m tnd kétbyte-os) CLC


LOA KK
ADC LL
STA NN
LDA KK+ l
ADC LL+1
STA NN+l

MegJegyzés : ez a legeqyazerubb, hiszen a C jelzo és az ADC


utaa1tás éppen a ketbyte- oa osszaadást aagiti .
NN•KK-8 <NN és KK kétbyte-os, LDA KK+ l
B egybyte-os) STA NN+l
SEC
LOA KK
SBC B
STA NN
BCS FOLYT
DEC NN+l
FOLYT
NN=K~-LL <m1 nd l é t byt e-os> SEC
LDA Kk.
SBC LL
STA NN
LDA K~ + 1
SBC LL+l
STA NN+ l

ASL NN
ROL NN+l

MeqJeQy~ é s : ASL egy b1ttel balra laptet1 a sz~mot, a~ utol


so b1l helyére O lep be , ez leltevel vaJO azor-
~ast Je l ent . A ROL megegyezik ASL- lel, de az
elozo lépésben lilepett átv1telt <C J~lzobol>
bev1~z1 a felso by~e legalso he l ylértekére.
Neggyel vale szorzas ~ +ent1 k•t uta~1tás meq-
s.l . L . Nem l.e tto hatv.:.nyavc<l valo s::ur;:ás lép-
letesel és 11oz::actk.ásol. homt...lroálás:Sv<~l lE.!tu;-L."é-
qes, naqyobb v~gy v álto~óban tárcll ~~ámmal va-
l o s:!Ut zasn.al C: ll l u:. l ordun•es .,~er ve..:n 1.

Proqr c<mstruklurak letbyte os ~~ámoklc<l:

l~ NN • U THEN GOTO 100 LOA NN


ORA NN+l
Bt~E CIMlOO

IF NN > I,K THEN GOTO 100 LDA Nl~


C11P l ~
BNE ClMl(HJ
LDA NN+ l
CMP t h+ l
BNE CIMlOO

FOk NN •~ TO 4 20U ( 4 20U= ~l068) LDA *1 1>69


SlA VEG
~~EX l LDf• *'"'' (l
SlH VEG+ l
LDA #• .1
STA NN
STA NN+l
CFEJ

INC I~N
BNE Fl
It~C •l
Nl~
Fl LDA NN
CI1P VEG
BNE CFEJ
LDA NN+l
C~1P VEG+l
BNE CFEJ

97
Uqy ~rco:zul. unny1 épllORl"'m 1smert.et.és e már •legenda •l•hoo:,
hoqy az o l vaao +el1am~rJa -. bonyolult~bb algoritmuaok kepze-
sel e2elbol. Erdames proyramo:ni az lly•n egyszeru ut.aslt.~s­
~oroz-.tol +ttlhaszn~l~sával meg aklor i• , ha az ezelbol
ossze~ll1lott program nem a l•ghatel onyabb, h1szen a mukodó
prooramct utólag könny•bb hangolni , mint egy bonyolult, ele-
m•tben 1s UJ megoldást lete•zt•lni.

A +ent1wl 1llusztr~lására lássunh egy aranyl-.g h05~,u, de


1gen eqyszwru pr-ogr•mot , ame l y •z •ssembly progr.amozilsoll•u•
néhany gyakr•n elofordulo ep1tokovet h•sznál és agye~ ré~: ­
fel~d.al&uv-. 1 s:inlen aurur1 találl ozunl . A program memór'la-
dumpo t ir k1 a képernyöre a mon1torol magazolott stllU&áb.oLn,
eqy •orba 8 byte heKad•clmális os ASCII ertakat l S llirv.a.
A sor &1eJon • sorban l1 nyomtatott e l so byt.R c1met 1r1a k1
hex -.dectmáltsan, amelyet egy ketto~pont kovet. Bár a feladat
eQy5zeru, maglia aránylag tool, onmag;lban ~arRI<' re .. =+eladatbol
all , 1gy pl.:
hc~•declmáll& ortel beolv•sása es l orvurtalasa ké'lbytw-
o• binár1tös.i,
Lll lus s=erve:ese -.lso hatar· tol felso határtg 8 lepo•
l oz zel ,
Llináris egy- es ketbyte-os ertek lonvertálasa he~ adec•
m.alts.toa ,
Itiranda kar· akteralbol • spec1ál1s l<lralterel l. tszurQsu,
btllentyu~etrol o l v~tö4s,
kop11rnyore 1róia.
Utobbl let raszfel~d~tl<ll egy l 1c~1t elor•sz<ll<ldun~ a ~ov~t ­
lezo feJe~et tem~korébw , de megertesuk most sem oko: nehe~ ­
sége t. L~ssuk e l oszar Ol program telJes szoveget :

100 oDUMP PROGRAM -~EZDOCIHE. 491 7v• ~C(t l ::!


Il O CR • S OO
120 SPACE • • 20
130 I<.E.RDO • • 3F
140 CHRIN • I FFCF
1:50 CHROUT • SFFD2
l bO •• • cooo
170 N
180 Nl" • S: ~B
190 MUT .BYTE O
200 ALAP .BYTE O
2 10 HX .TEXT "0 1234 5b789A9CDEF "
220 1 •••••
230 KEZDET JSR ERTEK : KEZDOCIM bEOLVAS ASA
240 BNE HIBA oHJBA VOL.
2:50 L. DA N 1EL.SO ClM
2 bO STA Nf :E Z AZ AL.SO HATAR - N - BA
270 L. DA N+ l
280 STA N •l
290 TXA 1 VEGJEL
300 CMP 41 CR
3 1U BEO f !IR 1HA AZ EL. SO E Fi TEf, CR-REL. VEGZODO T r, N l NCS MMS H
320 JSR ERTE~ 1FEL.SO HATAR BEOLVASASA
330 E! NE HIBA !HI BA VOL.T

.. . . . . .. . . . ... . .. .. . . . -
340 Kl l R JSR DUMP
3:50 VEGE
3 bO
RTS
,. JVlSSZA A BASIC-HEZ

98
JL l l .. ltl)(.i• •u ll litlit
th &''' ~tli\F
J h l liFe l lJ :Ll ~· a ,,, rtr rf.<u nv111 o '• 1 r l
4 M~ ·• ;h , H.. ROGtON JUti. tlllli•
ll v l EO B• IH .. ~
1- • I..MI " S~'••l F
4~, l•EU &•
44v VJZbl•
(iiJ!l :H" 14111 , l l 1'\loH EkHtl
-l=>v [.JI LUS JSH UtRJtl : El lEl IU\IfltLlO l•·hf.tT!cll
4 bv c~~ • cR ll'"' CH. Vlo l .,z
t.f\IEI '' l
4 7v l• l o e.uut
IBv L.MI • SIIIl:.t. : 1<11 SI'Af..lc • Al l l h l Fl
4 '-'V H.U E.tiUE.
~ VIZSG CMl M O
!dv t1Ml SrNitiX
~""l..t Lf11 It 4
~s<• bM! S1AI"1
~4 V (•EU Slr•M
~~o ( MI' ll A t Hr• "A" iti~ Of Hl [<A
:5bO bl"l SdHAA
:570 CI'IF' It G rHA • "G' I"IIIUh Hlf<rl
:580 l<FL S'I NTA•
:590 BETU sn: r~I:.TU JOll
60V sac " A-to :t IVON JL ! "A" l OOJAI<. l lX•' l v•CT
o lO JI'"P ObSZEG :ES H01L AADJUI AZ EDD I G l
b2V S ZAt1 S EC : SZAM JOT r
bS V su.:: " o 11 IVUNJW "ll" ASCCI t ODJA IGY l ONVERTALJUI
b 3~ rE<INAH I SSA
o40 CSSZEG I..DX A[.AP tELSO Jto:GV
o:5o E<NE ac 11. : NEM, A>IOH ELTOLJUI AZ EDDIGittET EGV HE.I..Vl-
b~S r ER r Et t EL
bbO STA N tEL SO JEGV N·E<E
b 70 I..DA li O
b 80 STA N•l r FELSO BYTE O
b 90 LDX lt 4 ;JELOLJU~ ALAPE<AN , HOGY MAR NEM ELSO JEGVROL VAN SZO
700 STX A[.A~
7 10 JMP C IKLUS :ES OLVASSU!. A I.OVETI EZO ~AkAI TERT
720 OCit ASL N JA MAf< BEOl-VASOTT SZA~RESZT SZOf<OZZU., 16-TAI..
730 ROI.. N•l 1AMl EGV HEXA HEI..VlERTEI ,NE~ FELE[. MEG
7 .. 0 DEX
7:50 BNE OC ! ~
7b0 OSSZF Cl.. C :HOlZAADJUI AZ UJ ERTE~ET N • HEZ
770 AOC N
780 STA N
790 ace ot
8 00 INC N+l
B I O Ol J MP CII<[.US ; ES OLVASSUK A KOllETlo-E ZO KARAI,TERT
820 ENDE TAX 1 liEGJEL X-BE
830 I..DA lt O r NEM VOLT HIBA
8•o RTS
8:50 SVNTAX
8 bO
870
I..DA
RTS
••• • ••
It i

.. . . .... . . . . .
1HlBAS VEG ERTEt SZUBRUTJNBAN
~

99
880 HIBA LDA II KEROO 1HI BAJELZEST ADUNK K I ES VEGE A DALNI'\K
890 JSR CHROUT
900 LDA IICI't

. . . • • ... . . .. - - . . . .. .
910 JSR CHROUT
920
930
9"0 OUI'IP
,.
JMP VEOE
L.DA IICR
.. .. !PROGRAM VEOE
!80RE11EL.E8
..
9:50 JSR CHROUT
960 I<OVSOR JSR EGVSOR 11<EZOOCJM NK , VEOCJM N
970 El LDA N+l 1 HA NK>N AKKOR VEGE
980 CMP NK+l
990 8111 DUVEG
1000 BNE Dl JEGVESKENT MEG EGV SORT KIJRUNK
1010 LDA N
1020 C11P N
1030 BM l OUVEG
10 40 BEO DUVEG
10!50 Dl CLC
1060 LDA Nl< ! NK-T MEGNOVELJUK B-CAL
1Ó70 ADC 118
1080 STA NK
1090 ace I<OVSOR
1100 INC NK+I

. . .. . .. .. • . . . . . . . • . . . . .. .. .. ..
1110 J MP KOVSOR
11 20
1130
DUVEG RTS
,.. 1DUMP SZUBRUTIN VEGE
1EGV DUMP SOR K I IR'ISI'\
1140 EG VS OR JSR C J I1KJ
11:50 JSR HEXAKI
1160 JSR ASCIKI
1170 LDA ll CR 1 VEGERE SOREMELES

. . • . . . . . . . • . • .. . . .. .. . . . . .
1180 JSR CHROUT
1190 ATS
1200 l *
121 0 C JMKI LDA NK+I 1SOR KEZOOC IMENEK Kl J RASA
1220 JSR BVTEKI 1FELSO BVTE
1230 LDA NK
1240 JSR BVTEKI a'ILSO BVTE
12!50 LDA IKETTOSPONT
1260 JSR
LDA
" l
CHROUT
liSPACE
1270 1 szoKoZ

. . . . . . . .. . . .. .. . • . . . .. . . . . • ..
l21i10 JSR CHROUT
1290
1;500 ,
RTS
HE XAKI LOV 110 to; l l RASA
1310 1 A HEXAOECJMALIS DUMP
1320 HCII< LDA <NKI , V 1KOVETKEZO BVTE
1330 JSR BVTEio.. l 1HEXABAN OUTPUTRA
1340 LOA liSPACE ! PLUSZ EGV SZOKOZ
13:50 JSR CHROUT
134.0 INV
l 370 CPV liS

• • .. . .. .. .. . • . .. • .. * * . .. .. . . .. . ..
J 380 BM l HCIK 1HA V<B KOVETKEZOT
r 390
140<1
RTS
,.

100
1410 ASCIKI LOV •o tA KARAKTERES DUMP KI J RABA
1 420 AClK LDA (NK>,Y JKOVETKEZO BYTE
1430 CMP •sPACE 1HA < SPACE VAC3Y
1440 SMI EXTRA
14:50 CMP 4t$7F ' >127, AKKOR AKARM I LEHET, EZERT -> EXTRA
1460 SEQ ACUT
1470 BPL EXTRA
1480 ACUT JSR CHROUT tEBYEBKENT UGY, AHOGY VAN KI IRJUK
1 490 INY
1 '!500 CPY •e
BM I ACIK JHA Y<B AKKOR KOVETKEZOT
1'!5 10
1'!520
1:530 EXTRA
1:540
RTS
LOA . ..
JMP ACUT
JSPECIALIS KARAKTER HELYETT .. • "-OT I RUNK KI
1 '!5'!50 J* * * * * * * * * * * * * * * * * * * * * * * *
1'!560 BYTEK I PHA ;EGY BYTE-OT HEXABAN KIIR - MEGJEGYEZZUK A VEREM BEN
1 :570 LSR A JELOSZOR A MAGASABB HELYIERTEKU HEXAJEGYET I RJUK KI
1'!580 LSR A JEZERT ELOSZTJUK ló-TAL
1:590 LSR A
1600 LSR A
16 1 0 TAX
1620 LOA HX,X fA MEGFELELO KARAKTERT
1630 JSR CHROUT J KI IRJUK
1 640 PLA JEREOETI SZAM VEREMSOL
16:50 AND *$OF ; ALSO JEGY
1660 TAX
1670 LDA HX,X ;A MEGFELELO KARAKTERT
1680 JSR CHROUT J KI lRJUK
1690 RTS
Most vegyük sorra a program utasitásait:

160 . sor A programot a $COOO-ra helyeztuk, mivel


a kazetta-pu~fer szémára tul hosszu

230 - 250. sor - Ez a tulajdonképpenl fö~rogram.


Feladatai a következök:
!3.eoly_~li?__ !,ij!,QX.•.•~r:~'i~~t- (kezdöc:im> , áttöltl
NK-ba, majd ha nincs vége még a sornak,
beolvas még egy értéket Cvégc:im>. Ezután
a DUMP szubrutin segitségevel kiirja a
memori ad umpot .
Az ERTEK beolvaso szubrutin A-ban nem O
értéket ad v issza hiba esetén, ekkor •
HIBA eimkére kell elugrani.
Most lássuk a szubrut1nokat!

370 - 440. sor - e..~~RTEK s~ ul;'aJ:..l:~á n_. -f.:.~_l.ad.E-'!:.~~z __J...r:tP-Utb..an


sgrolJ...Is..Q~I§!t kez o t1gx ade.t,!;=.i maJ i s ._ér.:_té_l:',__ bi§!9.1:::-
V..~li?~.s.a a két.byte-os N vá l t oz o ba. Az el so
ciklus addig olvas,.amig szokoztöl kulön-
bözö karaktert nem talál. Igy tüntetJuk
el a bevezeto space-ket. Ha eközben eqy
CR <so~ vége> karakter Jon be, az hibá-
nak számit, SYNTAX-ra megyünk.

101
450 - 560. sor - A beolvasó ci kl us __el_sp__!:_és,.6_g.
Ez a cik lus nagyon hasonlit az elózöhbz,
de i t t az értékes Jegyek feldolgozása a
feladat. A szoköz es a CR lezárja a szá-
mot, ekkor ENDE eimkére ugrunk. A hexa-
decimális jegyként értelmezhetö számje-
gyek <SZAM> és az A-tól F-ig terjedó be-
tük <BETU> esetén a megfelelb eimkére
megyün~, ahol a beérkezett jegyet biná-
rissá konvertáljuk , az eddigi értékhez
összegezzük , majd CIKLUS-ra ugrunk visz-
sza . Minden egyeb karakter hibának szá-
mit.

590 - 630 . sor - A b~t_blk _li.L.---.EL.?3 áll)QJLJ:<..Q.!J..Yertá1.á~a a meg-


felel b bináris értékre.

640 - 810. sor· - lj_.J:~,gJ.Q,!:_!; hexadecimáliSl. számj~_gy~t _é;li?..?._;.g::


gezzuk az eddi g beérkezett száf!l..J~ekkel.
A gondolatmenet a kbvetkezb:
Az utoljára erkezett hexa jegyet Cegyelb-
re> az egyesek helyiértékén állónak te-
kintJük . Ha ez volt az elsb számJegy,
egyszerGen tároljuk N-ben <660-680. sor),
ha viszont már nem az elsö , a helyzet
bonyolultabb. Ekkor az eddig beérkezett
értéket. 4 bináris jeggyel (2··" .0.=16) balra
toljuk (720-750 . sor>, majd hozzáadjuk
az UJ ertéket <760-800 . sor>. Azt, hogy
az elsö számjegyról van-e szó, ALAP-ban
jelo.l jük . Ennek értéke O az elso Jegy
feldolgozasánál, késöbb 4-re állitjuk
<690-700. sor) ,ami ~ Jelzön kivul a lép-
tetési ciklus ciklusváltozóJául is szel -
gá! . Ezt vizsgáljuk a 640-650 . sorokban.
A 810. sorban v1sszaugrunk a CIKLUS-ra,
azaz olvassuk az inputbel a kbvetkezö
kara~ctert.

820 - 840. sor - Ez ___ a; ERTEI<;_ S?UI;!..n.tt}..rl l q g;kai bef.!?..J~_;téf?e


hi bá_tl an__ ~?e_tbe n. A visszatérési paramé-
terek: beolvasott végjel X-ben , O A-ban.

850 - 860. sor - tU._ bá<:?_ ~s_~:!;.Q.~D viszont A=1-gyel térün~~


vissza .

880 - 920 . sor - A__lj_I;ti': L.• ?~l,!br_~o!.:t.J.n hivása a fbpr·ogramból


( 240 . es 33C). sor ) tbrténi k, ha az
ERTEK szLtbrLitin hibát jelzett . I:!;:!;__ ft~.
ls§r_dojel~j;- J§.~ koc_~ivisszca jelet;_
.u:J,IQk ki, majd a VEGE ci m~~ére Ca prog-
ram logikai végére ) ad ju k a vezerlést.

102
940 -1120 . sor -Ez~ _s;ubr_!:!~in végzi~ mE!ffiC?.!:..!.~.duffiQ__ j i s -
tá~~~~t, eddig csak a parameterek beo l ~
vasásával fog l alkoztunk. A DUMP ciklus-
ban hivJa az EGYSOR szubrutint, ami egy
DUMP sor kiiratását végz1 az NK által
mutatott c1mtöl kezdödöen. Minden sor
kiírása után megvizsgálJuk, hogy NK ér-
téke nem érte-e el N értéket, am1 a DUMP
végcime . Ezután megneveljuk NK-t 8-cal
es kiírjuk a kovetkezö sort az EGYSOR
szubrutin segitségével és igy tovább.

1140-1190 . sor - Az EGYSOR szubrutin semmi mást nem cs i -


nál, ll)int ?C?.r:l;la.D_ !:ti_vja ~ li>Or I.~.E-döc_if!l...ét
li_ij_r Q. , '"' dun.!E hexadeci mál i_li> __részét ki 1.r6
és _ a sor A13CI I részét ld !_ró ~zu_pruti o_o-
~at , maJd egy CR-rel lezár ja a sort.

1210- 1 290 . sor - Ez a ...?~ldPJ: t..tt! n _. az N_!S aktuál is__gt:" téh_ét


1_r_ja ki a BYTEKI szt..1brL1ti n kétszeri hi-
vás.Aval <-fel so byte , alsó byte> , ma j d
egy kettospontot és szóközt ir k1 .

1310- 1 390 . sor· - B.... t!EX_A~< I S!~J:.t.l;?..ru.li!J...egy c;..il<~':-.I~.!?~D.-


...§or::ra-:.
vt:;H~.~t a so.r_l;?_~_ ___t._Mtc:p::o
_ ..§_b_'t_t.~-9..!: és a
BYTEKI s:ubrutinnal kiírja értéküket
egy- egy s~ókozzel együtt .

1410-1540 . sor - Az ASClKI nagyon hasonl1t az elözöhoz a


ciklLIS szervezésében, h1szen 1tt__!s_J;ö_or_-
ra ke ll venn i l,!gyanazt a 8 byte-ot..,_ de
~zgkat nem a BYTEKI _ seg1tségéveL i~uk
~i . E:e~ kbzvetlenul outputra k erulhet-
ne~, livéve a spec~~lis, pl . formátum -
és sz1nvezérlö karaktereket, amelyek
óss:ezavarnák a nyomtat~si képet. Az
egyszeru$ég kedvéert <k1csit tul egysze-
rusitvo a problémát> speciálls karakter-
nek tek1ntunk <EXTRA> minden $ 20-no l kl-
sebb és $ 7F-n él naqyobb erté kü karaktert.
E:ek helyett pont kerul az outputra
<1530-1540 . sor> .

1560 - 169<.1 . sor - VégLll a mar több sz or h1 vett BYTE;Kl !"J,A~l n.


Bin.irl.s-he>:adecimális konvertálást végez
ugy, hogy eloszar a felsó hexadecimális
számjegyet választJa le negyszer1 Jobbra
léptetessel és irja ki , majd az also
számjegyet logikai AND muvelettel levá-
lasztva konvertá l ja és k~ldi outputra.
A konvertáláshoz a HX tömböt használja
fel, amelyben a K-adik karakter aK ér-
téku hexadecimális számJegy.

103
Az ismer tetet t program talan egy klcs ~t so~ s=ubrut1nt t~r­
talm~=. am1 nem a leggyor~abb~n futo k odot eredmenyez 1, va-
szont igen hasznos m1nd a program megértese, mind tes=telése
és esetleges modos1tasa szempontJábol .

1~
~-3_ A C:ommodore 64 "2f!_er.1c:1 ó_" rend_szere"...__a !;ERNAL

Hint már esett szo rola, a t~r $EOOO-tol SFFFF- Ig ter j ede
teruleten a gep alapvete programJal 1 a KERNAL szubrUtln-
qyuJtemenye talalhato. Számunkra ez ugy Jelentkezi~, m1nt a
proqramozashoz segitseget ado eszkoz, ezert erdemes meql~­
merkednl a l•Qfontosabb szubrut1nok intarfac•-evel es ren-
tesevel. A felhaszn~lo által h1vhato valamennyi szubrut1n
a nt ertace-e megtalálhato a +uggel~~ban.

CHROUT egy byte-ol 1r l 1 a~ éppen akta v output fa le-


ra . Ha nem volt meg 1lyen meqny1tva <CHV.OUT-
-talJ1 az output a képernyore megy.
Belépési cam : ~FF02
Parametere• A -~1nyomtalando karalter ASCII
kOdJA
Példa LDA ~$00
JSR CHRDUl
egy IOCSlVlSSza- Jelet 1r kl

CHR tN egy byte-ot olvas az éppen akt1v 1nput file-


ro!. Ha nem volt méq 1lyen megny1tva "(CHk.IN-
nelJ, a b1llentyuzetrol olvas . Utóbbi esetben
a lep~rnyoszerlesztot dlllVlz.11Ja, amely VIl-
logtatJa az altuálls poZlC:lOban a cursorl , be-
olvas egy log1la1 sort a bAS!C-sorpufferbe
( $200), majd m1ndenegyes CHRIN h1vasra egy k~­
rdl L~rt ~d át , eqeszen addag, amig a putfer
11 nem urul, ell or az egesz elolrel le~dod1k.
Belepes1 c1m : SFFCF
Parameterek A-~ bwulvabotl lara kter ASCII
l Od l"'
Peldeo JSR L.HRIN
STA BYTE

CHI IN meqny1l ulv«so4st<~. egy +11~ t. A -f;le-sors:.imut


d~ X regiszterben várJa .
Belepesi c1m• S FFC6
Pcorcometerek X - f1le-sorsz~m
Pelda LOX ~5
JSR CHKlN
elokesz1t1 olvas~sra a korábban
megnyitott 5-os file-t

CHIOUT megny1t 1rásra egy f1le-l. A flle-sors:ámot az


X regiszterben várJa .
B~lepesi c1m • $FFC9
Parameterek X- file -sorsz am
Pelda LOX ~5
JSR CHI<..OUT
CLRCHN lez~r Ja a nyit o tt 1nput Qa /vagy output file-
o lat, de a flle -ok ny i t va maradnak .
8ul•pés1 c 1mc .sFFCC
Param•tarek :

A fenti szubrul1no~ has~n~lat~val 1gen egyszeruen val05lt-


h~tomeg az assembly prog ramo~ 1nput/output tuvé~anyaego .
A fll e-ok megnylt4sat e~ lezárás4t BASIC-bel v~qy mas
KERNAL-rullnollal végezhetJul .

A gép ROM-rutinjai ugy lett•k tervezv• , hogy a felha&zn 4 10


konny•n be•vatkozhasson mukodé&ukbe. I gy p l. ol felhas~nalo
al Lal 1 s hl vh~to f ERNAL-r ut.1 n ol tobbslltgllt • memor 1a RAM r&·
~~eben elhelye~el l vol torcLon l eresztul leplethelo b• . Ezen
voltorol ~tlr•s4val a ~ERNAL rut 1 n moghiv~sa l or a vezérlest
paJat proq r.amunlho~ tero lh elJu l es ol t l~t t s.:eli szur 1nl teny-
ledhetunk . 1qaz e~ a BAS I C- l nlerpreler néhany fontosabb
szubrutlnJ.lro\ l& . A.: át1rhoillO fERNAL-vel turci:

S 3 1A-:1:318 OPEN
S "" I C .S310 CL OSE
.s::::tE-.S3 1F CHf I N
:f320-.S32 1 CHIOUT
"' ::>2.:-s ::,2:. CLRCHN
JC 324 - .Il32:::i CHR I N
.S326- f 327 CHROU T
.S 328-S 329 STOP
$ :o;2A-.S328 GET I N
.J: 32C S 32D CLALL

L4 .. &Uill· eqy peldJL &< l ER I~rtL at u .isá ra• Toqyul fel, hoq y egy
spac1ál1s pr 1 ntorun l van , amely bizonyo~ l odolal m4& 1 ént ér-
telme~ , m1nt a Commodore 64 bel~o kodrondazoro , am1 egyéb -
Iént csaL nagyjaboi f ele l moy a: ASLl i -na l. Ig y lohet ez
pE:>ldaul egy oly.an nyomlato aactoben , C~oonaly ékezete• b"'tulii!t
tud nyomta t n1 , do ezel ~ betul nom azon l arak t erel l OdJalnak
f e l elnek meg , amelyel len yomas•val m1 roq~it n• l1v~n1ul
olet, pl. ~ m•qyar 1r0qapszabv~ny b1llenlvu• szer1nl . A
lcparnyolodol maqfeJelo csszet endeleset ~ lara~ terlepel ke l
l onnyu meqoldc.<n l, de azul4" nooq el l l l vegezn 1 öl<: c\U Odo-
1.1~l minu e" egyes l .ar akter o wtén , amelyet a nyomtaLOt a l u l -
luldwd. A::. ol.ibb 1 1r1s a..:L<brL•t • n e l uo belepest pontJa a
LHROUT-vel tor L 1r lel ál I>,.Jat rLtl lllLII Jir •, ölmely c1z .atlodo last.
v vq ~ 1:

l l) CHROUV = • 32b
20 CHROUT • S FlCA
30 EGYSEGoaJ:9A
40 * • S CEOO
:50 BE ALL LOA * SAJ AT
bO STA CHROUV

106
70 LDA * SAJAT >
80 STA CHROUV+l
90 RTS
100 SAJAT PHA OUTPUT BYTE STACK-BE
110 LDA EGYSEG
120 CMP .. 4 PRINTER?
130 PLA ATYOO
140 TXA EREDETI BYTE
1:50 JMP CHROUT OUTPUTRA
lóO ATKOD LDA TABLA,X MEGFELELO ~,00
17(! JMP CHROUT ; OUTPUT RA
180 TABLA . BYTE ú , 1, 2 , 3,4,5,ó , 7 , 8 , 9 ,SA,$B,rC,$0,$E,SF

Még egy megJegyzés a fent1 p r ogramhoz. : A .J9A Clm a:: ah.t.uá-


lls output es4~bz eqyseqsz.ámát tartalmazza .

107
5.4 BAS I C es assembly bekés egymas mell~tt él e se

A Commodore 64 gepre ~es~ulo assembly prograrnel tobbsege a


BASlC-tnterpreterrel es a BASIC-programolkal 1gen szeros
lapcsela t ot t a r t . Leqcyalrabban oly~n BASIC-l tegészitéseket
programo::unl assembly nyelvert, cimelyel a BAS I C programbe l
nehezen Vdgy nem el ég IICltekonyao"' megoldhato .fel adatokat_ t e l -
JeSt tenel •

H 8ASIC-IlegQS~lléúel pruq r amo~~s~ho~ ler·me~zete~en alaposan


tsmernt l e l l a ROM-ban leve t nterpreter mulodeset, memorta-
l•c;s:::n<ll ~tát, belepein por. t )éU t., .. BAS l C pr ogr oilm telépl t.é!>et ,
stb. M1o de::en tsmerete~et 1 t t nem lenne hPlyenv~lo es nem 1s
:..:.LII<!.>eq..,s fel sor ol n l , e;: el ro.aqyre~.>.:et .. Commodor e. BASIC-l el
l oqlallo~o tradalom t.c>rlalona::z,.. , l d. p l . <11, <31 .
E!.Jben a fvJe.:.elben t:lio .. k a.::uldt ciZ J&me.-elelut foglalJu!, os;.~­
s::e, cimelyel- spectéll.SoM1 .a.· .,..,s;embly nyelvu lteqes.::tle!i>uket
eo l n l t l Oli> m-ls munl <ll bcin ne11o, vagy r oem ' l yell ~zuonporoLbOl ..... .,-
roC\1 lLtrv... Feltételez z ük eo y &or o l y a n i smeret meglétét,
amely tnkabb a BASIC pro oramoza s hoz tarto z i k egé sz en a BAS IC
t~r-fe l o & z t~s é s interpreter - kód mé l ységth g . H,l .,;: ul va.,.,o nem
r~nd~~~~~l~ e~en tsmerelel ~el, vaqy lapo.:.z• dl ~zt • fe)e~e
l e l , ""'4Y l.._.gyen SZL'tt e..:.el. re "".:. tsmPrelelrf' p l . a t"-'nl lltt~q­
IEJlol t mLinl ál ból. es csc\1 .a.:ut:dll t .. nulmc)rovo.:.:. .. e.:. L .a -feue.:e-
ll•l .

A.: b'ye=.:. vallcuol. < H~loJ 'l.) eLJyu..Ji v.ilt.u.:c,lenL 7, tonobelem-


~li'lll.-.. byle-ut fo~lC\liiS\1 .. meouor aallcllo, ue ,,;: elsu cselbert ..
7-bal :. byte lth~•~.:n.=.l ... tl<Mt . l c.-L bylt? on "' v.llto::o nc..:ve es
llpU~cl, let. byl~o> Llrl lllLllJél cl.! 1?1 leli? Vdll lllhUl L.!VL' IH~m t.llll
tormaban, lo.:.nem -fel sö b y te - al s ó byte s o rrend b &>n .
A: t?Qvedl valto~o tel,c)l:

bytE" név t..d su ' rll ct~ t.tJr \:.._.


... l ~8
L byte ne. v no31ioUU 1 l l a. r a. l l ur e V d Q v (1+128
2. byte m .. qasat..b llul y • er tt:•l L' <r") bvl•:
L v le .,.l<u.. i.onyctbb hel ylll'r le~ u lAl byt(:
4 -b . ll v le l o::omuus \•.1)

1) . byle- nev elso l<at.Kit.ore + 1 28


1. byte no~ misodil lar ... t tere ""'QY U+128
3 . byte lovutle::o loonb lezdot.Jme, • tomb le;:-
detehe~ r c l a t l v mutato•
4. b v l.- .:.llmPro::•ot s::amé\ \nl
5-t.ol 2 .. n+'l-tq .,.z eqves d1menz10k f~l~o h~lardl ~eL­
byte-o5> cqea:: for máb•n <a::a:: ~elso -
•. l so byte sorra11dben>.
e! ~ms::.lnoll2 byti.' - ~lomb ert.ele1, m1nt. d:: eqys::cru val-
to;;:anal <~elso-édso byt.e> ~ol'"rerodbero .

108
~ l ebegép e nt os n umer 1 kus v.'l l t oz.Ok s z. a mára a BASIC 2 + 5=7
b y t e-ot tart f e nn, a tomb elamav S4ámára 5-ot . A FAC lebe-
gop ontos akkumu l átor - tárgya l ~sánál meg t ud t ul, hogy a szám
á b r á zo lás ához 5 byte-ra , va l a mint az elo j el tar o l ására egy
kuldn byte-ra van szuksege az 1nterpret ernek . A vá l tozek
számára v1szont eléq 5 byt e . Hooy i s v •n e z?

A lebegopontosC F AC formatumu> ábrázolásban eloszar i s a sza-


mct b 1 nárissá l<e ll alak1tan1, ma;d ugy beirn1 a mant1ssza
t-'lrol a sára szelgála 1 - 4 . byt e - okba , hogy a szám e l so l-ese a
legelso poziciora verul J on . Pl . a 1 2 bin a risan :

1 1 (10

l qy kerul d FAC-ba :

o. 1. 2. 3.

dec1má lí san 1 32 1 02 (l o o
hex adec1malisan : 84 co o o (l
b1nar~san 1 000 01(10 11 00 OOO!) O o Q

A o. by t e-ot , a::! ~x po11ensl ugy áll i LJuk e l o , hogy az elsö


érté~es Jegy elo;ales távelságat a b1nár 1 s ponttol Cesetunk-
ben 4 > h ozzaadJuk 12 8-hoz. A szám eloJele megeqycz 1 k a FAC
~- byLe- ; ana~ elo; elével . A nulla kod;a megegyezés szer1nL
LSUIJ .. IIU l l.- byle. A memor 1afor maLuno mar egy l· 1t.s1 t kulonbo-
zik a FAC formálumtol, mível annal nem tartunv fenn egy ku-
loll b yte-ol az eloJelJoel . () fenl 1 a l gor1tmusbol levetkezden
a FAC formaJu szám l . byte- Jának O . b1tJe~1ndig 1, l1ve ve ,
h a e r téle nu l la . l~ y ez d bit nem hordoz 1nformác 1 0L , nyu-
godt.an loulyel t es.l l het;u~ ez t a bitet. a szám elo;e l b i LJOvel
Cl 1 ha negat i v , O , ha po~it 1 v> . A memór1áb an tárolt l obego-
ponles erlék 1gy kulonb o : i l egy ~lCS l t a FAC-ban &24mo l ásra
kes::: értéltol , toltoskor Lll . tárolas~or a lonverztor61 a:
1roterpr· eternE' I< qooodoslocln t le l l . A vdlto:ol é s tombak s ~er ­
k e~ete megegyezak a~ eges~ va l to=o~ e~ Lombokével , csak a:
ér l e l< lloss.:a m1nden utt 5 byte , v.tlamlnt a. 11ev valto.:at l arou l
k erul tárolasra , ~.:.:el Jelezve a t 1 pusl .

A loé<tclk l E.•r<?s váltazok mar 11em tc<rla1maz.:4k .. valto:::o ert.é-


l, et , 101 vel a sl r 1114el e l c\ BAS l C .t nt~r~J o• eter egy kul on ossze-
fuqqo teru t eten h~lyezt el a va l tozó hoss.:uságu slrlng-Weze-
lestoo.: s.:1.ll seges s .: emelgyLt otes megl·onny1 tesere . A kara i leres
v<ll t ozo 1 ll . tombel em er le l es ..-és.: e 3 by l e t'ossz.'-' • .;unel ybo l
.a u . by t e c~ kar.al ter ek sz~m a , a.: 1 -2 . byle-ok ped1g a string
elso karakterének az abs.:ol1..ol cime a meonor i ában .

A f ent 1 szamábrá2o l ás1 forma t umo~ egymasba konvertálasa , a


k 1 fejezesek k i értéke l ése, a va l tozok es tombelemek megkere-
sese , UJ vá lt o:ó ~ deklaralásd , l el r ehozasa bonyol ult prog-

109
ramozás1 feladatol Jelentene, de s zerencsere nem kell meg-
csinalnl, mi v el ezt megtetták m4r az inter preter ir4sakor .
M1er-l 1s ne l uae.z"~lnank e;::eket. a s..:ubr ut1nokat assemb l y
pr ogr-amL<nki.Jol "' A;:: éll4bbi .. 1 b att az interpre ter o l yan bel ep est
ponLJ~ l l - es ~zak p~raméterezéset - t smertetJul , ame l yek
talCin l egha .. ::nosabbak o ElASIC-l 1egész1tesek 1rása l or :

FRMEVL A soronl·oveU.ezo BAS I C lnfe;ezes klértékelese


éso ..<;:: eredmény ulhelye:::ese FAC-bat•. HO< a lofe-
Je:::es ka• a~teres volt, FAC 3-4 . byte-J a CS 6 4 -
~651 a s t r 1 nq 3 b yte-os le1r01ára mutat .
Belepos1 pont : ~A09E

INTFAC Az A Cal~ó byte> és a:: v Cfelso byte> reqlsz-


tet e~ I.J<m l evo letbyte-os el ó jel cs eges.::: s..:ám
lonverl1lasa lebegopontos form4ra es e l helye-
zése FAL- bdn .
Bele~l?bl punl : $ 839 1

YTOf-AC A:: Y reg1!.:::·ter t artalm ·'""' ' ' l 'onverlélás ... lebe -
gopontos formlra es e l helyez~se FAC-b .. n .
Bel !:.•p C> S.J j:IOI •l : .J-8 ..J.A2

11E11FAC Az C~lso I.Jyl~l ~~ t (fu1su I.Jyt~> agy 'llemo-


rt~ctmel tarlalm~=· A c1men leve ::;, btLe-o&
l~begopuntos s~am llv1Lel ~ FAL LJ~ ( ,. or· Hh.i l ~tm-
v-lilL ,.,.,.alJ.
Bull~~t::~~J pun l : .fSBA~

SIRFAC St. r· 111yl Ollvl·t t :il ·'Isa lebeyoj.lor.to~ for n. ~r ... é~ C\::
.:~rtel t:>ll elye::.::ao: F?.L t.. ...r •• A slr1ng lros,.,;:~t a..:
A rC'Q I &.! I t n , le~tlt:.L lll> l?t .t-22-"'23 l a r t.a li!Jc.\.!;!CI.
BelDpQs J prn• l• t87B5

11E11F C2 ug y .. ,'"'- , ,.,, ro l11EMF ne,de .. .:: l!t edmen., c~ m~sod 11


h .•u oc·yU\.JUI•lOlo. cc<ll l.llh ll.:Olot b,.,FAC2-bto) ~._,,ul ( f69 -
X 6El . A f6F C.110UII levo byte (t. I.H t l '-' l les::,
l1<0 rAC'"'"' FAC:! l.'lOtelu loulwobo:::o . E;:: <.1 byte ,;o;:
1.111. c>lUJI~l-os·~.:eh .. !DDIIl lt.a&t jc-l=o CSCf - -..1qn
CON!p<.H .. Sl Olt t l•q) .
Belepes1 pont : .tSAt:jC

FAl INT FAC Ldl Lo-.~l.n.al lctbyte-o'"' elo;eles t?ges";:= e Ion-


vet l <ll va 1 64-1'6:5 bt le !öZ ~ . FAC-tJL el..-ont Ja . A..:
eqC'b.! "-=.:!•" fel11ooo bylt.! - cll!ioO uyt~ fut •na ll.l.
(:lelci->éSi porrl : .f'l:<lAA

FAC .. OR Uyyc<tooil.!, llllio l f-ALlo~l ,.J.., d;! .", l.'drhélty kOlbyte-o5


elUJll Ll.:.'! to-r "'YC"'.! Cü 6~5;::;.~ ) 1 n for mill1.11nbd11
(c\15>0 uytf.' - felbO llyle) col ! 14 .1 1:'"> C l oO I C l Qt l l l .
fAt.-ol elror.l t CI .
Belcpes• 1Jut•L: .fB7F7

110
FACMEM MEMFAG_ ford i tot_1.Jál. A memórtaterulet cimet X
<also byte) és v (felso byle) reg1szterekben
várJa &l a rut1 n .
Belepe&l pon t : sB807

FACSTR A FAC t~rtalma k~raktersoro~att• konvertálvd


a SlOO ct mre kerul. A stringet egy ) bvle zar-
Ja.
Bel t•pes1 pon l : SBOOO

FC2FAC FAC2 m~solá~a FAC-b~ .


Belap~&l ponl: ~BBFC

f()CfC2 FAC m~>olása FAC2-be.


Belepesi ponl : ~ BCOF

FPLUS FAC,.FAC..-FAC2
A rut1n h1vasa elott a~ SCF-et megfeleleen
all1tan1 kell <LDA Sóó l EOR S6E l STA $6F>
es a~ A req1s~terbe a FAC exporensel lell lol-
tiL'nl <LOA -"b1).
8elepés1 pont: S886A

FMINUS FAC=FAC FAC2


Belepe51 pont: *8853

FMULT FAC::FACttFAC2
A:: el ol(es.: 1 t és ugyc.•nabbol áll , m1 nt FPLU5-rHll .
Belepest pont: SB A~u

FOl V FAC.,.t-'AL;::/FAC
Elules.:tteb, mlrlt FPLUS-nál.
Belepest p~nt: •&B12

Ff"OWER FAC.,.FAC2 FAC


Elokes::ites, m1nt FFLUS-n ~l.
Belepebl pont: SBF7B

A DRE ::iS A BASIC szoveqben kovetk~zo válto;:o ctmenel


elolure~e..e <lehet tombelem l S ) . A válto~o Cl..:
met \ahol d neve meqtalalhalo) a s5F-sbu-ba
lrJa. Tombelem meg~d~~~ e~eten e~ a tomb nev~­
re c~~~delere> es ~59-S5A a Lomb elso értékere
mutat. Az A Calso byt~l és a~ Y <+elso byte)
reglszterel m~gAr~ az ertekre 1str1nq c~eten d
d h~rombyte-os letrora>
muta~n~~ - Ugyanezt d
c1met _.47 S48 l S .
lett t.od!llc<<~:za
soo eqyenlo $FF-fel, h~ a válto~o karaltor~s
tipu&u, egyebkent O <~tr1ng flagJ. ~OE egyen-
lo $80-nal, ha a valtozo eges~ t1pusu, eqyeb-
~ent o C1nteger ~lag>.
Belépés1 pont: $BOB8

111
LINElN Eqy lo~k•i~or be~l~•sás• a kápernyoszarkesz-
to seg1 tsogével • BASIC 1nput pufferbe ($ 200> .
A sor mölKlmAlis hossza 80 byte, a kar •kterso-
rozatot b1nár1s egy O byte z~rJa le.
Bel•pes1 pont: $A~60
LI NOU T Egy k•r•ktersorozat kiirasa • kepernyore a z
aktuálla pozlclOtol kezdve. Az A <alsó byte)
es Y 'felsé byte) reg1szterekben v4rJa • ~zub­
rutln • ~•r•kteraoroz•t kezdoclm•t.
Bel•pea1 pont : SA81E
Laasun~ egy p*ldát, amelv1k • fenti szubrut1no~ kozul t•lan
.,. leqbonyolultabbat, "".:;: ADRESS-t h.;aszn.álJ•· A progr•m fela-
döltöl a ~•• BASIC-lnterpreterel altal elfogadott ERASE utaal-
l~• megva los1tasa.

10 ERASE SZUBRUTIN TOMB TORLESEHCZ


20 HIVASA SYS 491~2 ,A• <O,o ... l, AHOL AZ lNDEX~f
~.Q ERTEtE TETSZOLEGES . A TOMBNE~ MAR DE~LARALTNA~
4v ~ELL LENNI . A SZUBRUTIN LEFUTASA UTAN A TOMB
50 ; UJRA DIMENZIONALHATO
60 ADRESS-.JB08B
70 TVEGE ··:a:31
80 CHR!3ET•.J:73
90 ..-C IM - .a:sF
lOV f OV • .f4 7
ll(l * •$C(l00
1~0 ERASE JSR CHRGET TERMINATOR
130 JSR ADRESS l TOMB CIME TCIMBE
140 LDY tt 2 IOVETKEZO TOMB CIME
150 LDA <TCIM) , Y
1~~ ADC TCIM
lotl STA KOV ~.OV-BE
170 INY
180 LDA <TC IM l , Y
18~ AOC TCIM+l
190 STA ~OV+ l
201.1 LOV ttO
2 10 HASONL LOA l<. OV 1 ~ OV•TVEGE?
2:!0 CMP TVE GE
230 BNE CHLUS
240 LDA ~OV+ l
2:5(1 CMP TVEGE+1
260 BEQ CHVEG IGEN -- VEGERE
270 CII ' LUS LOA CKOVl, Y EGY BYTE MASOLASA
280 STA <TC lM l , V
29U INC k.OV HUTATOk INKREMENTALASA
300 BNE Fl
3 lll INC k.OV+l
320 Fl INC TCIM
330 BNE HASONL
340 INC TCIM+l
3:50 JMP HASONL

112
360 CIKVEG LDA TCIM TOMBVEG- POINTEk CSO~~ENIEdt
370 STA TVEGE
380 LDA TC IM+1
390 STA TVEGE+l
400 RTS ; VISSZA A ~AöiC HEZ

Nézzuk lepésrol-lépésre '

120 . aor- - Az e lval~5zto vessze átlepese.

130 . sor A tombot megker-esi a BAS!L lcrulelon o~


kez d óctmét ~5 F -be <TCI M> tes~1.

1 40-190 . sor - A tomb letrásábel k iemel;ul • luv~lle~o


tomb ctmet <2 . -3 . byte> e s ~ OV-be r akiUl .
A fe l~d~l tul a;donkeppen a: etlo1 • ~tm­
tol a BASI C tombók vegetg (TVEGE= · ~ I - 5 ~2>
ter- ; edo ter--ulot v 1 sszacsusz l atá~a TC IM- re.
Ezzel el t untet )1.1 1- a pdr-amét od éfll l .. pull
tómbol.

200 . sor Y r-egt szter nul lá zasa lndeHelcsiH?Z .

2 10-26U . sor Moq vtzsga l JUI, hoqy ~ CJV e r Lel .e edr?r le 1..•
mar TVEGE e t· te l et . Ha 1 q er o, veqt3 a m.:l!.u-
1 ásné\1 .

270-290. sor - Egy b y te masolasa .

290-350 . sor ~OV es TCIM nevelese es vtss~ate r es a


c t klus elejere <HASONLl .

360- 4 ()(.) . sor - fC ir1 rnost oda mutat porrlosabu ~t o ci.'


utolsO u tan1 byt e - r-ó - ahovd a Lomboi
hálr-aleve t e s:e t átmásoltul. Ez a c1m
lesz a TVEGE mutato UJ er-te~e . Ezutan
v t ssza lér unk a BASI C- hez .

A BASIC-kel va l o kap c~olat t ar lá s l e"yeqes r esz e ~· BASI C


p rog r am e s az assembly szubrut t n ve::erl e sát.:~dtls 3 nL.I e~
paramet er- ezesenak kérdése .

Mar meg1 smerkedtunk e~en mods~erel egy ~és~éve J , de azet t


f oglaljuk a leg f ontosabbakat ossze :

Assembly r-uttn hivá sa BABIC-bel :

SYS BASIC utas1tassa l


USR fuggvenyként,
be szu~áskent.

113
Az utobb1ró l meg nem vol t azó , ez t u l aj donk.ppen a BABIC-
lnterpret or kiege szit é ae .
modosit~sa, Mint a KERN AL-rut ino ~
nemelyl~e , a BAB I C-interpreter néh4ny rut inJa is ugy lett
tarvezve, hogy b •l•pt e t •sü k • QY RAM- b a n t 4rolt vaktoron 4 t
tört~ik , amelynek 4tlr~s~v~l a ROM-ban leve azubrutin he-
lyett saJ•t programunkhoz kerul a v ezérlés. Ezután természe-
tesen v1sazaterhetunk az 1nterproter bármely pontJára, a~~r
~ tlv4ltott BASIC-lnterpreter rut1nra l&. A RAM-ban tárolt
v~l torol •• a hozz4Juk tartozo szubrut1noka

.$300-$30 1 H1bauzenet ~11rasa


.$302-.$303 BASIC meleq1nd1tas
.$ 304-$ 30~ Egy sor átvalta~a 1nterpreter kodra
<to~enlz4las>
$ 306-$ 307 Interpreter ~od átváltasa LIST t1pusu ~orra
.S308-J.309 A lovellazo BASIC utas1l~s veqrehaJtélsa
:530A-.S30B Numer1kus term <konstans vagy v altozo l be
v1tele FAC-b~ . FRMEVL hlVJa a llfeJezea
m1nden to.\QJáná l <nem1gen 6rdctmes at1rn1 l .

A bes~uraso~ onnan lapt&k nevulet, hogy a BASIC-lnterpret~


lodvegrehaJtélSl folyamatába ~zurJUI be a~okat es segltsegul-
kel lehetoségunk ny1l 1l anna~ eldontésére, hogy nekunk , vagy
az 1nlerpreter nek s~olo parancsrel van-e ~zo . Leggyakor1bb
a .S308-S309 vektor át1rása. Ha ezt saját szubrut1nunk bele-
~ésl ponl)4ra ál l ltJu~ át,m1nden BASIC utas1taa elott nel uni
adOdll a vezérlés . Ek~or ~7A-J.78 a soron•ovetkezo karakterre
muL•l a ~ASIC program szovegeben. Ha •z ulas1tás v1zsgalata
-~t-~ eredmenyt adJa, hogy ne l unt ~zol, haltsui végre es
uundotoltJdJunl •rrol, hoqy S7A-J;78-l a levetieze utas1t.as
eleJOre ~ll1tsul. Ellen~ezo esetben egyszeruen ugorJun~ JMP-
pa! • .SA7E4 c1mre , am1 ~ 5 308-:5309 al•pert•le . Ha az lnter-
preter-kodr~ v~lto rut1n ela lS beszurast teszunk Ca 5 304-
S305 vuktor ~t1r ásávalJ, lehelotöagunl ny1l1~ arra, hogy aa-
s~t p~r~nctoaln~•t 1s fal1 smerJu~ em egybyte-os kodra -to-
lcenr IP c.st.lreJ J\..11 . E~ l or az utast t.as veqr ellaJt.asnal l enyegetoal1
telgyor~ul, egyetlen bytw all~norzesere ~•ol kan a beszur~•
faloo~dala . ll yenkor pertozll nemc&cok .. z lnterpr&>ter-kodra vá l -
to . hanem az arrol olvashato ~zoveqre Ionvertálo (vektor:
.S 3Uó- .S ~07l rut1n e1e lS beazurást 11111< len n1, hogy a LIST
olvash•to programot lr Jon ~l.

SVS utaait4s&al h1vott azubrut1nnak a m.ar 1smert modon ,


a FRMEVL 1ntarpreler rut1n &Rg ltségove l adhatunk ~t
lattozato szer1nt1 sz4mu es t1pusu parametert, k lfe Jeze-
aal<at 15. Máslk magoldas a reg1sztarak ha~zn4lata . Ha
BASIC programbel SVS-IöZii!l hivunk egy glipilodu cimet, az
interpreter a rut1n megh1vasa el ott az A , X,Y,P reglaz-
terelel rendre a .S 30C ,s30D, .S30E,S30F b yte-ok tartalm4-
val tolt1 fel , maJd a rut1n v1aazatareae után~ reglsz-
terelet 1de ment1 el . Ezelet a memor1ac1meket a BASIC
program PEEK-kel oa PO~E-kal elérhet1 , 1gy ezeken ~a ­
retozlul egyszeru parameterátadás valea itható meg.
114
USR- r•l hivott rut1n egy numer1 l us ortéle~ lap d FAC-
ban es ugy~nott egy numer1kus értéket ad ls Vl&&~~ .
E~enk1vu l cs ~k memOr l4n loresztul ~dhato ~t paramet er .

BASIC -beszur~s e ~eténraJtuni a l l, hogy Ot ~elma::uk ~


nekunk s~o l o utaatt~st e• az 1 nterpreter mely részeit
h<u• ..,n.il Ju l fel az utasité~ vegrah«Utása toor.lrt.

Vls&zatérOs a BASI C-tntorpreterb :

mtndhérom t1puau assemb l y-11eqesz1tes RTS-sel lel l, hogy


veqeterJen , h l bas osete~tol eltellnlve, amt l or a megfe-
lelo h1baágra l ell ugranunl .

115
A s portból kölcsönzött fejezeteim jól j el ké pez i azt, hogy
elsósbrban milyen tipusu felada tok megoldására érdemes hasz-
nálni az assembly programozás lehetősé geit . Igen fontos,
szi nte elkerGlhetetlen alkalmazása azokban az esetekben,
amikor a magas szintG nyelven - é ltalában BASIC-ben - irt
megoldáshoz képest a végrehajt ási idó Jelentös felgyorsitása
a cél, vagy a prob l éma természetéból adódóan, vagy egyszerü
ergonómia1 szempontok alapján . Az elsöre példa szinte v~la­
mennyi komolyabb j~tékprogram , ahol a grafika animációJa , a
hangeffaktusok kezelése, a felhasználói beavatkozásokra tör-
t énö reagálás olyan vegrehajtási sebességet követel meg,
amel y BASIC-bel , de jószer i vel a töb bi magas szintü nyelvból
sem bizt ositható. Az utóbbira inkább a~ adatfeldolgozás kö-
réból hozhatunk fel példákat. Magasszintü nyelven meg1rva
bizonyos elemi adatkez elési tevekenységek <rendezés, válo-
gatás, keresés, össze4uttatás) annyira lassuak, hegy a fel-
használotol nem kóvetelhetö meg, hogy kivárja azokat. KG lö -
nosen iga= ez az adatbázi s kezelésr e , magasszintü file-keze-
lésre, 111 . ezek visszakeresc es file-módosito funkcióira.

Mivel az elso t1pusu feladatok (Játm k-soft ware) 1nkább egye-


dl, spec1ális problémákat vetnek fel , inkább az utobbl teru-
l etr· ol választun~~ szemléltetö ~éldát. EmE?llett szól az is,
hegy m1g eg y játékprogram valamely erdekesebb részenek elem-
zése nem nyUJtana kis változtatassal felhasznál~ató épitö-
kockát olvasóink tovább1 programozási munkáJahoz, add1g az
i l t következo prograrnek résLleteinek vagy eqesLének alkalma-
zása velemén yLink szerin·t hasznos lehet .

Az egyil~ l egi döi genyesebb a Ll a t fel del gozási mLIVel et a ren da-
z és . Anelkul, hogy d r endezébi algcr1tmusok elméleti kérdé-
seibe tulségosan belemennenk, beve zet őben elengedhetetlen
nellá l1Y szot szolni a rendezés módszerelr"Ö l.

Erre a feladatra igan sok algor1tmus i'meretes . Itt terme-


szetesen csak a legegyszerQbb algoritmusok bemutatásárai le-
het szo , de ezek a mikrogépes feladatok legfeijebb néhány
ezer rekord rendez es1 igenye~ek tokéletesen megfelelnek,
amellett gyorsan és egyszeruen programozhatók . A legegysze-
rGbb meg használhat o algoritmus a buborék - módszer.
Ennek során minden egyes ciklusl épésben kikeressOk a meg
rendez et l en ! i sta legnagyobb el emet s e~gysz ersmi n d a l e;!gLI-
tolso poziciéba Juttatjuk .

E;.:l ugy végezzuk, h ogy az E~gymás ut'"'n ~( o vet ~:&~zo E~leme~ ~( et pá-
ronként bsszehasonlltJuk egymással . Ha a másodi k elem kisebb
az elotte allonál , felesereiJuk oket. Vég1g fo l ytatva a leg -
nagyobb elem az utolsó helyre vándorol, tehát elegendó a kö-
vetkezo ciklust az ot meg e lözo elemig folytatni, <az már
eggyel rovidebb lesz>, amig csak el nem érGnk az elsó, most
111ár b1zlosan legfdsebb elemhez . A modszer· onnan f~a pta a ne-
vét, hogy a kisebb elemek a rendezés folyamáro Ltgy szállna~,
116
feljebb é& fe l jebb , m1nt a légbuborékok a fo l yadékban . A ha-
tékonys~got egy egyszeru trukkel fokozhatjuk, ha egy jelzöt
haszn~lunk arra, hogy egy ciklusban tértén t-e elemcsere,vagy
&em. Ha nem történt, nyugodtan befeJezettnek nyilvanithatjuk
a rendezést , hiszen ez azt Jelenti, hogy minden elem kisebb-
egyenlö ~z utanakövetkezónél, tehát a lista rende2ett . Erre
a javitott algor1tmusra kozlunk egy programot , amely egy
egesz t 1 pusu BASIC-tómb rendezesét végzi, termés2etesen
helyben a
10 BUBOREK MODSZER EGESZ TOMB RENDEZESERE
20 AZ ELEMEKET ELOJEL NELKUL ! EGESZ SZAMOKNAK TEK I NTJUK
30
40 HIVASA : SY549152,R'l.COl , AHOL R'l. A RENDEZNI KIVANT TOl
50 l
55 CHRGET•$73
bO MERET .fFB
70 K $FO
80 AKT $5 A
90 KOV .f5C
1 00 JELZ O $FF
1 10 TCI M $ 5F
1 20 ADRESS= $8088
1 25 $ COOO
1 27 JSR CHRGET VESSZ O
1 30 JSR ADRESS TDMB KEZDOCIM TCIM-BE
140 LOV *5 TOMB MERETE
150 LDA CTCI Ml ,Y
160 STA MERET+1 MERET-BE
170 INY
1 80 LDA <TC l M> , Y
190 STA ME RE T
200 KULSO LDA TCJ M ; KOV=TCIM+7 -- ? O . ELEM CIME
210 CLC
220 ADC tl7
230 STA KOV
240 LDA TC I M+l
250 ADC +10
260 STA KOV+l
270 LDA *O
280 STA K CIKLUSVALTOZO NULLAZABA
290 STA K+l
300 STA JELZO CSERE-JELZO LEGYEN HAMIS
310 BELSO LDA KOV AKTaKDV : KOV-KOV+2
320 STA AKT
330 CLC
3 40 ADC tl2
350 STA KOV
360 LDA KOV+ l
370 STA AKT+1
380 BCC U2
390 INC KOV+ 1
400 U2 LOV lU 1 OSSZEHASONLITAS
410 SEC
420 LDA <KOV) , Y
117
430 SBC <AKT> ,Y
440 DEY
4~0 LDA <KOV), Y
4 60 SBC <AKT> ,Y
4 70 BCS NEMCSE NAGYOBB
480 LDX tH VOLT CSERE
490 STX JELZ O
~00 CSERE LDA <AKT> , Y
:5 10 TAX
~20 LDA <KDV> , Y
~30 STA <AKT> , Y
~40 TXA
550 STA <KDV> , Y
560 INY
57(1 CPY ti 2
59(1 BNE CSERE
600 NEMCSE I NC f,
6 10 BNE U3
620 INC k. +l
630 U3 LDA k HA ~=MERET, VEGE
640 CMP ME RET ; A BELSO CH LUSNAf'
6:50 BNE BELSO
660 LDA K+l
670 C.MF' MERET+l
680 BNE BELSO
690 LDA JELZ O VOLT CSERE?
700 BEQ VEGE NEM
710 LDA ME RET MERET=MERET-1
720 SEC
730 SBC til
740 STA ME RET
7:50 BCS U4
760 DEC MERET+l
770 U4 LDA ME RET HA MERET=O, VEGE
780 BNE KULSO
790 LDA MERET+1
800 BNE KULSO
810 VEGE RTS ; VISSZA A BASIC-HEZ
Né4z ul a programot sorról -sorra'
130 . 50r - A tombnév parameter átvetela BASIC-bol és
a tombc1m k1szám1tdsa az ADRESS interpre-
ter-rulln seg1tségeve1.
140-190 . SOr" - A tomb delt.larál t méreténel1 _ J tem.!'llC!SII_ ~
tomb lel rQJábol es a MERET valtozóba irá-
sa .

... 00-260. aor - ~ l·.ulso c l klu5 fele. f,OV mutatót. a lomb O.


el emére áll i t j ul .

118
270-300 . sor - Nullfz ~uk a csere-Jalzöt és~ ci~l~élto­
zot , amaly a belso c1klus hosszéig no majd .

3 1 0-390 . sor - A belso ctk!us ~~~~ · Az AKT mu atot a KDV-


vel tass zuk egyenlové , a KOV az AKT utén1
elemre éll1tód1k.

4 00-4 70 . sor - Az egym4st kóvetö k~t sz4m k1von4sával ~~ ~


dontJuk , mel y ik nagyobb. Ha a második,
n1ncs csere .

480- 4 90 . sor - Ha az elso, a jelzóban jelöljuk a cserét ,


majd

:500- :590 . sor

ó00-620 . sor Eggyel nova l ~~ci ~lusvéltozo_ ~~ ·

6 30-680 . sor Ha l 1~ebb, mint az aktuális Clklusméret ,


~ol~ tat~ uk a vizsgálata~ ,

690-700 . sor - ha elértu ~ a c~lus vé~t, magvlz sgflj u k ,


volt -a csere . Ha nem , kész a rendezés.

7 10-900 . a or - Eggyel csökkent jük a MERET-at , s ha nullé-


ra et t, v o_gut vetunk a rendaznsnel- ~ egyab -
ként fo_l y t.at.J.Y.IL~J:l l sö ci_k l us t .
81 0 . sor -~~~sza a BASI ~-~z , a tömb ren dezett. .

A ~enti módszer nagyon Jól haszn4lható na• tul nagy méretü


tomb ö~ randazésehez. Ha azonban a méret novakadn1 kez d, es
kulonoson ha nem egész számok, hanem k arak tersorozatok ren-
dez•sét ke ll vegezni vagy beletoradunk abba, hogy nehány
&zfz elem rendezése már p arce"et igény el 1 vagy uj modszer
után názunk.

Ha nem a karju k teljesen eldobni a buberek-r endezés p rogr am-


jét és a ve l e szerzett tapasztalato kat, érdemes egy ol yan
eljérést k eresni, amelyik annak továbbfeJlesztése . A bubo-
r é k-rendezésról már tudJuk , h ogy akkor hatékony , ha arán ylag
kevés elemet kel l rendezn1 és komolyan +elgyorsltható, ha
seJtjuk , hogy a lista kozel rendezett és al~almazzuk a csere
Jelzot . Ezekbel az 1nformfciOk ból már kln.lkozlk a keverö -
rendezés <merge sort) modszmre , am1 abból 411 , hogy a~ ele-
meket sok k1s halmazra osz~Juk , ez eket buborék-módazerrel
rendaz:uk , a kis halmazok at nagyobb, részben rendezett lls-
t4kká ~uttatjuk össze, ezekat buborék-rendezzuk a.i . t , mig
a l nem •rjuk a teljes tomb méretét.

Hogy a példaprogram ne hasonl1taon o l y an nagyon az elózore ,


e:t a mOdszert egy karaktares BASIC tömb helybenrendezésén
mutatJu k bas

119
100 MERGE 8 /ASS
11 0 HIVASA BASI C-BOL I SYS ~OóBS , A:f (X) ,N AHOL A:f<X> A
11:5 J KEZDOELEM, N AZ ELEMEK SZAMA
120 MERET • :fFB
130 K • .fFO
140 AKT s $:;57
1!50 KDV ,.$~9
1ó0 .JELZO •$FF
170 STRl • S:5B
180 STR2 • S ~O
190 HOSSZt •S ~F
200 HOSBZ2 • :fóO
2 10 KI TEVO • S4E
220 NAGYSG • S4F
230 L • $51
240 TAROL • S 2ó
2:50 CHRGET • :f73
2ó0 FRMEVL a :fAD9E
270 ADRESS •$8088
280 GETADR • SB7F7
290 TCIM •S4 7
300 Z1 D$14
3 10 *"'!5Qó88
320 .JSR CHRGET ; TERMINATOR BE
330 .JSR ADRESS J AZ ELSO RENDEZENDO TOMBELEM CIME A KC IMBE
332 LDA TCIM TCIM ELMENTESE KC IM-BE
334 STA KC IM
33ó LDA TCI M+ l
338 STA KC IM+1
3 40 JSR CHRGET MASOD I K VESSZD
350 .JSR FRMEVL ~1ERET FAC-BA
360 JSR GETADR CIM FORMABAN Zl - BE
370 LDA Zl 1 HERET-BE
38 0 STA MERET
3 90 LDA Zl+l
4 00 STA MERET+l
41 0 LDA tH NAGYSG• l
4 20 STA NAGYSG
430 LDA ltO KITEVO•O
440 STA KITEVO
4~0 STA NAGYSG+l
4ó0 HATV C INC KITEVO KITEVO=K ITE VO+ l
470 ASL NAGYSG NAGYSG=2*NAGYSG
480 ROL NAGYSG+l
490 SEC
:500 LDA NAGYSG IF NAGYSG<MERET THEN HATVC
:510 SBC MERET
520 LDA NAGYSG+l
!530 SBC MERET+l
:540 BCC HATVC
:5:50 KULSO LS R NAGYSG+l 1 NAGYSG=NAGYSG/2
560 ROR NAGY813
:570 SEC
580 LDA MERET K•MERET- NAGYSG
:590 BBC NAGY813
ó OO STA K
120
6 10 LDA MERET+1
620 BBC NAGYSC3+1
6-:.o STA K+ 1
64 V ~ OlEPS LDA tto JELZ0=-0
6~0 STA JELZ O
660 STA L L-O
670 STA L+ l
680 LDA KCIM AfTx~CIM
690 STA AKT
700 LDA KC I M+1
7 10 STA AKT+ 1
720 LDA NAGYSG+ l TAROL•NAGYSAG
730 S TA TAROL
74() LDA NAGYSG ~OV•3 • NAGYSG+AI-.:T
7:50 ASL A
760 ROL TAROL
77 t CLC-
78( ADC NAGYSG
79(1 ADC A~<,T
BOt• STA YOV
8 10 LDA TAROL
820 AOC NAGYSG+ 1
830 ADC AKT+ 1
840 STA KOV+l
8:511 BELSO LDY ttO HOSSZ1 ES HOSSZ 2
860 LDA <Ak Tl . Y
870 STA HOSSZ l
880 LDA <!<.OV) , Y
890 STA HOSSZ 2
9(111 INY
9 11.1 LDA <Al T> ,Y STRl ES STR2
920 STA STR1
930 LDA <KOV> , Y
9 4(1 STA STR 2
9~() INY
960 LDA <AKT > , Y
970 STA STR 1 +1
98<..1 LDA <KOV) , Y
99(1 S TA STR2+ 1
1 0(1(1 LOV -+tO
1(110 HASON LOA <STR2) , Y IF <STR2> <STR l > THEN CSERE
1015 ELSE NEMCSE
l CJ..:I.I CMP <STR l > , Y
103U BCC CSERE
10 4 0 BNE NEMCSE
10:50 INY
10 6 0 CP Y HOSS Z 1
10 70 BEC NEMCSE
10 8 0 CP Y HOSSZ 2
10 9 0 SEQ CSERE
11 00 BNE HASON
1110 HOP P1 BNE KOl EPS V l SS Z AUGRABOl
1 120 HOP P 2 BNE KULSO
11 30 CSERE LDY tt2 VOLT CSERE
11 4 0 STY JELl O
11 :50 CSEREC LDA <AKT > , Y CSEREC I KLUS
12 1
1160 TAX
11 70 LDA H,OVl, Y
1180 STA <AKT> , Y
1190 TXA
1200 STA <KDV>, Y
1210 DEY
1220 BPL CBEREC
1230 NEHCSE INC L
1240 BNE Ul
12~0 INC L+ l
1260 Ul LDA AKT AKT•AI :T+3 -> l OVETt<EZO ELEM
1270 CLC
1280 ADC ti 3
1290 STA AKT
1300 BCC u :z
1310 INC AKT+1
1320 U2 LDA KDV KOV•kOV+3 - > KOVET~EZO ELEM
1330 CLC
1340 ADC ti 3
13:50 STA KDV
1360 BCC U3
1370 INC KOV-.1
1380 U3 LDA K IF L< K THEN GOlD BELSO
1390 CMP L
1400 BNE BELSO
1410 LDA K+1
1420 CMP L+1
1430 BNE BELSO
1440 LDA JELZ O IF NOT JELZO THEN GOTO JELZDH
14:50 BEO JELZDH
1460 SEC
1470 LDA t:
1480 SBC til
1490 STA
1:500 ·~ 4
BCS U
1:510 DEC ~+l
1:520 LDA K
1:5""":0 U4 BNE HOPP1 IF ~~> O THEN KOZEPS
1:540 LDA 1<..+1
1:5:50 BNE HOPP l
1:560 JELZDH DEC KITEVO KlTEVO•KITEV0-1
1:570 BNE HOPP 2 IF KITEVO<>O THEN KULSO
1:580 RTS VEGE , VISSZA A HIVOHOZ
1:590 l< CIH .WORD O

A fenti progr&m algorltmus& egy kics1t osszetettebb az elo-


zenél . MegprOb~lunk kulcsot adn1 a megértéaéhez, de 1ga~an
caak uqy könnyu megérteni, ha egy rovid <810 elemul lista
rendezési példájár& az olv&so maga követ1 papiron vagy akár
szám1togepen, lépesral -lépésre végrehaJtva a programot. Ezt
a konyv példáit tar~almazO lemezen lévo HERGEBAB-TESZT proq-
ram 1gen nagymartékben elo•egitl. Az alább1a~ban utaa1t6GrOl
-ut.asit6sr.a ért•lmezzuL • pro«;~ramot:

122
320-330. sor - A m~r 1 smart modon 4t vesszu~ ~ h1v0 SYS
ut~sit4s elso_ Raramáteret , ~ k@z doelemwt
111. annak c1mét ~ ~ CI M-ben. MegJegyzendo ,
hogy •= a szubrut1n nam ~= egesz tombot
rendez1,hanem cs a ~ ~ m gadott elemme l kez-
d a da , meg~dott sz~mu elemet . A sz~b r ul1n
nem veqez ~eretellenorzest, am1bol lQen
Lomoly prog ramh1b~ l ~z~rm~zhatn~l .
Sz e p ~eladat a 4 00 . sor után llyen ellen-
orzés b l l.tata~a,~mcly BAU SUBSCRIPT ERROR
h 1 bát ad a tbmb méreténal tullepese eset~n .

3 40 400. sor- A mAsod1l


parametpr, a rendezendo e lem~ ~
B~Amana l es e lhel yezese ~et b yle
~tvetele
o& egészkent a MERET nevu v4 l to::Oban .

41 0- 4 ~0 . sor A NAGYSG-o l l -r e, a li levat u-ra all • lJul

460-:54 0 . sor Megkeressuk az l a 2-e_s hatvanyt, amel ynG!I


ertG~e n~ g yobb va~yegyenlo a mérettel.
Ezt ugy végezzu~, hogy Cl l lusban addiQ
szoro~zuk a NAGYSG-ot 2-vel , ~m1g l1~ebb
mérelnel. A c1 lluso1 számat ~lTEVO ben
számol J~ll .

:::'i::J0-~60 . sor E:o:: a leglul so c1llus feJl? . Ebben a C l llu;.-


ban (dmely KITEVO - szor fut le> egy rende-
zés• menet zaJll~ le. A resz l1 stá~~t tel-
Je!Oefl l erande::-;::ul buber ek-el J~rássaJ . A.:
egyes manetekben unny1 roszre os;::tJul a
telJes hal ma ::t , ame.,nyl NAGYSG ertel-e es
e;::ekel ~ res:o::e~et egymaslol telJesen fuq-
getl enul rendezz u l , bar a program sz er ve-
zé~ében ez os~zefonod1l . M1vel NAGYSG er-
l el e t~ c 1l lus eleJen ruqton felere L!OO~
kentiLll, a;: elso menutben a listal s;:am"'
lt altonL'I ..1: a hat v anya, ...m~ meq epptc•r• l 1
sebb M~RET-nel . Ezutan m1nd~n le4lulso
c•kl~l.,ltt>peaber. +elere c&ollen '-PPE.-•• e~en
lét utas1tás véqrehaJ ta saval - NAGYSG er-
télo, Lges;::c.>n add1q , mlq a~ ulolso mero..,l -
ben egy lesz, aza;: a tel;es tombot ege&;:-
ben l ell l et endezrn .

:580-630 . sor- A~ c11lusvalto;::o a lo~epso Cl~lusb.n , er-


tél& MERET- NAGYSG, lenye9eben ~z utoiso
rés::l1sta elso eleme e" a lomb vege l.o.:ul-
tl tévol&agot adJa meg.

640-650. 60r- A lo;::l!'pBO Cllt li..I_!S le;:delE! . A ClllLIS egy-"'liY


lépése a bubotDk-tende~e~ Iultic c lklu&lc-
petunel felel meg . Egy-egy Clllu!>lépe .. bun
- a belso c1llus s;z1nln l - valameonv1 l•s.-
tát rende~• p~rhu.:amo~an. Elso teny~edesoe
a cser~ Jelzo O- r~ alllllsa - s.:erepe
ugyanaz , mlnl a buborel -elJ ~rásnal.
123
óó0-ó70. sor A belso cik l usv4l t ozo Q~~·· ·

680-710 . sor Az oaszehasonl i t4&1 ciklus elao eleme a


telJe& list• elsö eleme lesz, ennek eimét
KCIM-böl vesszük.

720-84 0 . sor - Itt kezdödik a legbelsö siklus , am1 annyi


l épésböl áll , amennyi K érté ke, e~zel va-
lamennyi list~ban megtess~ü k a soronkövel-
keze osszehasonlitást . A ciklusban a~ elso
teendo a két ósszehasonlitando beJegy~es
hosszának k1emelése a leirókbol es a
HOSSZ! es HOSSZ 2 munkavállozokba tá~olasa.

910-990. s o r - Ugyanezt tesszük a le1ro másod1k res~ével,


a karakterláncok kezdócimével is. Ezeket
STR1 és STR2 , a nullás lapon elhelyezkedo
pointerekbe irJuk.

1000. sor - Az Y regis~tert nullázzuk az 1nd1rekt ln-


de><elt c:1mzéahe~ . Az Y regis~t er 1gy teh.1t
a stringek elso tO . > byte-Jára mutaL .

101 0- 11 00 . sor- Ebben a c. J !,.l~;~sban .tóttén_l l a lar-;ll-ten;;o-


r;-oz_atok oss::ehasonlitása. Ha ennek n . -e dik
lepeseben
a másodi k str1ng-bel1 karakter kl& ebb
<a tele balra lévo k 1dá1g egyenlek
voltak'> . a második raraktersorozat
k1sebb, csere szukséges;
az elsö karaktersorozat aktuál1s ka-
raktere a k1sebb , az elso str1ng kl-
sebb, nem c: serelunk;
az elso karakterlánc véget ért, de+l-
nic:lO szer1nt k1sebb,nem kell c:serel-
ni ;
a másod1 k k arakterlánc ert veget, o a
k 1sebb, cserélni kell;
a karakterek egyenloek, mindkét lanc
még tart, +olytatjuk az osszahasonl l-
tást .

1110-1120. sor - Ez a két utasitás a program v~gérol to-


vábbltJa az ugrásokat, mivel a cél már
távolabb van az ugro utas1tástól 128
byte-nál .

1130-1140 . ~or - Ide kerul~ez érl~ c:s~e~set~n . Elá-


szor a csere-Jelzot állitjuk O-tól k~lön­
bozo értékre.

11~0-1220. sor - A karaktersorozatok cseréJe helyett mind-


ossze a hárombyte-os leirókat c~eré l J~k
ki . Ezt ebben a ciklusban tesszük, egy
menetben egy byte-ot . ~tmeneti tárolásra
az X regisztert használjuk.
124
1230-1250 . sor - Ha nem cserélL.nl, r ogton, ha 1gen a c ser· 2
után lepun i t de. Megnev el JUI eggyel a
~lklusválto~o e r té~et.

1 260-1370 . sor - M1ndket elemre mut a t o p o1 n ter értél et 3


b y te - tal, egy elemmel el o bbre d l l l t J ul,
vagy1s átterunk a kovetkez o részltsta
kovetkezo elemere .

1380-1 4 3 0 . sor - Meg v 1zsgál j uk, hogy e lértul -e a bel so


c1klus végéL, ha nem, f ~ lyt a t J u k BE LSO-
nel.

1440-1450 . s o r - Ha nem~ lt <._sere, a kulsö c1klus veg -


ellenorzeséhez ugrun~ , mivel e z ~=t J e -
lentl , hogy a reszl1stak már rendezettek.

1460- 1 !520 . sor Csö.kl<et lt.JLtk a l, o z epso _ c1 k.l u s V<ll lOZOJál


1 530- 1 550. sor - Ha nem c sool.l cn t u· ra, a;:; egyes rcs~r er •de ­
zese~ ko v etle;:; o lepesere t er u n k at, azaz
a l. o ~ép so c. tll,u E. fol y l a t Odll .

l5b0. 50 t L sol lentJu k a l 1tevo e rt e l et.

1570. Ha nwm U , v~~b;:;aleru n ~ a l u l&o ctklub


ele;er e e~ moE.L feleannyi r eszll&lát fo -
g u nk t ende;:;ru. Ha U, mar· az egesz 11 sta
rendezett. tehd~ a 2 0• 1 r észit s tat 1 s
l et end ez tuk .

1580 . sor - Visszatérés _ a ~ASIC progra~ba .

Ez az elJárás lényegesen JObb eredmenyt ad, m1nt a z elo;:;o ,


meg nagyobb elemsza mo~ esetén 1s. TáJékoztatás ul: 1 000 d ~ ,
átlagosan 8 hosszuságu v életlenszeruen generált str1ng ren -
dezese kb . 21 masodper c et 1genyelt, ami nem ross: eredmé ny .

A programot ház1 fel~da t ként érdeme ~ tovabbfQJles=tent. Pel -


d4ul a telJes str1ngek helyett cs~k adott pozleletol ke: dodo
adott számu, vagy elore defi n tált terminátorig terJede ~a­
r akteruket tek1nteni rendezés1 kulcsnak és eszer1nt tel ; e•
r ekordokat rendezn1 . Ennél sokkal egyszerubb feladat lehet
a~ 1tt adott novekvo rendezes helyett parameterezhetben
csokkeno vagy nove~vo rendezést haszná l ni . Ugyancsa~ érdekes
feladatot ; elenthet az azonos kulcsok kozul az elso k tvéte-
level m1nd elhagyása és a keletkezett tomb tomor1tese, vala-
mlnt ~ megmaradt elemek számának k1meno parameterkent vala
v 1 sszaadása , stb. Az 1 l yen feladatok megoldását , persz e
tesztelessel egyutt , amolyan k1s h 4 zi v izag • k4nt is lehet
értékelni . Ak1 pl . a legutoiso átalakttást meg tudJa oldant ,
nyugodt lehet,elsaJátttotta a konyvben tárgyalt tsmereteket.

125
~-6 ~fel_Adat_ok_ m~l-tozel i tése

M19 az eddigiekben JObbá~a csak ~ov1d 1 kiegészitoként alkAl-


mAzott p~og~Amocsk4k~ol, szub~ut1nok~ol volt szo, konyvUnk
utolso feJezetében sze~etnénk néhány jótanácsot adni utr a va-
lóul azoknak, ak1k ennel nagyobb fába vágJák fejszéJuket es
onálló, nagyte~jedelmu aoftwa~e-te~méket klvánnak lét~ehoz­
nl .

A nagyobb feladAtok tulAjdonkappen egy hosszabb


p~og~oamozás1
~endsze~feJlesztésl tevékenységnek csAk k1s ~észet képezik
és ennek megfeleleen kell kezelni oket.A ~endsze~fejlesztési
tevékenysegnek- anelkul,hogy most sze~vezési feJtegetésekbe
bocsátkoznank - egy lehetseges felosztás sze~1nt a k óvetkezo
fo ~észe1 vAnnak:

1. f:!.e.l_yz~~f_elfY~é~es,ö\ ~endsze~~el szemben tamAsztott 1nput es


output 1genye~ 1 valam1nt hatekonyseg1 kovet~lmenyek megis-
me~es;;e.

2. ~l.llliiO speclf_l _~áJ;lO ,


vagy nagyvonalLl rends;;ze~te~v keszlté-
se, amely
dant a megoldásbAn felhasználhAtO ha~dWA~e es
softwa~e elemek~ol, pontosan lei~Ja a kész rendsze~~el
szemben támAsztott kov etelménye~at, a termék elkészuléset
b1zony1t6 átvételi teszt mélységé1g.

3. 8é_s~let~__Q_s~tl§t!:~ kidolgozása , amely mezd melységig


spec1fi~álja az adatállományokat adatfeldolgozás ese-
ten - és algor1tmus - blokkdlagram vagy egyeb kodifl ~ ált
algoratmus-leirás - mélység1g a prog~Amot. Ezál~al prog-
~amozásra alkalmas szervezésl dokumentáclóként ke:elheto .

4. F'r9~moz 4~1 _ tf!l_vtHcen__y_s_é_g_ek, ..mel yek programter vezésbol,


tesztelés• te~v elkés:atésebol és magáboi a kódolasból
állanak.

:;. F'rog_r am tesz tel es1 murlliál01.t,ok, amelynek során el ószor mo-
d~lonkent, maJ d a kesz modulo~at programmá 1 n tegrálva
programonként, végul a telJes ~endsze~~e teljesltJuk a
lesz tel és l tervben fog l al t akat. ·

6. A rendszeren lef~ttat~u~ a~ ~tvételi ~esz~~~. hatékony-


s~g>vizsgálatot vegzunk, joavaslatot teszunk kodoptlma-
liz•lásra és v1sszatérunk a 4. ponthoz, v agy befeJezett-
nek nyilvánitjuk a terméket.

Ezen lepéaek bármelyikében olyan döntések~• kényszerulhe-


tunk, hogy valamelyik korábbi tevekenység1 pontra vissza-
térve Az azota elkészult dokumentumok éa termékek átdol-

128
gozá~4va l 111. UJr• elk•azltda&val l ovetkez&teaen foly-
t•asul • munk•menetet. Az olyan - •l•o•ndö en n agym~r•tü -
prooramok, am•ly•k n•m a +•nti vagy ahhoz hasonló •z•rv•zett
módon k~szülnek, meob iz hatatlan kódot er•dm~n y ezn•k , •maly-
nel utolagas •~ervl~-ráfordttaa• l mess:::& megh•ladJ•I azt a
l oltseQet , amelyet d hely~sen vegzett feJleszte teve lanység
1gényelt volna .

A twl Jes r~nda~erfeJ l eszl&al vertlium v&ghezvitel~ a progr-


r~mozásl szaltudasen k1vul eg~éb ~épzettseget , elsosorban
szerv•zöi ismer•t•k•t 1s >genyel. Mivel • m11roszám1togepe~
teruleten 1ger gy•lor l az egyazemé l yes,vagy 1gen ki• csoport
.ill"'l vegzett JtLml. .a , Iulonosen fontos , hogy az 1lyen lorul-
menyel lazolt d~lgozo szakemberel b1zonyos fok 1 g unlverzá-
1•••" l egyenel . Gyal r •n l ebecsu l 1 1 a l 1 soqépea fe J l es.:: to• te-
vákenya&get, m1g a nagygapelnel az1nto m1nd1g betartJak a
fc11t1, ""'9Y ahho::: hasonlo mLlrtl a»zerv~zeli lépcsafol .:u t &so az
egyes lepesekben megfelelo lepzetls&gu ape~l•lt~téi•L alka l -
rn .. ~ndl , add l g o1 l 1 o;,gepe& r end az er el l ••..: 1 t eset l 1 s munl an .. l
tel1nl1k . E.: 1 gen n•gy es 1gen ve~..:elyes tevedes, mtvel a
m1lroqepek altal.ib•n lorlatozott software-ellatutl.aqo~ es
néha nagysaqrendel~el l ••~b hatetunyQ~Ql muto~LOl mal l ett
tgert .n•q .. s fello .. a.znalO> 1 genyek~l rnaql1vónO rendszto~r&l-.et
Jell noeqvéllOslto.Hol. v ... los.::110Ule4 enn&l c.1 lebecsu loi!',.roel <l ~o ­
vwt~e~nemyc •.:: 15 1 hogy fellunoen soh ro~s~ m1nosagu proyram-
Lermelal lln ,i lnah s~erte • Yllólgban s.o: amély1 s:o:·amltOgepel<re.

He~ n""qyobb rl?ndso~er•l fo;tJlU!öó.:LesQbOlll •~ulséges proyrC\mo-


ol
fttl .. dat.ol r.- l urocentro\lunl,
O:óhol igen fontos mar a tervezés i
szakaszban

.. leheto lt..gi11Del>I.J rC•i>.:nlriO! - .. l,.!lr aasembly-noc~lrO s..:tn-


l1q - del ontporoálrol o1 fc>ladatot Gis def1rn.!lrn az egyes
e l&~me• polllu• lnler-r .. c:u-L>t. r::I!L.al.!illall e.::en tevt:fl.enyseg
~o;:ben kiderLrlnek a n•gyvonalu terv sulyos h1b.i 1 es kl-
ala! ul, rnuotegy elves;;: ll -»z.abadailqfol.il a modul alga-
r 1 tmu5a..

MQg kell terve.::n• a les.::teles pontos tervet modulon-


lent, m1vttl nagyobb me~tnyl&&gu Lebzteletlen lod atlá
t•sa megoldhatatlan nehezaegelet olo~hat . N•m s.:aba.d
••Jn.iln l a -fáradtságot • mudulolr ,.z.imar .. meqfeleld
tes.::t-.igy kés~ite»ére , amely huen szimulálJa a tobb1
modul 1nlerfa~e-s.::er1nt1 v1sel~ed~sét . A teszteles1
tervne k pontos•n t•rt•lmazn1a kell a tesztek varhato
eredmenye1t 1s és ennek ellenorzeset sem art t•szt-
~gyra b1zn1 .

A kódolást azakaazban

nem szab ad elté~a prg~ramtervtol, telJeslthetetlen-


&Qg esetán vts~za kell menni • tervezes1 szal~szhoz .

127
pontosan ragaszkodni kell a megtervezatt taszte)ési f o-
ly•mathoz,

(;&ak tökél etesen l etetoz tel t medu l ole• t i ntwgr.il ;un k


- azokból sem tul sokat - nagyobb egységekké. Soha ne
sporol;u k mag a teszt-ágy készitését magunk vagy mások
által leteszteltnek hitt medulek •lkalmazásával 1

A teljes munka alatt pontosan doku-n tál J u k tevekenysegün -


ket, bátran használjuk a számitagépet ennek támogatásáb•n '
M1nél tobb szervez ési, tervezé&l , programozási , tesztelés1
dokumentá(;iót orzunk meg, annál konnyebb lesz a hibák felde-
rltése . Ne sajnáljuk a dokumentálásrök forditott idot akkor
sem, ha mi magunk vagyunk progr amun k megrendelö;e, szervezo-
je, ter v ezo;e, kódolöja, teszteleJe és végfelhasz ná l ej a egy-
személyben' Semmi sam t ud o lyan ismeretlen l e nni , min t a fé l
é v e •ltalun k i rt pro o r am !
Vegul, ha jOm1noségü termeket akarunk létrehozni, vegyuk fi-
gyelembe a szamélyi számitógépekre irt prograrnek néhány spe-
ciális külaö m~ n öaéo t én y ezöj ét :

5pL!...~j.u:O~l:._.!!lö~Z~e=r..:!v~e=:.z~et t
~A!.....!k~é:.tP!.!•!!.r!-!.n!,.;y[.o!:!--....:l~e~guy"e , á t t ek 1 n t h et ö , n em t u l
zsufolt. Kerüljük a buta BASIC programokra jel lemzo
rolloz.ist.

A kécernvón m1 ndi q torténjen val amj_. Bármilyen bonyol1.1l t


feladatot is old meg programunk, a felhasználO egy perc
utan feltétlenul - neha már hamarabb - gyanakodn1 kezd.

Seq~l!!<- a g}:'akorlat.!.i!_n felhaszn_Alöt jol áttek1nthetö,


é~theto pontokbel állo menükkel, könnyen klváltható
help-funk(;iók ka l.

Ne gátolJu k ~gya~OLLO~t felhas~nálot mindezen -hasz-


szantarto - elemekkel, adjunk lehetoseget szamára ro-
Vld, sokatmondó r észekbel álló csszetett parancsok ki-
adátöilra.

Bátran- de mértékletesen- haszn~ljuk_ki P gép spectá-


!is lehetoségeit, gra f1kát, hangot, joystick-et , fény-
ceruzát, stb . Ugyanakkor ad;uk meg a lehetosegét annak
1s, hogy az 1l yen speciál1s eszkezekkel nem ~endelkezo
felhasználók is hasznalhassák a programot.

A fenti felhasználói kapcsolat-elemek példasze~u megvalósl-


t4aával tal4lkozhat az olvasó a SUPERBASE ó4 programban
!m4a kérdés, hogy adatbilziskezelésre mennyire alkalmas>.

128
Vogul a m i kroa z ~ m itógé~•• r •ndaz e r fa Jlaaz t ••l tevé~anysag
tal~n lagfontosabb pontJara szare t nenk falh 1 vn1 az olvaso
f1gyalmot. Ne proba1Jun1 m1 nden felmaruto faladatot f eltét
tanul meqold~n1 Commod u ra 64 seg1tsag•vel. Azolrol az 190
nye l r ol , amal yel , ugy tur o1l , Oppenhogv mogol dhatol. • geppel,
menello.o:Len l >derul, hogy ~ol l al ágcl!>bog.asabba• es 1lyanlor
mar neho:..: L.lbbahclqynt cl murol.il. Igy c:sa~ l.ibi..IJl~oeg y en ~110.
loronvvn O!D\O.;:eoonlo telldli.:o;>rel lé,;;ztthatol, o\melyel clllen
mondJ~I fal cl szolg.ilcltol, am11or a leg l ellemetlenebb . Hasz-
n•lJuk a Commodore 64- et arra, amire való os aol or omu111.
le~~ m1nd a programal fejlQazté~éb~n , m1nd allcilm~zásaban.

129
A FUGGELEI<
COf1MODORE 64 KODTRBLA

if)::oJ :1 ::~«:1 ICli=DIIe• 1:!11:i=-=-JI • =r:\.,PII 11=-:a •~l] t(J:(JJ : t::t:1;;1

0 ee @ SOPVEG BPf e 130


1 01 A ORR/IX l 01
2 02 B 2 .....
!1~-

3 03 c 3 1;13
4 04 D 4 lJ 4
5 05 E ORA/N 5 05
6 136 F ASL/Il 6 0 t.
7 07 G 7 07
8 08 H PHP :3 OB
9 C"19 I ORA/f..\1 9 lj 9
w 0R T ASL/ f'V 10 0A
l l 0B K 11 OE
12 ee L 12 0C
13 en RE T URH t1 OPFf/A 13 OD
14 0E ll ASL/BE 14 0E
15 ei=" o 15 r:~F
16 10 p EPL/A 16 10
17 ll CRSR LE Q ORR/I'r 17 ll
18 12 PVS Ot l p 1ö ~~
19 13 CRSHOI'lE r
-::> 19 13
20 14 DELETE T c.:e 14
21 15 u OPR/1-l:.< 21 15
22 16 v ff:>L'tl~~ ~d. 16
23 17 ~~ 2 '3 17
24 18 x
.,.. CLC 24 18
25 19 üPfVH'r' .:!5 19
2€ lA z 26 tH
27 lB [ oc!. 7 IB
28 lC f 28 tc
29 lD CRSJOBB J ORA/R;~ 29 lll
30 lE 1 HSL,'RX 30 lE
31 lF ... 31 1F
32 20 J 2.R :jé_ <:::lJ
33 21 AND/IX 33 21
34 22 34 22
35 23 # # # "='"'
-''-' 23
36 24 $ $ $ EIT/l l 36 24
37 25 % % ;~ HtlD, 2 37 oC'
<.....J
38 26 & & &, POL/Z :38 26
39 27 " ' .39 -,'?
40 28 ( ( .. PLP 40
"- '
28
41
42
43
29
2A
2B
)
~
+
..
)

+
~
+
At ID/ IN
POL/ EE
ROL/Z
41
42
43
~9
2A
2B
44 2C B IT/ A 44 2C
45 2D AND 4 '5 2D
46 2E . ROL 46 2E
47 2F / / / 47 2F
48 30 0 B B BMI 48 30
49 31 l l l AND/ lY 49 31
ll] :(ll :1 ~::1:1 • :r:I:t•...
·=~·-
.::llll!~l::ll::lli:l ~ ::ll~·~) lj 'lj :;til :J~:~; l

')(1 -~~ r- 2 5!) 32


51 83 3 3 ~ :Ol _j .;j
~2 34 4 4 4 Ci 2 34
c; 3 3 c:; c; ,oz
"j 5 ~iti [l 'ti
C"'">

,- ....,
_l

::.-o
.J .:._, J
54
-=)5 -.-
~:~
..:··
o:.
-· F-·1tl / tl >~
c:~.
,;a_,
-:?
5"' 3:'3 8 8 <'>
~-1 ~~ ..;.~:
,,
""_ .3 -=t :;'
O::•
-,
- t-rtm 'A',J c--
....,( ~9
Cj8 ~A l :i ;·H
c; -F ~q i:B
G~ l 3C < < t.-(1 JI
61
-.-,
-~r. Ft t j[l 11:: h l .Lt
.-. ~ "!E. Prt l /H::~ 1':•~ ,c-
6.0:: ·;;F
4C'1
?
l'il ,.. P rT
6
64
..F
4':1
"'"'
,, ""
.........'
41 A Ft r. r R/l ... " ·U
.J.:·
,;. ~""
6~
4 ....
..1 -.
4•l
B
,~

11
B
c
Ir
...
..;t;

t:(:•
~;;
'-1
_"q ..;c; r fo EOR.'t-.1 F.::J 4:...
7ft 4~ F F Fo. If .u 4>:.
.~l 4-;" l• .-. 71 4-
? 4> H H I'Ht-r ~~ 4 é.
'
7 4 ... l I L ltP, l 7"':': 4''~
• <l ·tA T T l ,::.~·.'f.E :-'~l 4H
?C: 4T l. l ,:'i ·W
77
41
411
4F
l
fol
l~
l
t·1
~~
Tl·lP, 'A
Er r~· H
l · -F'~'A
(..-
_,..,
•Ö
. 41
't .Ll
4f
4F

~1
. l
l
F
,..
ll
t

.l•',/1.
Fo IF'. ,'y
4F
'51.-1
·l
c:~· t~, 2 f,
'•3 "; :
r~ ..;t 54 T T .;., '54
.".
~5 It ll EtiP.··n..; --:5 _,.J
"'"'
~~'.!,
.l
~~ .l L lj.... 86 c-; b
~-: l·l o·l ..7 ,.,....,
.,
. , -: ......
~'
ru ''
O:.••j c;.~:
89 5q 'r .... El.•k. fr,· 8~ c:, c.
~HJ ~H
., -:,0
G. .{ "•H
·: .t 5 P. ':·B
..... 2 ,( '--12 5(
'=i;) ~n CtJF:/H;, ~.; ::.n
·::.-t :.r l :. r:;·.,-Ft~\ O:.,.._t "'iE
~c; SF G' j ~.f-
36 617! ~ J ·'
Yl t:, U

-
':l(' ···l l ADt::/ I:.; 97 61
98 62 _j;_, ..;;~
99 t:" 3 q 9 fj3

131
.:!111~ =-=-~ 1
·-~·-
11)::(111 : 1=tW:l · :]'~"'t(JII Jll=-:ólt((QrJ II)::(Jil : l:t:f;J

10A 64 100 64
101 65 l ADL·ll 101 ~c
OJ.J
102 l;) 6 ~ ROF'/ t-1 102 66
1!3'3 r5~ l 10.:$ t.(
104 .;::..~ ~ PLff HN ~·-.
. •0
105 1;)9 r ADC/KV 105 t.;, 9
106 6A l ROP/ BE 1~ 6 6A
10 ? t<: B ~ 107 bB
tn:::: 6C • J HP/I 1108 r:. C
JCJ=1 ~;n L
RDC. ' A 109 6D
110 6E , PIJF~~··ft 110 t;.t::
111 .::F lll 6r
11 2 ;'0 r _B•,,t..:.; t L.·' 7~1
l 13 71 ..J. A ru .'1 'r' 1J ·..> l
114 --. 'T 114
l
-~,

t l c; '"'
73 -! 11 5
l"'
? ...:$
116 ?4 l 11 .:. 7' 4
117 -...
,. J l fffu , N;~ 11 7 (''1
11 ~ (k l PUP, tl,~ ll !3 lb
1 l -:. 77 11 9 '?7
l .

120 78 ·::.E:.! 1-.!ú 71::


12 1 7" 9 ADC,'A't' 12 1 ?q
122 7A .J 1 ~2 oH
t ;·'=' 7 f: • 123 7B
124 7C le. 4 .c
125 7D .l
ADL/H;~ ~-·e::
e. ;:l ,·'D
126
127
7E
7F .• POP, 'A;; 12.=-..
1 "'-•'?
'
7E
, f-
128 1'30 .rl Et-lD 128 8(1
129 81 :l FUR ST H/ l ~ t.::: 9 81
1 30 82 l ::l llE ~<T 1'30 8'"''
• c..
13 1 83 lj DATA },.:; 1 8_,
13? :?.4 11) Il-iF' UT# '::. T't'/ tl l~;c:: 84
13; ~.c::; I~lPUT S TA/t~ 1""-·
... .:> 85
=- :::~-
13 4
1 35
36
87
:l
'l]
D It-1
READ
'::.TX. 'Il 13 4
1~5
.
.._,t:)...,.
•JI'
~

1 3~ 88 :r LET DE'r' 1 3>3 8:.:.i


l ~""
··r 8q It Gü TU 137 89
138 C: A •J RUN Ti :A 138 :.;H
139 BB ~ IF 1'39 8B
140
14 1
8(
8D
:~E

ill
RESTORE
GO SUB
ST'r'/ A
~:.T H /I-i
140
141
:;;l_
8IJ
142 :l PETUPN ST>-:,.'A 142 8 E.
14'2: 8F l] F:EM 14:3 aF
144 90 :l STn P Br· c 144 90
145 .91 ri"SPFEL !'.l ntl STA/ l'r' 145 91
1-16 ~2 PVS OFF :J l·lH I l 14é 92
14 7 93 CLP >3 LOAD 147 :; .~
143 94 IN ST ll SAVE ~:nY,-n .: 14!3 94
149 95 lJ VERI F'-r' STA/l l X 149 95

132
lll :(IIJ :t ~::.f=-t ••b:i!l) • • .:ill::~ =-~:1 •=r;T.3(. . .Ej=-a• ::~ •J llj ::(Jij :t~!{;l

1511 .'il6 •'J DEF s n :. .·NY 151) 96


151 97 ~l POl f" 151 97
l !=i2 :.::: ~:~ PP HIT # TYA 152 98
1""'"0'
~·.;> 99 r• PP !IH .-;TH. R''f' 153 9.~
l o::;4 :öl H ~ l •JI H T XS 154 9A
tC.5 9B lit LIST 15'5 ::'If;
gr i"LF 156
156 r~
""'-
..,.••
l
157 9D CR<:;PBAL r t'lD STA,"RX
-··
c--· '-lll
15P.
l"i t:o
1 ,:;11
1 ,:; l
9E
'"IF
An
AJ
-•... <:>'r'':>
fi F Etl
CL OSE
C•ET
LD'r', l V
LDA ·n.;
l 5o
159
J ~:::u
161
"~E
9F
HO
Al
16 ~ A2 " ~lE l~ L D~~ t ·...• 16.-:: A .,:
16~ A'": .J THE!' l•:;d H..::
l 64 H4 'l TO LD'T'/~l 164 A4
11S5 A5 ~ FN LDA,'tl lb~• Ac=;
t.=:.; At::. ~ :C:F'C• LDi~. 'tl 166 Ht;:.
a I.-;? R,
167
.. .
l . ..."
A(
H~ (4 rlu -
Hl:. t· l
TA't J,.:;s R''"'
C•
It:-/~ A9 ;] STEF' LDR,'I \1 169 11 . •
17 0 AR ;J + THi: 17 ~J H~i
1-1 AB :} 171 lll:!
172 AC ·~ L I I't'. H 172 R
'
1-" ..
1;-'4
AD
AE
"= LDA,A
LD;..~.- H
173
174
AD
HE::.
1 75
.-·
1 ""-
AF
BO
""'
lÖ]
Rt~ D
,-,F· f:l ·:-;
1 ..,.-
r ~·'
1 ;-.,.,
HF
BlJ
177 'B t Lúft, lY B1
t""·::.
179
' .... f ..::
B3
"
'!ol
C)
=
l ?'
1 ""'='
'._,
1 ?~-'l
.E·'"-•
.ru
1 :::í.3 S r3tl LD'I.-'tl:/. 180 P. 4
~·.-j
B4
181 p. c; HIT LDH. 'ti:: t::: l ]::
..
1 C•-
, B6 ·~ RE:S LD::,'tl~: 18.:?' B6
'
183 B? rlll USP l'··'~
'-'-' I:; ,
18 4 B8 ;) FPE t.. L\·' 184 B<::
1H5 B9 :J POS L.DR/F1''1' 18~ B-?
186 BA Dl SC•!' .,,
T'-.~ 1 :·:o:. BA
1..,
C•""' BB fl ~<·t~rr 187 Bl::
1.::8 lK ~ LOG LD'r', Ai. l C;;_: r: r_
189 t::n a E?:F LDH,'R;: 189 :E: D
190 BE ...l ros L fl,;, 'fi' r' 191) I; E
l "=ll F<~ f'i ·:::n 1:1 :Ca-
19.2 c.-1 T Flt-l CP'T','k'·.·' J. 92 C' 0
193 Cl RTH U·1F'. r ;. 19.: Cl
1~4 c~ PEEf, 1Cl.l r:;;:
1 ~5 C3 L EH 195 l ~

t --'4.= ,-4 ,_ Ti<'-r. LP'r, r 196 C4


!=';-' c:. V FIL Ct·lF'/tl 19? t_ 5
198 r. G H:;( DEl./ ll 19i:: ,_.b
1q9 C7 C HF.t !~--=- ,,
r""-

133
l (J ::(lll : l:t:f:l r.i:!DIJ • • ~:(::11::111:1 •:r:e:tOII ..1'1::11~•m~ I(J::oíl :1 ~1

200 ca LEFT$ INY 200 ce


20 1 C9 RIGHT$ C t1P / ~ './ ..:0 1 C9
202 CA t1ID$ DEX 202 CR
203 CB 283 CB
204 cc CPY/A 204 cc
285 CD Ct1P,-'A C:~J'5 CD
206 CE DEC.'R cM6 CE
287 CF .::o;- CF
208 DO Bt IE c:OCl n~_,

209 Dl CMP/IY 209 Dl


2 10 D2 C: lU lJ 2
211 D3 21 1 D3
212 D4 .21~ D4
213 ne; '-11f>,'Nr. ...: 1 '3 D5
214 De. DEC,'I~~. 214 Do
2 15 D? 21~ D?
216 D8 CLD 2113 o::::
2 17 D9 Ct·1P / AY .,:!;-' !J~
218 DR 218 DA
2 19 DB 2 19 DB
220 DC 22lj DC
221 DD ,_I'1P 'AX .L21 Dll
222 DE DEi_, HX 22é:! lJ E
223 DF 223 DF
224
225
226
E0
El
E2
• l
ep;..:, • v c: .c4
sBr/JX 225
226
EO
El
é.~
227
2~8
E3
E4 •• CP~</t~
.:::27
228
E .:l
E4
229
230
E5
E6 •
Ul
SBC,N
WC/t ~
~ . ~q
c.. o:...
230
E5
E6
23 1
232
E?
E8 •"' ItiX
..:31
232
C: 7
E8
233 E9 A :5BC/ KV 2.33 E9
234
235
ER
EB • NOP C:34
.:.:-5
ER
EB
2.36 EC r·= L p,,,.. H Z.;;t:; é_ i_
237 ED &: SBC/A 237 ED
238 EE :'1 wc R 238 EE
239 EF •r. 239 EF

..--..
2 40 F0 BEl) 240 FO
241 Fl SBC/ IY 241 Fl
242 F2 242 F2
2 43 F3 :l 243 F3
244
245
F4
F5 • l SBCr ~~ ~<
244
24:..
F•
F5
246 F6 l INC/t~/' 246 F6
247
248
F7
F8 •• SED
24 •
C:: 48
F7'
F8
249 F9 • SBC/A'T' .14<;1 f9

134
111:1(111 :1:11-:í:J •:r.."i~t•• .:!)1~~=-:::il~l ••J:I;J(. . rJ::il:i•tO)I) II]::(IJ i:t:g(:l

20:.0
2'51
FFf
FB ..•• 25t:t
~St
Fh
FB
f' t_
252
253
254
.
")o::" C'
'---'
FC
Fit
FF
FF
..••
:l SEo~. fiX
l HC. AX
'::?
"-':o
<--'-"
254
.:!55
FD
FE
FF

135
B. fugg elék

~ MOS 6~10 ut~sitáskészlete

l . Cimzes1 módok szer1nt rendezve:


Abszolut: ..,r
ADC/AND/ASL/B l T/CMP/CPX/CPY/DEC/EOR/INC/JMP/JSR/LDA/
LDX/LDY/LSR/ORA/ROL /ROR/SBC /STA/STX/STY
Kbzvetlen : 1 1""1
AOC/AND/CMP/CPX/CPY/EOR / LDA/LDX / LDY/ORA/SBC

Nullá'ii liipU : /•
ADC/AND/ASL / BIT/CMP/CPX/CPY/DEC/EOR/INC/LDA/LDX/LDV/
LSR/ORA/ROL/ROR/SBC/STA/STX/STY

Beleertett: k
ASL/BRK/CLC/CLD/CLI/CLV/DEX/DEV / INX/INV/LSR/NOP/PHA/
PHP/PLA/PLP/ROL/ROR/RTI/RTS/SEC/SED/SEI/TAX/TAV/TSX/
TXA/TXS/TVA
Rel ..-ti v: ~ ,

BCC/BCS/BEO/ BMI / BNE/BPL / BVC / BVS

. Ind ir ekt: (..-.. ,


JMP
Ab szolut 1ndaxe lt CX> : "'''y
ADC/AND/ASL/CMP/DEC/EOR/JNC/LOA/LDY/LSR/ORA/ROL/ROR/
SBC/STA
Abszolut indexelt CY> : ""' v
ADC/AND/CMP/EOR/LDA/LDX/ORA/SBC/STA

Nullás lapu 1ndexelt (X) :


ADC/AND/ASL/CMP/DEC/EOR/ INC/LDA/LDV/LSR/ORA/ROL/ROR/
SBC/STA/STY

136
Nullá~ lapu indexelt <Y> :

LDX/STX
Indexelt ind1rekt:

ADC/ANO/CMP/EOR/LOA/ORA/SBC/STA

Indirekt 1ndex elt :

ADC/AND/CMP/EOR /LDA/ORA/SBC/STA

2. A Jelzekre gyakorolt hatás szarint rendezve:

Eredmenytol fuggoen áll1tJa:

ADC/AND/ASL/BIT/CMP/CPX/CPY/DEX/DEY/EOR/lNC/lNX/lNY/LDA/
LOX /LDY/LSR/ORA/PLA/PLP/ROL/ROR/RT I /SBC /TAX/TAY/TYA/TSX/
TXA

c
ADC/ASL/CMP/CPX/LPY/LSR/PLP/ROL/ROR/SBC

v
ADC/BIT/SBC

A jelzot tbrli:

v
CLV

CLO

c
CLC

CLl

LSR

137
~ jelz ot magasra 6 l litJa a

SED
c
SEC

BRK /SEI

138
C. fuggelé k

f<:.ERNAL !DZ Ltbrut i r) Ok

ACF'TR adat b yte Input a soros; buszrel


Belépés1 pont: SFFA5
Par améterek : A - output/ az olvasott byte
ElokéSZltO rut1no~: TALK , TKSA
Hivása :
JSR ACF'TR
STA BYTE

CHI<. lN 1nput csatorna elo~esz1tese olvasa&ra


Belépes1 ponl: $FFC6
Paramét ere~ : X- 1nput / csatornaszám / f1lesorszám/
Eloléaz1to r ut1nok : OPEN
H1 vásoa :
LDX # FILE
JSR CHKIN

CHKOUT output csatorna elokesz1tese olvasásra


BelépéSI pont: SFFC9
Parameteraki X - 1nput / csatornas~am /f 1lesorsz ám/
Elokész1to rut1nok: OPEN
H1vása :
LDX # FILE
JSR CHKOUT

CHR IN k arakter o l vasása az 1nput csatornárol , ha 11em


elozte meg CHKIN , akvor a b1l len tyuzetrol a ~ep-
e rnyosz e rkeszto segitsegevel
Belépési pont: $FFCF
Parametereh: A- outp ut/ beolvasott byte
Elokész1to rut1nok : OF'EN, CHKlN
H1vas.a:
JSR CHRlN
STA BYTE

CHROUT karakter kuldese az output csatornára , ha t~ em


elozte meg CHKIN , akkor a képernyo aktual1s po-
z1cióJ.ira
Belépés1 pont: $FFD2
Parameterek : A 1nput/ k11rando byte
Elekeszite rut1no k : OPEN , CHKOUT
H1v~sa:
LDA BYTE
JSR CHR IN

139
CI OUT +karakter kú ldése a soros buszra
Belépasi pont : $FFA8
Paraméterek : A - input/ kiirandó byte
Elökészitb r utinok : L I STEN , SECOND
Hivása :
LDA BYTE
JSR ClOUT

CINT a képernyoszerkeszto es a VIC p rocesszor 1ni c 1a-


lizálása
Belépési pont : $ FF8 1
Par<llmét.erek : -
El ökész itb ruti~ok :
Hivás a :
JSR CINT

CLALL valamennyi csatorna es file lezárása


Belépési pont : $FFE7
Paraméterek : -
Elokészitb rut1no k :
Hivása :
JSR CLALL

CLOSE file lezárása


Belépési pont : $FFC3
Paraméterek : A- input/ filesorszám
Elokészita rutinok :
Hivása :
LDX tiF I LE
JSR CLOSE

CLRCHN 1nput es output csatorna lezárása es a csatornák


eredet1 (default> értékének v isszaállitása
Belép ési pont : $ FFCC
Paraméter e k : -
E lokészita rutinok :
Hivása:
JSR CLRCHN

GETIN karakter olvasása a bil l entyúzet pufferból


Belep ési pont : $ FFE4
Paraméterek : A - output/ beolvasott byte vagy O,
ha a puffer úres
Elökészi t ö rutinok: OPEN , CHKIN
Hivása :
CIKLUS JSR CHR I N
CMP ti O
BEQ CIKLUS

IOBASE input es output eszkez ök memor1afoglalása


Bel é pés1 pont : $ FFF3
Paraméterek : X output/ a memóriacim alsó byte-ja
Y - output/ a memórlac1m felso byte-Ja

140
Elokés~1to rut1nok :
Hiv••••
JSR IOBASE

ICINIT az input /ou tput eazkozoh 1n1cial1Z~lasa


Belop~s1 pont: $ FF84
Paramétere!-: -
Elökész1to rut 1nok :
Hiv4isA :
JSR lOtNIT

LISTEN az 1nput / output eszkozt hallgato ~llapotb~ hoz~a


Belépest pon t: $FFB1
Paraméterek: A - 1nputt egysegsz~m
El ol<e &z 1 to ru t 1 no.k:
Hivása :
LDA *EGVSEG
JSR LISTEN

LOAD program-fl le tolt ese/ellenorzese a memot 14ba


Belépésl pont: $FFO~
Paraméterek : A - 1nput / O•LOAD . l•VERIFV
ha az eszkozt O másodlago~ c1mmel
nyito t tul.. meg
X - 1nput/ memor1ac 1 m also byte-J a
Y - 1 nput/ memor1ac1m felso byte-J a
Elökesz1to rut1nok :
H1vása:
LDA 110
JSR LOAD

HEMBOT beáll1tja a BASIC ROM lazdoci me t


Belepea i pont: $FF9C
Patameter e k : X- 1 npu t / memor1ac1m a l só uyte - Jd
V - input/ memóriac1m felso byte-Jé
Az alapfelteteJezés szerint1 Lezdoérték A800
Elolesz1to rut1nok:
H1vása :
J SR HEMBOT

HEMTOP beallltJa a BASI C ROM végc 1met


Belepes1 pon t: SFF99
Parameterek: X - 1nput / memor1ac1m also byte -J~
Y - 1nput / memOr1ac1m felso byte-Ja
Elokészita rutinok:
H1 v ása1
JSR HEMTOP

OPEN megny i t egy file - t


Belépés1 pontJ $FFCO
Paramétere k • -
Elokészita rutinok• SETLFS, SETNAM
Hiv&sa a
JSR OPEN

141
PLOT ( beállitjaa cursor pozicióját C l Le.lnf~o/.e'l.t
Belépttsi ponta $FFFO
Paramtttereka X - input/ sor <0-24>
Y - input oszlop <0-39>
, Elökttszitö rutinoka SETLFB, SETNAM
Hivása a
LDX *SOR
LOV *OSZLOP
JSR PLOT

RAMTES memóriateszt, majd a memóri4lban elhelyezett rend-


szerpointerek és munkaterületek inicializálása
Belépési pont• •FF87
Paraméterek • -
Elök~szitö rutinokt
Hivásat
JSR RAMTES

ROT IM kiolv assa a rendszer-órát


Belépési pontt $FFDE
Param~terek• Y - output / óra alsó byte-ja
X - output / óra köz•p•ó byte-ja
A - output / ora false byte-ja
Elökészitö rutinok•
Hiv~•••
JSR RDTIM
STY ORA
STX ORA+l
STA ORA+2

READST kiolvassa az inputoutput állapotszót


Belépési pont• $FFB7
Paraméteraki A - output / állapotszó
Elokészltö rutinok• -
Hiv.Asa l
JSR REAOBT

RESTOR visszaállitja eredeti érték eire a rendszervekto-


rokat
Belépési pontt $FFBA
Paramttterek1 -
Elökészitö rutinok•
Hiv-'•••
JSR RESTOR

SAVE program-file kimentése a memórlából


Belépési ponta $FFD8
P araméterek• A input / egy null.ts lapon lévó eim,
amel y a program kezdetére mutat
X input/ a végeim alsó byte-ja
Y input/ a végeim felsó byte-j a
Elökészitö rutinoka SETLFS,SETNAM

142
H1vása:
LDA ELEJE
LOX !IVEGE<
LOV IIVEGE >
JSR SAVE
SCNKEY az eppen megnyomott b1llentyunak megfelel o ASCI I
kódot a billentyuzet pufferébe tovább1tla
Belépési pont: SFF9F
Paramétere k : -
Elökészíto rutinok: JOlNIT
H1vása:
JSR SCNKEY
SCREEN a képernyb mére tét adja vissza a nagyobb Commodo-
re gepeken is futó programokkal vale kompatlblll-
tás m10r.tl
Belépés1 pont : SFFEO
Paraméterek : X - output/oszlopok ~záma
Y - output / serek száma
Elokész1to rutinok : -
Hivásat
JSR SCREEN
STX MAXO
RTV Mtll(<:;

SECONO másodlageli c1m k uldése • hallgato állapotu eszköz


fele
Balépés 1 pont: SFF93
Paraméterek : A - 1npul / másodlagos c1m
Elokészita rut1nok: LISTEN
H1vása:
LOA #MASOOL
JSR SECOND
SETLFS flle-paraméterek beállitJ~a
Belépési pont: SFFBA
Paraméterek: x - input / filesorszam
Y - input/ másodiagos c 1m 1 ha nincs $FF
A - input / egységazarn
Elokészitb rutinoki -
Hívása:
LDX tiF!LE
LOV iSFF
LOA #DEV
JSR SETLFS
SETMSI.:l uzenetek k11rását engedelyez1 1lletve tiltJa le .
Az akkumulátor legmagasabb helyiértéku b1tJe a
hibauzenetekre <pl . FILE NOT FOUND>, a kovetkezö
bit a vii!zér l ö üzenete kre <pl. PRESS PLAY ON CA-
SETTE) vonatkozik . Ritkán használatos.
Belépés1 pont: SFF90
Parameterek : A - input l 7 . b1t - hibauzenet
b. bit - vezer io uzanet
Elokász1to rutinok : -
Hi vásat
LDA i$80 ; hibauzenetek engedélyezese
JSR SETMSG

143
SETNAM file-név beállitása
Belépési pont: SFFBO
Paraméterel: X 1nput/ a név c1món~k alsó byte-ja
Y - input/ a nóv eimének felso byte-Ja
A - input/ a nev hossza
Elokésztto ruttnok s
Hi vá !Jól!
LOX tiNEV
LOV tiNEV>
LOA tiNEVV- NEV
JSR SETNAM

SETTIM a rendszeróra beállitása


Belépési pont : $FFDB
Parameterek: X input/ az 1do kozopso byte-Ja
Y - input/ az 1do alsó byte- Ja
A - input/ az 1do felso byte-Ja
Eloké&z1tó rut1no~:
Htvása:
LOV ORA
LOX ORA+l
LOA ORA+2
JSR SETTIM

SETTMO az IEEE buszon a timeout Jelzo áll t tása/torlése


<Ha egy CBM szabvány szer1nt1 IEEE illeszte egy-
séget használunk . Az itthon kapható~ általában
nem ilyenek')
Belépé&l pont: SFFA2
Parameterek: A - 1nput / a 7 . b1t magas tor lé&
alacsony beállit4s
Elokészita rutinok : -
Hivás01.:
LOA til ; TORLES
JSR SETTMO

STOP megvlz&gálja, hogy meg volt-e nyomv01. a STOP bil-


lentyu a lequtobbi UDTIM hivas a latt, ha igen,
a l apállapotra állilJa az inpul és output csatornat
Belépési pont: $FFE1
Paraméterel : Z - output / magas vo lt STOP
Elokész1to rutinok :
Hiv4sa:
JSR UOTIM
JSR STOP
BNE MEGSZ

TALK az input/output eszkozt beszélo állapotba hozza


Belépési pont: $FFB4
Paraméterek• A - input / egységszám
Elekeszite rulinok :
Htvása:
LOA IIEGYSEG
JSR TALK

144
TKSA másodiagos c1m kúldése a beszélo állapotu eszkbz
felé
Belepési pont: $FF96
Paraméterek: A - input/ másodiagos c1m
Elökész1tó rutinok : TALK
Hivása:
LDA #MASODL
JSR TKSA

UDTIM a k tualizálja - egy egységgel novell - a rendszer-


orat, csak akkor kell hivn1, ha a megszakitasokat
magunk. kezelJÜk
8elépés1 pont: $FFEA
Paraméterek: -
Elokészitb rutinok:
Hi vasa :
JSR UOT IM

UN LSN valamenny1 hallgató állapotu input /outpu t esz -


koltt l eáll~tJa
Belépési pont : SFFAE
Param&tarek : -
Elo készita rutinok :
Hivása:
JSR UNLSN

UNT Lk. valamennyi beszeló állapotu input/output esz-


l oz tl aá 111 t J a
Belépési pont : $FFAB
Paraméterek : -
Elökészito rutinok :
Hivá&ö<:
JSR UNTLK

VECTOR a mamóriában leve rendszer-vektorok ~ezdoc1mene~


lek~rdezése/beállitása
Belépési pont : $FF80
Paraméterek: C 1nput/ magas -> lekerdezes
X output/ a c1m also byte-Ja
Y outpu t / a c1m felso byte-Jd
vagy C input/ alacsony -> beáll1tás
X input/ a eim alsó byte- Ja
Y 1nput/ a c1m felso byte-Ja
Elokészita rutinok:
Hi VáS&ll
LDX #VEC<
LOV >ltVEC >
CLC
JSR VECTOR
vagy
SEC
JSR VECTOR
STX VECCIM
STY VECCIM+l

145
AJ4n lot t és r é szb e n f elhaazn4lt ircdalam a

1. Ury L.: Commodore 64 BAS I C f elhasz n 416 kézikbnyv


<LSI ATSZ , BP. 1984 >

2. Commodore 6 4 Programmer ' a Reference Guide


Commodore Bu~inoaa Machines , Inc . 1982 angol nyelven

3. Angerhauaen, M. J Becker, A . et al .a The Anatomy of the


Commodore 64
Abacua Software, Grand Rapida 1984 angol nyelven
Voligy
Angerhausen , M.; Becker , A. et al. : Commodore 64 Intern
Data Becker, Dusseldorf 1983
(fent1vel megegyeze liad4a) n•met nyelven

4. French, D.: lnside the Commodore 64


Freneh S1lk , M1nneapol ia 1984 angol nyelven
5. Greeahlelds , M.: 40 Beat Mach1ne Code Rout1nea For
Commodore 64
Duc~worth , Londo~, 1984 angol nyelven

6. Stephenaon , A.P. and Stephenson, D.J . : Advanced Mach1ne


Code Programming for the Commodore 64
Granada, London 1984 angol nyelvan
7. Butterfield, J .: Machine Language for the Commodore 64
and Other Commod ore Computers
Brady Communicat1ona Company , Inc . Bo w 1~ 1984
angol nyelven

B. Engl1ah, L.: Das Maachinensprache Buch zum Commodore 64


Data Becker, Ousaeldorf 1984 nemet nyelven
9. La wrence , D. and Eng l and , M. Commodore 6 4 Mach ine Code
M•u1 t er
Sunsh i n e Books, Lon d on 1983 ango l nyelven

146
Készúlt: MÁTRAlNYeST GT Nyomd~
Felelős ktadó: Kovícs Magda
Felelős vezető· dr Csák Máté
Tel)edelem: 18.S BIS tv
Engedély szám. 53629
A~ LSl ATSZ legújabb kínálata a Commodore 64 cktatócsomag,
am1 mtnd a Commodore 64 s:emélyt számitógép napl haszná-
latáhc:, mind prcgramc:ásanak olsaJáti tásáhc~ szükséges
temereteket tartalmazza.

Az oktatócsemag az al•bbi&kat t artalmazz a:

A k é~1konyv másodtk b6vitett, ktadása a C-64 BASIC-Jén


túlmen6en részletesen 1smertet1 a SIMONS' BASIC, a
SUPERGRAPHIC utasitáskés:letét, a BASIC 4 . 0-ás b6vitést.
Tartalmazza a C-64 grafik4Jának 1 1lletve hanggenerátorának
has:nál atához szukséges tsmerete~et. A dnyv 1smerteti a
C-64-hez hazánk ban vásárelható valamenny 1 tipusú lemez -
egység használatat, beleértve az iEEE-illesztésa lemez-
egysége~ét is.

A konyv részletesen ismertett az M6510-es utasitás-


kés:leteét. Részletesen tá rgyalJ~ a Commodore-64 assembly
programo:ását segit6 szaftver esz•azd~et , s bOséges példa-
anyaggal segit 1 a témával most 1smerkedOket. Ismer tet1 a
C-64 ROM-Jána~ legfontosabb része1t.

Az 1nformác16s kárt ya a Commodore-64 használatához szUk-


séges temereteket foglalJa bssze tábl ázatos formában,
beleértve a BASIC szintaxtsát, a BASIC ts a DOS htbauzene-
teket és az M6510-es processz or telJeS ~tasitáslészletét .

Az oktatólemez az elözO ~ét konyv példaanyagan túl továbbl


ktdolgozott assembly és BASIC programozast példá~at tar-
ta lmaz.

Az oktatócsomag Árat 3500 Ft.


Ara : 138,- Ft

Speeiélis i gé n y ével f o rdu ljon speeiél is szaküzlethez;

APISZ SZAM(TASTECHNIKAI SZAKÜZLETEl

(. )
Budapest VIli., Szígo ny u . 15 . Budapest X 1., Budatoki út 7 .
Telefon- 143 4 4 6 T elefon 6 65-503
Telex: 22-7803 (ÁPI SZ és SZAM A L K közös bol tja)

Raktárról kapható·

mágnescsfkos kartanok A/4 fekvő, számftástechnikai méd iák, tdrtozc!kok,


álló, kvadrát kivitelben mágneses háttértárak (mágnesszalagok,
leporellók, közép· és számitógépekhez, lemezek, f loppyk).
pénzügyi leporellók, festékszalagok, festékkendők,

pelikán kazEonás lrógépszalag, számítástechnikai könyvek,


carbonszalag, festéklepedő, speciálls íróeszkozök fól1ára író
kéz1 adatfeldolgozáshoz készülékek filc1ronok, vonalzók, sablonok,
és kártyák, software termékek,
- mágneses diszpozfciós táblák számítástechnikai szolgáltatások,
kész le tekkel,
kartontároló kocsi és szekrén y,

és még sok más

SZAKMAITANÁCSADÁS
MIN O A MAGÁNVÁSÁRLÓK , MINO A VÁLLALATOK, INT~ZM~NYEK
RENDELKEZ~ S~RE ÁLLUNK

You might also like