SNASM68K 68000 Cross Assembler System Manual
User Manual: Pdf
Open the PDF directly: View PDF .
Page Count: 95
Download | |
Open PDF In Browser | View PDF |
9', CROSS PRODUCTS LI iI ITE D SNASM6SK 8/8/91 CopyrlEht cro$ Products Ltd 1989-91 CROSS PAOOUCIS UMI1ED LEE06 lBMo is a regisLcd lEd.malJ( ol lnl.mni.n.l Susii.s! M-hin.s Clrp..alion. MS DOSo b a Ggisr.Gd rEd.ma* oI Mimdr c.DoEtio.. Bi6l is a lrad€ma* ol UideM.E lnc. Introduction Th€ Cross Products 68000 cross assembler syslem is a high performance 68000 assembly language development syslem runninq on MS-DOS and PC-DOS computels. Component! ol the Svstem Assembler SNASM6SK converls progEms winen in 68000 assembly language inlo €ilh€r absolute code which can be senl dir€ctly to the larget machine, CPE (Cross Producls Executabl€) files or object moctules suilabte Jor tinking. Debugger SNBUO6SK allows 68000 programs running on the larg€t machine io be remotely debugged from lh€ dgvelopment Pc. lt has acc€ss to the symbots used in lhe source cod€ allowing lull symbolic debugging. Llnkar SNLINK combines objecl modules created by SNASM68X, evatuales any erpressions which could noi b€ resolved ea ier lt can gererais output i4 a large vaisly ol formais including direct transmission down ihe SCS| tink. Llbrarlan An object module library is a coll€crion ol objecl modules thai reside in one file. SNLIB is a ulility program ihai builds and marniarns objeci modute libraries ior fte linker. Hardwars Link To speed program development, lhe development PC is connecled to the larget machine using a SCSI (smallcompuler sysiems jnlerfacei bus. The assembler, linkerand debugger use this inlerlac€ lo send code to the targel machine_ Environment A program can be assemblsd and debugged without exiting lhe Biel editor wnich grearly speeds lhe EdivAssenbte/D€bug cycte. wavs ol u3lng SNASiI SNASM is an extremely ilexible sysiem ihai can be used in many dittereni ways. A few ol these approachss are giv€n here lo give an overview of the product. Absolde 6ds wirhod sections- no linkind The code is be ass€mbl€d al an absolule address, specilied wilh one or more OFG directiv€s, and then eitherserf dkectty to thsiarget machine, placed inlo a CPE lile oroutput in pure binary fomat. Abelute 6de with..ctions n6 tinking The ORG address of lh€ program musl be specitied belore any seclions are opeisd. lf groups arc not used BSS type sectio4s a€ not av'aitabt€, and sedions areplacsd in memory in the oder they occur. I groups ar€ used. lh€y define lhe ordedng ot seclions in memory, and a ow-BSS type and absolule word addressable sections Lillirq Each source fil€ is assembted usinq lhe /L switci io oroduce an obiect module. Source modul€s cannot contain ORG directives. Th€ modites are linksd to produce any, ot ths output types supported by ttre assemUei pruJ some machine specilic relocatabte tomats. There is no ne€d to use sectiors orgroups when Droduci.q tinkabte outout Dtn many more tunciions ars avaitabb it ihey are ised. - Hardwere R.dutremants SNASMoSK requirss ihe tottowing minimum contigurarion , IBM-PC or compaiibte compuier I or 16 bi! stor - 256K ol memoru . One lree . MS.DOS 2.0 oilater . A hard disk we strongly recominend :. . 8MH2 IBM PC/AT or taster . OOS 3.0 or above . A fai haKl disk . 640K ol main memory and a l tvtb RAM disk : Hardware lnstallation conligurho th. PC card 01234567 t-rt IITTIM t__l! IITTTTTTII The card can reside at one ot several addresses in the PC's pon map. The links labelled 0-7 are used to sel the address as lollows :' ult Address 0 300-307 I 308-30F 2 3 4 5 310-317 318,31F 380,387 388,38F 6 390-397 3S8-39F 7 The cad js supplied wilh llnk 6 connecled so it is al address 390 hex. The SCSI bus suppo(s up to eight devices, each ol which musl have a ditferonl SCSI device number. The links labell€d Al ar€ used to s6t th€ ScSldevice numberofth€ andlhe DMA and lntemJpi channels the card willuse. cad l]!t B c D E H I Funcion tFo5 tBoT DROl DACKl DRO3 DACK3 Bii 2 Bil 1 Bir 0 SCSI lD of card lnlerrupis are not cLrnonlly us€d so links A and Bshould be lefi unconnsctsd. The cad ls supplied wilh linl6 C and D connecied so the card uses DMA chann€l I . l, you wanl to us6 DMA channel 3 move both jumpers to E end F, or il you don't wanl to use hardware DMA at all remove both linl(s. The cad is supplied wilh links G and H .onnscl€d giving the card a SCSI device number of 6. This will only n€ed cnanging il it clashss another dsvics on lhe SCSI bus. wi Fltilno lhe Card 1) 2i 3) 4) 5) 6) 7) Vedly lhal no power is being supplied lo the compuler Rsrnov€ the compute/s case, Check thal lhe address and DMA senings olihe card will nol cause it to clash wilh any olher cards in lhe computer. Local€ afi smply slol and rsmove the backplate cover, lnslallthe SCS|card by lirmly butcareiully prcssing lt down into ihe slol. Sscllr€ the card wilh lhe screw you removed from lhs backplale. Replece the compute/s case. ll you changed the seilings oi lhe card make surc you know lhe addr€ss and DMA channel you selected es you witl need this inlomation to comptete insrallation. Software lnstallatlon Itlote: The SNASM inslall program is d€sign€d 10 customiss lhe Briel texl ediio/s envircnm€ntlo €nable SNASM to wofi lrcm $ilhin Aiel. ll you int€nd to work in lhis manner you should install Bie, before you inslall SNASM, Th€ install proghm provid€d on your SNASM disl bution disk will automatically inslall the whole SNASM system . (Allquefies rrom lhe program asking lorossr inpul ar€ t€minated '[y/nr. Hitting the ESoAPE k€y at rhis prompr willabod immedialely.) lnslall will ask ior the lollowing inlomalion: 1, lnslall ,irst ch€cl,s to see il il can fnd lhe defaull direclory lo copy lhe SNASM executable liles io. This is o:\SNASM. lnstallwillgive the userthe oplion to speci, any olher djr€clory. 2, The inslall program will now ask Jor th€ syst€m bool driv€ and check that it can rincl an asloexec.bat lile there. ll willpersist in asking ior this in,ormalion unlil it can find an auloexec-bal file- 3. Next it r€quir€slhe name olthe disk drivs in which the SNASM distdbution disk is reslding. The lnstallprcgram will now ask ilthe user requires 10 backlp old riles. lf lhe answer is yes any fles in the targel direclory ollhe on€ aboul lo be coplsd onlo it willbe saved (in thal dircctory)wilh lheir lile €xtension changed lo'.old'. This oplion takes eflectlhroughoul lhe install process and il il is not selecled lhe copy proc€ss willstop lor every iile lo ask "lilename exists Ov€Iwrile/Backup/overwiie AlliO/B/Al' ,1. lhese oplions have the lollowing eflects: O: overwrite this lile repeat query ior nexl lile. B:save old lile wilh '.old' extension rcpeat query. A:oveMnte allliles ol same nameswithoui asking (hroughoullhe whole of rhe lnsrallprccess). 5. Should lnslall delect lhal th€ dkectory holding rhe executable liles is nol on the search peth ollhe use,s machin€ it will ask il il should add ii. 6.lnsilatlwill nexl looktorthe BPATH and BHELP environmental vaiables lo delermifle wherc to copy the Biel mados and menu files lo. li willdisplay a message asking ilthis isdssi€ble: as Bdei expects to lind lhem inthis localion it is aclvisable 10 do so. 7. Berore ediling the auloexec.bal ile, lnslall will ask lhe useril a backup should bs created(as autoexec.old). li willthen proceed lo sel several llags within lhs Bri€f environmenlal variables and add ihe clmmand to install ihe SCSILINK software on boolup. lnslall will always ask belore editing any portion ol lho autoexec.bat lile. 8, ll lnsiall lsaves a message on exil saying lhat ihe otd SNAST!,| macro stadup code is presenl in lle us€rs slartup.cb macro lile lhis is due to a changs in the manner in which lh6 SNASM Bdel macros ar6 initiated on starring an ediling session. Th€ llne 1oad_macro('snasm")' should bs remov€d {rom the fi16 startup.cb (r€siding in the direclory pointed lo by the BPATH envircnmenlal variabls - \bieflmacros by d€rauh ) andihe lite re-compil€d, Ths communicaiions belrxeen the PC and the target machine are handted by a program called SCSILINK which mu$ be instatted botore any orth€ other programs can be run. lnstallwilladd a tinelo do thjsyour auloexec-bal llls, The inrormation belowwillb€ ot us€ i, you wish to instattit at a nondelault addrcss. UsaE€: SCSILINK addr€ssl,D1[,]?] lhe delault is SCSILINK 390,D1 Th€ address is whalever was s€l using links 0-7 on the SNASM PC card and lhe number alt€r the D should be rhe DMA chann€lyou are using. ll no DMAchaflnelis specilied hardware DMA wilt nol be used and unless you have a fasl compul€rdata lransmission spesd wjllbe reduced. The lparameleris usedlo giv€ the card a diflerent SCS|dsvice number wilhoul opening th€ compuler and changing lhe linls, howeverthis is nol SCS|L|NKchecks for th€ exisience ol lhe PC cad as it instatts irsett. and repons any erors at lhis lime. g.You should r€-s€t your computer when lnstallllnishes io benefil from lh€ new SNASM environment. 6 l_ Running the Assembler ll you inlend uslng SNASMoSK as a sland alone assembler instead o, tunning itlrom within BBIEF you must be familiarwith lhe command lin€ Command lln. Svnt r SNASM68k /switches sourceiile,objectfi le,symbollile,lisllile,t€mpf ile Swllchas /b number Set si2e of inlernal bulf€rs (Kbytes 2-64) enable lisling of lines lhal are in lailed /d /6 symb=value /g condilional struciures Debug mode - do no! run Equale symbollo value Wdte non{lobal symbols to linker objecl tit€ path /k ,l /m /o opls ,! ,v ,2 4 Display inlormation window dudng assembly specily include lile search palh Allow uss of il€q sic, produc€ linkable oulpul iile B(pand macros in lislings Set assembl€r options/optimisations Produce pur€ binary insl€ad ot.CPE wile equales lo symbol/linker ,ile include tin€ number inro. in linkerlile Se€ the section on Options lalerin this manuallora iulllist olthe assembler options and oplimisalions- Sourcetlle Oblectflto Symbolllle Llsttllo Temptlle File containing 68000 sourc€ to bs assembted_ tf this is omitl€d SNASM6SK willpdni rhe above inlonnation in a help message.ll no exlension is givsn Jorlhe source lile it is assumed lo be ,68K. Flle lo reclive objecl cod€ ouiput. lllhls is omitted no object code will be generaled. ll you want the object code lo be s€fi lo a largel computer use T?: as lhe objec ile wh€re ? is the SCSId€vic€ number ol the laEol. File to rcc€ive symbollable inrormalion iordebugger. Fil6 to receive any lisling oulpul. File 1o be used lor any data lhat will not lit in memorywhitst assembling. lllhis is omitled the lile willbe called SNASM.TMP ora unique nam€ il your DOS veEion is high enough. e.gSNASM68K /o ow+,an+,e+ t€sl,68k,17:,|€si.sym,,e: Assembles lesl.68k wilh warnings reporled, allernate numerics enabled and eror line printing suppressed. Obj€cl cod€ will be sent lo the targel with SCSI device number 7. No lisling will be generated, symbols wiil be writien to lesl.sym and the temporary rile will be gsnsraled on disk E:. Each tim€ SNASMGSK is run it check for an optional €nvironment vaiable called SNASM6SK which contains delaull swilchss, oplions and filespecs. egs€l snasm6Sk=/c-,17:,,,e:\tmp Disables case s6nsilivily, makes delault output go to larget 7 and sets lhe dolaull lemporary lile 1o be €ltmp. Anylhing set in the environmenl variable can be over-iddon on lhe command lins, Assembly can be slopp€d by pressing Controlc, or il you are ass€mbling lrom within Bdeland you arc using the inlomation window, by pressing Esc. l, the rilsl it€m on the cofimend line starts wilh an at sign (@) it is taken to be ihe name ol a fil€ conlaining lhe assemblsr options, eg- SNASMS8K @snasm.cmd wh€re snasm.cnd contains :. test.68k, t7t, iest-tst SNASM6SK /j cl\include /e z=1 tes1.68k,t7:,,t€sl.lst Bunnlnd lrom wirhln BriEI 1. Th€ Brie, edilor macrcs thal interlace SNASM to lh€ editor have b€en revised to aork wjth lh6 Crcss Producls make utilily SnMake and h€ncs provide a beller working environmont lorlhe SNASM user. ln praclical tems ihis m€ans that wjthin Bde, the dialogu6-box interface to SNASM has been complolely sc6pped and now relies on using SnMakE and ils associaied 'project liles'lortho selting up and ex€culing of exlernal commands. Whilsl Ihis involves slightly morc in iriiial setling-up il oflers longertern iiF€ sevings and much more llexibilily, wo Using SnMake is delalled ln lhe sed,on 'Using SnMake' and will not be gon€ inio in greai delail here. Th€ SNASM €nvironment now relies on the creation ol a'projed file'foreach prcjscl the user is undenaking. Thes€ ar€ tiles dilised by SnMake whlch hold inlorfiation aboul ihe tite dependencios lor lhat projecl and the rules by which the output lile(s) can be crcaled according to those dep€ndencies. (5o6 Using SnMake' ). This means that commancls and thear optjons arg put into the p,oject lfle as they would be enl€r€d lrom the cofimand lin€, instead ot being set up in the dialogue-box The Snasm main m€nu ls lnvok€d by pressing All-Fg. The menu optionsthat ale available are discuss€d in sequence below. Navigation lhrough lhe rnenus is dooe using lh€ up and clown arrow ksys, ssleci items using the rsluh key, escaD€ willexil allmenus. liake. Keyboard€quivalentAlt-Flo- Thls opllon invokes SnMake on the cufienlly select€d proj€cl ril€. S6l6ci Prol.ct File. Keyboard equivalent Cli-Fg. When lhis is seleclad il brings up awindow showing allth€ lil€s wilh a '.prj' €xt€nsion in th€ cunenl direciory, il one is cuirently s€lecled il wil be highlighled. These are rho poject flss. The fiIst llne olthe projecl ril€s is displayed in lhis window as an aid tolhe users memory il multiple proiect lilss are presenl in lh€ currenl direclory, See lhe sub.m€nu item 'Show comm€nt lines'lor more informalion on putting such comments inlo prcject files. Sel€cling ong of lhes6 libnames willb ng up a sub-menu otfering lour options. 1. S€l6ct this file. Selecting this optlon make ths highlighted project lile 'cuffenl', l.e- invold g th€ mak€ option will stari snMak€ wiih th€ highlighted proj€ct lil€. .nd Make. Mak6 th€ Hghlighled projeci lile cLrffent and invoksthe make utility at lhe sam€ tim€. 2. Select 3. Show comment lln6s, This displays allthe texr in the project file from lh€ top ollhe lile to the [SnMake] tabet. This is a rcquired label in a projoct fil€ and SnMake does not begin to gars€ lh€ fl6 rorinpul unlilit encounlers this label. Thus any t€xt can be placed belor€ this labsl withou! causing an enor. .1. Edn thts flte. Edit lhe hightighied project tite. Nole: only sub"msnu options 1 and 2 cur€nl proiect lile. O.bug. alerlh6 setting ollhe KeyboardequivalentCti-Flo. This option €nt€lslhe debugger sp€dfied in th€ curent project lile.(See'Using SnMake'for more iniomation on sening the debugger). Set Dsbug Hode. No keyboad squivalenl. Selecting this oplion brings up a sub-menu with onty two options: On and Ofl, one ol which will bs hignlighted. These oplions controllhe setling ollhe special macro '$l' in the proiecl lile. This macro €xpands 10 lhe setlings ol lhe debug and inio swirches on lhe Snasm command tine. lnio mode is always on when SnMake is invoked korn within Bi€f, making Snasm and Snlink bring up slatLrs windows allowing the user 10 monilor their progress. Debug mode can be sel lrom this menu oplion, determining whelherths progam being Inade, (assuming il is being downloaded lo a target machhe) is run immedialely (debug mode Oil) or waiis wiih lhe program counter s€l to th€ valu6 sp€cifi€d by lhe user with the 'regs dircclive (d€bug mod€ - On). ll must be slress€d that thjs conlrol only slsms lrom lhe corect use ot lhe special macro $l'in the ploiect iile. (See'Using SnMake). Eveluete. Keyboard equivalenlCtd-E. This option invok€s lhe expression evaluaror sp€cilied ln the curent project lile.(See'using SnMake'lor more inlormalion on s€tting lhe expr€ssion evalualor), ll any t€rl jn the curentwindow is highlightedlhis tunction willanefipl to pass it to the expression evalualor, if not it will prcmpl ,or inpui on the Biel status line. Jump to label. Koyboard equivalent Cid-G. This oplion examines the currenl cursor poslllon and d€lemines it it is on a valid label(SNASM 68000 assembly language syntar). llso itjump6 to lhal label, iJ nol il pmmpls lor a labelname to Undo lasl labet. Keyboard equivalent Cl F. This oplion undoes the offscrs ol 'Jump ro label'. Sav€ all bull6rs. Keyboard equival€nt All-S. This option saves all butlers orrrenlly being edil6d. Errot wlndou. K€yboard equivalent Cld-Q. This option opens an error window lo display the cunent conlenls ollhe eror ,ile 'erlors.eri in the cLrrrent directory. This is lhe file to which allenoroulpd is r€direcled by Snlvaks. llth6re are enoE in a ional that lhis lunclion can undersland(i.e. similarlo Snasm and Snli.k)lhe user can sl6p lhrough lhe errors using th€ up and down anow keys. Hitting enter on a highlighled enorwilltakethe us€r to the reponed erorposition in ths r€levard sourcs fle. The 'Home' and 'End' keys can beused lo move lrom lhe top and botlom oi lhe eror tutfer rcspectiv€ly and pressing Cld whilsl using the up and down arow kels allowsthe userto mov€ around in th€ eror bufter line by line. Slriking ent€ron a lin€ that tie macros do noi recognis€ as coniaining an enor msssage witl result in an eror message lo thal ellect. 10 K€yboard equivalent Ctd'NThis option scans the lil€ 'errors.en' and moves the culsorlo the nert gnor in lhg sorirce code. Bepealed invocations willstep through lhe €Irors, On linding no mors errors the iunclion will display a message lo lhal eflect on lhe slatus lins, SCSI errors lxhllit assemblino l, you ale s€nding lhe object oulpul down the SCSI harclwarc you may occasionally see an error messao€ end be given lhe option to Abon, Retry or Bus Bos€l ald R€try. The fiessage willlellyou wher6 the enor was detecleo (Locally or by lhe Targel)and whal causedthe eror. Examplas LOCAL: Target nol available LOCAL: Bus nol ava aue ll lh€ errcr was csus€d by a power spik€ or by ih€ targei being tempora ly unavailabl€ Retry will usually qet lhinEs Eoino aoain. l, ihis does not work Bus Beset and Retry may b€ ellecliv€ as it resets alt devices on lh€ SCSI bus and r€conn€cts wilh the 1ar9e1 belore having another go, Abolt should be used il neilherofth€ abovs wo*, or illhe eror was caus€d by something likelhe targel running outol memory, es this caus€s lhs ass€mblerto stop assembling and €xil. 11 Debugglng SNBUG6SK ls a lulHeatured debuggerwhich uses the SCSI hardwar€ to enable you to r€motely d€bug a program running on your target machine. Th€ dsbugger has eccess lo symbols within your program and its expression €valuator has all th€ t€alurcs ol SNASM6SK which allows lull symbolic d€bugging. Th€ SNAUGoSK debugg€r lels you :- . Trace your code Inslruclion by instruclion , Sse lh€ varues ol your variables rn a van€ty ol lormais . Change ihe value ol6ny vaiabl€ or msmory locaiion is exeMed or wh€n . Set breakpoinls lo slop when an instruction a cendn condilion is mel. To make it easier to mov€ between Bdel lor €daling and SNBUG6SK ror d€bugging, where possible we hav€ lri€d lo use Briefs conlrot keys and The Lht Soflwar. The Unk Sottware usually resides in ROM on lh6 target machine inlerface and it communicales wilh lhe ass€mbler and debugger. To snable the target machine lo b€ d€bugg€d lhe unk sonware uses sevsralol the target machines vectorc. These are : Veclor Number AddBs 2 0008 3 000c 4 0010 5 0014 6 0018 7 001c I 0020 I 0024 32 0080 Flnction lllegal inslruction Zero divide Chk inslruclion Pivilege violation Trace Trap0 The debuggercan Oain control o, th6 laEel whenever ons or lhe above exceplions occurs. ll your program is running noftnally none ol ihe above should happen, so io ensure thd lhs debugger can gain conlrol rt requires you should execute a lrapo inslruction al rcgulerinleruals. This 'lcan, ilyou wanl, b€ wilhin an inlerrupt rouline such as vedical ,lyback. 12 Command llne Syniar SNBUG63K /swilches syrnbolf ile The s$1lches can be anerlhe symbol lile name il you ldish, and you are atso allowed lo sp€cily seve€t symbol liles, Switches Load conliguralion lile Thjs is to allow expressions to be evaluated irom within 8d€f, you will /lNumber lNumbsr /Number /tNumbor /gNumb€r Example no1 Load CPE nle inlo target Ovedd€ video bios dala screen rows Turn continuous updale on or ofl Sp€cify rale ol update (See All-l) Set lab€l l€vel Set largel lD Use Hercules graphics ddvers Hali target al debugger stariup snbug6Sk /m128 main.sym diskulil.sym GenErrl Concepts The dsbuggeis display consisis ol a number o, wjndows ol live basic lypes. These are Begisler, Disassembly, Memory,Walch and File. Wndows can be splitto lom lwo windows, th€ boderbetween two wjndows can b€ moved or rsmoved and the lype ol wlndows can be changed. You can have as many D,sasssmbly, Memory, Watch and lil€ windows as you want bui you are resiicied lo only one regisierwinsow. You can move belween windows al will, wlth lhe curenrly aclive window b€ing highlignied. Wilhin each window lhe keyboad controls allowe you io change tie windowb slate orsend qlmmandslo thetaEet machine. ll conlinuous updale mode is on,lhs windows are reiresh€d at whatever rate s€l,orlhe update interval. lllhis mode is not €nabl€d windows are onty updaled when soms thing happens, i.€. a key is prsssed or a breakpoinl is The r€glst€r window displays lhe contents o, all o, the processo/s qeneral registers. ahe cuisor can be moved around lh€ window and lhe contenls ol any olthe regisleB changsd €ilher by typing the newvalue dkectly or by pressing R€tum and €nledng an expression. Dlsassembly wlndow Thjs wiidow displays your code in disassembled ,ormat. Wh€r€ possible symbols are used inslead of hex addresses lo make the 'codei more r€adable. lfthe largets PC is al one ofthe lines in lh€ disassembty ir is marked wirh a gr€al€rlhan sign (>). lfa breakpoint is sel lhe colour oithe 13 lin€ changes and th6 brcakpoinl expression and courl arc displayed afler ll ihe debugger has b€en lold the name ol lhe symbot iable n reptaces numefic values wlh lheir symbolic equivalents. Exaclly whgrc this ,s done ls conlrorled using lhe label level. Local labels will oe seen ,n lh6 disassemb,y window if lhey have been enabled at assemblylime using the v+/- option. L6v€l o 1 2 3 4 Ellecl No symbols excepl ln addr€ss ,ield As abov€ plus non-immedale or oflset symbols All the abovs plus long immediat€ Allhe above plus oftsel(An) All the ebove plus ofis€t(An,Dn) Memory is displayed In h6x lormal as eilhsr byles, words or tong words. As in lhe Begist€r wndow you c6n dir€clly enier new data or pr6ss reium io erder an expression. Th€ Waich window is usedto display thecont€nis ot memory at an address given by an erpression which can, ol courss. conrain symbols lt rs used to monilorlh€ value ol variables and lables as your program runs. This window rs used io view laxt lilss. l,suatty sorrrc€ code. You can browse around lhe iile and clo simple searches, bLt you cannot make changss lo lhe lile- Conlldur.ilon Flle! when lhe debugger slans up ii geis ils inilrat siaie trom a contiguration t.te called someth.ng like .SNBUG68K.CF? where ? s tne SCS| tD ot your chosen larg€|. The /s switch can be used on lhe command line io aause a diflerent coniig fil€ to be loaded. These titss can be saved and loaded al anylime during lhe debugging session, so you can have a tew of your mosi usetul conliguralions s€v€d on disk. ll a contiguEjion tite retels td a symbot which no longer exists then thal pan ot lhe coitiguralion witt be Onoreit. tf a conliguralion lile was saved wilh the debuqqer in a video fiode ivih a r€solu{on ditterenl to lhe curr€nt one. you witt b€ given ihe choice ot either swilching inlo lhe nsw mode. orignodng ihe fte a[ogelh€r Ihe only enties in the contrg tite that you wrt, usualy need lo chalge are lhose which specily lhs areas ol lh€ targets memory lhal can be rcrd and wntl6n. This intormalron ls ussd lo prev€ ths debugger lrying lo access memory areas which would calse an address error;itthe link io the target goes down when you look al cedai. memory areas or it sohe arcas appea, lo coniajn zeros ihen lhese sniriss reed to be changed. You can €dil lh€ conrig lile, using a ten ediiorsuch as Bri6f, and chang€ the memory areas und€rlh€ headings #readram and i'wdleram, the formi is a 14 simple lisl ol start and end addrcsses ot vatid areas, and you can have as f€w or as ma4y entnes as you wish. Pt€as€ ke€p lhe fofliat ot ihe config tite id€nlicsl lo lh6 odginal esbihelwise ths debugder can hav€ p.obtems r€ading il. Prombt Hlstorv whenever lhe debugger prompls lor a reply such as an expression or a b'sakpoi condilion, you ci! nep back through otd rcptiea to that prompl using cursor up and down. Tie prompt line can be edled with culsor tefl and right, wilh homs, end and back"space perloming as you would erp€ct, Svmbol Compl.tl6n whsn€veryou are entering an €xprcssion you c{ln get lhe debuggerto try lo compl€t€ lhe name olthe symbolyou arc ryping using Atr-N. hAre arc t s6v€ral symbols which start with th€ text you heve enl€red, lhen you can cycl€ lhEugh thes€ by pressinq AI-N aoain, Erpr.s.lon Evaluator The debuggeruseslhe same expression €valualor as the assembterwith the lollowing chaog€s :- . Ths d€laull base is H€xadecimal. Decimal numbers are prec€ded by a hash (f) . Processor regislers can be used In sxoressions . Square bracksts around an €xpression are used to pertom indiroction. The dobugger felches a byl€. word or long word lmdr the targ6t, end sign €xtends ir be{or€ using it in the expr€ssioi. Long wods are tatched by debull wilh the @ operalor berng used to chanaethis as shown b€toiv. Examples 100 #100 Iaol 100 h€x, 256 dedmal 100 decimal Long word at AO Ia0+d0.wl@w+ai F€tch the wod trom a0+d0, sign €xtend ii and add il lo a1 Tte.b, .w and,loperaioE which sign extend lhsiroperators trom the specili€d l€ngth io a long woE can ctash wilh dots in tabet names. I this occurs you can eilher bracket lhe expression and pul th€ .w oulside the brackets or use \w inst€ad just as in the assembler. Kevboard Controlc General (nolk in all windows) F1 F2 Fg F4 Move to adjacent window tbve a window edoe Splil a window - R€mov€ a window edge 15 [,love lo adjacenl window (Tlese may not wofi on all keyboards) I\rove cu Isor lo lhe top ol lhs window. ln the Regisl€r and Watch windows only lhe cursor moves whereas in lh6 Disassembly and M€mory windows the window address is changsd so lhat the iiem underlhe cutsor moves io the $an Cttlz Toggle Fullscreen display on curent window shifl-F1 cl+F2 Chang€ window type Reslar! debugging s€ssion (when using a CPE fil€) AII.L cr -L Sel window lock sxpression and lum on lock. Toggle window locl on/ofl. (Prompis lorerpression it one hasn'l been enlered) AII.H AII.D Att x ctd-x llt-z Display creation dal€ ol debugger Exitdebugger (Automalically saves cunent slate lo SNBUG6SK.CF?) Eril wilhoul saving stale DOS gateway Type exir', lo relurn io debugger AII.S save laEel regisleB Resiors saved regisleF cld-R Resel. SSP and PC are loaded lom locations load€d wilh S2700. Esc Hall targ€t machine as soon as possibte Haltlarget inachine and tum ot irngrrupis,DMA Shilt-Esc Ah.U AtH O and 4, SR is Toggle conlinual updale mod€ on/ofl. lDelault ott) Sei inlerual for conlinual updare il l8tis o{ a sec6rd. {o=Ftal out, 2=9 limes p€r second, l8=once p6r second) Upload bytes lrom targst into e lite Download by.les lrcm a fle to tarEst memory Ctrl-F F10 Save cufl€nt conl]guraiion to a lile shifl-F10 Load conliguralion Att-0..7 Change targel number. The currenl setup is saved lo lh€ conlig lile and a new conlig lite torlhe new targel is toaded. il€ 16 Eeglsier window Arrou6 Reium 0-9/A-F irove qJrsor Change reoislels valu€ lo resull of an expression Enler new valu€s at cursor llemory wlndow Arrows Mova cursor Relum 0-9/A-F Move cursor up/down a page al a lime Chango msmory valu€ lo r€sult otan oxprsssion Enler new values at cursor Goto €xprsssion, Changes window slarl address lo result ol AIt.G Swilch bstwe€n byl€, l]vord and long word display Set window slarl to value ol long l|ord under cursor lncr€m€nUdecrcment value under culsor lns Del Add e new walch expression Remove a watch expression Dlsass€mbly window up/down leflnght Alt-G Tab Shift'Tab Alt-C Cld.C Alt-Fs F5 F6 F7 F8 Fg shift-F5 shin-F5 shitt-F7 shift.F9 Llne up/down irove a word al a time ilov€ curcor up/down a page al a lim€ Golo gxpression, Moves cuEorto r€sult ol expr€ssion Move drsorlo PC Move PC to cursor Attach condilion lo brealeoinl at cursor Attach counl lo breakpoint d srrsor B€set all breakpoint counts Toggle breakpoint al cursor Run cld€ at larg€t unli! instruclion al cursor Trac€s. Steps ov€rtraps and line NF St€p ov€r. St€ps ovsrsubroutine calls and dblas Starl laEet executing cod€ lrom oJrent PC Clear all breakpoinls Res€t all breakpoint counts Forced trace. Traces down lraps and lin€ A/F Run lo sp€cii€d addr€ss lncremenvdscrem€nt label level '17 File Window up/down l€turight Home/End Enter Alr'G All-S Alt-N Line up/down Characl€rlelvrighl irove cursor up/down a page at Beginning/End ol file Change lile nam6 a lim6 Goto lin6 Search Next ocdrrance ol search slring tlerctrEr-IxEsr This swilch, wlich should only b€ used wilh heroJles mono cards, causos lhe debuggerto us€ its buit-in hi'rssolution hercules diveElo give you many more rows ol characl€B on ths scr€€n, The /90 uses 80x50 mode and /gl 90r4ai. 18 Source Code Syntax The slalemsnls in 68000 source code arc eithor instructions which can be translaled into 68000 machine cods, or dir€ctives. Di.eclives are ussd lo controllhe operation ofths ass€mblerand how it lnteDrcts the source c!de. SNASM6SK supports the Motorola standard 68000 mnemonics. Thes€ mnemonics are not sxF,lained in this manual as il is nol inlended to be a 58000luiorial. Stalemenl Format Slal€menls have the tollowing general form label r op€ralion operand commenl Ndes . Lab€ls always stad inlh6lirsl column unless they €nd with acoton (:). . Fisrds are separaied by tabs orspaces. . Anyihing on a line anerlhe op€ration and operand ls taken as a comment but lo avoid conlusion il is r€commended thal lhey bsgrn wiih a semi-coton.' . Blank lines and lines coniaining only tab6 and spaces are comments . Lines slarling wilh a semi-c{lon or an ast€nskare commenls. . Lines staning wilh an equals sign are case statement setectors, Labels end Svhbols kbels.nd Symbols nust ob€y lhe lollowing rures . A symbol contains characlers from the set: A-Z disils 0-9 Unde6corc L) and Oot (.) . Digits may not be lhe lllsl charactsr of a symbol except in loca, labels. . A symbol may optionally be lollowed by acolon when il is detined but nol when it is r€l€r€nced . Local labels bsgin wiih an al (@) or optionatty a dol(.) Tlese are e,(ptained later in ihls manual. As labelscan cont6in dots it ls possibte tor there sometinres to be con,usion aboui whelher adol is pan ol e labelor a siz6 moditier.ltthis happens you 1 The wS oplion makes rhe dsemuer lnslst on a seri-@ton betore comenls. see the ssclion on oplDns ior moro inronEton. 19 can €jlh6r bracket the expression oruse backslash 0)in place ot the dot on lhe size modilier. Erempl€s ol symbots Mysymbol @Local A A135 Last_One @2 The assembler has various predelined constanls available which usuatly siarl wilh an undeBcoie. ll you want 10 avoid clashes wilh any luture ones ol theselhen avoid the use ol undeGcore as the lilsl character ot a label. lnieder constanrs Thedelault base ror constanis is decimal unl€ss the RADIX operalor is us€d to chang€ it. Hexad€cimal numb€Is arc pr€ceded by a dollarsign and binaiy numbeB by a penentsign. lryou want to use theASCllvalue ol a characler as a conslant place il in quotes. ll a character is preced€d by caret (^) the corresponding culrolcharacter is subsl 0t6d. CoL(.nt DecimalVelue 1234 '1234 $A0 160 '?" 42 65 63 %i01010 '4', 13 BADU Syni.x FADIX cdnstant ljnless you tellil olh€Mise lhe assembler assu mes thai the radtr ot a numbernol preceded by $ or% is decimal. Wiih the RADTX operaoryou can change lhis delaull lo any valu€ betwsen 2 (binary) and t6 (heredeclmat). The argumenl lo lhs BADIX op€raior is always evituated using decimd aa Irh€ AN (alternale numeic) option is enabtsd, you can atso detile conslanls in lh€ Zlogllnlel lashion. Th€ number, which must begin wiih a decimal digil, is lollowed by H,D,Oor B to specily the base as Hdx, Decimal, Oclalor Binary respeclively, This fsaiu.e does notwork il ihe defaul rcdix is >1 0 as B and D ar€ valid hex digits. Location Cou.rer An asleisk (') wh€n us€d as a conslanl substiluteslhe value olthe cuiienl Example MyString MyStringLen dc.b 'Hello Wofld '-Mysldng 20 Exotesslons SNASM6SK uses a signed 32-bit integel expression evalualor which has th€ lollowing operators :- Operators I!Lg! l +x -x posiiive(unary) negalive(unary) addition X+Y ; v" & I 0 x.Y x.Y mulliplicalion quotient oJ divislon remaindsr ol division logical and logical inclusiv€ or logical complimenl )sY x%Y x&Y x!Y -x shi,t X lefr (Y iimes) shifl X ight (Y limes) (x) Comparlson grealerlhan grealer lhan or equals Funclions der{) reo nars0 sircmp0 stden0 inslr0 lvpe0 sqn0 secl0 ofiseo filesize0 DEF(X) REF(x) symboldelined NARG(X) parameleis argumenl counl STRC P(S1,S2) sling compa STBLEN(S1) stfing lengih TYPE(X) typ€ ol a symbol oFFSET(X) FtLEStZE(S1) Size rNsrB([x,]s1,s2) soRr(x) sEcT(x) son ofa lile Speclal constants narg _rs NABG parameleB passed to macro __R S currenivalue ol rc counler Jear, _monlh, _day, _weekday, ssconds _houls, -minules, lime and daie conslanls For a lrue rosull compaison operaloB relurn -1, lorlatse lhey retum 21 O. Some ot ihs above lu4cliols and consiarts may be un.amitia. bur ihey are ' erplained laier in ihe m€nual. Note Unlike some assembleF SNASM6SK uses a lull 32-bit sxpresston evaluator, so you must bs careful when using large numb€6. A number needs b[ 31 sel lo be negalive, nol jun bit 23. Erampls Pa)o €qu i lhe abovo is NOT lhe sm. aq PalO €qu Op.r.lol $FF8240 ;posrl,ve numbe/ $FFFF8240 ; negativ€ numberl Prccedence SNASM68K evaluales expressions using the totlowing rutes . Op€alors wiih : higher pr€cedence are perlohed betore ones wilh tower . gp€lalors with lh€ 6ame precedenc€ are pedorned lelt to ight . Expr€ssions in parenihesis are always evaruated ,irsl as thei have high€si priodty the The table below shows opeElor precedence in dsscending ordet 0 +, -, - (unary) +, - (binary) li is usually bssl to parenthesiz€ an erpression to make ii ctear lo bolh yoursell and lhe assembl€rwhat you msan, ALIAS and DISABLE llany ollh€ assemble/s pr€-defined constants orlunciions ctash with symbols in yourprogram or il you simply donl trke th€ cuneni names yoJ can remove the delinitions wrlh the DISABLE command. As lh s woutd make the funciion inaccessable you can Jirsi rename ii using AL|AS. Example -Tvpe Typo alias lype tvps 0 ; Typ€ ol account ALIAS ard DISABLE can be ussd on ary nams {symDot. turct,on macro etc) that lhe assembler has akeady encounlered bLlr il cannoi be used lo renrove 22 or rename assemblsr inslructions or direciives- 23 Equates Equates are a way o, attaching a symbolic name to a conslanl orvariable numedc valug- This improves cod€ readability and means onty having to change one line lo change lhe value orthe constant. Perman.nl Edual€s EOU This islhe mosl common lyp€ ol equaie. Tle symbolon the len handside ot lhe lin€ on which the EOU directiv€ occurs is assigned rhe resutt ofthe €xpression on rhe dghl. Example3 -1 equ lOPort Entries EnlryLenglh 0 $300 equ €qu Tolalsize 8it3 I 16 Enld€s'EnlryLength 8 Onc€ a symbolis given avalue with the EOU directive any atempt to assign e newvalue willgenerale an error. ll is podeclly l€galto re.equare asymbolto the same value as ir atready holds,. These are called banign red€nnitions and will usually occlr when an include ,ile delines hardware localions tor ilsell ihat the main prog€m also Mosl assembl€rinsisl lhal th€ €xpression lo which the symbolis equaled conlains no loMard r€ferences. With SNASM6SK how€ver, as much as possible ol the exprsssion is evaluai€d, andlhe r€mainder olth€ wofi is don€ at the end ol the lirst pass. You should be careiut when ,olwad referencing local symbols in ihls way. as lhey wirr probabry not exist when lhe evaluation is done Bedelinable Equal€s SET and = Wh€reas EQU is used ior delining conslanls SET and = are used tor delining variables. A symboldelined with either ollhese directives can have its value changod as onen as you like. Th€s€ vadables arc trequentty us€d as loop counlels and scrE ch vadablss jn macros. Example Freespac€ set Freespaco ;; 0 Freespac€+l 024 ; zero tree space lolal ; 1 K more lree her6 Set and = are synonymouse.g. Tolal =0 = Total+1 SNASM6SX generales a waming il a variable is reierenced belore it is delined, lJ you do loMard relerence a vaiable, the value subsiiluled willbe lh€ value ol lhe variable al lhe end ol lhe lirct pass. Unlike EOU lhe aqument ot SET musl not conlain lorwad references. AJso no iniormalion aboul th€ type olthe erpression is inhedted by the symbol, which meanslhey are nol always lhe best choic€ in code using seclions, eg. section Code,Text Marker ;This next line will9;6 an eroras'is l€lative to ihe start oithe seclion and ;Ma erisjusta number ;ll Maker is derin€d wilh an EOU ihe €xpression willevaluale. dcb.b '-lvtarker,63 Strlno Eduates EOIJS EQUS is used lo assign a value lo a stdng variable. Stdng var ables are used lorihings like version and copyight messages oras scralch va.iables As symbols .quat.d silh lhe EOUS direciive can be used anywhere in your code they must b€ preceded by a backslash 0) character so the assembler knows thal a sldng equale is lollowino. ll ther€ could be conlusion as to whers th€ name orlhe strino variable ends use a second backlash as a delimiler. The only exception lo lhis rule is in expressions, as il ths assemblerlinds a symbolwhich is a slfing va able whilsl evaluating an expresslon. th€n lho stdng is substiluled automalically. 25 The parameter 10 the EOUS directive will usually be delimited by quoles in which case thal lexl is assigned lo th€ sting 6qsate. ll the quoies are ommitled lhe ass€mblsr expecls the parameler to b€ ths neme ol an already dgrined slfng €quate,lhe conlents oJ which are tlansfered 1o lh€ new stdng The parameter can also b€ enclosed in cudy brackets ({}) lh€ use ol this is explained in the seclion on macros. Examples 1) €qus 'Demo VeEion 0.21 22105/89' dc.b i dc.b 'D€mo Version 0.21 22105/89' 2) 'lnlDispAddr' IDA ; expands dc.l \IDA\1 dc.l lnlDispAddrl to \IDA\2 ; erpands to ; Note use lr DispAddr2 ol second backslasi as delimit€r 3) HexSlr , ; exPands lo hex \Hexsti\Hexslr her FFOOEFOO : Note lwo backslashes Sldngs are delimiled with quoles, single (')ordouble ('). The quotes which are used lo delimit the stdng aner th€ EOUS direclive do nol become part oi the symbols conlents.lryou want to pul asingle quolo in lhe string yor.r can eitherdouble up the single quolo ord€limil the sidng with double quot€s. Exadly ih€ same applies 10 double quotes: eilherdelimir wirh single quotes Examples Singlel 1t's great' Single2 Doublel "l1sgrcaf' Double2 equs 'They shouted "Yes ' togelhe/ "They shouled ""Yes'" logethe/' 26 There is a prcdefined sling equale called _lllename which holds the name oflhe lil€ b€ing assembled- This is lhe lile on which SNASM was invoked not lhe cur€nt includo ril€. Exampl6 dc.b 'To rebuild lhis assemble Llilename,0 BS Eduates RS. RSSET, RSRESET Syntar Ss.size RSSET Count Value BSEESET Ualuel RS equales are used when you wanl lo deline a sel of symbols as onsets inlo some data struclure bul do not want 10 keep track ol the ollsels yourcell. The assembler has an inlernd vanabb called _FS which is ussd lo keep irack ofthe curr€ni ofiset. When you dgline a symbolusing lne RS direclive _BS's valus is assigned lo the symbol and lhe counler is advanced by the speci,ied numb€rol byles, words orlong words. The RSRESET dkeclive zeros _FS and is used al lhe start ol each new strucIure. FSSET puls any value you like into the _FlS variable, it is used when you want to stan the offsels al somelhing olher lian zeroFor compalibility wilh olher assemblers,lhe RSRESET dlreclive can lake an oplional parameler. which il presenl causes it lo behave exaclly like lhe RSSET direclive. Exampl€s 1) Fil6Handle Fil€Open FileName FilePos rs.b 16.l Filespecsize Is.b ;or w€ could have used Filespecsize equ 2) Issel tWe could have used 1 1 8+3 1 0 _RS=o ;_RS=2 ;_BS=3 ; _RS=14 i =18 _RS ; _RS -8 r ; ; rsres€t -8 i bui this is lor compelibility and ils use is ; ObjXPos ObjYpos ObjFlags Objspeed is nol advanced h€re. rs.l rs.l rs.w rs.w 27 -ve as address register poinls eight byl6s jnlo dala slructure discouraged lilhe auto€ven _BS option is enabl€dthe wod and long loms oi BS lorce the variable to b€ s€t to lhs ne{ even bourda.y bsrore ihe operation is L,se oi RS and associated direclives rssults in dae$ruclure d€finitions thai, in addiiion to being easy to read, allow you to acld or subtract fields without having lo count on yourlingelsl Pr.-d.flned Constantg To help you ke€p lEck orwhrch velsions ol your prog.ams were made when. SNASM6SK prcvid€s the lolowlnE pre.defined numeric conslanis. Narog -YEAR -MONTH Gr€goian (e.9. 1989) 1=January... l2=December -DAY -WEEKDAY _HOURS _MINUTES _SECONDS Exampl6 AsmDay day Noles The above conslants holdthe date and time ai the slart ot assembly: iheir valugs do not change dudng asseobly. To put lle dale and time inlo a slring yo.r can use lhs \# parameterwhich is described lal€r in the cha er on Macrcs, Faolsler eosaieg EOUB EOUR is osod to deline a symbolas a synonym tor a data o. address rcgisler lo improve code readability. 28 Example move.w ; d0, Ofls(a3d2.w) @uld be wnllen as :- Powsr CelDataRr Curlndex equr €qur €qur ;"r"." d0 a3 d2 Power,Oits(CaDelaPlr,Curlnder.w) Dols ars not pemitt€d in the nam€s ol regisier equates so that the assembler knows lhal Cudndsx.w m€ans the low€rword ol {d2) ratherrhan a register €quate called Curlndex.w. BKi Simila y BEG is used to deline a sy.nbolasa synonym tor a tisl otdala or Erampla movem.l :could be wrinen as d0-d6/a0.a6..(sp) :- MainR€gs req movem.l d0{6/a0-a6 MainRegs,-(sp) l L L L. 29 l Detining Data Dellnln9 lnltlall..d Oala D.a The DC dkeclive takes a variable number of argumenls and all€r evalualing thsm places lhe results in lh€ objecl code in eilherby,le, word or long word Examples -69,202 0 LineLengih Signalure dc.l dc.l 'zM' ExelD EnorNum Erolstr Dispatch SldngBufisr dc.b dc.l 'Maximum length exceeded',o Rouiinel,Rouline2,nouIne3 llyou wanl to pul asingle quote (') in a$nng you can eitherdouble up the single quote ordelimillhe slring with double quotes ("). Exaclly the same applies to doubl€ quoles: €ilher delimit wiih single quoles or use lwo Examples Singlel Singl€2 dc.b dc.b Doubl€1 Double2 dc.b 'll"s greal' "ll's great" 'They shouied "Yes" rogether 'Th€y shouted '"'Yes"" togethe/' DCE Syntax DCB[.size] count,value The DCB directive is used lo generate a block o, memory conlaining a specitied numberof instances olths sams byie, word or long value. Examples dcb.b 100,63 256,7 ; 100 byles containinq 63 ;256 wods coniaining 7 l{lhe auto.even oplion is enabl€d lhs wod and long lorms ol DC and DCB iorcelh€ program counlerlo the next even boundary b€lor€ lhs operation is 30 Whereas some assemblers lruncate out ol range parameters inio rang€, SNASM6SK gives an srror e.g. Allollhe following cause dc.w dc.b dc.b an 10 lorce lhern eroi:70000 -40000 260 n30 greater lhan 65535 less ihan .32768 grealer the 256 less lhan 128 Handv tio llyou detineWod and By.le as shown below you can uss lhsm as a quick and r€adable way of lruncating a numb€rto a word or byle. Byte '$FF&', BigNumber 70000 \Word\-40000 \Word\BigNumber (h.b \Byie\(-80'9) \Byie\aigNumber iBrackelsareimportanll EEX The HEX dircclive is followed by a slream ot hex nibblss which are paireduP lo givs byles. e.g. MaskTabl i dc.b could b€ wdllen as... hex MaskTabl $01,$02,$04,$08,$10,920,$40,$80 0102040810204080 The HEX direcliv€ should only b€ used lorsmallamounts ol dala. Dala stored as h€x is very unr€adable, takes twice the space ol blnary dala and is slower to load and assemble. Ratherthan having vast quaniiiies ol hex data you may preler ro pul lhe data into a iile as raw byles and use the lNcBlN directiv€ d€scribed laler DATA and DATASIZE The DC dir€ctiv€ can only be used lorconslanls that can be contained wlhin 32 bils, lt is somslimss n€csssary lo plac€ larger conslanls wilhin code and the DATA and DATASIZE direclives havs b€en provided lorthis purpose. DATASIZE is lollowed by e single paramelerwhich speci,i€s how many bytes are lo be used lor conslanls delined using the DATA directive. The DATA dirocliv6 has avariable numberof parameters, which are decimal by delaull bul which can b€ hex il pr€ceeded by a dollar ($). Binary numberc and the altemate numefic lom cannot be used. 31 Erample datasize dala dala data I ;256 bil numbeE 10000,1000000 $100,-200 200000000 B.servind S.ac. DS The DS dirocliv€ is used lo €.9. ScrarchBuiier Pointetist iese d5.b ds.w e, and inilialise lo zero, a block ot memory. 1000 ,6 ;space for 1000 bytes ; space lor 16 wods lrlhe aulo+ven optlon ls enabledlhe word and long word lorms o{ DS lorc€ the program counlerlo the nen ev€n boundary belore lhe operation is performed. The OS dir€clive is used in BSS lyp€ sections 1o reserue space. Uke €verything in BSS sections no inilialisalion is p€rlormed, so don't rely on there b€ing zeros in menoryl 32 Changing the Program Gountel cre OBG ls used to telllhe assembler wh6re inlhelargot machinelh€ cod€ is io reside. You sholld.ol use the ORG directive ilyou ar€ producing linkable oulput as tha linker decjd€s whgr€ th€ vadous parls o, lhs program are lo go. ll you ar€ nol using seclions in your prcgram you are lres io us€ as many ORG dirsctivss as you wish. Erampls Slartl otg lea $400 lvrstack,sp lf lhe argumentlo ORG sla(s wilh a qu€slion mark (?) n as inrelpreted as the amount of RAM lh€ prcgram fleeds and the targel is asked to reserue lhat much memory, Ths targ€tthen returns ihe sddress al which it managed lo rcsevs th€ RAM and SNASM6SK assemblesthe pogram to run al that Example Slart org l€a ?512',1024 ; asklor 5l2K ol Ram VaBase(pc),a6 This lacility is us€rulwhen developing lora macnine wilh the operating systsm resident. This lorm ol the OBG darective can tak€ an optional second palamel€rwhich indicates the lype ot memorylo b6 resorved, Th€ value of this parameler is specilic to lhe velsion ol lhe larg€t soltware being used. EYEN The EVEN direciive lorces lhe prcOram counter lo lhe n€n even address. Example Prompl ; &.b 'Hit a key when ready',o Butsr musi be on word boundary BuJl€r ds.b 1024 cloe CNOP sets lhe program counierlo agiven olrs€t rrom any size boundary Examples cnop o,2 o,4 64,128 ; same as even direciive ; nexl long word boundary ; 64 byles above next 1 28 ; b).le boundary Wh€n using seclons il ,s noi possible lo align lhe prcgram counier to a larger boundary ihan lhe aliqnmenr ol the cureni s€cton, i e. EVEN cannot _ be used in a byte aligned seciion and CNOP lo a 4 byles boundary cannot be us€d in a wod aligned section. OBJ and OBJEND - All code g€nelalsd an€rlh€ OBJ directive but before lhe OBJEND dk€clive willslillbe placed at thesame place in memory bullhe code wjllhave all ollsels sel lor il lo run at th€ address specllied alter the OBJ dk€ciivs. ThiS is sometim€s reJored to as asssmbly with otlsel. Exemple -. _ RunAddr @Loop Reloccode oQ equ l€a lea move.w dbra jmp $8000 $400 Reloccode,ao BunAddr.al *(RelocEnd-Rotocoode)/2-1 (a0)+,(a1)+ do,@Loop Retocoodo d0 obj RunAddr willbe set to run at RunAddr jmp Slarlup .ou".,, *$z7oo,sr ; EveMhing within this section $anup obi"no RelocEnd OBJ and OBJEND should always be paired correcity it you need lo reverl lo 'normal assembly, Dont ommil an OBJEN0 diecliv€ or use lwo otthem, or aflempt lo nest OBJ/OB.,END pairs, as the assembter wilt toose track oi where lhe PC acrually is, and no doubl you willlool lncluding Source and Binary INCLUDE _ - You will almo$ ceneinly wani lo break yosr source code into several smaller ,iles eilhsrlo make il more manageabl€ orso you can lse some olthe pans in more lhan one program, The INCLUDE direclive tells lhe assembler lo proc€ss anotherfil€ belorc continuing wilh lhe clnenl one. You will nomatly heve one rool' ,ile which includ€s all the olher parls ol your cocle. ll you wanl, lhese includ€d ril€s can include liles of their own. Example SlarlupCode jmp include includ€ MainEnlry lEa MainEnlry 'equs.asmr c:\general\malhs.asm Mystack,sp lllh€ lext lollowing the backslash can be conlused $ith asling equate use eilher lwo backslashes or a lolward slash. You may encloselhs file spsc. in quoles if you wish bul lhey are optional. e.g. - include includ€ ll lhe fil€ c€nnot be found in lhe c:\\general\mAhs.asm c/general/maths.asm cu ent direclory it is searched,or in all dkectoies specilied wilh the 4 sw1ch. - tNcEtN _ l, you have a lot ol data in raw binary romal such as graphics or music dala, you oan us€ the INCBIN directive lo include lhis into your prooram. As the daia is jusr byres the assembler knows norhing abour its inlemat slruclurc and you will have to put a label on the dala and handl€ ot sets into lt yoursell. - Exampte lea add.w add.w SineTable iii"Uin SineTable,ao d0.d0 d0,a0 i lndsx wods in sine iabte 'c:\labres\sintab.bin' See the abov€ notes on using backslashes in palh namss, tlthe lile cannol b€ round in the curenl directory it is ssarched for in dirccloies specilisd with the /jswitch. 35 att lfyou needlo know the size ola binaryllle bofore you includs il then you can uselh€ FILESIZE ,unclion. This retums lhe size ol alile in b).tes or minus one il lhe lile ennot be lound Ex.mpla EinHeader dc.l lncbin fileslz€('sinlab.bin) sintab.bin DEF and REF ll you havo a gsneral purpos€ piece ol source code that will b€ includod in quit€ a lsw projects you oiten want to have conlrol ovgr e)(actly which routines ar9 included, Tle REFoperalor relums true ilthe symbolfollowing it has already been relerenced, Erampla il rel(Prirn0 movem.l do/ao.-(sp) ;This is only assembled il Pintf has been rer€r€nced Pnn ; end oi pinll rts Th€ DEF operator returns true illhe symbollollowing ii has already been delined. You can us€ lh€ DEFtunclion lo ch€ck illhe va able has akeadv been delined and lhen detln€ il only i, n€cessery. Example ; il ds.b -del(SlfingBuller) This is only assembled if StingBuff€r hasnl been delined SldngBullei 64 endil EEE The lype lunction provides inJormation about a symbol. lt enabtes a macro to delermin€ exactly what il has b€en passed as a parameier. The valug retumed is a word, wilh the bils having the lollowing meanings :0 1 2 3 4 5 6 7 I 9 Sel il symbol has absolule value Set llsymbolis relalive lo slan ol a section Sel il syfibol was derined using 'SET' direciive Sel il symbol is a macro Set if symbol is a sldng equals Sel il symbolwas derinsd using an 'EOU'directive S€t il symbolwas specalied in an'XREF statement Sei ilsymbolwas sp€cilied in an'XDEF nalemenl Sel ilsymbolis a tunclion (STBCMP, NARG elc.) Sel il symbol is a group name 36 10 1 12 13 14 l5 1 ' - Sel Sel Sel Set Sel Sel ilsymbolis a macro paramstsr i, symbo! is a shon macro (MACROS) ifsymbolis a seclion name il symbolis absollte wod addrsssabl€ il symbol is a r€gister equal€ il syrnbol is a register lisl equale To check specifc bits roturned by th€ ryPE lunclion use the bitwjse and operator (&). Erample ir inlolm 0p€01 )&$200)=0 ; ch€c* bit 9 3.'y"s is nol a grcup name!',\1' endif 37 Setting Target Parameters BECS ll you are silhsr ssnding cods straight lo the taeel machine or il you are producing a CPE fil€, it is possible to specily the values lhat you wanl the 68000 regisleB to have wh€n your code is €x€culed, lJsually lhis leature is used tosetlhe Pc at which you wanl €x€cution to begin, andlhevalue of SR ar rhis rime. Example org regs Codestad lsa $400 pecodestan,sr=$2700 Myslack,aT As the 68000 has two slack poinlsls you must use be speciiic about which you mean by using USP and SSP. - This lealure cannot be us6d ilyou arc producing machine specilic .elocalable or pure binary formals. WOBKSPACE _ Ths laEel solware uses about 1 K of memory ,or its own workspace. Wiih mos! versions of th€ larcel sollwars il is possible io change ihe address ol rhis usinq the WORKSPACE command. Example - wo*space :: $80000 ${00 38 ; above 512K Assembly Flow Control END l€lls the asssmbler lo immedialsly stop processing lines. The usg ol END is onliroly optional as SNASM68K aulomatically stops when lhe €nd ol lhe source lil€ is reached. END has an optional parameter which can b€ used lo sp€dt ihe ex€oiion address ol lhe prog,am. Use ollhis f€ature is discouEgsd asihe REGS dircclive can t€ used lo achi€v€ that sam6 ihing. Erample3 1) Slanupcods lea ; End of proqram ;; end ; No sian address No enor here as lhis line is never reached. 2l Slartupcod€ lea lvrSlack,sp jmp end lF ELSE ELSEIF and &anupCode ; slat al slartupcode ENDIF Th€s€ ar€ ussd lo conlrol€)(aclly which lines ol code get assembled. Conditional assembly is us€lulilyou need to generale severalversions ot lhe program, but il is mainly us€d in macros lo c€lse lhem to expand diff erenlly under dillerent condilions. Exslnples 1) DebugMode equ equ 0 Falss ;The lollowing cod€;ill be skipp€d il D€bugMode is lalse it DebugMode move.w XPosilion.do Pdl Fr endif 39 2) English German Language i Assemble equ equ equ equ 0 I 2 English correcl;;nk odenng sldng ac.oding to qrrr€nt language. il Lanquage-English dc.b Two b€ers pl6as6',0 €lse it dc.b Language=Fr€nch 'D6ux beir silvous plait',o Language=Geman if dc.b 'Zw€i bier bitle',o endil endil endil 3) English equ 0 1 2 English Languag€ tAssemble corrocl drink ordoing string according lo currenl language. it Language=English dc.b dc.b €lseil dc.b 'Dsux beir sil vous plait',o Language=German 'Zwei bier bilte,0 Ngles ln example ihree th€ ELSEIF direclive has been used lo make th6 cods more readable. ln lhe same example ENDC is ussd inslead ol ENDIF to show thal they arc synonymous, For compatibilily wiih other assemblels lhe ELSEIF direciive can be lsed withoui any paramelers in which cas€ il acts exactly like an ELSE dircciivs. lndenling ol code has been used in thss€ €ramples to male tho cod€ more readable. You may wish lo do the sam€ rhrng bul ii is €niir€ly optional. The logical not (-) op€rator can be used lo branch on lhe opposite ol a condition bui you musi be car€tullo parenlhesiz€ the €xpression corectly. 40 e.g;ll may be templinglow le il ll ; bul you probably wanied CASE-aod -Language=German -(Languag€=Geman) INDCASE lf you hav6 a symbol which you wanl to nse lo saleci b€iw€sn sev€ral piecss ot code as in €rampl€ lhr€€ abovo,lh6 CASE directive can bo used. This dkective can be used in place ofthe lF direclive as shown in example one below, bul ii really comss inio iis own lormulti'way choices. Syntax CASE Expression =Expression{,Expression) EN DC ASE Example3 i) 0 True Larg€Butf€r equ n True LargeBull6r =True ds.b ds.b 256 1024 2') i A6sembls corrscl ddnk ord€ring string according lo cur.snl language. English €qu 0 1 2 English German Language -English dc.b dc.b dc.b Languag6 'Two beers pleass',o 'D€aux bek sil vous pleil',o 'Zw€i bier bifle',0 41 3) €qu o SaveMode €qu 2 ProgMode equ SaveMode ProsMode ;;" =ExeculeMode,D€bugMode ;Selecloneilhervalue l6a l,lystack,sp jmp Codesiarl Codeslart.ao =SavoMode l€a mov6q #0d0 move.w #Codss€cis,dl jsr Wnleseclors rls Inform 3,'Bad valu€ lor ProsMode' =? See laterinlhis manualtor ExeculeMod€ DebugMode equ 1 etplanalion ol INFORM ; 6ndcase NglEs The =? cas€ is us€d il non€ o, the olher cases succeed, ll lh€r6 is no =? cass and allths oih€r cas€s lalllhen non€ ol lhs cod€ will b€ assembled. BEEK!4ENDE The REPT direcliv€ is used to repeat a shon soclion olcod€ a prsdel€min€d number o, times. Syntax HEPT Expr€ssion ittoa Eramples 1) r€pl mov6.w 16 d0,-(a0) endr 2) Tabl€Enln€s equ 21 lnder 0 TableEnldes lnd€x lnd€x+64 lnd€r = repl clc.w endr WHILE .nd ENoW Th€ WHILE dkecliv€ is us€d 1o repeat a short section o, cod€ whilsl an 42 exprcssion evaluales lrue, Syntex - WHILE Expression Exow Eremple Factor equ 4 i Build lhe code r€quired 10 muhiply by T€mp - T€mp whil€ rol.w = €ndw laclor Factor Templ (s0) T6mp>>1 DAi[d]]NIlL Th6 DO/IJNT|L loop is similar to lh€ WHILE/ENDWH|LE loop excepl th€ condiiion is checked al the end olths loop andthe toop,ng tinishes once the condilion b€comes lrue. - Syntax DO iixrt Expression equ 4 Example Faclor I Build lhe code rsquirerl lo muliply ry laclor Factor Temp * Temp = do rol.w until (a0) Temp>>1 Temp<=1 43 Macros A macro is a way ol giving a sequence ol assembler lines asymbolic name so they can be assembled lal€r as many limes as you require, A macro is invoked es il it wfiere a new direclive and like dk€clives param€l€rs can be passod lo them. They ar€ used to ext€nd ths ledtures ol lhe assembler or jusl save a bil of tyFing. lntroduclnd llacro3 MACRO and ENDM Th€ lines b€tween the MACRO and lh€ ENDM dk€ctives are stored an memory and can b€ relerenced uslng th€ label proc€ding th€ MACRO Example ; Expands to two NOPI nop nop Delay TwoNops ; assemble lwo NOP! TwoNops ;lwo more WheneverTwoNops is used as if il wer€ a dirccliv€ lhe macro is expanded. MEXII Th€ MEXIT dksclive causes expansion ol ihe currenl macro lo slop immediately. Exemple ;Macro $lrich repeal a stdng acedain numberollimes. NewDs macro it inlorm mexit natg<>2 2,'Wrong numbsr of parameters €ndit repl dc.b u \1 €ndm NewDs lhe 'Hello',2 MEXIT direclive is supporled lor compalibilily reasons as the above could be vwitten much mors neally using rhe lF..ELSE..ENDlF lllcro Peremeter! A macro can lake parameters which can be used any,u/here in the macro iu$ as (lh€y w€re sting 6quaies, i.e. prec€dsd by a backstash (\). Again it there could b€ arry conlusion lh6 parameter c€n bs temrnaleo wilh another backslash. Ther€ can b€ up to thidy two param€i€rs, \O to\31 wiih \O being the size ot lh€ macro,.e. rhe t€xl l6lrowirig th€ dol (.) any, when lhe mairo was invoked- , Erample 1) I Macro io increm€nl regisie. lnc addq.\o #1,\1 endm lnc lnc.b lnc.l d0 dl d7 expandslo addq. #1d0 the assembler ignores the doi expands to addq.b #1.d1 expands lo addq.w #1,d0 expands io addq.l#1,d7 2J :Macro!o branch il rsgisier notzero BENz ts1.w bn€.\o \1 \e endm BlaNz BraNz.s do,Exit dT,Again 3) I ll you €nclos€ an argurne in angte bEckets (<>) you can us6 spac€s and r 6mm.ain Format n macro dc.b 13,13,'\1...,,0 endm Foma SHIFT and NABG ll is oJten ussrullo have a macro which takes avaiabte number ol parameleE. Th€ pr€delined NARG symbot and ihe SHtfT direciive a,e used Io delsm:ne how many paramelerslhsre are and nep ihrough ihem Shirl causes \1 io b€ losi and shrttslhe resto h€ parametarc dow-n so th€ \l b€comos what \2 was etc 45 Example ;Macro to DC the given parameterc ait€r doubling them DCtz macrc repl dc.\o nars V'2 shilt endr endm iiC,e.* 2,8,9 ;lhswords4,'16and lsareDC? S€€ ihe descn ion of €xt€nded macro param€tors lor mors uses ol SHIFT and NARG. Named Macro P.ramel.ri ll you prefer you can assign symbolic nam€s lo the macro paiamelers lo be usd inslead o, \1 10 \31. Examplo Scale macro dc.w X.Y.Faclor Uc\Faclor,\nFaclor endm Shorl ilacros MACROS Nomally controlslruclurcs musl be propedy n€sled wilhin macros. ll you stait a slruclurc in a rnacro you musl inish il belore lhe ENDM and €qually you canflot terrninale a structur€ thai you didn't stan in that macro. You may occasionally when porling code from othsr assgmbl€ls, n€ed to delins macros to imilate conl,ol struclures. Shon macros coniain only a single line ol cods, bul this line can be a control structure direclive it you Erelnples r) iMacro lo implementthe lFEo (il equals) conditjonal if€q i Nole: Short macros macros it \1=0 donl have an ENDM ileq DebugMode inair 46 2) ; Macro to implem€nt the IFNO ifnd Counl (il not defioed) conditionat macrcs il ifnd dc.w -del01) Count 0 endil Nol€ lf the,k command lin6 oplion is used lhe abovs macrcs are automaticatty defined along with several others. ErtEndcd Pel.meters SNASM68K allows you to pass a list oi ilems €nctosed in cudy blackels (0) lo a macro paramet€r. The NARG symbol has been exlend€d so lhat it can repo( how many ilems have been assigned lo a parameier and sim ady SHTFT can now be used Exampla Black Green Red equ €qu €qu 0 1 2 ; Macro which takes colourc and point lisls ;e.9. ; Black,{0,2,3},Green,{0,3,6,8},Red,12,4} ; and gen€ralos dala conlaining the colour,lhe counl ; ol points and th€n lhe point dala ;e.9. ; i I : dc.b Black dc-b 3 dc.b 0,2,3 dc.b Green : clc.b 4 dc.b 0.3.6.8 : dc,b Red : - tdc.b2 ;dc.b 2,rl PolygonLlsl macro Polygons\@ = ; - narcl2 Check narg was ev€n if inlorm else ; Handle all polygons points\@ rept dc.b = dc.b rept dc.b shifl polygons\@'2onarg 2,'Bad parameter list polygons\@ \1 narg(2) points\@ poinls\@ \2 2 €ndr ._ shili shin dndr endil endm ;ovgonList Black,{0,2,3),creen,{0,3,6,8},Bed,{2,4} - The abov€ erample may look complex bul note how alllhe complexily is hidden away inside the macro and how neat the main code took. For compalibilily with olhsrassemblels il is possible lo equale a 48 symblto a list ol paramelers using EOUS and use NARG and SHIFT on the stnng equale €xactly as they werc used on lhe macro parameler above, This ,ealure allows the macro to accept lisls o, arg!menls using angle brackeis instead of clrrly brackels. Examplo Delltems Dav t1) rspt dc.b shift nars(Day) \Day,0 oay deftems <'Mon',Tue','wed,'Tiu','Fri','Sat','sun'> Delllems {'Mon','Tue','Wed','Thu','Fri','Sal','Sun'} i normally we would hav€ used :- C6nllnuatlon Lln.s lf when you are invoking a macro, th€ lins becomesvery long, you can lerminale th€ llne with a backslash N, and continue lhe list ol paramelers on Erample DoubleT dc.w Dou bleT \1'2,\2'2,\3'2,\4'2.\5',2.\6'2.\7'2 1 1 1 1 ,2222,3333,4444,5555,\ 6666.7777 Label lmporrind A macro can impoi th€ label on lhe line on which il was invoked and use it iust like any olh€r parameler. The lab€l is not delined ro be al lhe current PC as usually happens, in lact, unless the macro specilically assigns a value to lhe symbol in some way il is undelined, To l€ll SNASM6SK that you woutd tike to use tabet imponing you must specily use astensk {') as ihe fiIsi named macro parameier, ihen you can us€ \'to substitute lorthe label- 49 Example ;A Macro that assigns labels relativ€ to the slan ot a dala labte. macro ',Dala €qu '.var8as€ BC repl dc.\o shift narg(Dala) \Daia Data endr VarBass equ rc.w rc.w i; L1 L2 |'1,2,3,41 {5,6,7,8} va€ase{pc),a6 move.w Ll(a6)d0 Advrnced lrecro Feetur.s PtISHP and POPP _ SNASM6SK l6ls you push some rerl and taler pop it into any sling vadabte. Exampte ; DC - palam€lels in revorse oder BackDC ; Push lhem all - macro local temp repl narc pushp \f ipush text contents ot\1 shii €ndr - I now pop and OC them rept popp dc.\o naru lemp ; pop lsxi pushed ea ier Uemp sndr endm _ i;ackDc.w 1,5,7,E You are not restricted lo poping the parameler in lhe same macrc that push€d it. Ihis allows some very ffexible maoos 1o be wdtt€n lo handte s€tireler€ncing data slructures. nrnind numbers into sttinos The\*and \$ paEmeteB substilute the 50 decimat or hex vatue ofa symbol inlo your cod€ al any polnl. They are used lo lum oumbers ido *nngs lor lomattlng dala or blrildin€ arrays o, symbols. Eral'lptet . 1) i PlJt lhe (hta and llmo lnto a sldng AsmDale ; oQands 10 AsmDate 2) - Colo Coll Col63 Col99 Index lndex _ lndex clc.b 1#-dayl#_monlh^#Jea/ dc.b '13/121989' 6qu equ equ squ = dc.w = dc.w = dc.w dc.w $FFF $FoF SoFF $FFo 0 CoA#lnd€x ;€xpanG lo Colo 1 Col\#lndex ;etpancls to Coll 99 Col\#lnd€x ; €xpands lo Col99 Col\$lnd€x ; €xpands to Col63 iThe words DCd will be $FFF,$F0F,$FF0 and $oFF. Unloue Lab€ls _ There is a special macro paEmeter \@ which expands lo an undeE@rc lollowed by a d€cimal numb€r which increments upon sach macro invocalion to guaranloe uniqueness. Exemple - Delay Loop\@ macrc move.w dbra \2,Loop\@ €ndm D€lay - \1.U #3,d0 Each time lhe macrc is €xpand€d a dift€reni labelsuch as Loop_000 or . - Loop_300 will ba generaled. zuBGE Macros can take up a larce amoudl of m€mory and sven though SNASM6SK stor€s macros very €fticJenlly th€y might as w€llbe r€movsd if lhey are no longer needed. The PURGE directive removes a macro lrom lhe symboltable and fre€s up the memory ll was using. 51 Ex.mple SigMacrc mecro iino' ; Code that uses BigMaco BigMacro 1,2,3 purge BigMacro ; BigMacro now no long€r exists and can b€ rsdefrned if we wanl_ ll a macrc puEss itsolf, tho delinhion ollhe macro ls not rcmoved untilthe macrc exits. - il tl you jusl want to red€fine a macro lhere ls no nsed lo purge when a new derinilion ollhe macro is encounter€d th6 old macro is automatically purged, A macro can, i, you really want, r€define its€ltl The new delinilion wilt be eflectiv€ nexl lime lh€ macro is irvoked bul does not inter,erewiih the expsnsion ol lhe currenl invocalion, ExEmple - StranEs Slrange inlorm macro inlorm o,'H€llo, o,'GoodBye' €ndm $renge €ndm 6i'"ns" Strange This will oulpul :. H€llo GoodBye GoodBye 52 String Handllng SNASM6SK provides some uselulsling handling funclions and directives whlch arc used (usually in macros) lor comparing. searching and slicing sldngs. slEtE! STRLEN is a lunction lhal can be us6d anyl here in an expression and which relums the lsngth ih characl€G ol its stdng parameter. ExahPle - ; Macrc to DC stdng precsded by ils tenglh Stdng macrc dc.b strl€n01),\1 String 'H€rro' = strcmp(slringl,stringl) 6ndm slEct P Synta, symbol STRCMP is a lunction thal retuhs a boolean vatue (0 ror fatse, which i6the result ol compaiing its two stdng paramel€rs. -t lortrue) Erampla Language equs - 'English' ;Assemble correct ddnk ordering sting according to curent language, if dc.b else il dc.b €lse if dc.b slrcmp{lLang uag€ ,'Engtish') 'Two beers pleas€,,o strcmp(\Language','Frsnch') 'Deux beksilvous plait',o strcmp(\tanq0age,,,G6rman,) 'Zw€i bier biie',0 endif endil endit INSIE Synlax symbol = lNt(lstad,lstnng,sub-sl ng) INSTR is used to s€arch a siing ro see it it contains a sub-stdng. tfthe sub, string cannot be lound the rcsul is 2ero othelwjse il is the ofJset into the stdng thal lhe sub-sting occu ed. Here as in all or ihe slring commands the 53 lirsl characlgr in lh€ sting is character nlmber 1 . Erample 'lntemal iest version 0.9' i S€i DebugMode i;e veBion ging conlains il DebugMode else DobugMode = the word l€st instr(1velsion','test,) -1 0 €ndi, INSTR5 oplionallilsl pahmeter is rhe position from which to slart the SUBSTF Synlax subslr lsiart],lendl.slfi nE SUBSTB rs s,mJarro EOUS in rrar I rs a way or doing a sinng equale \owever allows lhe slan and end characl€.s olthe 5r.r9 io be specitied. Example equs 'What does lhis do?' Templ subst 6,9,1T€n$i iTempl will equal'does (without lhe quot€s of couGe) Temp2 substr ,4,\Te$$r ; Temp2 will equal What T€mp3 subslr 6.,1Te$$i TestSlr ; Temp3 will equal does this do?' 54 Local Labels and Modules Wh€n you ar€ writing a large program il becomes very hard to lhink oi an inlormalive and uniquo name ior €ach label . Local labels help solve lhis problem as lh€y only o(ist wilhin an area called rheir 'scope' and lhey can be r€-used oulsid€ lhis ar€a. They ar€ mainly us€d within routines as 'place ma*ers ,or shps and loop€ whor6lh€re is no ne€d for oth€r routines lo be Local labels hav€ afl al sjgn (@) as lhei.lirsl chaBcler and lhis is lollow€d by an valid label characlers. Erampla I These are all local lab€ls @Lab€l @L1 @123 SNASi,6SK has two ways of conlrolling the scope ol local labels. ln the lirst ol these a loc€l label's scope extends belwsen lwo non'local labels. Exampl6 tsl.w bne-s addq.w lncNzD0 d0 @Nolnc #1,d0 ns @Nolnc lncNzDl bne.s addq.w @Nolnc #1dl rls @Nolnc The local label @No lnc can be re-ussd as it's scop€ is between lncNzDo and lncNzDl. This iorm oi scidng is supported lorcompatibiliiy r€asons and it is nol MODULE and MODEND SNASM6SK has anotherscoping system which can b€ ussd ireely wilh the above scheme and which giv€slhe progEmmer much more crnlroloverthe Code which is belween MODULE and MODEND directives is said lo compiss a module, A local label delined in a modul€ cannot be relerenced oulsde lhal module, and can be r€-used lr€ely. Equally .ny local labels d€fin€d oulside lhe module cannol be r€Isr€ncsd within it. 55 Erample CleaDala module @Loop bsr dbra @Clearll d1,@Loop rls @Clearn @Loop clr.b dbra (a0)+ d2,@Loop rts ;end of @Clearll ; A rclerence to @Loop would rcler lo lhe lirsl deiinition as we : are back in the module ClearDala, modend i snd o, ClearDaia A label js assumed lo b€ inside a modul€ if it is declared on any line alter the IVIODULE direclive uplo and including the lin€ on which the MODEND Orlslde modules ths'belween non-locals' scoping is in ,orce fui it is wonh noling lhal a module is trealed lik€ a non'local and defallr scoping is block€d by il. s.g, :This will nol wo* unl€ss it is all €nclosed in a mod]lle. @Loop movem.w @SubModule moaure d7,1sp) modend movem.w dbra (sp)+,d7 d7,@Loop The assemblsr willgivs an ermronlhe last line ofthe above example aslhe DBFA is not within @Loop's scops. Macro sxpansion has no ellect on the scoping oflocallabels, Any local labels which exisls in a module can be relerenced wilhin a macrc expand€d in lhal module. Ilyou wanl a macro lo have ils own locallabels you can eitheruse a module wilhin the macro, use lhe\@ parameteroruse the LOCAL dir€ciive described below The use ol modules is sfongiy recommendsd as lhey serve 10 neatly 56 '€ncapsulate' roulioes and rigidly detine where lab€ls locallo roulines can and canl be relerenced. LOCAL The LOCAL dircclive is anolher way oJ declring labsls within macrcs. Any symbols d€dar€d wiih the local dir€clive can be Lrs€d as if they were norma symbols but thsir scope is limt€d to ih€ cuned macro. Erample D6lay Loop fiacro local Loop move.w \1,\2 dbra \2,Loop endm Localdoes nol lype lhg symbols it dsfinss, You can go ahead and declare them as lab€ls, le( equales or whal€ver you iik€, e.g. Demo Slring, Gravily Skip local bra equs equ Skip,Slngl,Glavily Stip \1\\2' ; Sting squaie l0 endn 57 iNumefic eqlate ;Label Options SNASM6SK has sovetal opiions which can b€ controlled either wtlhin ths program or {rom lhe command line. See lhs s€ctiofl on command line syntax lor iniormalion on selling assembler options on the command line. AEI The OPT dirsclivs is used lo set lhe state o, th6 assgmblers options trom within the source code. Assembler oplions: AilIevialca Descndion Dcladl On olf ofl oll d On ot oit I On oll off Optlmlsatlons: otf op ofi otf olf oll of osq olt Allemate numeiic lormat Case sensilivily Descope locals on equ and set Ptint source lin€ whlch caused error Use dol (.) instead ol al (@) for locals Treat equated symbols like labels Prinl wamings Allow whit6 space in operands Writ€ local labels to syrnbol tile PC relativ€ oplimisation Shod branch oplimisation Absolule word oplimisation Zsro displacem€nt opiirhisaiion Add quac.k optimisation SublBcl quick optimisalion Move quick opiimisalion Ex.mple ; Enable all oplimisations ; opl opt o2+,os+,ow+ Turn otl aulo-ev€n and warnings ae-,w- Alternatively the /O swilch can be used lo sel lh6se opiions on lhe command lin€, ss€ lhs eadiersection on command line syntar. AE - Aulomatic Ev6n Wh6n this option is enabled word length dala directivess force the program counler lo lh€ nexl wod boLrndary belore ihey are execuled. This appties lo lhe wod and long word lorms ol DC,DCB,DS and RS. AN ' Altemale NumEdc Enables use ol Zilog/lntel lom ol conslanls. Seethe seclion on FADTX ior a full cl€scriplion ol this iacility. 58 C - Case Sensitiviiv When this is enabledlhe case oilhe lellsE in e labetb nam€ becomes imponad. For instance you could hav6 on€ tabet catted Biglabel and anoth€r called biglabel. Ai-Aeselr-Lacals Oulside modules th€ EQIJ and SET dircctives do nor usuatty atiect the scope ol local labels. Set this oplion il you wanl EOU and SET ro descope locats. E - Erhr I ina Printind When ih€ ass€mbler dolocis an eror il ls report€d atong with the tite nane and lins numberwhere il occurcd. ll this opiion is enabtad the iext ot ihe tine lhat caused lhe €rorwillalso be pnnted, L- Lm.! Lahel CheEcter SNASM us€s ihe al sign 1@) as its delault toce! tab€l character. This option changes lhis lo dol (.) S - Tr€at aouates like labels Wh€n lhis opiaon is €nabled lhe assembter treais e+rated symbots like labels and wnles th6m lo ths symbollabte as such, W'Give waminds There are s€verallhings lhal even lhough lhey are nol errors are unusual €nough ror il lo be wonh fie assembler repoding lh€m. tt you don,t wanr warnings repodinE lh€n disable ihis ootion, WS - Allow while soac6 Normally in 68000 source code comments lollow any while spac€ in lhe operard fi€ld. This prevents th€ us€ ol iab and space to incr6ase code readabihy io lne WS oplion has b€en added, which causes the assembt€r ignore whils spac€ in operands and to insist on the use olserni-colon io 10 V - Wnte loels to rvmholtable l, you wanl lo se€ local labels in lhe debugg€r then enabte lhrs opiion. To keep lhe size ol the symboltable down you may prefsr to only tum on lhis option lor rhe part ol lhe cods you are cunontty debugging. 59 OP - PC Ralaiive Oblimisation Changes absoults long addressing lo PC rslalive addressing wherever possibl€ and l€gal. OS - Shorl Branch Ootimisalion Backwards relalive branches that could uss th€ short form ev€n though you hav€ not sp€cilied it ale used automatically if you snable this option. O\l- Absold€ Wod Ooilmlsatlon ll you use lhe absolut€ long addrcssing mode and the address wod the ass€mbl€r willuse the shoner mode willf anto a il lhis option is enabled. OZ - Zem Disolec€menl Ootimlsation lfyou us€ the addrcss register lndirect with displacement addiessjng mode and ths displacem€nt is zero,lh6 ass€mbler will use the addr€ss r€gister indir€ct mode ii thls opllon is €nabled. OAO OSO and OMO Ouick lnsrrucrion Oorimisation Tiis oplion caus€salladd, sub and as lho quick rohs to be coded move instructions that coLtld be coded as such. Only move.l is changed lo moveq All ol lhe above optimisalions can only bg perlormed on backwad PUSHO aod POPO lfyou wantlochangethe setting olan oplion bi€tly andthen rerum ilto ils previous value you can us€ PT SHO to save th€ cuir€nt state ot att the options snd later us€ POPO lo relum lhem to th€ir pr€vious 9a1e. Example ByteSlream opt dc.b ae- ; ; sav€ slale ol options lurn off auto even 3 456 512,80 p0po i rsslor€ 60 slale Errors and Warnings Erols and wamings are generated by th€ assembl€r wh€n€v€r il detecls anything wrong. SNASM provides a means lorlhe programmer lo aaise enors if an €rorcondiiion occuls whicn lhe assembler can't detaci. i.e.. a data table becoming too lae€. INFOqM INFORM can 9sn6rale snors of rour different sevenles and display messages wilh emb€dded parameters to descrjbs the eiror in detail, Syntat lNFOBli sevedly,stiingl,op€randsl Sevedty is a number lrom 0lo 3 wh€r€ 0 causes lhe messageto be pinled but no aciion taken, 1 gives awaming,2 giv€s an snorand 3 causes a falal srror where assembly slops immediately. lltha sldng conlains 7d, %h and./.s ih€s€ arc subdnqed with the decimat, hex or sting valu€s ol lhe opsrands in ths order that they occur. Erample Slrucslan SlrucEnd Struclen dc.w 0 equ if inloim inlorm SlrucEnd-Strucsiad Struclen>1oz4 o,'Start=%hEnd=%h',Slrucstart,Struclen 2,'Sfucture loo long' endil EAIL Fail is supporlsd ,or compatibilily and is the equivalenl ol intorm 3,'Assemblyfailed' 61 i I I I I I I I I Listings It a lislino lile name is given on lhe command line or il one is set by delauli in the SNASM6SK environmenl vaiable lhen lhe assembler $ill generate a listing ollhe program dunng $e lirst pass. ll.lk!d.!O!.ir As lislings as usually used to check how macrcs are expaMed it is very rare thal you willwahl the whole ot yourprcgram lisied. Usring is always on al thestan ollhe program (ila lisling fle isspecilisd). Ths NOLIST directive is used to lurn oii lisling gen€Elion whilsl lh€ LlsT dir€clive turns it backon again. Altematively you can uss the LIST directive wilh eilher plus (+)or minus (-) as a pararn€l€r to tu rn listing mode on and off. The assembler has an int€mal lisling slale which slans d 0 and lisling oulpr,.l is only gen€Ialed when this vaiable is positive. LIST wilhout a paraneler sels lhis variable to 0, NOLISTSetS il to -1, L|STplus incEmenls it and LIST minus decr€m€nls it. Example Not listed NOLIST islate=-l, no listing LIST i Listed LIST Not listed LIST I Nol listed I I I I I I Listsd LISI LIST + + slaie=o, lisiing ;slale=-1, no listing isiaie='z, no lisling istate=.1, no listing tsiale=o, lisli'rg Normally lhe assemblerlurns ofl lisling generaiion whenever il is expanding a macro. l, you need lo see how your macros ars expanding use the /M switch on ihe command lin€. Similarly code which is being ignorcd dle io condilional assgrnbly does not go inio the listing unless lh€ /c swiich is used. 62 tl I I I I I lr I I I I I I I I Sections and Groups lntroductlon to Sections and Groups Seciions are used when you want parls ol your program thal are in dillerent placss ln lhs source @de lo be placed n€{ to €ach other in memory. ll you wanl all o, your varjables atthe botlom ol memory lollowed by stfing6 lollow€d by ereculabl€ code then you should be using sections. Seclions ar€ also used when you want lo produce oulput in a machine specilic r€localable iomat. ln addition lo seclions SNASM supporls lhe concopt otgroups which are a way of making sure c€rlain secllons arc togelh€r in memory and ol assigning thsm vadous attibut€s. Syntax Declaring a gioup :. GroupName GaOUP lcroup Anributesl ll a group has mulliple aflnbules th€y ar6 all listed aiterlhe group directiv€ separaied by commas. Atdhde oFx3 OBJ stzE BSS WORD FILE OVER Funciion Specily address in memory al whlch to place group Allows a whole group lo use assembly with otlsei Speci,ies maximum si:e lor group BSS groups do not conlain any initialised daia Tells lhe assembler/linker thal a group can be absolule word Used lo wile contenis o'agroup ro a binary Iie Causes iwo or more goups lo $an al the sare aod ess in memory Opening a seciion :- SECTION SectionNamel,GroupNamel ll ihe group name is omitt€dthen ihe seclion willb€ placed in a delauft unnamsd group unless lhe seclion has been previously assigned lo a grorp. in whic'r cas6 lhalgroup will be used, lt is possible to wriie a prog.am lhal doesni use groups at all bd aSS iyoe seciions witt nolbe avaitabte. The SECIION direclivs can be optionally lollowed by a size specilying its alignment. The defaull alignmenl is word which means that att parts ot ihe seciion will slarl on a word bounda"y. ll a seclor s byie atigned ihe EVEN direciive cannor be used wilhin ii. The CNOP directvo canioi be used to align lhe PC to a largervalu€ lhan ihe alignmenl ol lh€ curent seciion_ 63 t I I I I I I t I t I t I t I Example u3ing sections and groups AiB So lhal vafables can be absolute word addressable ihey must be ai lhe stafi olthe program. Ths vafiable are lo be lollowed by lwo sections conlaining slings and one conlaining executable code, Uninitialised data is to rcside in a seclion of its own above allihe oihers€ctionsCede LowGroup Codecrcup Bsscroup Slringcroup group group group group bss ors $1000 ;When using seclions only one ORG is allowed and it musl be belore ; s€clion de,inilions vaQ Scratch Temp section dc.w dc.w section ds.w ds.l seciion.b CRLF Prompl FaceList dc.b dc.b seclion ds.b s€clion.b Hello dc.b s€ciion Iea Dala,Lowcroup 2 89 Tables,Bsscrol]p 256 100 Slring 1 Slingc roup 13,10,0 , >',0 Tables,Bsscroup 64 Sting2,Slingcroup 'welcome lo SNASM',o Code,Codecroup lvrslack,aT nop Goups are paced in mernory in lhe order in which lhey arc declared wiih sections placed within grcsps in the order in which lhey ar€ opened. PUSHS and POPS ll you need 10 lemporaily opsn a newseclion (in a macro lor inslancs), you can use PUSHS lo save ihe current seclion, open a new secr on, and rhel use POPS to reved lo the old sedbn Example i macro lo place lhe cunenl Pc into a separale section local Temp Temp pushs seclion clc.l pops Marksection Teinp eadm SECkIIIIEESEI Th€ SECT lunction rslums the bsss ol th€ s€ction In which its F arameter is dgfined, This cennol be evaluat€d until lhe end ol lh€ second pass it you arcnl linking, and il you are linking il eannot be €valual€d unlil link iam€. The OFFSETrunction returnslhs ofls€t olasymbolin its section, which can always bs €valual€d on the iirst pass. lt you are linking OFFSET relums the otlssl of the symbol lrom the bas€ ol th€ curent module's contdbution to lhe sedion, so s€ct(x)+offsel(x) will not equal x. This has be6n done to allow OFFSET lo b€ evaluat€d at assemble time, which is very ussrullorthings like :- oflse()&1 dc.b '1 n curonl PC is odd add a minus one ; ll ; 6ndil Note the use ol offsel(') lo gel oltset into s€ction oi clrent PC. ll you want the rue oflsel inlo s€ction whilsl linking uso x-seciion(x). Settind Group OAG'S h is possible lo sei rhe ORG address ol a group totally independani,y ot the acldresses ol lhe olh€r Eroups. Exampl€ Code Data B9s Debug gr0up group group gioup Bss ors($80000) ;Debug code 512K The gmups without lhe org affibut€will be daced sequentatty al lhe acdrsss given in lh6 oig dksctive as usual, Ov.rlavlno droubr ll ls pcsibl€ lo have severalgrouFrs staning atlhe same address using the OVER attdbule. All of lhe groups will hav€ lhe same start address and enough rcom willb€ lelt lorthe largest group. 65 Erampls Overlayl OJetlay2 O!erlay3 group group group ove(Ovedayl) ov6(Oveiay2) Wrflno GrouE io Flleg It is possible lo wfle grcups lo seperat€ purc binary liles whilst l€avjng the other groups to be wdtt€n to ih€ nomal oulpul- This facility is us€d lor overlay riles and loadeble data liles. Examplo Cod€ Dala Ovgrlayl Ovedayl b Owday2 group group roup group roup g g org ($80000),iil€('Oveday 1 .bin') ;This also goes inlo ovedayl.bin orgl$80000),Jils('Ov€ilay2.bin') Nol€ that all groups declared aller a group thal has a lile writlen to lhis lil€. atl bule are also The FILE ett bde can b€ used in conjunction wilh the OVER attribute lo pul ov€rleys into s€p€rata liles with the start addresses of the overlays att being Mrchlne Sbeclflc nelocetable Formars SI Ifyou are using lhe liflkerto produce.TOS, .PRG or.TTP liles you should dgclare the following groups. Text Dala Bss group group group bss Th€ order is not imponad aslhe llnker declarcs ihem implicilly. llyou do not need to have multipls ssc.tions wilhin each group you can omit lhe group dedaE ons and us€ lhe delaull group names lo identily the Example seclion Text ssciion dc-w 99 move.w *234.d0 Dala ll yo do lhis you looselhe abilityto have mulliplg sections in each group and the link€r has lo perlorm lhe ch€cls Jorinitialis€d data in BSS grcups. 66 A.ulcr Ityou are using the linker to p,oduce an Amiga executable frle you should declar€ the lollowing groups. Code Data Bsa Code_i Daia_, B,qg_, Cod€_c Data_c Bss c grcup group group group 9roup 9roup group group group bss bss The order is not important eslhe linkerdeclares ihem implicitly. lJ you do not nssd to hav€ multipl€ sections within each group you can omit the group dedaralions and us€ the detault group names 1o identi, ihe Example Spriteo seclion trap seclion dc.w Code #0 Dala-c 34 l, yo do this you loos€ the abilitylo have mulliple seciions in eacn group and the linker has to p€dorm th€ checks lorinitialised data in BSS groups. 67 Linking SNLINK is a lully i€alured link€rwhich allows you lo writo your pogram in s€v€rals€parate modules and then linklh€ss modulss together to produce the final program. Command lln. svntrr SNLINK /swilches source(s),outpulrile,symbollile,maplile,libra Switches /d /e symb=value os Debug mod€ - do not run Equate syrhbol Un onsrnal symbols lo map lile /o Numb€r /o ?Number Asklarcel lor memory lor org address /r Fomat /x Number Produce pure binary oulpul Produce machine speofic relocatable lile Set exgcute address Set org addr€ss Relocatable lormats arecurenlly STfor.TOS liles orAM forAmiga hunk SourcaFlla Oulpulrll. Symbolfll. M.pFlle Llbrarles On€ or more source files (produced by lhe assembler) separal€d by eitherspeces or plus signs {+) or th6 name ol a link€r command lile oreceded by an at sign (@) Fil€ b recsive objeci code o"'lpul. llthis is omtied ro objecl code willbe generated, lJ you want lhe object code lo b€ sent to a targel compuier use T?: as the obj€cllil€ where ? is rhe SCS|device numb€r ol lne taroel. Frle io r€ceive symbol labls inf;maiion tor debugge'. File 1o receive map inlormation Ubrary lileslo search Linker command llles Linker command files conla'n instruclions lhat tslt ih€ linkerwhich objecr lil€s lo rcad, where lo orglh€m and inlohalion about groups, Thes€ inslructions have a v€ry similarfomallo lhe instruclions in the assembter tor 68 Th€ lollowing instructions can be used:j Comment include inclib org org r€Es group seclion Filename Filename ; rcad objoct tite : search tibrary tite AddI OBG address ol prcgram ?sizel,lypel ;asr ia.get lor m€mory pc=addr : sel €xecdion address : lanibules] i define qroup namel,groupl ;delin€s€ction i nove workspace on largel Groups are plsc€d in memory in rhe oder in which they are dectar€d, it a group is d€clar€d in lhe prcgram which is not declared in the command tite il is placed on lhe €nd ofth€ defned groups. S€clions within each group are placed in memory in lhe order in which they are specilied, a seciion is Used in the prooram ilhich is noi doctared in lh; clmmand lil€ it is placed on lhs €nd ofthe defined s€ctions in the appropriate group. Paris of a seclion flom difterent source lites are concat€naied in lhe ord€r in which lh€ source liles are spocilied. When groups are dsdared in yoursource @de lhere is no need to specily any atdbules olh€rlhan WORD and BSS; att other aflributes are ign6red wh6n linking. lf these affbutes are sp€ilied in the source they muat also b€ specitied rn lhe linker command lile aid vic€ verca. Example llnker command file ;Command lile lor Amiga Widget sorler include lnput.obi include Softer.obj include Olnpui.obj org regs Lowcroup group Codecroup qroup Bsscroup group section section seclion section seclion seclion 1024 pc=Progsiarl Word Bss Dalal,Lowcrcup Dala2,Lowcroup Codel,Codocroup Code2.Codecroup Tables.Bsscroup BuffeB,BssGroup The groups and soctions witt be in ihe tottowino order :Start ol erecutablo at 1024 Lowcroup Dalal Data2 69 : Codecroup Codel Code2 Bsscroup Tablss Burrels The sam€ group anibutes are allowed as lorlhe GROUP dkeclive in ihe XDEF. XFEF and PUBLIC When you arc linking s€v€ral modu es togethor you willwant io relerto symbols d€l5ned in on€ module in difierent module. To do this you must declare symbols as €xl€mal in the rnodule in which th€y are dgined using XDEF, andlhen in th€ module in wlrich th€y ar€ us6d you musi use XREF to lellthe assemblerlhal th€ symbolis in a dilferenl module. Any expression ihal conlains an XREFU symbol will nol be tully evalualed by lhe ass€mbl€r and will, instead, b€ resolved by the linker You can lelllhe ass€mblsrthat a symbolcan be aocessed using absorLtg word addressing by specilying lhe wod size on rhe XBEF directive. Exsmple ol XBEF and XDEF Source modul€ 1 ANOlher Sourcd module 2 LargeTable xrcl.w xdsl section lea molu xdel xrcl ssctjon ds.w section isr isr LargeTable ABoutine,ANolher Codel,Tsxl LargeTabl€,ao d0,d0 LaEeTabl€ ARoutine,ANoher Tables,Bsscroup 100 Cod€l,Ten ARoutine ANOlher l, you wanl to d€clare a large numberolsymbols as €xiernalyou can use the PUBLIC direclive to l€llth6 assgmblerthat alt tunher symbots shoutd aulomatlcally bo XDEF?. Example Speed Dir€clion public dc.w dc.w pubtic 50 100 70 ;No need to XDEFthis ; orlhis Libraries A objeci module libraiy is a lil€ conteining sev€ral objecl modul€s. Thess librai€s can b€ searched by lh€ link€r iJ it cannol find a symbol in the object files. ll the linkerlinds thet lh€ enemal symbolii n€eds is derined in a library module lhen lhe modul€ will be exlracled and linked wiln the objeci modules. SNLIB js a ulilily program lor creallng and mainlaining obj6cl module libraries. CaEEelll-lils-gller SNLIB /swiich librarylile modules switchos /a /d /u fi / ldd modulos to library Delet€ modules lrcm library Update modules in library Extracl modLrles lrom library List modul€s in library 71 lnst llhd lh. soltware The SCSI Link SCS|Unk is install€d eilher rrom rhe command lin6 ortrcm a batch rite (usually auloexec.bat), and it must bs installed berore any olthe assembtsrs or dsbuggers can be used. SYNTAX: SCSlUnk CardAddrl,D?l[,]?] The address is whatever acldress you sel using linls 0-7 on the PC cad, andlh€ numberafierthe D shoutd be lte DMA channelyou ar€ using. !t you havs lell lhe links as supplied jusl insen:- SCSlLink 390,D1 l, no oMA channel is sp€cilied hardware DMA will ml be used and unless you have a last cornpuigr dala llansmission speed will b3 r€ducsd, Th€ I param€l€r is ussd to give the cad a diflerent SCSI devics numb€r withoui opening lhe compulerand changing the links; this will nol usually be necessary. lnt.rfecE 16 scstLtt{K The SCSlUnk software is acc€ssed using ini 7dh. AH is us€d to s€lecl the required funclion as shown below. AH=o Resel SCSI Bus R€s€ls alldevic€s on lh€ SCSI bus lnO!' Eno,s AH-1 Connect to taroet Arbilral€s lor us€ o, bus and selecls larget. AL=Target tD tn Errols od CF set i, €ror, Al=lniliator€rror, AH=Targel enor 72 AH=2 Send command Sends lhe commend block to th€ target and In Oui Enors ES:BX. poinlerto parameter pefoms and rclated l/O. block shown below CF ssl il enor, Al=lnitiaior eror, AH=Targ€t €nor Pa,ameter block: (Allwilh 8086 byle ordering) Size o, command Dword Ot s€t o, command UIonC Segmenl ol command Word Size ot Dword Ollset ol Wod S€gm€nl ol Word block block block butler butter bufisr Th€ conlenis of lhe command block which ar€ desc b€d late r have most signilicanl byles and words iirctl AH=3 Set Tim.Out Change one ot SCSlUnk's intemaliimeouls lo allow communicalion with very slow tarcBts. AL=TimeOul Numb€r BX=New value (55ms licks) Out Errors ln Number Function 0 1 2 3 waillorbus Tim€ to wait lor new phase Max lime 10 sendreceive bloct Tim6 to wail lor reselect Timelo Delault 18 5 18 180 AH=4 G€t Eror Stdng Gel text 10 pdnl when an eroris reponed, AL=Errcr number Es:Bx=pointerio zero lerminaied sling ln Oul Enors AH=s Get A.Hr6ss Get inlormation aboul current hardwarc conriguraiion. lnOut AL=Dma Channel, AH=lnitialor lD, BX=Card Addr ErroE AH=6 P'n Data Save dala lor lai€r r€irieval. (Stored ln PSP ol SCStLink) CX-By.l€ counl (1,256), ES:BX=Data lo sav€ ln Errors Out CF set ll €rror, AL:1 Too muci data 73 AH=7-Ger-&E Rslri€ve data stor€d using Funclion 6 Cx=8yls counl (1 -256), ES:BX=Butler lo ,ill Oid E.rors CF sel il sror, AL=l Too much dala ln AH=a Terminat6 *sion lJ a program has mad€ any use ol thes€ link commands il should issue a Teminate Session command as il sxils ev€n i, il is exiting due lo a SCSI enor. This command exisls so lhal any soltware ihai iniercepls inl 7Dh knows wh€n olher programs hav€ iinished with lh6 link. AtE9-EaL-Bqt/ert Whenev€ra program pedoms a GetR€gscommand and the exception ihai has occur€d is nol ons lhal it spscilicelly handles il should perlom a Poll Request calllo see il6ny driverthai has chained onlo int 7Dh handles il. This service exists solhatlhlngs sLrch as resid€nl diskseN€6 can continue to run €v€n whilsl dsbugg€B and prorilgrs arc running, The resid€nl driver assu.nes lhal a connect has b€€n perlormed andkieslo leave the largei AL-Targel lD ln AL:-l i, a resident diver handled event AL=-2 il a residenl ddverexpeiencad a SCSIerrcr Oul Errors SCSILINK CommEnd orotocol The lollowinO is a lisl olthe commands cufi€nlly delined. Nol allol ihese commands arc c{rrenlly suppoded - the Sendlmpl command lets you check whal commands the soflwarg at the olhsr end suppons, some o, lhese commands will only b€ handled by downloadsrs which leav6 lh€ machines OS r€sidsnl, and lhese downloaders usually support some €xlra commands lo suppot 1116 handling and muhi-lasking. l, th€ top bit ol a command byle is set lhe larget will disco.nect alter execuling the command and repo ng lhe slalus. This means lhe soflware can suppoi up 1o128 commands. Commands 0 1 2 3 4 5 6 7 8 9 EUer Noop Sendlmpl S€ndlD SendAddr RecvAddr 2 2 2 2 10 FindRam 10 FlessN€Ram 10 Fr€oRam 10 ReBool 2 Makesale 2 10 Return 2 32 SsndMem l0 oata ln ln ln ; ln ; Adi!tr Do nothing except reporl stalus Send binary array ol valid commands S€nd rnachins/proc€ssor lD Send slart and lengih ol link workspace Change address of link workspace Find how much memory is lroe Ask OS lor some memory Hand memory back to OS Rebool iarget Prepare lor Be-send Relurn to OS Send a block ol memory 74 33 34 35 40 41 48 68 RecvMem VeritMem Checksum SendRegs RecvRegs GoPC G€loSEr 1 1 1 2 2 2 2 0 Out 0 olrt 0ln Roceive a block o, memory Vedfy a block ol rnemory Generat€ checkum ol a block o, memory ln Send regisler block Receivs regjster block lnvoke cod€ at PC wilhoul rslum addr Get result o, lasl OS funclion orl Format ot 2 bvte commends Bde Function 0 1 Command byte Modilier (sel to zero al unused) Foriral ol 10 bvt. command3 ESe Funclion 0 1 2-5 6-9 Modifier (set to zero ir unused) Lenglh field Addr€ss li€ld commands ln deiall N9!! Command 0 Modilier 0 Functlon Does nolhing, However lhis can be used lo discon nect lhe tarcet by seting lhe lop bii as usual. Se!.cfD.pI Command I Modilier 0 Oata-lra[slered Ofisel Binary aray ol commands 0 terlll 16 Functlon Targel sends 15 byle binary array indicaling which ol lhe 128 commands it supporls. The data is bigondian so lh6 firsl byt€ is lor commands 127-120. 75 _ S.ndlD Command 2 Modirier Data - 0 Transfered Processor lD Machine id Ojjset 0 1? Lenoth 12 12 Functlon Taeel sends slfing giving proc€ssor and madin€ lD. S!-o!A!-Cr Command 3 Modifi€r 0 Transrered - Data - Funclion Start of link memory Lenglh ol link memory OflSel telllh 4 0 4 4 Th€ link soltwere repods lhe address and lengrh of the block ol memory il is using. lllhe link sofiwars doesnl use any ram rhe lengrh will b€ zerc. RecvAddr Command 4 Modifier Length - Address - Data New New address lor link memory Transfered addross OlGgf 0 Functlon * Causos link sotlwarc lo relocate ilselr. 76 L.nr'ih 4 E lrlB .E Command 5 Modilier Length Address Data Ram 0 Type ol BAM to reserve Translered fr6e fiaqet sp€cific) Ollsrt 0 Lenoth 4 Funcllon Asks th€ targ€ts OS th€ size ot ihe largest block ol contiguous memory lhal il can allocatg. EeserveBam Command 6 Modifier knglh Address - Data o Amount ol ram to reservs Type ol BAM to r€s€lve OaBet specifc) Transfered Memory handle Address ot ram Oll$l 0 4 te!g$ 4 4 Functlon Target machine asks OS for ram and passes back a handls which will be requir€d to lai€rlrce the memory andlhs base address ofih6 btock o, memory. Frr.Fam . Command 7 Moditi€r Lengih Address 0 Memory handle Functlon Hand m€mory back to OS BeBoot command 8 Modilier 0 Fu.cilon Targ€t machine rebools and gogs lhrough normal bool piocess 77 UBkeSale Command 9 Modili€r 0 Functton Target machines puts the hardware into lh6 sarest conliguralion possible_ This usually involves disabling all DMA and int€rrupis, going out of potted mode and lrssing any r€servecl ram. Birlrr! Command l0 Modirier 0 Funcllon Target retums to OS S!!!U!n Commancl 32 Modifisr Lenglh Addross 0 Size of block in bytss Address oJ block in taEet Ollset Dat. Tr.nsf.red 0 Stream of bytes Taeetsencb a block ol ram Lerclb lengih given in command to initiator Es.c.IlileE Command 33 Modilier Length Address 0 Size of block in bytes Address oi block in laEet Data Transfered Stream ol bytes Ollsel 0 Functlon TaEel receives a block o, ram ,rom initiator 7A Leldn length given in command V.rlfvil.m Command 34 Modifi€r L€ngth Address Daia 0 Size ol block in byt€s Address ol block in targel Transterod of bytes Stream Oflsel 0 Length length given in command Functlon Targel receives a block o{ ram lrom initiator bul just checks il againsl current ravn conlents. CheckSrm Command 35 Modili€r Length Address 0 Siz€ ol block Addr€ss ol block in taeet Data Transfered Additive checksum of bytes OIlSgl tellfb 0 4 Funcllon Talget adds logether allthe bytes in the delined lange and retums the long word resuh SendBeds Command 40 ModiJi€r 0 Dala Translerad Register block Ollsel 082 Lenglh Functlon The targel sends ils copy ol ths 68000 registeE to the iniliator. Regisler block lomat is :- r€gdo regdl r€gd2 r€gd3 regd4 regds regd6 ds.l ds.l ds.l ds.l ds.l ds.l ds.l I 1 1 1 1 I 1 79 ds.l ds.l ds.l ds.l ds.l ds.l ds.l ds.l ds.l ds.l rcgd7 rsga0 regal rega2 rega3 tega4 regaS rega6 regssp regusp regpc ds-l regsr ds.b ds.b ds.l reginsl 1 1 Exc€ption typs (-1 =Sladup, 1=Runnins) Exceplion lunclion code Address thai caused eror lnstruclion lhal caus€d €rror Br.!.IBrcr Command Modifer 41 0 D2te Transfered Regisl6r block Ollsei oa2 Ie-EdI Funcllon lnilialorsends nsw r€gjsler block to targel, C-QEC Command 48 Modirier 0 Funcllon Targgt reslores all r€gisier from regisier block and iumps to PC GelOSErr Command 68 Modilier 0 Data TFnsfere.! OS 6ffor code Oitrst 04 Lelslh Fu.cllon Betums the enor code lorthe lasl OS iunclion lhe link softwarc 80 Using SnMake SnMaks was designed lo allow Snasm and associalsd Cross Producls soltware tools 10 be used from wilhin lhe Bdel editorwith lhe maximum ol SnMak€ works on th€ lime honourcd mak€ ulility pfinciplo ot rcading a lile suppli€d by lhe user in which are deiined the rclalionships belween lhe targs(s) ihs user wishes to cr€at€ and lhe source liles from which thal iargei is to be created. The target will b6 said 1o b6 d€pendant upon its so!rce tiles which ers g€n€dcally known as dependencies. The iile in which thes€ r€lationships are detin€d is known as lhs 'mak€Jile', allhough in discussing SnMake w€ shallalso refer lo them as'projecl liles as willbecome clearer lat€r Once SnMake has r€ad this nle itdeterminps which largels hav€ dependanls nhich have been updaled since th€ largel lile was created, and thus which largels musl be recreaied from their dependanls. SnMake discoveG how lo recreale lhe targets from rules specifi€d in lhe makellls as discussed b€low. SnMake has a number ol lealures thal allow ii to work in clos€ conjunclion with Snasm and olher Crcss Pioducts development tools bui which m€an il diflers lrom lhe more normal make ulillly synlax !n a Snl\lake and Brlel Cross Products have pmduc€d a numb€r ol macros rorthe Bdel edilorto enhanc€ lh€ envilonm€nt lor th€ Snasm user. Some oi lhose macros inlerlace ihe editor wilh SnMake and allow the user to invoke lhe utiliiy from within lh6 €dilor. Nole lhal lhe new macros do away wiih lhe dialog-box jnledace lo Snasm and any user wishing to use Snasm trom wilhin B €J using the slandard macros will hav€ lo us6 SnMak€ as described below. This is nol, howeve( acomplex matler. The followjng descnplion assumes thatthe BieI macros are being used as supplied, wilhout any reallocalion ol key-binclings. The Snasm menu is invokedwithin Briel wilh the AllFg keys. The m€nu ilem 'S€lect Proj€ct File' will bring up a N/indow displaying all lhe liles in the cunent direclory which have a '-pri' exlension. The tirsi line otthese liles is displayed ro helplhe user rcmembgr whal luncuon lhey perlorm. Ths islhe mandalory extension for liles to be used as SnMake makeiiles and will be refened lo as project,iles in lh6 rcmainderollhis section. Should 8de, be unabl€ lo find any prciecl tiles in the currenl direciory it will display a msssage on the status line lo that eflect. SnMake can be invoked lrom the command lin€ wilh the /p switch set (see below tordelails ol switches and command line usage) in which case it will altempt lo append a'.pi' sxl€nsionlo the mak€lile name it isgiven. ln lhis mode it is said to be in 'proiecl mod€'. When invokod rrom Biel SnMake is always;n pojecl mode. 81 Creallng prolecl llle3 Projecl liles musl cornain a lab€lbeginning in the tirsi cotumn otthe form: ISnMake] SnMake willignore any t6xt berore lhis labeland ii il iindslh6 €nd o, fil€ belore encounledng itwjllissue an 6rrcr and erit- Wrlhin Bfiellhis will resu[ in an errcr window appearing . Th€ s€arch lorthis lab€lis not case sensitive. Once il has discovered this label SnMaks will regard eveMhing tottowing as valid inpui untilil €ncounlers enolher'f in th. firdcotumn;rlhdend of tii'e. Two olhervalid lab€ls are cunenty suDpoded: lDebugl end [Evar]. They onty hava signlflcanc€ il the proj€ct lile is sereded wlhin Bnet. The lext nonblank llne lollowing lhe lDebug] label is d€€m€d to hold the Debugger command line the userwishgs to have issued upon invoking the'Debug, m€nu selection trcm lhe Snasm n6nu ( s€e 'Usang SNASM wilhin Brief ror details on using th€ new Snasm macros wilhin Bi€l) and simitadyrorthe line following lh€ lEval] label which invokes th€ exprsssion evatLiator ot the ussrs choics. ln lhe case ol lhe IEvaI comnand rine 6 sp€cial loken SS$' can be placed in the sldng and any ma*ed input witr be ptacsd in ihe siing al lhal poinl. Thus a simpl€ project lile might look as lollows: ----b€ginning oi iile here------ projed lile lo assemble prog.68klo17: lsnmakel 17a, prog.68k snasm6Sk $l prcg.68k,t7:,prog.sym [D€bus] snbug6Sk prog.syn IEvall snbug6Sk to$$$ prcg.sym DefinlnO targeis. SnMake r€gards anything srarting ln colurnn 0 and rerminated wilh a.;, as a targsl d€daration. Thus: targsll; tgtl; eihislgl; are allvalid laEsl namos. White space ln tarcel dedaralions ls strlppod out. a2 Deflnlng dependencles. Anylhing iollowing the ';' on the same line as a taEel decla€llon is regarded as a dependencl declaralion. Multiple dgpendenciss are declared separaled by whiie spaca and lin€ cutinualion (see b€low) can bs used. The lollowing line: largell.cp€; src1.68k src2.68k declares that targetl .cp€ is d€p€ndani on src1 .60k and src2.68k and SnMako will a empl to invok€ any rules defrnsd ,or larg€t1 .cpe il the dalenime slamps ot €ilh€r srcl .68k or src2.68k snow them lo have been updaled since targetl .cp€ was lasl cr€at€d, speclal targets. SnMake suppons a numberol spsciallarg€ls, .lNlT; any commands lollowjng lhis target dsclaration will always be when thls prcject lile is executecl. ca ied oul lirsl .DONE; any commands tollor dng thls target declaration will always be carried out lasl when lhis prcloct lil€ is sxecut€d. -lNlTand.DONE clo not have to be declared aslh€ lirst and last targels within lhe makeiile, Snmake u/ill recognise th€m and rc-adjusi its lisi of largels accodingly. .lNlT and .DONE will always be execlJl€d and should nol be d€clar€d with depsndants. l?:; the larcels on lhe SCSI bus are recognised and wi,l always cause th€ rul€s associal€d with il to be invoked. These largels should be declared wilh d€p€nd€ncies. l7:: src1.68k snasm6Sk $l srcl.68k,17: declares that src1.68k should be asssmbled down to SCSI raeel t7: . This wiltoccur every time th€ projocl rils is exscuted. See secrion Speclal Macros'lor th€ significance of'$l'in ihe command, .RESOUFCE; lhjs larget dedaralion should be lollowed by a lisl ol programs lhat are able to utilise resource filss, ll musl be the iirst item declared int lhe prol:ect ,il€ alt€r lhe lsnMakel label. 83 l, a command line lor one o,lhese prcghms exc€€ds 128 characl€rs in lenglh, SnMake will splil it down into a temporary lile wiih each command line aigum€nt plac€d on a now line and will callthe command with that iile prsceded by an '@' charact€r. i,e. lSnMak€l BESOUCE; lgt; d€p1 somecmd depl .......... very long command line > 128chars det€cling an overlong command lin€ SnMaks will create a temporary r€source fi16 and call som€cmd as lollows: som€cmd @lmpl .$$$ Deflnlng orpllcli ru1e3. Anything lollowing the end ol e laEel declaElion line is considered a rul€ dedalation. To be valld;a ru16 declaBlion must be ind€nt€d by at leasl one space or lab. Blank lines lollowing a largel d€claralion arc ignored. More than one command may tollow a gven largel, each stariing on a new lirc and indenled as described above- largell.obj; depl d€p2 snasm6Sk I dopl dep2,targsll .obi delines a rule lelling snMak€ lhal illargell.objis yo!ngerlhan eitherdepl or dop2 it should issus lhe comrhand 'snash68k,1 d€pl dsp2,largell.obj' Deflnlng Impllclt rul$. ll SnMake cannol rind an explicil rute with which lo create a targ€t il will atlempt lo do so by invoking any implicit rules delined in the prcjecl lile. lmplicil rul€ delnnions musl begin in lhe flsl column and begin wilh a'.' character SnMak€, on s€arching the list of implicii rules il has delined, looks lor a rul€ that matches ihe exlension of lhe larget il is lrying 1o mak6. This is the firsl portion of the implicil rule declaralion. Thuslo delin€ an implicii rule thal SnMak€ will use lo d6al wilh any targets wilh a '.obj' €xtension rhe lollowing is the required li6l pan or lhe dedararion: .obj having found liis SnMake will proce€d to atlsmpt lo fiatch lhe second pan ol the declaralion; ihis is delimhed irom lhe ftrst part by a ',' characler thus: .obj,.68k this inloms SnMake thal any largets wilh a '.obj' extension are to be created lrcm a depsndsncy oflh€ sam€ name but wilh a'.68k exlension. Th6 84 second part olthe declaralion fiusl bogin wilh a'.'characl€r, unlsss a path nams is speciied as below: .obi,e1€mp\.68k This tells SnMak€ that any ta€els rvilh a '.obj' €xlension are lo be crealed lrom a dep€nd€ncy oflhe same name bd wilh a'.68k extension in directory e:lemP. Dellnlng .ul€s tor lmpllcll iarg6t3. The rule iollowing an lmpllcil target dorinition must be indenlsd by al least one space or tab. Two macrcs exist lo aid sp€cjlying implicil rul€s. These are $+ and $-. $+ signilieslh€ largel and $- its depndency. Thuslhe following impliol rule .obj,.68k snasm6Sk $+,$- wh€n invoked upon target progl.obj will resull in ihe following command: snasn$8k progl .68k,prog 1.ob, Points io note on using implicd rul€s. a. Explicil ruleswillalways be used in prelerence lo implicit rules i, explicil rules have been sel lor a givefl largel. b. ll mor€ than on€ set ol implicil rules are delinecl lorthe same target group,lhal implicil rule mosl rec€ntly d€lined (in lerms of position wirhin ihe project lile)willbe invoked upon any suitabletaqels thus: .obj,.68k any suitableiargels in lhis areawillb€ cr€at€d irom files ofthe same name with a €xt€nsion, "68k .obj,el€mp\.68k iollowing rhis new implicil rule delinition any suitabl€ targ€ts in lhis arsawillbe crealed from liles ollhe same name wilh a '.68k' exiension in dkectory e:lemp. Macios. Macros can be passed into SnMake lrom the command line using the /e rilch as d€scrib€d below in the Command Line Options section. Within a make/proiecllile the can b€ delined using the lollowing synlax: sr maCiOl=SOm€nam€ 85 - macro dejinitions must begin inlhe fltsl column ollhe line. White space is sldpp€d oul ol macro derinitions. Wh€n delin€d macros ar€ rergrencgd they must be idenlified using the ,ollowing melhod : $(macroname) _ _ thus giv6n lh6 abov6 macro d€linition $(macrol ) will €rpand to lomenam€', '$'signs can b6 prot€cled lrom att€mpl6d macro expansion by the addition ol the macrc syntax brcak€r'$. Thus $$20000 is passed though SnMake as $20000. The lollowing macro funclions allow th€ us€rto manipulat€ definod macrcs. $e(macroflame) €xpands lo lhe extension oi macrcname, -- maCrcnAme=t6st.Obj $e(macroname) sxpands ro'.obj' $n(macroname) expands lo onlylhe rilenams oflh€ macro dslinilion - macroname=6lesht€st.obj $€(macronam€) expands 1o t€st.obl $p(macronam€) €xpands lo the palhnam€ ofthe macrc delinilion macroname=6lesl\lemp\lssl,obj lo el€st\t€mp\' $p(macroname) expands _ $d(macroname) expands tolhs d vs nam€ oflhe macro delinition macrcnam€=e16sl\lemp\len.obj $d(macroname) expands to'e:' '- $b(macroname) expands lo the lilename in th€ macro delinition macroname=€ lesl\lemp\prog 1 .obj $b(mecroneme) expands to'prog1' Line contlnuetlon. - To conlinu€ a line without introducing a n€w1in€ character the 1'character by a carriage return is used. Thus lollgdialejy loliowed lhistgl; - d€pl d€p2 dep3 d€p4 deps dep6 depT depS depg \ dep10 depl1 declares depl lo dgp11 as dep€ndencies io rhisrgr. Wlhoul maft SnMake would lruncale fte d€psndency lisr at depg. 86 lle conriuai'on Commsnts. A line on which lhe filst characl€r is a hash ma* will be regaded as a Speclal macro3. For use wilh Snasm and Snlink a spscial mac.o is provided by SnMake which allows lh€ s9tting o,lhe I and /d switches on lhe command lines of those programs. The/i switch lo Snasm and Snlink lorces them to create an outpuwindow to which they send lheiroulput whilsl running. This €nabl€s the user to watch th€ir progress ,rom wirhin B.iei. This oplion is always s€l by the Bdsl macros supplied by Cross Produc'ts. The /d swilch to Snasm and Snlink lorceslhem inlo debug mode, ii aJile is being assembled,'linked lo alarget machine il willnol be run ifthis switci is set;thus allowing th€ us€rlo €nt€r the debugger belore execution of thal csde starts. This option can be coniroll€d lrom lhe Bdel Snasm m€nu using lhe 'Set Debug Mode' menu iism, Conlrol of these switch€s is not possible lrom wilhin Bfel il the $l macro is nol presenl on the Snasm6Sk and Sniinkcommand lin€s in lhe project lile largl; depl dep2 snasmoSk S! / d€pl dsp2,taEl assuming lhat debug mode is set lo 'ON! using ihe 'Set Debug Nlod€' oplion Itom Bieflhis command willexpand io snasmoSk I /d I depl dep2 ,l,arg1 ln addilion lhs /d and ,,i swilchss sel up lwo macros, D€buqstr and lnlosr, which can b€ t€st€d with the lilde, command as descdb€d betow. Condlllonals. A conditional capability is prcvjd€d within SnMake by the lildef command. This allows the user lo delermine ila macro is derin€d and act upon that inlonnation. Thus in lhe lollowng case: l7:t prog1.68k snasmoSk $! prog1.68k,t7:,prog1.sym liJdsl(D€bugstr) snbug6Sk prcg1.sym il ihe special macro 'oebugsti is s€l i e. debug mode is on, the debugger willb€ invoked every lime SnMak€ is 87 'Noked with lh's proteci lite. The l€ndilclmmand is rcquired lo l€lminale lh6 lildel call. Il SnMake reaches lie end of th€ projscl lil€ with an unbalanced numb€r o, calls to liidel and lendif an erorwillr€sult. An lelse stalemenl is also supporled as shown below: !idsl(Debugstr) t7:; 17:; progl.68k snasm6Sk $l prc91 .68k,17:,prog 1.sym snbug6Sk progl.sym prog1.68k snasm6Sk prcg1.68k,r7: This example perlorns lhe same task as the previous one in asliglrtly more rou.d-aboul manner. lnvoklng Snlttako from th6 command llno Th6 syntax lor calling SnMake lrom lhe command line is aslollows: snmakeall arguments on the command line are oplional. lnvoking SnMake wnh no argum€nls callrses it lo look lora makeiile called 'makefile' and process thal. The opiional parameler specilies an alternalive makelile name. lf is speci,i€d all€rroi inrormalion will be oulpul to lhal lile. Switchss : SnMake ac.epis live swilches lrom the command line. /q /p Oui€t mod€. No echoing is done as SnMak€ prcceeds. Proj€ct mode. This lorces SnMake lo treal mak€liles as prcjecl liles i.e. as il invoked lrom within Bnef. ll no makerile name is specili€d SnMake will detaull lo maketile.pi. ln project mode all oulput from SnMake goes io a file call€d snmk.€r, any ermroulpul lromlhe programs invoked by Snlvlak€ will appear on-sceen unless an error Jile is specilied. /d ,,i /9 ,D Set debug mod6. S€ls the specjal macro $1. Only ol use i, invoking snasm or snlink lrom ihe makelile, S6t into mode, As above. Pass a macro delinilion lnto SnMake. Synlax /enam€=Frcd. This would sel up a macro name which would expandlo Fred. Build all. All rules carried oul regadless . 88 Exampl6s: The lollowing example is a projecl liles lhat will prcduce a Jile called lesll .cpe lrom ih€ sourcs liles e |srcl .68k e:src2.68k . Iert in this style is cofifient text a&ecl to aid the reader and is not pan ol he SnMake syntax. -------------Ptuier, ,ile io create tssrl.cpe fhis on Snnake in pmject nade stais rcading at tSnMakel this label srcl.obt; esrc1.68k 5nasm68k $l src2.obj I /z e:src1.68Lslc1.obi,src1.sym e:src2.68k snasm6Sk $l lesll.cps snlink will appeat in the projec! file $! / /z €:src2.60k,src2-obi,src2-sym srcl.obj src2.obj lesll .cpe src1 .obj src2.obi, lD€bugl Snbug68k src1.sym src2.sym SnMake stops rcacling hercDebugget is invoked using this sfing lEvall Snbug6Sk V$$$ srcl.sym -------End ol project src2.sym frle-------- 89 Exptessbn evaluatot is invoked with this shng Other Utilities Sncopy Tl'rs uiihy is a vadanr on ihe copy command in lhal ii wilt ontv @ov thosa source fles ihat have been more r€cenity wdfl€n ihan anyta;letiries il tinos ol lhe same name li haslhe tollowing command tine syntax: sncopy source1+source2+.... la€et direclory wh€re swilches arel /a - r€lr6sh atti rsg-sdtess oJ retative ages (retresh AI rhode). /q - do nol echo afier retresh (Outet hode). sncopy f le1.68k+tit€2.68k c:\source would caus€ sncopy lo ssarch in d,reclory c:\sourcs tor tites named Illel.68k and lile2.68k and compare therr tim€ and dale stamps (iiihe files exisl)lo those ollhsliles ot the sans name in the currerit drrectrcry. tflhe tit€s in th€ current directory are newerltlan those in c:\source orfites onhe same name do not exrst in c:\60urce a copy wifl ln the lottowing case, due lo the uss ot ihe /q and /a swiiches alt tites are copied and no echoing is done to lhs screen. sncopy /q/a ,ite 1.68k+rite2.68k c:hourc€ Sncopy supports wildcard paflerns: sncopy '.68k d:\src will copy att fl€ ending in the ,.68k enension tflo lhe drrectorv d.\src i, no younger lile ot lhs same name is tound resioing lhere. ' Slcopy will be of mosl use lo those who keep copies ot source liles on a rast d€vice, such as a ram dtst(, whitst lhey wdrk o'n rhem and wil thus oenem Dy usrng a copy program ihal wil nol alow the accidental coovind ot or0 source lites over thos€ ihsl have b€€n more recen y updaied. ' ' - 90 lndex \$ 50 \'49 \@ 51 27 -RS 28 _DAY .HOURS 28 _MINUTES 28 _MONTH 28 _SECONOS 28 _WEEKDAY 28 YEAR 28 ALIAS 22 CASE 41 cNoP 33 MODULE 55 NARG 45 NOLTST 62 OBJ 34 OB.JEND 34 OFFSET 65 OPT 58 ORG 33 POPO 60 POPP 50 POPS 64 PUBLIC 70 PUBGE 51 PUSHO 60 PUSHP 50 PUSHS 64 DATA 31 BADIX 20 DATASIZE 3I DC 30 DCB 30 REF36 DEF36 aEPr 42 OISABLE 22 DO 43 RS 27 ELSE 39 ELSEIF 39 ENO 39 ENOCASE 41 sEcT 65 os 32 ENDIF39 ENDM 44 REG 29 REGS 38 BSBESET2T RSSET 27 SET 24 SHIFT 45 STRCMP 53 SIRLEN 53 SUBSTR 54 ENDB 42 ENOW 42 TYPE 36 EOU 24 EOUR 28 WHILE 42 EOUS 25 EVEN 33 FAIL6l FILESIZE 36 HEX 31 lF 39 lNcBtN 35 INCLUDE 35 INFOBM6l INSTR 53 LtsT 62 LOCAL 57 MACRO 44 MACROS 46 MEXIT 44 MODEND 55 UNTIL43 WORKSPACE 38 XDEFTO XREFTO mo,.rozJa
Source Exif Data:File Type : PDF File Type Extension : pdf MIME Type : application/pdf PDF Version : 1.3 Linearized : No Page Count : 95EXIF Metadata provided by EXIF.tools