rl78-decode.c 163 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774
  1. #line 1 "rl78-decode.opc"
  2. /* -*- c -*- */
  3. /* Copyright (C) 2012-2017 Free Software Foundation, Inc.
  4. Contributed by Red Hat.
  5. Written by DJ Delorie.
  6. This file is part of the GNU opcodes library.
  7. This library is free software; you can redistribute it and/or modify
  8. it under the terms of the GNU General Public License as published by
  9. the Free Software Foundation; either version 3, or (at your option)
  10. any later version.
  11. It is distributed in the hope that it will be useful, but WITHOUT
  12. ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  13. or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
  14. License for more details.
  15. You should have received a copy of the GNU General Public License
  16. along with this program; if not, write to the Free Software
  17. Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
  18. MA 02110-1301, USA. */
  19. #include "sysdep.h"
  20. #include <stdio.h>
  21. #include <stdlib.h>
  22. #include <string.h>
  23. #include "ansidecl.h"
  24. #include "opcode/rl78.h"
  25. static int trace = 0;
  26. typedef struct
  27. {
  28. RL78_Opcode_Decoded * rl78;
  29. int (* getbyte)(void *);
  30. void * ptr;
  31. unsigned char * op;
  32. } LocalData;
  33. #define ID(x) rl78->id = RLO_##x, rl78->lineno = __LINE__
  34. #define OP(n,t,r,a) (rl78->op[n].type = t, \
  35. rl78->op[n].reg = r, \
  36. rl78->op[n].addend = a )
  37. #define OPX(n,t,r1,r2,a) \
  38. (rl78->op[n].type = t, \
  39. rl78->op[n].reg = r1, \
  40. rl78->op[n].reg2 = r2, \
  41. rl78->op[n].addend = a )
  42. #define W() rl78->size = RL78_Word
  43. #define AU ATTRIBUTE_UNUSED
  44. #define OP_BUF_LEN 20
  45. #define GETBYTE() (ld->rl78->n_bytes < (OP_BUF_LEN - 1) ? ld->op [ld->rl78->n_bytes++] = ld->getbyte (ld->ptr): 0)
  46. #define B ((unsigned long) GETBYTE())
  47. #define SYNTAX(x) rl78->syntax = x
  48. #define UNSUPPORTED() \
  49. rl78->syntax = "*unknown*"
  50. #define RB(x) ((x)+RL78_Reg_X)
  51. #define RW(x) ((x)+RL78_Reg_AX)
  52. #define Fz rl78->flags = RL78_PSW_Z
  53. #define Fza rl78->flags = RL78_PSW_Z | RL78_PSW_AC
  54. #define Fzc rl78->flags = RL78_PSW_Z | RL78_PSW_CY
  55. #define Fzac rl78->flags = RL78_PSW_Z | RL78_PSW_AC | RL78_PSW_CY
  56. #define Fa rl78->flags = RL78_PSW_AC
  57. #define Fc rl78->flags = RL78_PSW_CY
  58. #define Fac rl78->flags = RL78_PSW_AC | RL78_PSW_CY
  59. #define IMMU(bytes) immediate (bytes, 0, ld)
  60. #define IMMS(bytes) immediate (bytes, 1, ld)
  61. static int
  62. immediate (int bytes, int sign_extend, LocalData * ld)
  63. {
  64. unsigned long i = 0;
  65. switch (bytes)
  66. {
  67. case 1:
  68. i |= B;
  69. if (sign_extend && (i & 0x80))
  70. i -= 0x100;
  71. break;
  72. case 2:
  73. i |= B;
  74. i |= B << 8;
  75. if (sign_extend && (i & 0x8000))
  76. i -= 0x10000;
  77. break;
  78. case 3:
  79. i |= B;
  80. i |= B << 8;
  81. i |= B << 16;
  82. if (sign_extend && (i & 0x800000))
  83. i -= 0x1000000;
  84. break;
  85. default:
  86. fprintf (stderr, "Programmer error: immediate() called with invalid byte count %d\n", bytes);
  87. abort();
  88. }
  89. return i;
  90. }
  91. #define DC(c) OP (0, RL78_Operand_Immediate, 0, c)
  92. #define DR(r) OP (0, RL78_Operand_Register, RL78_Reg_##r, 0)
  93. #define DRB(r) OP (0, RL78_Operand_Register, RB(r), 0)
  94. #define DRW(r) OP (0, RL78_Operand_Register, RW(r), 0)
  95. #define DM(r,a) OP (0, RL78_Operand_Indirect, RL78_Reg_##r, a)
  96. #define DM2(r1,r2,a) OPX (0, RL78_Operand_Indirect, RL78_Reg_##r1, RL78_Reg_##r2, a)
  97. #define DE() rl78->op[0].use_es = 1
  98. #define DB(b) set_bit (rl78->op, b)
  99. #define DCY() DR(PSW); DB(0)
  100. #define DPUSH() OP (0, RL78_Operand_PreDec, RL78_Reg_SP, 0);
  101. #define SC(c) OP (1, RL78_Operand_Immediate, 0, c)
  102. #define SR(r) OP (1, RL78_Operand_Register, RL78_Reg_##r, 0)
  103. #define SRB(r) OP (1, RL78_Operand_Register, RB(r), 0)
  104. #define SRW(r) OP (1, RL78_Operand_Register, RW(r), 0)
  105. #define SM(r,a) OP (1, RL78_Operand_Indirect, RL78_Reg_##r, a)
  106. #define SM2(r1,r2,a) OPX (1, RL78_Operand_Indirect, RL78_Reg_##r1, RL78_Reg_##r2, a)
  107. #define SE() rl78->op[1].use_es = 1
  108. #define SB(b) set_bit (rl78->op+1, b)
  109. #define SCY() SR(PSW); SB(0)
  110. #define COND(c) rl78->op[1].condition = RL78_Condition_##c
  111. #define SPOP() OP (1, RL78_Operand_PostInc, RL78_Reg_SP, 0);
  112. static void
  113. set_bit (RL78_Opcode_Operand *op, int bit)
  114. {
  115. op->bit_number = bit;
  116. switch (op->type) {
  117. case RL78_Operand_Register:
  118. op->type = RL78_Operand_Bit;
  119. break;
  120. case RL78_Operand_Indirect:
  121. op->type = RL78_Operand_BitIndirect;
  122. break;
  123. default:
  124. break;
  125. }
  126. }
  127. static int
  128. saddr (int x)
  129. {
  130. if (x < 0x20)
  131. return 0xfff00 + x;
  132. return 0xffe00 + x;
  133. }
  134. static int
  135. sfr (int x)
  136. {
  137. return 0xfff00 + x;
  138. }
  139. #define SADDR saddr (IMMU (1))
  140. #define SFR sfr (IMMU (1))
  141. int
  142. rl78_decode_opcode (unsigned long pc AU,
  143. RL78_Opcode_Decoded * rl78,
  144. int (* getbyte)(void *),
  145. void * ptr,
  146. RL78_Dis_Isa isa)
  147. {
  148. LocalData lds, * ld = &lds;
  149. unsigned char op_buf[OP_BUF_LEN] = {0};
  150. unsigned char *op = op_buf;
  151. int op0, op1;
  152. lds.rl78 = rl78;
  153. lds.getbyte = getbyte;
  154. lds.ptr = ptr;
  155. lds.op = op;
  156. memset (rl78, 0, sizeof (*rl78));
  157. start_again:
  158. /* Byte registers, not including A. */
  159. /* Word registers, not including AX. */
  160. /*----------------------------------------------------------------------*/
  161. /* ES: prefix */
  162. GETBYTE ();
  163. switch (op[0] & 0xff)
  164. {
  165. case 0x00:
  166. {
  167. /** 0000 0000 nop */
  168. if (trace)
  169. {
  170. printf ("\033[33m%s\033[0m %02x\n",
  171. "/** 0000 0000 nop */",
  172. op[0]);
  173. }
  174. SYNTAX("nop");
  175. #line 913 "rl78-decode.opc"
  176. ID(nop);
  177. /*----------------------------------------------------------------------*/
  178. }
  179. break;
  180. case 0x01:
  181. case 0x03:
  182. case 0x05:
  183. case 0x07:
  184. {
  185. /** 0000 0rw1 addw %0, %1 */
  186. #line 276 "rl78-decode.opc"
  187. int rw AU = (op[0] >> 1) & 0x03;
  188. if (trace)
  189. {
  190. printf ("\033[33m%s\033[0m %02x\n",
  191. "/** 0000 0rw1 addw %0, %1 */",
  192. op[0]);
  193. printf (" rw = 0x%x\n", rw);
  194. }
  195. SYNTAX("addw %0, %1");
  196. #line 276 "rl78-decode.opc"
  197. ID(add); W(); DR(AX); SRW(rw); Fzac;
  198. }
  199. break;
  200. case 0x02:
  201. {
  202. /** 0000 0010 addw %0, %e!1 */
  203. if (trace)
  204. {
  205. printf ("\033[33m%s\033[0m %02x\n",
  206. "/** 0000 0010 addw %0, %e!1 */",
  207. op[0]);
  208. }
  209. SYNTAX("addw %0, %e!1");
  210. #line 267 "rl78-decode.opc"
  211. ID(add); W(); DR(AX); SM(None, IMMU(2)); Fzac;
  212. }
  213. break;
  214. case 0x04:
  215. {
  216. /** 0000 0100 addw %0, #%1 */
  217. if (trace)
  218. {
  219. printf ("\033[33m%s\033[0m %02x\n",
  220. "/** 0000 0100 addw %0, #%1 */",
  221. op[0]);
  222. }
  223. SYNTAX("addw %0, #%1");
  224. #line 273 "rl78-decode.opc"
  225. ID(add); W(); DR(AX); SC(IMMU(2)); Fzac;
  226. }
  227. break;
  228. case 0x06:
  229. {
  230. /** 0000 0110 addw %0, %1 */
  231. if (trace)
  232. {
  233. printf ("\033[33m%s\033[0m %02x\n",
  234. "/** 0000 0110 addw %0, %1 */",
  235. op[0]);
  236. }
  237. SYNTAX("addw %0, %1");
  238. #line 279 "rl78-decode.opc"
  239. ID(add); W(); DR(AX); SM(None, SADDR); Fzac;
  240. }
  241. break;
  242. case 0x08:
  243. {
  244. /** 0000 1000 xch a, x */
  245. if (trace)
  246. {
  247. printf ("\033[33m%s\033[0m %02x\n",
  248. "/** 0000 1000 xch a, x */",
  249. op[0]);
  250. }
  251. SYNTAX("xch a, x");
  252. #line 1236 "rl78-decode.opc"
  253. ID(xch); DR(A); SR(X);
  254. /*----------------------------------------------------------------------*/
  255. }
  256. break;
  257. case 0x09:
  258. {
  259. /** 0000 1001 mov %0, %e1 */
  260. if (trace)
  261. {
  262. printf ("\033[33m%s\033[0m %02x\n",
  263. "/** 0000 1001 mov %0, %e1 */",
  264. op[0]);
  265. }
  266. SYNTAX("mov %0, %e1");
  267. #line 680 "rl78-decode.opc"
  268. ID(mov); DR(A); SM(B, IMMU(2));
  269. }
  270. break;
  271. case 0x0a:
  272. {
  273. /** 0000 1010 add %0, #%1 */
  274. if (trace)
  275. {
  276. printf ("\033[33m%s\033[0m %02x\n",
  277. "/** 0000 1010 add %0, #%1 */",
  278. op[0]);
  279. }
  280. SYNTAX("add %0, #%1");
  281. #line 230 "rl78-decode.opc"
  282. ID(add); DM(None, SADDR); SC(IMMU(1)); Fzac;
  283. /*----------------------------------------------------------------------*/
  284. }
  285. break;
  286. case 0x0b:
  287. {
  288. /** 0000 1011 add %0, %1 */
  289. if (trace)
  290. {
  291. printf ("\033[33m%s\033[0m %02x\n",
  292. "/** 0000 1011 add %0, %1 */",
  293. op[0]);
  294. }
  295. SYNTAX("add %0, %1");
  296. #line 224 "rl78-decode.opc"
  297. ID(add); DR(A); SM(None, SADDR); Fzac;
  298. }
  299. break;
  300. case 0x0c:
  301. {
  302. /** 0000 1100 add %0, #%1 */
  303. if (trace)
  304. {
  305. printf ("\033[33m%s\033[0m %02x\n",
  306. "/** 0000 1100 add %0, #%1 */",
  307. op[0]);
  308. }
  309. SYNTAX("add %0, #%1");
  310. #line 218 "rl78-decode.opc"
  311. ID(add); DR(A); SC(IMMU(1)); Fzac;
  312. }
  313. break;
  314. case 0x0d:
  315. {
  316. /** 0000 1101 add %0, %e1 */
  317. if (trace)
  318. {
  319. printf ("\033[33m%s\033[0m %02x\n",
  320. "/** 0000 1101 add %0, %e1 */",
  321. op[0]);
  322. }
  323. SYNTAX("add %0, %e1");
  324. #line 206 "rl78-decode.opc"
  325. ID(add); DR(A); SM(HL, 0); Fzac;
  326. }
  327. break;
  328. case 0x0e:
  329. {
  330. /** 0000 1110 add %0, %ea1 */
  331. if (trace)
  332. {
  333. printf ("\033[33m%s\033[0m %02x\n",
  334. "/** 0000 1110 add %0, %ea1 */",
  335. op[0]);
  336. }
  337. SYNTAX("add %0, %ea1");
  338. #line 212 "rl78-decode.opc"
  339. ID(add); DR(A); SM(HL, IMMU(1)); Fzac;
  340. }
  341. break;
  342. case 0x0f:
  343. {
  344. /** 0000 1111 add %0, %e!1 */
  345. if (trace)
  346. {
  347. printf ("\033[33m%s\033[0m %02x\n",
  348. "/** 0000 1111 add %0, %e!1 */",
  349. op[0]);
  350. }
  351. SYNTAX("add %0, %e!1");
  352. #line 203 "rl78-decode.opc"
  353. ID(add); DR(A); SM(None, IMMU(2)); Fzac;
  354. }
  355. break;
  356. case 0x10:
  357. {
  358. /** 0001 0000 addw %0, #%1 */
  359. if (trace)
  360. {
  361. printf ("\033[33m%s\033[0m %02x\n",
  362. "/** 0001 0000 addw %0, #%1 */",
  363. op[0]);
  364. }
  365. SYNTAX("addw %0, #%1");
  366. #line 282 "rl78-decode.opc"
  367. ID(add); W(); DR(SP); SC(IMMU(1)); Fzac;
  368. /*----------------------------------------------------------------------*/
  369. }
  370. break;
  371. case 0x11:
  372. {
  373. /** 0001 0001 es: */
  374. if (trace)
  375. {
  376. printf ("\033[33m%s\033[0m %02x\n",
  377. "/** 0001 0001 es: */",
  378. op[0]);
  379. }
  380. SYNTAX("es:");
  381. #line 195 "rl78-decode.opc"
  382. DE(); SE();
  383. op ++;
  384. pc ++;
  385. goto start_again;
  386. /*----------------------------------------------------------------------*/
  387. }
  388. break;
  389. case 0x12:
  390. case 0x14:
  391. case 0x16:
  392. {
  393. /** 0001 0ra0 movw %0, %1 */
  394. #line 861 "rl78-decode.opc"
  395. int ra AU = (op[0] >> 1) & 0x03;
  396. if (trace)
  397. {
  398. printf ("\033[33m%s\033[0m %02x\n",
  399. "/** 0001 0ra0 movw %0, %1 */",
  400. op[0]);
  401. printf (" ra = 0x%x\n", ra);
  402. }
  403. SYNTAX("movw %0, %1");
  404. #line 861 "rl78-decode.opc"
  405. ID(mov); W(); DRW(ra); SR(AX);
  406. }
  407. break;
  408. case 0x13:
  409. case 0x15:
  410. case 0x17:
  411. {
  412. /** 0001 0ra1 movw %0, %1 */
  413. #line 858 "rl78-decode.opc"
  414. int ra AU = (op[0] >> 1) & 0x03;
  415. if (trace)
  416. {
  417. printf ("\033[33m%s\033[0m %02x\n",
  418. "/** 0001 0ra1 movw %0, %1 */",
  419. op[0]);
  420. printf (" ra = 0x%x\n", ra);
  421. }
  422. SYNTAX("movw %0, %1");
  423. #line 858 "rl78-decode.opc"
  424. ID(mov); W(); DR(AX); SRW(ra);
  425. }
  426. break;
  427. case 0x18:
  428. {
  429. /** 0001 1000 mov %e0, %1 */
  430. if (trace)
  431. {
  432. printf ("\033[33m%s\033[0m %02x\n",
  433. "/** 0001 1000 mov %e0, %1 */",
  434. op[0]);
  435. }
  436. SYNTAX("mov %e0, %1");
  437. #line 731 "rl78-decode.opc"
  438. ID(mov); DM(B, IMMU(2)); SR(A);
  439. }
  440. break;
  441. case 0x19:
  442. {
  443. /** 0001 1001 mov %e0, #%1 */
  444. if (trace)
  445. {
  446. printf ("\033[33m%s\033[0m %02x\n",
  447. "/** 0001 1001 mov %e0, #%1 */",
  448. op[0]);
  449. }
  450. SYNTAX("mov %e0, #%1");
  451. #line 728 "rl78-decode.opc"
  452. ID(mov); DM(B, IMMU(2)); SC(IMMU(1));
  453. }
  454. break;
  455. case 0x1a:
  456. {
  457. /** 0001 1010 addc %0, #%1 */
  458. if (trace)
  459. {
  460. printf ("\033[33m%s\033[0m %02x\n",
  461. "/** 0001 1010 addc %0, #%1 */",
  462. op[0]);
  463. }
  464. SYNTAX("addc %0, #%1");
  465. #line 262 "rl78-decode.opc"
  466. ID(addc); DM(None, SADDR); SC(IMMU(1)); Fzac;
  467. /*----------------------------------------------------------------------*/
  468. }
  469. break;
  470. case 0x1b:
  471. {
  472. /** 0001 1011 addc %0, %1 */
  473. if (trace)
  474. {
  475. printf ("\033[33m%s\033[0m %02x\n",
  476. "/** 0001 1011 addc %0, %1 */",
  477. op[0]);
  478. }
  479. SYNTAX("addc %0, %1");
  480. #line 259 "rl78-decode.opc"
  481. ID(addc); DR(A); SM(None, SADDR); Fzac;
  482. }
  483. break;
  484. case 0x1c:
  485. {
  486. /** 0001 1100 addc %0, #%1 */
  487. if (trace)
  488. {
  489. printf ("\033[33m%s\033[0m %02x\n",
  490. "/** 0001 1100 addc %0, #%1 */",
  491. op[0]);
  492. }
  493. SYNTAX("addc %0, #%1");
  494. #line 250 "rl78-decode.opc"
  495. ID(addc); DR(A); SC(IMMU(1)); Fzac;
  496. }
  497. break;
  498. case 0x1d:
  499. {
  500. /** 0001 1101 addc %0, %e1 */
  501. if (trace)
  502. {
  503. printf ("\033[33m%s\033[0m %02x\n",
  504. "/** 0001 1101 addc %0, %e1 */",
  505. op[0]);
  506. }
  507. SYNTAX("addc %0, %e1");
  508. #line 238 "rl78-decode.opc"
  509. ID(addc); DR(A); SM(HL, 0); Fzac;
  510. }
  511. break;
  512. case 0x1e:
  513. {
  514. /** 0001 1110 addc %0, %ea1 */
  515. if (trace)
  516. {
  517. printf ("\033[33m%s\033[0m %02x\n",
  518. "/** 0001 1110 addc %0, %ea1 */",
  519. op[0]);
  520. }
  521. SYNTAX("addc %0, %ea1");
  522. #line 247 "rl78-decode.opc"
  523. ID(addc); DR(A); SM(HL, IMMU(1)); Fzac;
  524. }
  525. break;
  526. case 0x1f:
  527. {
  528. /** 0001 1111 addc %0, %e!1 */
  529. if (trace)
  530. {
  531. printf ("\033[33m%s\033[0m %02x\n",
  532. "/** 0001 1111 addc %0, %e!1 */",
  533. op[0]);
  534. }
  535. SYNTAX("addc %0, %e!1");
  536. #line 235 "rl78-decode.opc"
  537. ID(addc); DR(A); SM(None, IMMU(2)); Fzac;
  538. }
  539. break;
  540. case 0x20:
  541. {
  542. /** 0010 0000 subw %0, #%1 */
  543. if (trace)
  544. {
  545. printf ("\033[33m%s\033[0m %02x\n",
  546. "/** 0010 0000 subw %0, #%1 */",
  547. op[0]);
  548. }
  549. SYNTAX("subw %0, #%1");
  550. #line 1200 "rl78-decode.opc"
  551. ID(sub); W(); DR(SP); SC(IMMU(1)); Fzac;
  552. /*----------------------------------------------------------------------*/
  553. }
  554. break;
  555. case 0x21:
  556. case 0x23:
  557. case 0x25:
  558. case 0x27:
  559. {
  560. /** 0010 0rw1 subw %0, %1 */
  561. #line 1194 "rl78-decode.opc"
  562. int rw AU = (op[0] >> 1) & 0x03;
  563. if (trace)
  564. {
  565. printf ("\033[33m%s\033[0m %02x\n",
  566. "/** 0010 0rw1 subw %0, %1 */",
  567. op[0]);
  568. printf (" rw = 0x%x\n", rw);
  569. }
  570. SYNTAX("subw %0, %1");
  571. #line 1194 "rl78-decode.opc"
  572. ID(sub); W(); DR(AX); SRW(rw); Fzac;
  573. }
  574. break;
  575. case 0x22:
  576. {
  577. /** 0010 0010 subw %0, %e!1 */
  578. if (trace)
  579. {
  580. printf ("\033[33m%s\033[0m %02x\n",
  581. "/** 0010 0010 subw %0, %e!1 */",
  582. op[0]);
  583. }
  584. SYNTAX("subw %0, %e!1");
  585. #line 1185 "rl78-decode.opc"
  586. ID(sub); W(); DR(AX); SM(None, IMMU(2)); Fzac;
  587. }
  588. break;
  589. case 0x24:
  590. {
  591. /** 0010 0100 subw %0, #%1 */
  592. if (trace)
  593. {
  594. printf ("\033[33m%s\033[0m %02x\n",
  595. "/** 0010 0100 subw %0, #%1 */",
  596. op[0]);
  597. }
  598. SYNTAX("subw %0, #%1");
  599. #line 1191 "rl78-decode.opc"
  600. ID(sub); W(); DR(AX); SC(IMMU(2)); Fzac;
  601. }
  602. break;
  603. case 0x26:
  604. {
  605. /** 0010 0110 subw %0, %1 */
  606. if (trace)
  607. {
  608. printf ("\033[33m%s\033[0m %02x\n",
  609. "/** 0010 0110 subw %0, %1 */",
  610. op[0]);
  611. }
  612. SYNTAX("subw %0, %1");
  613. #line 1197 "rl78-decode.opc"
  614. ID(sub); W(); DR(AX); SM(None, SADDR); Fzac;
  615. }
  616. break;
  617. case 0x28:
  618. {
  619. /** 0010 1000 mov %e0, %1 */
  620. if (trace)
  621. {
  622. printf ("\033[33m%s\033[0m %02x\n",
  623. "/** 0010 1000 mov %e0, %1 */",
  624. op[0]);
  625. }
  626. SYNTAX("mov %e0, %1");
  627. #line 743 "rl78-decode.opc"
  628. ID(mov); DM(C, IMMU(2)); SR(A);
  629. }
  630. break;
  631. case 0x29:
  632. {
  633. /** 0010 1001 mov %0, %e1 */
  634. if (trace)
  635. {
  636. printf ("\033[33m%s\033[0m %02x\n",
  637. "/** 0010 1001 mov %0, %e1 */",
  638. op[0]);
  639. }
  640. SYNTAX("mov %0, %e1");
  641. #line 686 "rl78-decode.opc"
  642. ID(mov); DR(A); SM(C, IMMU(2));
  643. }
  644. break;
  645. case 0x2a:
  646. {
  647. /** 0010 1010 sub %0, #%1 */
  648. if (trace)
  649. {
  650. printf ("\033[33m%s\033[0m %02x\n",
  651. "/** 0010 1010 sub %0, #%1 */",
  652. op[0]);
  653. }
  654. SYNTAX("sub %0, #%1");
  655. #line 1148 "rl78-decode.opc"
  656. ID(sub); DM(None, SADDR); SC(IMMU(1)); Fzac;
  657. /*----------------------------------------------------------------------*/
  658. }
  659. break;
  660. case 0x2b:
  661. {
  662. /** 0010 1011 sub %0, %1 */
  663. if (trace)
  664. {
  665. printf ("\033[33m%s\033[0m %02x\n",
  666. "/** 0010 1011 sub %0, %1 */",
  667. op[0]);
  668. }
  669. SYNTAX("sub %0, %1");
  670. #line 1142 "rl78-decode.opc"
  671. ID(sub); DR(A); SM(None, SADDR); Fzac;
  672. }
  673. break;
  674. case 0x2c:
  675. {
  676. /** 0010 1100 sub %0, #%1 */
  677. if (trace)
  678. {
  679. printf ("\033[33m%s\033[0m %02x\n",
  680. "/** 0010 1100 sub %0, #%1 */",
  681. op[0]);
  682. }
  683. SYNTAX("sub %0, #%1");
  684. #line 1136 "rl78-decode.opc"
  685. ID(sub); DR(A); SC(IMMU(1)); Fzac;
  686. }
  687. break;
  688. case 0x2d:
  689. {
  690. /** 0010 1101 sub %0, %e1 */
  691. if (trace)
  692. {
  693. printf ("\033[33m%s\033[0m %02x\n",
  694. "/** 0010 1101 sub %0, %e1 */",
  695. op[0]);
  696. }
  697. SYNTAX("sub %0, %e1");
  698. #line 1124 "rl78-decode.opc"
  699. ID(sub); DR(A); SM(HL, 0); Fzac;
  700. }
  701. break;
  702. case 0x2e:
  703. {
  704. /** 0010 1110 sub %0, %ea1 */
  705. if (trace)
  706. {
  707. printf ("\033[33m%s\033[0m %02x\n",
  708. "/** 0010 1110 sub %0, %ea1 */",
  709. op[0]);
  710. }
  711. SYNTAX("sub %0, %ea1");
  712. #line 1130 "rl78-decode.opc"
  713. ID(sub); DR(A); SM(HL, IMMU(1)); Fzac;
  714. }
  715. break;
  716. case 0x2f:
  717. {
  718. /** 0010 1111 sub %0, %e!1 */
  719. if (trace)
  720. {
  721. printf ("\033[33m%s\033[0m %02x\n",
  722. "/** 0010 1111 sub %0, %e!1 */",
  723. op[0]);
  724. }
  725. SYNTAX("sub %0, %e!1");
  726. #line 1121 "rl78-decode.opc"
  727. ID(sub); DR(A); SM(None, IMMU(2)); Fzac;
  728. }
  729. break;
  730. case 0x30:
  731. case 0x32:
  732. case 0x34:
  733. case 0x36:
  734. {
  735. /** 0011 0rg0 movw %0, #%1 */
  736. #line 855 "rl78-decode.opc"
  737. int rg AU = (op[0] >> 1) & 0x03;
  738. if (trace)
  739. {
  740. printf ("\033[33m%s\033[0m %02x\n",
  741. "/** 0011 0rg0 movw %0, #%1 */",
  742. op[0]);
  743. printf (" rg = 0x%x\n", rg);
  744. }
  745. SYNTAX("movw %0, #%1");
  746. #line 855 "rl78-decode.opc"
  747. ID(mov); W(); DRW(rg); SC(IMMU(2));
  748. }
  749. break;
  750. case 0x31:
  751. GETBYTE ();
  752. switch (op[1] & 0x8f)
  753. {
  754. case 0x00:
  755. {
  756. /** 0011 0001 0bit 0000 btclr %s1, $%a0 */
  757. #line 418 "rl78-decode.opc"
  758. int bit AU = (op[1] >> 4) & 0x07;
  759. if (trace)
  760. {
  761. printf ("\033[33m%s\033[0m %02x %02x\n",
  762. "/** 0011 0001 0bit 0000 btclr %s1, $%a0 */",
  763. op[0], op[1]);
  764. printf (" bit = 0x%x\n", bit);
  765. }
  766. SYNTAX("btclr %s1, $%a0");
  767. #line 418 "rl78-decode.opc"
  768. ID(branch_cond_clear); SM(None, SADDR); SB(bit); DC(pc+IMMS(1)+4); COND(T);
  769. /*----------------------------------------------------------------------*/
  770. }
  771. break;
  772. case 0x01:
  773. {
  774. /** 0011 0001 0bit 0001 btclr %1, $%a0 */
  775. #line 412 "rl78-decode.opc"
  776. int bit AU = (op[1] >> 4) & 0x07;
  777. if (trace)
  778. {
  779. printf ("\033[33m%s\033[0m %02x %02x\n",
  780. "/** 0011 0001 0bit 0001 btclr %1, $%a0 */",
  781. op[0], op[1]);
  782. printf (" bit = 0x%x\n", bit);
  783. }
  784. SYNTAX("btclr %1, $%a0");
  785. #line 412 "rl78-decode.opc"
  786. ID(branch_cond_clear); DC(pc+IMMS(1)+3); SR(A); SB(bit); COND(T);
  787. }
  788. break;
  789. case 0x02:
  790. {
  791. /** 0011 0001 0bit 0010 bt %s1, $%a0 */
  792. #line 404 "rl78-decode.opc"
  793. int bit AU = (op[1] >> 4) & 0x07;
  794. if (trace)
  795. {
  796. printf ("\033[33m%s\033[0m %02x %02x\n",
  797. "/** 0011 0001 0bit 0010 bt %s1, $%a0 */",
  798. op[0], op[1]);
  799. printf (" bit = 0x%x\n", bit);
  800. }
  801. SYNTAX("bt %s1, $%a0");
  802. #line 404 "rl78-decode.opc"
  803. ID(branch_cond); SM(None, SADDR); SB(bit); DC(pc+IMMS(1)+4); COND(T);
  804. /*----------------------------------------------------------------------*/
  805. }
  806. break;
  807. case 0x03:
  808. {
  809. /** 0011 0001 0bit 0011 bt %1, $%a0 */
  810. #line 398 "rl78-decode.opc"
  811. int bit AU = (op[1] >> 4) & 0x07;
  812. if (trace)
  813. {
  814. printf ("\033[33m%s\033[0m %02x %02x\n",
  815. "/** 0011 0001 0bit 0011 bt %1, $%a0 */",
  816. op[0], op[1]);
  817. printf (" bit = 0x%x\n", bit);
  818. }
  819. SYNTAX("bt %1, $%a0");
  820. #line 398 "rl78-decode.opc"
  821. ID(branch_cond); DC(pc+IMMS(1)+3); SR(A); SB(bit); COND(T);
  822. }
  823. break;
  824. case 0x04:
  825. {
  826. /** 0011 0001 0bit 0100 bf %s1, $%a0 */
  827. #line 365 "rl78-decode.opc"
  828. int bit AU = (op[1] >> 4) & 0x07;
  829. if (trace)
  830. {
  831. printf ("\033[33m%s\033[0m %02x %02x\n",
  832. "/** 0011 0001 0bit 0100 bf %s1, $%a0 */",
  833. op[0], op[1]);
  834. printf (" bit = 0x%x\n", bit);
  835. }
  836. SYNTAX("bf %s1, $%a0");
  837. #line 365 "rl78-decode.opc"
  838. ID(branch_cond); SM(None, SADDR); SB(bit); DC(pc+IMMS(1)+4); COND(F);
  839. /*----------------------------------------------------------------------*/
  840. }
  841. break;
  842. case 0x05:
  843. {
  844. /** 0011 0001 0bit 0101 bf %1, $%a0 */
  845. #line 359 "rl78-decode.opc"
  846. int bit AU = (op[1] >> 4) & 0x07;
  847. if (trace)
  848. {
  849. printf ("\033[33m%s\033[0m %02x %02x\n",
  850. "/** 0011 0001 0bit 0101 bf %1, $%a0 */",
  851. op[0], op[1]);
  852. printf (" bit = 0x%x\n", bit);
  853. }
  854. SYNTAX("bf %1, $%a0");
  855. #line 359 "rl78-decode.opc"
  856. ID(branch_cond); DC(pc+IMMS(1)+3); SR(A); SB(bit); COND(F);
  857. }
  858. break;
  859. case 0x07:
  860. {
  861. /** 0011 0001 0cnt 0111 shl %0, %1 */
  862. #line 1077 "rl78-decode.opc"
  863. int cnt AU = (op[1] >> 4) & 0x07;
  864. if (trace)
  865. {
  866. printf ("\033[33m%s\033[0m %02x %02x\n",
  867. "/** 0011 0001 0cnt 0111 shl %0, %1 */",
  868. op[0], op[1]);
  869. printf (" cnt = 0x%x\n", cnt);
  870. }
  871. SYNTAX("shl %0, %1");
  872. #line 1077 "rl78-decode.opc"
  873. ID(shl); DR(C); SC(cnt);
  874. }
  875. break;
  876. case 0x08:
  877. {
  878. /** 0011 0001 0cnt 1000 shl %0, %1 */
  879. #line 1074 "rl78-decode.opc"
  880. int cnt AU = (op[1] >> 4) & 0x07;
  881. if (trace)
  882. {
  883. printf ("\033[33m%s\033[0m %02x %02x\n",
  884. "/** 0011 0001 0cnt 1000 shl %0, %1 */",
  885. op[0], op[1]);
  886. printf (" cnt = 0x%x\n", cnt);
  887. }
  888. SYNTAX("shl %0, %1");
  889. #line 1074 "rl78-decode.opc"
  890. ID(shl); DR(B); SC(cnt);
  891. }
  892. break;
  893. case 0x09:
  894. {
  895. /** 0011 0001 0cnt 1001 shl %0, %1 */
  896. #line 1071 "rl78-decode.opc"
  897. int cnt AU = (op[1] >> 4) & 0x07;
  898. if (trace)
  899. {
  900. printf ("\033[33m%s\033[0m %02x %02x\n",
  901. "/** 0011 0001 0cnt 1001 shl %0, %1 */",
  902. op[0], op[1]);
  903. printf (" cnt = 0x%x\n", cnt);
  904. }
  905. SYNTAX("shl %0, %1");
  906. #line 1071 "rl78-decode.opc"
  907. ID(shl); DR(A); SC(cnt);
  908. }
  909. break;
  910. case 0x0a:
  911. {
  912. /** 0011 0001 0cnt 1010 shr %0, %1 */
  913. #line 1088 "rl78-decode.opc"
  914. int cnt AU = (op[1] >> 4) & 0x07;
  915. if (trace)
  916. {
  917. printf ("\033[33m%s\033[0m %02x %02x\n",
  918. "/** 0011 0001 0cnt 1010 shr %0, %1 */",
  919. op[0], op[1]);
  920. printf (" cnt = 0x%x\n", cnt);
  921. }
  922. SYNTAX("shr %0, %1");
  923. #line 1088 "rl78-decode.opc"
  924. ID(shr); DR(A); SC(cnt);
  925. }
  926. break;
  927. case 0x0b:
  928. {
  929. /** 0011 0001 0cnt 1011 sar %0, %1 */
  930. #line 1035 "rl78-decode.opc"
  931. int cnt AU = (op[1] >> 4) & 0x07;
  932. if (trace)
  933. {
  934. printf ("\033[33m%s\033[0m %02x %02x\n",
  935. "/** 0011 0001 0cnt 1011 sar %0, %1 */",
  936. op[0], op[1]);
  937. printf (" cnt = 0x%x\n", cnt);
  938. }
  939. SYNTAX("sar %0, %1");
  940. #line 1035 "rl78-decode.opc"
  941. ID(sar); DR(A); SC(cnt);
  942. }
  943. break;
  944. case 0x0c:
  945. case 0x8c:
  946. {
  947. /** 0011 0001 wcnt 1100 shlw %0, %1 */
  948. #line 1083 "rl78-decode.opc"
  949. int wcnt AU = (op[1] >> 4) & 0x0f;
  950. if (trace)
  951. {
  952. printf ("\033[33m%s\033[0m %02x %02x\n",
  953. "/** 0011 0001 wcnt 1100 shlw %0, %1 */",
  954. op[0], op[1]);
  955. printf (" wcnt = 0x%x\n", wcnt);
  956. }
  957. SYNTAX("shlw %0, %1");
  958. #line 1083 "rl78-decode.opc"
  959. ID(shl); W(); DR(BC); SC(wcnt);
  960. /*----------------------------------------------------------------------*/
  961. }
  962. break;
  963. case 0x0d:
  964. case 0x8d:
  965. {
  966. /** 0011 0001 wcnt 1101 shlw %0, %1 */
  967. #line 1080 "rl78-decode.opc"
  968. int wcnt AU = (op[1] >> 4) & 0x0f;
  969. if (trace)
  970. {
  971. printf ("\033[33m%s\033[0m %02x %02x\n",
  972. "/** 0011 0001 wcnt 1101 shlw %0, %1 */",
  973. op[0], op[1]);
  974. printf (" wcnt = 0x%x\n", wcnt);
  975. }
  976. SYNTAX("shlw %0, %1");
  977. #line 1080 "rl78-decode.opc"
  978. ID(shl); W(); DR(AX); SC(wcnt);
  979. }
  980. break;
  981. case 0x0e:
  982. case 0x8e:
  983. {
  984. /** 0011 0001 wcnt 1110 shrw %0, %1 */
  985. #line 1091 "rl78-decode.opc"
  986. int wcnt AU = (op[1] >> 4) & 0x0f;
  987. if (trace)
  988. {
  989. printf ("\033[33m%s\033[0m %02x %02x\n",
  990. "/** 0011 0001 wcnt 1110 shrw %0, %1 */",
  991. op[0], op[1]);
  992. printf (" wcnt = 0x%x\n", wcnt);
  993. }
  994. SYNTAX("shrw %0, %1");
  995. #line 1091 "rl78-decode.opc"
  996. ID(shr); W(); DR(AX); SC(wcnt);
  997. /*----------------------------------------------------------------------*/
  998. }
  999. break;
  1000. case 0x0f:
  1001. case 0x8f:
  1002. {
  1003. /** 0011 0001 wcnt 1111 sarw %0, %1 */
  1004. #line 1038 "rl78-decode.opc"
  1005. int wcnt AU = (op[1] >> 4) & 0x0f;
  1006. if (trace)
  1007. {
  1008. printf ("\033[33m%s\033[0m %02x %02x\n",
  1009. "/** 0011 0001 wcnt 1111 sarw %0, %1 */",
  1010. op[0], op[1]);
  1011. printf (" wcnt = 0x%x\n", wcnt);
  1012. }
  1013. SYNTAX("sarw %0, %1");
  1014. #line 1038 "rl78-decode.opc"
  1015. ID(sar); W(); DR(AX); SC(wcnt);
  1016. /*----------------------------------------------------------------------*/
  1017. }
  1018. break;
  1019. case 0x80:
  1020. {
  1021. /** 0011 0001 1bit 0000 btclr %s1, $%a0 */
  1022. #line 415 "rl78-decode.opc"
  1023. int bit AU = (op[1] >> 4) & 0x07;
  1024. if (trace)
  1025. {
  1026. printf ("\033[33m%s\033[0m %02x %02x\n",
  1027. "/** 0011 0001 1bit 0000 btclr %s1, $%a0 */",
  1028. op[0], op[1]);
  1029. printf (" bit = 0x%x\n", bit);
  1030. }
  1031. SYNTAX("btclr %s1, $%a0");
  1032. #line 415 "rl78-decode.opc"
  1033. ID(branch_cond_clear); SM(None, SFR); SB(bit); DC(pc+IMMS(1)+4); COND(T);
  1034. }
  1035. break;
  1036. case 0x81:
  1037. {
  1038. /** 0011 0001 1bit 0001 btclr %e1, $%a0 */
  1039. #line 409 "rl78-decode.opc"
  1040. int bit AU = (op[1] >> 4) & 0x07;
  1041. if (trace)
  1042. {
  1043. printf ("\033[33m%s\033[0m %02x %02x\n",
  1044. "/** 0011 0001 1bit 0001 btclr %e1, $%a0 */",
  1045. op[0], op[1]);
  1046. printf (" bit = 0x%x\n", bit);
  1047. }
  1048. SYNTAX("btclr %e1, $%a0");
  1049. #line 409 "rl78-decode.opc"
  1050. ID(branch_cond_clear); DC(pc+IMMS(1)+3); SM(HL,0); SB(bit); COND(T);
  1051. }
  1052. break;
  1053. case 0x82:
  1054. {
  1055. /** 0011 0001 1bit 0010 bt %s1, $%a0 */
  1056. #line 401 "rl78-decode.opc"
  1057. int bit AU = (op[1] >> 4) & 0x07;
  1058. if (trace)
  1059. {
  1060. printf ("\033[33m%s\033[0m %02x %02x\n",
  1061. "/** 0011 0001 1bit 0010 bt %s1, $%a0 */",
  1062. op[0], op[1]);
  1063. printf (" bit = 0x%x\n", bit);
  1064. }
  1065. SYNTAX("bt %s1, $%a0");
  1066. #line 401 "rl78-decode.opc"
  1067. ID(branch_cond); SM(None, SFR); SB(bit); DC(pc+IMMS(1)+4); COND(T);
  1068. }
  1069. break;
  1070. case 0x83:
  1071. {
  1072. /** 0011 0001 1bit 0011 bt %e1, $%a0 */
  1073. #line 395 "rl78-decode.opc"
  1074. int bit AU = (op[1] >> 4) & 0x07;
  1075. if (trace)
  1076. {
  1077. printf ("\033[33m%s\033[0m %02x %02x\n",
  1078. "/** 0011 0001 1bit 0011 bt %e1, $%a0 */",
  1079. op[0], op[1]);
  1080. printf (" bit = 0x%x\n", bit);
  1081. }
  1082. SYNTAX("bt %e1, $%a0");
  1083. #line 395 "rl78-decode.opc"
  1084. ID(branch_cond); DC(pc+IMMS(1)+3); SM(HL,0); SB(bit); COND(T);
  1085. }
  1086. break;
  1087. case 0x84:
  1088. {
  1089. /** 0011 0001 1bit 0100 bf %s1, $%a0 */
  1090. #line 362 "rl78-decode.opc"
  1091. int bit AU = (op[1] >> 4) & 0x07;
  1092. if (trace)
  1093. {
  1094. printf ("\033[33m%s\033[0m %02x %02x\n",
  1095. "/** 0011 0001 1bit 0100 bf %s1, $%a0 */",
  1096. op[0], op[1]);
  1097. printf (" bit = 0x%x\n", bit);
  1098. }
  1099. SYNTAX("bf %s1, $%a0");
  1100. #line 362 "rl78-decode.opc"
  1101. ID(branch_cond); SM(None, SFR); SB(bit); DC(pc+IMMS(1)+4); COND(F);
  1102. }
  1103. break;
  1104. case 0x85:
  1105. {
  1106. /** 0011 0001 1bit 0101 bf %e1, $%a0 */
  1107. #line 356 "rl78-decode.opc"
  1108. int bit AU = (op[1] >> 4) & 0x07;
  1109. if (trace)
  1110. {
  1111. printf ("\033[33m%s\033[0m %02x %02x\n",
  1112. "/** 0011 0001 1bit 0101 bf %e1, $%a0 */",
  1113. op[0], op[1]);
  1114. printf (" bit = 0x%x\n", bit);
  1115. }
  1116. SYNTAX("bf %e1, $%a0");
  1117. #line 356 "rl78-decode.opc"
  1118. ID(branch_cond); DC(pc+IMMS(1)+3); SM(HL,0); SB(bit); COND(F);
  1119. }
  1120. break;
  1121. default: UNSUPPORTED(); break;
  1122. }
  1123. break;
  1124. case 0x33:
  1125. case 0x35:
  1126. case 0x37:
  1127. {
  1128. /** 0011 0ra1 xchw %0, %1 */
  1129. #line 1241 "rl78-decode.opc"
  1130. int ra AU = (op[0] >> 1) & 0x03;
  1131. if (trace)
  1132. {
  1133. printf ("\033[33m%s\033[0m %02x\n",
  1134. "/** 0011 0ra1 xchw %0, %1 */",
  1135. op[0]);
  1136. printf (" ra = 0x%x\n", ra);
  1137. }
  1138. SYNTAX("xchw %0, %1");
  1139. #line 1241 "rl78-decode.opc"
  1140. ID(xch); W(); DR(AX); SRW(ra);
  1141. /*----------------------------------------------------------------------*/
  1142. }
  1143. break;
  1144. case 0x38:
  1145. {
  1146. /** 0011 1000 mov %e0, #%1 */
  1147. if (trace)
  1148. {
  1149. printf ("\033[33m%s\033[0m %02x\n",
  1150. "/** 0011 1000 mov %e0, #%1 */",
  1151. op[0]);
  1152. }
  1153. SYNTAX("mov %e0, #%1");
  1154. #line 740 "rl78-decode.opc"
  1155. ID(mov); DM(C, IMMU(2)); SC(IMMU(1));
  1156. }
  1157. break;
  1158. case 0x39:
  1159. {
  1160. /** 0011 1001 mov %e0, #%1 */
  1161. if (trace)
  1162. {
  1163. printf ("\033[33m%s\033[0m %02x\n",
  1164. "/** 0011 1001 mov %e0, #%1 */",
  1165. op[0]);
  1166. }
  1167. SYNTAX("mov %e0, #%1");
  1168. #line 734 "rl78-decode.opc"
  1169. ID(mov); DM(BC, IMMU(2)); SC(IMMU(1));
  1170. }
  1171. break;
  1172. case 0x3a:
  1173. {
  1174. /** 0011 1010 subc %0, #%1 */
  1175. if (trace)
  1176. {
  1177. printf ("\033[33m%s\033[0m %02x\n",
  1178. "/** 0011 1010 subc %0, #%1 */",
  1179. op[0]);
  1180. }
  1181. SYNTAX("subc %0, #%1");
  1182. #line 1180 "rl78-decode.opc"
  1183. ID(subc); DM(None, SADDR); SC(IMMU(1)); Fzac;
  1184. /*----------------------------------------------------------------------*/
  1185. }
  1186. break;
  1187. case 0x3b:
  1188. {
  1189. /** 0011 1011 subc %0, %1 */
  1190. if (trace)
  1191. {
  1192. printf ("\033[33m%s\033[0m %02x\n",
  1193. "/** 0011 1011 subc %0, %1 */",
  1194. op[0]);
  1195. }
  1196. SYNTAX("subc %0, %1");
  1197. #line 1177 "rl78-decode.opc"
  1198. ID(subc); DR(A); SM(None, SADDR); Fzac;
  1199. }
  1200. break;
  1201. case 0x3c:
  1202. {
  1203. /** 0011 1100 subc %0, #%1 */
  1204. if (trace)
  1205. {
  1206. printf ("\033[33m%s\033[0m %02x\n",
  1207. "/** 0011 1100 subc %0, #%1 */",
  1208. op[0]);
  1209. }
  1210. SYNTAX("subc %0, #%1");
  1211. #line 1168 "rl78-decode.opc"
  1212. ID(subc); DR(A); SC(IMMU(1)); Fzac;
  1213. }
  1214. break;
  1215. case 0x3d:
  1216. {
  1217. /** 0011 1101 subc %0, %e1 */
  1218. if (trace)
  1219. {
  1220. printf ("\033[33m%s\033[0m %02x\n",
  1221. "/** 0011 1101 subc %0, %e1 */",
  1222. op[0]);
  1223. }
  1224. SYNTAX("subc %0, %e1");
  1225. #line 1156 "rl78-decode.opc"
  1226. ID(subc); DR(A); SM(HL, 0); Fzac;
  1227. }
  1228. break;
  1229. case 0x3e:
  1230. {
  1231. /** 0011 1110 subc %0, %ea1 */
  1232. if (trace)
  1233. {
  1234. printf ("\033[33m%s\033[0m %02x\n",
  1235. "/** 0011 1110 subc %0, %ea1 */",
  1236. op[0]);
  1237. }
  1238. SYNTAX("subc %0, %ea1");
  1239. #line 1165 "rl78-decode.opc"
  1240. ID(subc); DR(A); SM(HL, IMMU(1)); Fzac;
  1241. }
  1242. break;
  1243. case 0x3f:
  1244. {
  1245. /** 0011 1111 subc %0, %e!1 */
  1246. if (trace)
  1247. {
  1248. printf ("\033[33m%s\033[0m %02x\n",
  1249. "/** 0011 1111 subc %0, %e!1 */",
  1250. op[0]);
  1251. }
  1252. SYNTAX("subc %0, %e!1");
  1253. #line 1153 "rl78-decode.opc"
  1254. ID(subc); DR(A); SM(None, IMMU(2)); Fzac;
  1255. }
  1256. break;
  1257. case 0x40:
  1258. {
  1259. /** 0100 0000 cmp %e!0, #%1 */
  1260. if (trace)
  1261. {
  1262. printf ("\033[33m%s\033[0m %02x\n",
  1263. "/** 0100 0000 cmp %e!0, #%1 */",
  1264. op[0]);
  1265. }
  1266. SYNTAX("cmp %e!0, #%1");
  1267. #line 482 "rl78-decode.opc"
  1268. ID(cmp); DM(None, IMMU(2)); SC(IMMU(1)); Fzac;
  1269. }
  1270. break;
  1271. case 0x41:
  1272. {
  1273. /** 0100 0001 mov %0, #%1 */
  1274. if (trace)
  1275. {
  1276. printf ("\033[33m%s\033[0m %02x\n",
  1277. "/** 0100 0001 mov %0, #%1 */",
  1278. op[0]);
  1279. }
  1280. SYNTAX("mov %0, #%1");
  1281. #line 719 "rl78-decode.opc"
  1282. ID(mov); DR(ES); SC(IMMU(1));
  1283. }
  1284. break;
  1285. case 0x42:
  1286. {
  1287. /** 0100 0010 cmpw %0, %e!1 */
  1288. if (trace)
  1289. {
  1290. printf ("\033[33m%s\033[0m %02x\n",
  1291. "/** 0100 0010 cmpw %0, %e!1 */",
  1292. op[0]);
  1293. }
  1294. SYNTAX("cmpw %0, %e!1");
  1295. #line 533 "rl78-decode.opc"
  1296. ID(cmp); W(); DR(AX); SM(None, IMMU(2)); Fzac;
  1297. }
  1298. break;
  1299. case 0x43:
  1300. case 0x45:
  1301. case 0x47:
  1302. {
  1303. /** 0100 0ra1 cmpw %0, %1 */
  1304. #line 542 "rl78-decode.opc"
  1305. int ra AU = (op[0] >> 1) & 0x03;
  1306. if (trace)
  1307. {
  1308. printf ("\033[33m%s\033[0m %02x\n",
  1309. "/** 0100 0ra1 cmpw %0, %1 */",
  1310. op[0]);
  1311. printf (" ra = 0x%x\n", ra);
  1312. }
  1313. SYNTAX("cmpw %0, %1");
  1314. #line 542 "rl78-decode.opc"
  1315. ID(cmp); W(); DR(AX); SRW(ra); Fzac;
  1316. }
  1317. break;
  1318. case 0x44:
  1319. {
  1320. /** 0100 0100 cmpw %0, #%1 */
  1321. if (trace)
  1322. {
  1323. printf ("\033[33m%s\033[0m %02x\n",
  1324. "/** 0100 0100 cmpw %0, #%1 */",
  1325. op[0]);
  1326. }
  1327. SYNTAX("cmpw %0, #%1");
  1328. #line 539 "rl78-decode.opc"
  1329. ID(cmp); W(); DR(AX); SC(IMMU(2)); Fzac;
  1330. }
  1331. break;
  1332. case 0x46:
  1333. {
  1334. /** 0100 0110 cmpw %0, %1 */
  1335. if (trace)
  1336. {
  1337. printf ("\033[33m%s\033[0m %02x\n",
  1338. "/** 0100 0110 cmpw %0, %1 */",
  1339. op[0]);
  1340. }
  1341. SYNTAX("cmpw %0, %1");
  1342. #line 545 "rl78-decode.opc"
  1343. ID(cmp); W(); DR(AX); SM(None, SADDR); Fzac;
  1344. /*----------------------------------------------------------------------*/
  1345. }
  1346. break;
  1347. case 0x48:
  1348. {
  1349. /** 0100 1000 mov %e0, %1 */
  1350. if (trace)
  1351. {
  1352. printf ("\033[33m%s\033[0m %02x\n",
  1353. "/** 0100 1000 mov %e0, %1 */",
  1354. op[0]);
  1355. }
  1356. SYNTAX("mov %e0, %1");
  1357. #line 737 "rl78-decode.opc"
  1358. ID(mov); DM(BC, IMMU(2)); SR(A);
  1359. }
  1360. break;
  1361. case 0x49:
  1362. {
  1363. /** 0100 1001 mov %0, %e1 */
  1364. if (trace)
  1365. {
  1366. printf ("\033[33m%s\033[0m %02x\n",
  1367. "/** 0100 1001 mov %0, %e1 */",
  1368. op[0]);
  1369. }
  1370. SYNTAX("mov %0, %e1");
  1371. #line 683 "rl78-decode.opc"
  1372. ID(mov); DR(A); SM(BC, IMMU(2));
  1373. }
  1374. break;
  1375. case 0x4a:
  1376. {
  1377. /** 0100 1010 cmp %0, #%1 */
  1378. if (trace)
  1379. {
  1380. printf ("\033[33m%s\033[0m %02x\n",
  1381. "/** 0100 1010 cmp %0, #%1 */",
  1382. op[0]);
  1383. }
  1384. SYNTAX("cmp %0, #%1");
  1385. #line 485 "rl78-decode.opc"
  1386. ID(cmp); DM(None, SADDR); SC(IMMU(1)); Fzac;
  1387. }
  1388. break;
  1389. case 0x4b:
  1390. {
  1391. /** 0100 1011 cmp %0, %1 */
  1392. if (trace)
  1393. {
  1394. printf ("\033[33m%s\033[0m %02x\n",
  1395. "/** 0100 1011 cmp %0, %1 */",
  1396. op[0]);
  1397. }
  1398. SYNTAX("cmp %0, %1");
  1399. #line 512 "rl78-decode.opc"
  1400. ID(cmp); DR(A); SM(None, SADDR); Fzac;
  1401. /*----------------------------------------------------------------------*/
  1402. }
  1403. break;
  1404. case 0x4c:
  1405. {
  1406. /** 0100 1100 cmp %0, #%1 */
  1407. if (trace)
  1408. {
  1409. printf ("\033[33m%s\033[0m %02x\n",
  1410. "/** 0100 1100 cmp %0, #%1 */",
  1411. op[0]);
  1412. }
  1413. SYNTAX("cmp %0, #%1");
  1414. #line 503 "rl78-decode.opc"
  1415. ID(cmp); DR(A); SC(IMMU(1)); Fzac;
  1416. }
  1417. break;
  1418. case 0x4d:
  1419. {
  1420. /** 0100 1101 cmp %0, %e1 */
  1421. if (trace)
  1422. {
  1423. printf ("\033[33m%s\033[0m %02x\n",
  1424. "/** 0100 1101 cmp %0, %e1 */",
  1425. op[0]);
  1426. }
  1427. SYNTAX("cmp %0, %e1");
  1428. #line 491 "rl78-decode.opc"
  1429. ID(cmp); DR(A); SM(HL, 0); Fzac;
  1430. }
  1431. break;
  1432. case 0x4e:
  1433. {
  1434. /** 0100 1110 cmp %0, %ea1 */
  1435. if (trace)
  1436. {
  1437. printf ("\033[33m%s\033[0m %02x\n",
  1438. "/** 0100 1110 cmp %0, %ea1 */",
  1439. op[0]);
  1440. }
  1441. SYNTAX("cmp %0, %ea1");
  1442. #line 500 "rl78-decode.opc"
  1443. ID(cmp); DR(A); SM(HL, IMMU(1)); Fzac;
  1444. }
  1445. break;
  1446. case 0x4f:
  1447. {
  1448. /** 0100 1111 cmp %0, %e!1 */
  1449. if (trace)
  1450. {
  1451. printf ("\033[33m%s\033[0m %02x\n",
  1452. "/** 0100 1111 cmp %0, %e!1 */",
  1453. op[0]);
  1454. }
  1455. SYNTAX("cmp %0, %e!1");
  1456. #line 488 "rl78-decode.opc"
  1457. ID(cmp); DR(A); SM(None, IMMU(2)); Fzac;
  1458. }
  1459. break;
  1460. case 0x50:
  1461. case 0x51:
  1462. case 0x52:
  1463. case 0x53:
  1464. case 0x54:
  1465. case 0x55:
  1466. case 0x56:
  1467. case 0x57:
  1468. {
  1469. /** 0101 0reg mov %0, #%1 */
  1470. #line 671 "rl78-decode.opc"
  1471. int reg AU = op[0] & 0x07;
  1472. if (trace)
  1473. {
  1474. printf ("\033[33m%s\033[0m %02x\n",
  1475. "/** 0101 0reg mov %0, #%1 */",
  1476. op[0]);
  1477. printf (" reg = 0x%x\n", reg);
  1478. }
  1479. SYNTAX("mov %0, #%1");
  1480. #line 671 "rl78-decode.opc"
  1481. ID(mov); DRB(reg); SC(IMMU(1));
  1482. }
  1483. break;
  1484. case 0x58:
  1485. {
  1486. /** 0101 1000 movw %e0, %1 */
  1487. if (trace)
  1488. {
  1489. printf ("\033[33m%s\033[0m %02x\n",
  1490. "/** 0101 1000 movw %e0, %1 */",
  1491. op[0]);
  1492. }
  1493. SYNTAX("movw %e0, %1");
  1494. #line 873 "rl78-decode.opc"
  1495. ID(mov); W(); DM(B, IMMU(2)); SR(AX);
  1496. }
  1497. break;
  1498. case 0x59:
  1499. {
  1500. /** 0101 1001 movw %0, %e1 */
  1501. if (trace)
  1502. {
  1503. printf ("\033[33m%s\033[0m %02x\n",
  1504. "/** 0101 1001 movw %0, %e1 */",
  1505. op[0]);
  1506. }
  1507. SYNTAX("movw %0, %e1");
  1508. #line 864 "rl78-decode.opc"
  1509. ID(mov); W(); DR(AX); SM(B, IMMU(2));
  1510. }
  1511. break;
  1512. case 0x5a:
  1513. {
  1514. /** 0101 1010 and %0, #%1 */
  1515. if (trace)
  1516. {
  1517. printf ("\033[33m%s\033[0m %02x\n",
  1518. "/** 0101 1010 and %0, #%1 */",
  1519. op[0]);
  1520. }
  1521. SYNTAX("and %0, #%1");
  1522. #line 314 "rl78-decode.opc"
  1523. ID(and); DM(None, SADDR); SC(IMMU(1)); Fz;
  1524. /*----------------------------------------------------------------------*/
  1525. }
  1526. break;
  1527. case 0x5b:
  1528. {
  1529. /** 0101 1011 and %0, %1 */
  1530. if (trace)
  1531. {
  1532. printf ("\033[33m%s\033[0m %02x\n",
  1533. "/** 0101 1011 and %0, %1 */",
  1534. op[0]);
  1535. }
  1536. SYNTAX("and %0, %1");
  1537. #line 311 "rl78-decode.opc"
  1538. ID(and); DR(A); SM(None, SADDR); Fz;
  1539. }
  1540. break;
  1541. case 0x5c:
  1542. {
  1543. /** 0101 1100 and %0, #%1 */
  1544. if (trace)
  1545. {
  1546. printf ("\033[33m%s\033[0m %02x\n",
  1547. "/** 0101 1100 and %0, #%1 */",
  1548. op[0]);
  1549. }
  1550. SYNTAX("and %0, #%1");
  1551. #line 302 "rl78-decode.opc"
  1552. ID(and); DR(A); SC(IMMU(1)); Fz;
  1553. }
  1554. break;
  1555. case 0x5d:
  1556. {
  1557. /** 0101 1101 and %0, %e1 */
  1558. if (trace)
  1559. {
  1560. printf ("\033[33m%s\033[0m %02x\n",
  1561. "/** 0101 1101 and %0, %e1 */",
  1562. op[0]);
  1563. }
  1564. SYNTAX("and %0, %e1");
  1565. #line 290 "rl78-decode.opc"
  1566. ID(and); DR(A); SM(HL, 0); Fz;
  1567. }
  1568. break;
  1569. case 0x5e:
  1570. {
  1571. /** 0101 1110 and %0, %ea1 */
  1572. if (trace)
  1573. {
  1574. printf ("\033[33m%s\033[0m %02x\n",
  1575. "/** 0101 1110 and %0, %ea1 */",
  1576. op[0]);
  1577. }
  1578. SYNTAX("and %0, %ea1");
  1579. #line 296 "rl78-decode.opc"
  1580. ID(and); DR(A); SM(HL, IMMU(1)); Fz;
  1581. }
  1582. break;
  1583. case 0x5f:
  1584. {
  1585. /** 0101 1111 and %0, %e!1 */
  1586. if (trace)
  1587. {
  1588. printf ("\033[33m%s\033[0m %02x\n",
  1589. "/** 0101 1111 and %0, %e!1 */",
  1590. op[0]);
  1591. }
  1592. SYNTAX("and %0, %e!1");
  1593. #line 287 "rl78-decode.opc"
  1594. ID(and); DR(A); SM(None, IMMU(2)); Fz;
  1595. }
  1596. break;
  1597. case 0x60:
  1598. case 0x62:
  1599. case 0x63:
  1600. case 0x64:
  1601. case 0x65:
  1602. case 0x66:
  1603. case 0x67:
  1604. {
  1605. /** 0110 0rba mov %0, %1 */
  1606. #line 674 "rl78-decode.opc"
  1607. int rba AU = op[0] & 0x07;
  1608. if (trace)
  1609. {
  1610. printf ("\033[33m%s\033[0m %02x\n",
  1611. "/** 0110 0rba mov %0, %1 */",
  1612. op[0]);
  1613. printf (" rba = 0x%x\n", rba);
  1614. }
  1615. SYNTAX("mov %0, %1");
  1616. #line 674 "rl78-decode.opc"
  1617. ID(mov); DR(A); SRB(rba);
  1618. }
  1619. break;
  1620. case 0x61:
  1621. GETBYTE ();
  1622. switch (op[1] & 0xff)
  1623. {
  1624. case 0x00:
  1625. case 0x01:
  1626. case 0x02:
  1627. case 0x03:
  1628. case 0x04:
  1629. case 0x05:
  1630. case 0x06:
  1631. case 0x07:
  1632. {
  1633. /** 0110 0001 0000 0reg add %0, %1 */
  1634. #line 227 "rl78-decode.opc"
  1635. int reg AU = op[1] & 0x07;
  1636. if (trace)
  1637. {
  1638. printf ("\033[33m%s\033[0m %02x %02x\n",
  1639. "/** 0110 0001 0000 0reg add %0, %1 */",
  1640. op[0], op[1]);
  1641. printf (" reg = 0x%x\n", reg);
  1642. }
  1643. SYNTAX("add %0, %1");
  1644. #line 227 "rl78-decode.opc"
  1645. ID(add); DRB(reg); SR(A); Fzac;
  1646. }
  1647. break;
  1648. case 0x08:
  1649. case 0x0a:
  1650. case 0x0b:
  1651. case 0x0c:
  1652. case 0x0d:
  1653. case 0x0e:
  1654. case 0x0f:
  1655. {
  1656. /** 0110 0001 0000 1rba add %0, %1 */
  1657. #line 221 "rl78-decode.opc"
  1658. int rba AU = op[1] & 0x07;
  1659. if (trace)
  1660. {
  1661. printf ("\033[33m%s\033[0m %02x %02x\n",
  1662. "/** 0110 0001 0000 1rba add %0, %1 */",
  1663. op[0], op[1]);
  1664. printf (" rba = 0x%x\n", rba);
  1665. }
  1666. SYNTAX("add %0, %1");
  1667. #line 221 "rl78-decode.opc"
  1668. ID(add); DR(A); SRB(rba); Fzac;
  1669. }
  1670. break;
  1671. case 0x09:
  1672. {
  1673. /** 0110 0001 0000 1001 addw %0, %ea1 */
  1674. if (trace)
  1675. {
  1676. printf ("\033[33m%s\033[0m %02x %02x\n",
  1677. "/** 0110 0001 0000 1001 addw %0, %ea1 */",
  1678. op[0], op[1]);
  1679. }
  1680. SYNTAX("addw %0, %ea1");
  1681. #line 270 "rl78-decode.opc"
  1682. ID(add); W(); DR(AX); SM(HL, IMMU(1)); Fzac;
  1683. }
  1684. break;
  1685. case 0x10:
  1686. case 0x11:
  1687. case 0x12:
  1688. case 0x13:
  1689. case 0x14:
  1690. case 0x15:
  1691. case 0x16:
  1692. case 0x17:
  1693. {
  1694. /** 0110 0001 0001 0reg addc %0, %1 */
  1695. #line 256 "rl78-decode.opc"
  1696. int reg AU = op[1] & 0x07;
  1697. if (trace)
  1698. {
  1699. printf ("\033[33m%s\033[0m %02x %02x\n",
  1700. "/** 0110 0001 0001 0reg addc %0, %1 */",
  1701. op[0], op[1]);
  1702. printf (" reg = 0x%x\n", reg);
  1703. }
  1704. SYNTAX("addc %0, %1");
  1705. #line 256 "rl78-decode.opc"
  1706. ID(addc); DRB(reg); SR(A); Fzac;
  1707. }
  1708. break;
  1709. case 0x18:
  1710. case 0x1a:
  1711. case 0x1b:
  1712. case 0x1c:
  1713. case 0x1d:
  1714. case 0x1e:
  1715. case 0x1f:
  1716. {
  1717. /** 0110 0001 0001 1rba addc %0, %1 */
  1718. #line 253 "rl78-decode.opc"
  1719. int rba AU = op[1] & 0x07;
  1720. if (trace)
  1721. {
  1722. printf ("\033[33m%s\033[0m %02x %02x\n",
  1723. "/** 0110 0001 0001 1rba addc %0, %1 */",
  1724. op[0], op[1]);
  1725. printf (" rba = 0x%x\n", rba);
  1726. }
  1727. SYNTAX("addc %0, %1");
  1728. #line 253 "rl78-decode.opc"
  1729. ID(addc); DR(A); SRB(rba); Fzac;
  1730. }
  1731. break;
  1732. case 0x20:
  1733. case 0x21:
  1734. case 0x22:
  1735. case 0x23:
  1736. case 0x24:
  1737. case 0x25:
  1738. case 0x26:
  1739. case 0x27:
  1740. {
  1741. /** 0110 0001 0010 0reg sub %0, %1 */
  1742. #line 1145 "rl78-decode.opc"
  1743. int reg AU = op[1] & 0x07;
  1744. if (trace)
  1745. {
  1746. printf ("\033[33m%s\033[0m %02x %02x\n",
  1747. "/** 0110 0001 0010 0reg sub %0, %1 */",
  1748. op[0], op[1]);
  1749. printf (" reg = 0x%x\n", reg);
  1750. }
  1751. SYNTAX("sub %0, %1");
  1752. #line 1145 "rl78-decode.opc"
  1753. ID(sub); DRB(reg); SR(A); Fzac;
  1754. }
  1755. break;
  1756. case 0x28:
  1757. case 0x2a:
  1758. case 0x2b:
  1759. case 0x2c:
  1760. case 0x2d:
  1761. case 0x2e:
  1762. case 0x2f:
  1763. {
  1764. /** 0110 0001 0010 1rba sub %0, %1 */
  1765. #line 1139 "rl78-decode.opc"
  1766. int rba AU = op[1] & 0x07;
  1767. if (trace)
  1768. {
  1769. printf ("\033[33m%s\033[0m %02x %02x\n",
  1770. "/** 0110 0001 0010 1rba sub %0, %1 */",
  1771. op[0], op[1]);
  1772. printf (" rba = 0x%x\n", rba);
  1773. }
  1774. SYNTAX("sub %0, %1");
  1775. #line 1139 "rl78-decode.opc"
  1776. ID(sub); DR(A); SRB(rba); Fzac;
  1777. }
  1778. break;
  1779. case 0x29:
  1780. {
  1781. /** 0110 0001 0010 1001 subw %0, %ea1 */
  1782. if (trace)
  1783. {
  1784. printf ("\033[33m%s\033[0m %02x %02x\n",
  1785. "/** 0110 0001 0010 1001 subw %0, %ea1 */",
  1786. op[0], op[1]);
  1787. }
  1788. SYNTAX("subw %0, %ea1");
  1789. #line 1188 "rl78-decode.opc"
  1790. ID(sub); W(); DR(AX); SM(HL, IMMU(1)); Fzac;
  1791. }
  1792. break;
  1793. case 0x30:
  1794. case 0x31:
  1795. case 0x32:
  1796. case 0x33:
  1797. case 0x34:
  1798. case 0x35:
  1799. case 0x36:
  1800. case 0x37:
  1801. {
  1802. /** 0110 0001 0011 0reg subc %0, %1 */
  1803. #line 1174 "rl78-decode.opc"
  1804. int reg AU = op[1] & 0x07;
  1805. if (trace)
  1806. {
  1807. printf ("\033[33m%s\033[0m %02x %02x\n",
  1808. "/** 0110 0001 0011 0reg subc %0, %1 */",
  1809. op[0], op[1]);
  1810. printf (" reg = 0x%x\n", reg);
  1811. }
  1812. SYNTAX("subc %0, %1");
  1813. #line 1174 "rl78-decode.opc"
  1814. ID(subc); DRB(reg); SR(A); Fzac;
  1815. }
  1816. break;
  1817. case 0x38:
  1818. case 0x3a:
  1819. case 0x3b:
  1820. case 0x3c:
  1821. case 0x3d:
  1822. case 0x3e:
  1823. case 0x3f:
  1824. {
  1825. /** 0110 0001 0011 1rba subc %0, %1 */
  1826. #line 1171 "rl78-decode.opc"
  1827. int rba AU = op[1] & 0x07;
  1828. if (trace)
  1829. {
  1830. printf ("\033[33m%s\033[0m %02x %02x\n",
  1831. "/** 0110 0001 0011 1rba subc %0, %1 */",
  1832. op[0], op[1]);
  1833. printf (" rba = 0x%x\n", rba);
  1834. }
  1835. SYNTAX("subc %0, %1");
  1836. #line 1171 "rl78-decode.opc"
  1837. ID(subc); DR(A); SRB(rba); Fzac;
  1838. }
  1839. break;
  1840. case 0x40:
  1841. case 0x41:
  1842. case 0x42:
  1843. case 0x43:
  1844. case 0x44:
  1845. case 0x45:
  1846. case 0x46:
  1847. case 0x47:
  1848. {
  1849. /** 0110 0001 0100 0reg cmp %0, %1 */
  1850. #line 509 "rl78-decode.opc"
  1851. int reg AU = op[1] & 0x07;
  1852. if (trace)
  1853. {
  1854. printf ("\033[33m%s\033[0m %02x %02x\n",
  1855. "/** 0110 0001 0100 0reg cmp %0, %1 */",
  1856. op[0], op[1]);
  1857. printf (" reg = 0x%x\n", reg);
  1858. }
  1859. SYNTAX("cmp %0, %1");
  1860. #line 509 "rl78-decode.opc"
  1861. ID(cmp); DRB(reg); SR(A); Fzac;
  1862. }
  1863. break;
  1864. case 0x48:
  1865. case 0x4a:
  1866. case 0x4b:
  1867. case 0x4c:
  1868. case 0x4d:
  1869. case 0x4e:
  1870. case 0x4f:
  1871. {
  1872. /** 0110 0001 0100 1rba cmp %0, %1 */
  1873. #line 506 "rl78-decode.opc"
  1874. int rba AU = op[1] & 0x07;
  1875. if (trace)
  1876. {
  1877. printf ("\033[33m%s\033[0m %02x %02x\n",
  1878. "/** 0110 0001 0100 1rba cmp %0, %1 */",
  1879. op[0], op[1]);
  1880. printf (" rba = 0x%x\n", rba);
  1881. }
  1882. SYNTAX("cmp %0, %1");
  1883. #line 506 "rl78-decode.opc"
  1884. ID(cmp); DR(A); SRB(rba); Fzac;
  1885. }
  1886. break;
  1887. case 0x49:
  1888. {
  1889. /** 0110 0001 0100 1001 cmpw %0, %ea1 */
  1890. if (trace)
  1891. {
  1892. printf ("\033[33m%s\033[0m %02x %02x\n",
  1893. "/** 0110 0001 0100 1001 cmpw %0, %ea1 */",
  1894. op[0], op[1]);
  1895. }
  1896. SYNTAX("cmpw %0, %ea1");
  1897. #line 536 "rl78-decode.opc"
  1898. ID(cmp); W(); DR(AX); SM(HL, IMMU(1)); Fzac;
  1899. }
  1900. break;
  1901. case 0x50:
  1902. case 0x51:
  1903. case 0x52:
  1904. case 0x53:
  1905. case 0x54:
  1906. case 0x55:
  1907. case 0x56:
  1908. case 0x57:
  1909. {
  1910. /** 0110 0001 0101 0reg and %0, %1 */
  1911. #line 308 "rl78-decode.opc"
  1912. int reg AU = op[1] & 0x07;
  1913. if (trace)
  1914. {
  1915. printf ("\033[33m%s\033[0m %02x %02x\n",
  1916. "/** 0110 0001 0101 0reg and %0, %1 */",
  1917. op[0], op[1]);
  1918. printf (" reg = 0x%x\n", reg);
  1919. }
  1920. SYNTAX("and %0, %1");
  1921. #line 308 "rl78-decode.opc"
  1922. ID(and); DRB(reg); SR(A); Fz;
  1923. }
  1924. break;
  1925. case 0x58:
  1926. case 0x5a:
  1927. case 0x5b:
  1928. case 0x5c:
  1929. case 0x5d:
  1930. case 0x5e:
  1931. case 0x5f:
  1932. {
  1933. /** 0110 0001 0101 1rba and %0, %1 */
  1934. #line 305 "rl78-decode.opc"
  1935. int rba AU = op[1] & 0x07;
  1936. if (trace)
  1937. {
  1938. printf ("\033[33m%s\033[0m %02x %02x\n",
  1939. "/** 0110 0001 0101 1rba and %0, %1 */",
  1940. op[0], op[1]);
  1941. printf (" rba = 0x%x\n", rba);
  1942. }
  1943. SYNTAX("and %0, %1");
  1944. #line 305 "rl78-decode.opc"
  1945. ID(and); DR(A); SRB(rba); Fz;
  1946. }
  1947. break;
  1948. case 0x59:
  1949. {
  1950. /** 0110 0001 0101 1001 inc %ea0 */
  1951. if (trace)
  1952. {
  1953. printf ("\033[33m%s\033[0m %02x %02x\n",
  1954. "/** 0110 0001 0101 1001 inc %ea0 */",
  1955. op[0], op[1]);
  1956. }
  1957. SYNTAX("inc %ea0");
  1958. #line 586 "rl78-decode.opc"
  1959. ID(add); DM(HL, IMMU(1)); SC(1); Fza;
  1960. }
  1961. break;
  1962. case 0x60:
  1963. case 0x61:
  1964. case 0x62:
  1965. case 0x63:
  1966. case 0x64:
  1967. case 0x65:
  1968. case 0x66:
  1969. case 0x67:
  1970. {
  1971. /** 0110 0001 0110 0reg or %0, %1 */
  1972. #line 963 "rl78-decode.opc"
  1973. int reg AU = op[1] & 0x07;
  1974. if (trace)
  1975. {
  1976. printf ("\033[33m%s\033[0m %02x %02x\n",
  1977. "/** 0110 0001 0110 0reg or %0, %1 */",
  1978. op[0], op[1]);
  1979. printf (" reg = 0x%x\n", reg);
  1980. }
  1981. SYNTAX("or %0, %1");
  1982. #line 963 "rl78-decode.opc"
  1983. ID(or); DRB(reg); SR(A); Fz;
  1984. }
  1985. break;
  1986. case 0x68:
  1987. case 0x6a:
  1988. case 0x6b:
  1989. case 0x6c:
  1990. case 0x6d:
  1991. case 0x6e:
  1992. case 0x6f:
  1993. {
  1994. /** 0110 0001 0110 1rba or %0, %1 */
  1995. #line 960 "rl78-decode.opc"
  1996. int rba AU = op[1] & 0x07;
  1997. if (trace)
  1998. {
  1999. printf ("\033[33m%s\033[0m %02x %02x\n",
  2000. "/** 0110 0001 0110 1rba or %0, %1 */",
  2001. op[0], op[1]);
  2002. printf (" rba = 0x%x\n", rba);
  2003. }
  2004. SYNTAX("or %0, %1");
  2005. #line 960 "rl78-decode.opc"
  2006. ID(or); DR(A); SRB(rba); Fz;
  2007. }
  2008. break;
  2009. case 0x69:
  2010. {
  2011. /** 0110 0001 0110 1001 dec %ea0 */
  2012. if (trace)
  2013. {
  2014. printf ("\033[33m%s\033[0m %02x %02x\n",
  2015. "/** 0110 0001 0110 1001 dec %ea0 */",
  2016. op[0], op[1]);
  2017. }
  2018. SYNTAX("dec %ea0");
  2019. #line 553 "rl78-decode.opc"
  2020. ID(sub); DM(HL, IMMU(1)); SC(1); Fza;
  2021. }
  2022. break;
  2023. case 0x70:
  2024. case 0x71:
  2025. case 0x72:
  2026. case 0x73:
  2027. case 0x74:
  2028. case 0x75:
  2029. case 0x76:
  2030. case 0x77:
  2031. {
  2032. /** 0110 0001 0111 0reg xor %0, %1 */
  2033. #line 1267 "rl78-decode.opc"
  2034. int reg AU = op[1] & 0x07;
  2035. if (trace)
  2036. {
  2037. printf ("\033[33m%s\033[0m %02x %02x\n",
  2038. "/** 0110 0001 0111 0reg xor %0, %1 */",
  2039. op[0], op[1]);
  2040. printf (" reg = 0x%x\n", reg);
  2041. }
  2042. SYNTAX("xor %0, %1");
  2043. #line 1267 "rl78-decode.opc"
  2044. ID(xor); DRB(reg); SR(A); Fz;
  2045. }
  2046. break;
  2047. case 0x78:
  2048. case 0x7a:
  2049. case 0x7b:
  2050. case 0x7c:
  2051. case 0x7d:
  2052. case 0x7e:
  2053. case 0x7f:
  2054. {
  2055. /** 0110 0001 0111 1rba xor %0, %1 */
  2056. #line 1264 "rl78-decode.opc"
  2057. int rba AU = op[1] & 0x07;
  2058. if (trace)
  2059. {
  2060. printf ("\033[33m%s\033[0m %02x %02x\n",
  2061. "/** 0110 0001 0111 1rba xor %0, %1 */",
  2062. op[0], op[1]);
  2063. printf (" rba = 0x%x\n", rba);
  2064. }
  2065. SYNTAX("xor %0, %1");
  2066. #line 1264 "rl78-decode.opc"
  2067. ID(xor); DR(A); SRB(rba); Fz;
  2068. }
  2069. break;
  2070. case 0x79:
  2071. {
  2072. /** 0110 0001 0111 1001 incw %ea0 */
  2073. if (trace)
  2074. {
  2075. printf ("\033[33m%s\033[0m %02x %02x\n",
  2076. "/** 0110 0001 0111 1001 incw %ea0 */",
  2077. op[0], op[1]);
  2078. }
  2079. SYNTAX("incw %ea0");
  2080. #line 600 "rl78-decode.opc"
  2081. ID(add); W(); DM(HL, IMMU(1)); SC(1);
  2082. }
  2083. break;
  2084. case 0x80:
  2085. case 0x81:
  2086. {
  2087. /** 0110 0001 1000 000 add %0, %e1 */
  2088. if (trace)
  2089. {
  2090. printf ("\033[33m%s\033[0m %02x %02x\n",
  2091. "/** 0110 0001 1000 000 add %0, %e1 */",
  2092. op[0], op[1]);
  2093. }
  2094. SYNTAX("add %0, %e1");
  2095. #line 209 "rl78-decode.opc"
  2096. ID(add); DR(A); SM2(HL, B, 0); Fzac;
  2097. }
  2098. break;
  2099. case 0x82:
  2100. {
  2101. /** 0110 0001 1000 0010 add %0, %e1 */
  2102. if (trace)
  2103. {
  2104. printf ("\033[33m%s\033[0m %02x %02x\n",
  2105. "/** 0110 0001 1000 0010 add %0, %e1 */",
  2106. op[0], op[1]);
  2107. }
  2108. SYNTAX("add %0, %e1");
  2109. #line 215 "rl78-decode.opc"
  2110. ID(add); DR(A); SM2(HL, C, 0); Fzac;
  2111. }
  2112. break;
  2113. case 0x84:
  2114. case 0x85:
  2115. case 0x86:
  2116. case 0x87:
  2117. case 0x94:
  2118. case 0x95:
  2119. case 0x96:
  2120. case 0x97:
  2121. case 0xa4:
  2122. case 0xa5:
  2123. case 0xa6:
  2124. case 0xa7:
  2125. case 0xb4:
  2126. case 0xb5:
  2127. case 0xb6:
  2128. case 0xb7:
  2129. case 0xc4:
  2130. case 0xc5:
  2131. case 0xc6:
  2132. case 0xc7:
  2133. case 0xd4:
  2134. case 0xd5:
  2135. case 0xd6:
  2136. case 0xd7:
  2137. case 0xe4:
  2138. case 0xe5:
  2139. case 0xe6:
  2140. case 0xe7:
  2141. case 0xf4:
  2142. case 0xf5:
  2143. case 0xf6:
  2144. case 0xf7:
  2145. {
  2146. /** 0110 0001 1nnn 01mm callt [%x0] */
  2147. #line 435 "rl78-decode.opc"
  2148. int nnn AU = (op[1] >> 4) & 0x07;
  2149. #line 435 "rl78-decode.opc"
  2150. int mm AU = op[1] & 0x03;
  2151. if (trace)
  2152. {
  2153. printf ("\033[33m%s\033[0m %02x %02x\n",
  2154. "/** 0110 0001 1nnn 01mm callt [%x0] */",
  2155. op[0], op[1]);
  2156. printf (" nnn = 0x%x,", nnn);
  2157. printf (" mm = 0x%x\n", mm);
  2158. }
  2159. SYNTAX("callt [%x0]");
  2160. #line 435 "rl78-decode.opc"
  2161. ID(call); DM(None, 0x80 + mm*16 + nnn*2);
  2162. /*----------------------------------------------------------------------*/
  2163. }
  2164. break;
  2165. case 0x88:
  2166. case 0x8a:
  2167. case 0x8b:
  2168. case 0x8c:
  2169. case 0x8d:
  2170. case 0x8e:
  2171. case 0x8f:
  2172. {
  2173. /** 0110 0001 1000 1reg xch %0, %1 */
  2174. #line 1226 "rl78-decode.opc"
  2175. int reg AU = op[1] & 0x07;
  2176. if (trace)
  2177. {
  2178. printf ("\033[33m%s\033[0m %02x %02x\n",
  2179. "/** 0110 0001 1000 1reg xch %0, %1 */",
  2180. op[0], op[1]);
  2181. printf (" reg = 0x%x\n", reg);
  2182. }
  2183. SYNTAX("xch %0, %1");
  2184. #line 1226 "rl78-decode.opc"
  2185. /* Note: DECW uses reg == X, so this must follow DECW */
  2186. ID(xch); DR(A); SRB(reg);
  2187. }
  2188. break;
  2189. case 0x89:
  2190. {
  2191. /** 0110 0001 1000 1001 decw %ea0 */
  2192. if (trace)
  2193. {
  2194. printf ("\033[33m%s\033[0m %02x %02x\n",
  2195. "/** 0110 0001 1000 1001 decw %ea0 */",
  2196. op[0], op[1]);
  2197. }
  2198. SYNTAX("decw %ea0");
  2199. #line 567 "rl78-decode.opc"
  2200. ID(sub); W(); DM(HL, IMMU(1)); SC(1);
  2201. }
  2202. break;
  2203. case 0x90:
  2204. {
  2205. /** 0110 0001 1001 0000 addc %0, %e1 */
  2206. if (trace)
  2207. {
  2208. printf ("\033[33m%s\033[0m %02x %02x\n",
  2209. "/** 0110 0001 1001 0000 addc %0, %e1 */",
  2210. op[0], op[1]);
  2211. }
  2212. SYNTAX("addc %0, %e1");
  2213. #line 241 "rl78-decode.opc"
  2214. ID(addc); DR(A); SM2(HL, B, 0); Fzac;
  2215. }
  2216. break;
  2217. case 0x92:
  2218. {
  2219. /** 0110 0001 1001 0010 addc %0, %e1 */
  2220. if (trace)
  2221. {
  2222. printf ("\033[33m%s\033[0m %02x %02x\n",
  2223. "/** 0110 0001 1001 0010 addc %0, %e1 */",
  2224. op[0], op[1]);
  2225. }
  2226. SYNTAX("addc %0, %e1");
  2227. #line 244 "rl78-decode.opc"
  2228. ID(addc); DR(A); SM2(HL, C, 0); Fzac;
  2229. }
  2230. break;
  2231. case 0xa0:
  2232. case 0xa1:
  2233. {
  2234. /** 0110 0001 1010 000 sub %0, %e1 */
  2235. if (trace)
  2236. {
  2237. printf ("\033[33m%s\033[0m %02x %02x\n",
  2238. "/** 0110 0001 1010 000 sub %0, %e1 */",
  2239. op[0], op[1]);
  2240. }
  2241. SYNTAX("sub %0, %e1");
  2242. #line 1127 "rl78-decode.opc"
  2243. ID(sub); DR(A); SM2(HL, B, 0); Fzac;
  2244. }
  2245. break;
  2246. case 0xa2:
  2247. {
  2248. /** 0110 0001 1010 0010 sub %0, %e1 */
  2249. if (trace)
  2250. {
  2251. printf ("\033[33m%s\033[0m %02x %02x\n",
  2252. "/** 0110 0001 1010 0010 sub %0, %e1 */",
  2253. op[0], op[1]);
  2254. }
  2255. SYNTAX("sub %0, %e1");
  2256. #line 1133 "rl78-decode.opc"
  2257. ID(sub); DR(A); SM2(HL, C, 0); Fzac;
  2258. }
  2259. break;
  2260. case 0xa8:
  2261. {
  2262. /** 0110 0001 1010 1000 xch %0, %1 */
  2263. if (trace)
  2264. {
  2265. printf ("\033[33m%s\033[0m %02x %02x\n",
  2266. "/** 0110 0001 1010 1000 xch %0, %1 */",
  2267. op[0], op[1]);
  2268. }
  2269. SYNTAX("xch %0, %1");
  2270. #line 1230 "rl78-decode.opc"
  2271. ID(xch); DR(A); SM(None, SADDR);
  2272. }
  2273. break;
  2274. case 0xa9:
  2275. {
  2276. /** 0110 0001 1010 1001 xch %0, %e1 */
  2277. if (trace)
  2278. {
  2279. printf ("\033[33m%s\033[0m %02x %02x\n",
  2280. "/** 0110 0001 1010 1001 xch %0, %e1 */",
  2281. op[0], op[1]);
  2282. }
  2283. SYNTAX("xch %0, %e1");
  2284. #line 1223 "rl78-decode.opc"
  2285. ID(xch); DR(A); SM2(HL, C, 0);
  2286. }
  2287. break;
  2288. case 0xaa:
  2289. {
  2290. /** 0110 0001 1010 1010 xch %0, %e!1 */
  2291. if (trace)
  2292. {
  2293. printf ("\033[33m%s\033[0m %02x %02x\n",
  2294. "/** 0110 0001 1010 1010 xch %0, %e!1 */",
  2295. op[0], op[1]);
  2296. }
  2297. SYNTAX("xch %0, %e!1");
  2298. #line 1205 "rl78-decode.opc"
  2299. ID(xch); DR(A); SM(None, IMMU(2));
  2300. }
  2301. break;
  2302. case 0xab:
  2303. {
  2304. /** 0110 0001 1010 1011 xch %0, %s1 */
  2305. if (trace)
  2306. {
  2307. printf ("\033[33m%s\033[0m %02x %02x\n",
  2308. "/** 0110 0001 1010 1011 xch %0, %s1 */",
  2309. op[0], op[1]);
  2310. }
  2311. SYNTAX("xch %0, %s1");
  2312. #line 1233 "rl78-decode.opc"
  2313. ID(xch); DR(A); SM(None, SFR);
  2314. }
  2315. break;
  2316. case 0xac:
  2317. {
  2318. /** 0110 0001 1010 1100 xch %0, %e1 */
  2319. if (trace)
  2320. {
  2321. printf ("\033[33m%s\033[0m %02x %02x\n",
  2322. "/** 0110 0001 1010 1100 xch %0, %e1 */",
  2323. op[0], op[1]);
  2324. }
  2325. SYNTAX("xch %0, %e1");
  2326. #line 1214 "rl78-decode.opc"
  2327. ID(xch); DR(A); SM(HL, 0);
  2328. }
  2329. break;
  2330. case 0xad:
  2331. {
  2332. /** 0110 0001 1010 1101 xch %0, %ea1 */
  2333. if (trace)
  2334. {
  2335. printf ("\033[33m%s\033[0m %02x %02x\n",
  2336. "/** 0110 0001 1010 1101 xch %0, %ea1 */",
  2337. op[0], op[1]);
  2338. }
  2339. SYNTAX("xch %0, %ea1");
  2340. #line 1220 "rl78-decode.opc"
  2341. ID(xch); DR(A); SM(HL, IMMU(1));
  2342. }
  2343. break;
  2344. case 0xae:
  2345. {
  2346. /** 0110 0001 1010 1110 xch %0, %e1 */
  2347. if (trace)
  2348. {
  2349. printf ("\033[33m%s\033[0m %02x %02x\n",
  2350. "/** 0110 0001 1010 1110 xch %0, %e1 */",
  2351. op[0], op[1]);
  2352. }
  2353. SYNTAX("xch %0, %e1");
  2354. #line 1208 "rl78-decode.opc"
  2355. ID(xch); DR(A); SM(DE, 0);
  2356. }
  2357. break;
  2358. case 0xaf:
  2359. {
  2360. /** 0110 0001 1010 1111 xch %0, %ea1 */
  2361. if (trace)
  2362. {
  2363. printf ("\033[33m%s\033[0m %02x %02x\n",
  2364. "/** 0110 0001 1010 1111 xch %0, %ea1 */",
  2365. op[0], op[1]);
  2366. }
  2367. SYNTAX("xch %0, %ea1");
  2368. #line 1211 "rl78-decode.opc"
  2369. ID(xch); DR(A); SM(DE, IMMU(1));
  2370. }
  2371. break;
  2372. case 0xb0:
  2373. {
  2374. /** 0110 0001 1011 0000 subc %0, %e1 */
  2375. if (trace)
  2376. {
  2377. printf ("\033[33m%s\033[0m %02x %02x\n",
  2378. "/** 0110 0001 1011 0000 subc %0, %e1 */",
  2379. op[0], op[1]);
  2380. }
  2381. SYNTAX("subc %0, %e1");
  2382. #line 1159 "rl78-decode.opc"
  2383. ID(subc); DR(A); SM2(HL, B, 0); Fzac;
  2384. }
  2385. break;
  2386. case 0xb2:
  2387. {
  2388. /** 0110 0001 1011 0010 subc %0, %e1 */
  2389. if (trace)
  2390. {
  2391. printf ("\033[33m%s\033[0m %02x %02x\n",
  2392. "/** 0110 0001 1011 0010 subc %0, %e1 */",
  2393. op[0], op[1]);
  2394. }
  2395. SYNTAX("subc %0, %e1");
  2396. #line 1162 "rl78-decode.opc"
  2397. ID(subc); DR(A); SM2(HL, C, 0); Fzac;
  2398. }
  2399. break;
  2400. case 0xb8:
  2401. {
  2402. /** 0110 0001 1011 1000 mov %0, %1 */
  2403. if (trace)
  2404. {
  2405. printf ("\033[33m%s\033[0m %02x %02x\n",
  2406. "/** 0110 0001 1011 1000 mov %0, %1 */",
  2407. op[0], op[1]);
  2408. }
  2409. SYNTAX("mov %0, %1");
  2410. #line 725 "rl78-decode.opc"
  2411. ID(mov); DR(ES); SM(None, SADDR);
  2412. }
  2413. break;
  2414. case 0xb9:
  2415. {
  2416. /** 0110 0001 1011 1001 xch %0, %e1 */
  2417. if (trace)
  2418. {
  2419. printf ("\033[33m%s\033[0m %02x %02x\n",
  2420. "/** 0110 0001 1011 1001 xch %0, %e1 */",
  2421. op[0], op[1]);
  2422. }
  2423. SYNTAX("xch %0, %e1");
  2424. #line 1217 "rl78-decode.opc"
  2425. ID(xch); DR(A); SM2(HL, B, 0);
  2426. }
  2427. break;
  2428. case 0xc0:
  2429. {
  2430. /** 0110 0001 1100 0000 cmp %0, %e1 */
  2431. if (trace)
  2432. {
  2433. printf ("\033[33m%s\033[0m %02x %02x\n",
  2434. "/** 0110 0001 1100 0000 cmp %0, %e1 */",
  2435. op[0], op[1]);
  2436. }
  2437. SYNTAX("cmp %0, %e1");
  2438. #line 494 "rl78-decode.opc"
  2439. ID(cmp); DR(A); SM2(HL, B, 0); Fzac;
  2440. }
  2441. break;
  2442. case 0xc2:
  2443. {
  2444. /** 0110 0001 1100 0010 cmp %0, %e1 */
  2445. if (trace)
  2446. {
  2447. printf ("\033[33m%s\033[0m %02x %02x\n",
  2448. "/** 0110 0001 1100 0010 cmp %0, %e1 */",
  2449. op[0], op[1]);
  2450. }
  2451. SYNTAX("cmp %0, %e1");
  2452. #line 497 "rl78-decode.opc"
  2453. ID(cmp); DR(A); SM2(HL, C, 0); Fzac;
  2454. }
  2455. break;
  2456. case 0xc3:
  2457. {
  2458. /** 0110 0001 1100 0011 bh $%a0 */
  2459. if (trace)
  2460. {
  2461. printf ("\033[33m%s\033[0m %02x %02x\n",
  2462. "/** 0110 0001 1100 0011 bh $%a0 */",
  2463. op[0], op[1]);
  2464. }
  2465. SYNTAX("bh $%a0");
  2466. #line 342 "rl78-decode.opc"
  2467. ID(branch_cond); DC(pc+IMMS(1)+3); SR(None); COND(H);
  2468. }
  2469. break;
  2470. case 0xc8:
  2471. {
  2472. /** 0110 0001 1100 1000 sk%c1 */
  2473. if (trace)
  2474. {
  2475. printf ("\033[33m%s\033[0m %02x %02x\n",
  2476. "/** 0110 0001 1100 1000 sk%c1 */",
  2477. op[0], op[1]);
  2478. }
  2479. SYNTAX("sk%c1");
  2480. #line 1096 "rl78-decode.opc"
  2481. ID(skip); COND(C);
  2482. }
  2483. break;
  2484. case 0xc9:
  2485. {
  2486. /** 0110 0001 1100 1001 mov %0, %e1 */
  2487. if (trace)
  2488. {
  2489. printf ("\033[33m%s\033[0m %02x %02x\n",
  2490. "/** 0110 0001 1100 1001 mov %0, %e1 */",
  2491. op[0], op[1]);
  2492. }
  2493. SYNTAX("mov %0, %e1");
  2494. #line 662 "rl78-decode.opc"
  2495. ID(mov); DR(A); SM2(HL, B, 0);
  2496. }
  2497. break;
  2498. case 0xca:
  2499. case 0xda:
  2500. case 0xea:
  2501. case 0xfa:
  2502. {
  2503. /** 0110 0001 11rg 1010 call %0 */
  2504. #line 432 "rl78-decode.opc"
  2505. int rg AU = (op[1] >> 4) & 0x03;
  2506. if (trace)
  2507. {
  2508. printf ("\033[33m%s\033[0m %02x %02x\n",
  2509. "/** 0110 0001 11rg 1010 call %0 */",
  2510. op[0], op[1]);
  2511. printf (" rg = 0x%x\n", rg);
  2512. }
  2513. SYNTAX("call %0");
  2514. #line 432 "rl78-decode.opc"
  2515. ID(call); DRW(rg);
  2516. }
  2517. break;
  2518. case 0xcb:
  2519. {
  2520. /** 0110 0001 1100 1011 br ax */
  2521. if (trace)
  2522. {
  2523. printf ("\033[33m%s\033[0m %02x %02x\n",
  2524. "/** 0110 0001 1100 1011 br ax */",
  2525. op[0], op[1]);
  2526. }
  2527. SYNTAX("br ax");
  2528. #line 382 "rl78-decode.opc"
  2529. ID(branch); DR(AX);
  2530. /*----------------------------------------------------------------------*/
  2531. }
  2532. break;
  2533. case 0xcc:
  2534. {
  2535. /** 0110 0001 1100 1100 brk */
  2536. if (trace)
  2537. {
  2538. printf ("\033[33m%s\033[0m %02x %02x\n",
  2539. "/** 0110 0001 1100 1100 brk */",
  2540. op[0], op[1]);
  2541. }
  2542. SYNTAX("brk");
  2543. #line 390 "rl78-decode.opc"
  2544. ID(break);
  2545. /*----------------------------------------------------------------------*/
  2546. }
  2547. break;
  2548. case 0xcd:
  2549. {
  2550. /** 0110 0001 1100 1101 pop %s0 */
  2551. if (trace)
  2552. {
  2553. printf ("\033[33m%s\033[0m %02x %02x\n",
  2554. "/** 0110 0001 1100 1101 pop %s0 */",
  2555. op[0], op[1]);
  2556. }
  2557. SYNTAX("pop %s0");
  2558. #line 991 "rl78-decode.opc"
  2559. ID(mov); W(); DR(PSW); SPOP();
  2560. /*----------------------------------------------------------------------*/
  2561. }
  2562. break;
  2563. case 0xce:
  2564. {
  2565. /** 0110 0001 1100 1110 movs %ea0, %1 */
  2566. if (trace)
  2567. {
  2568. printf ("\033[33m%s\033[0m %02x %02x\n",
  2569. "/** 0110 0001 1100 1110 movs %ea0, %1 */",
  2570. op[0], op[1]);
  2571. }
  2572. SYNTAX("movs %ea0, %1");
  2573. #line 813 "rl78-decode.opc"
  2574. ID(mov); DM(HL, IMMU(1)); SR(X); Fzc;
  2575. /*----------------------------------------------------------------------*/
  2576. }
  2577. break;
  2578. case 0xcf:
  2579. case 0xdf:
  2580. case 0xef:
  2581. case 0xff:
  2582. {
  2583. /** 0110 0001 11rb 1111 sel rb%1 */
  2584. #line 1043 "rl78-decode.opc"
  2585. int rb AU = (op[1] >> 4) & 0x03;
  2586. if (trace)
  2587. {
  2588. printf ("\033[33m%s\033[0m %02x %02x\n",
  2589. "/** 0110 0001 11rb 1111 sel rb%1 */",
  2590. op[0], op[1]);
  2591. printf (" rb = 0x%x\n", rb);
  2592. }
  2593. SYNTAX("sel rb%1");
  2594. #line 1043 "rl78-decode.opc"
  2595. ID(sel); SC(rb);
  2596. /*----------------------------------------------------------------------*/
  2597. }
  2598. break;
  2599. case 0xd0:
  2600. {
  2601. /** 0110 0001 1101 0000 and %0, %e1 */
  2602. if (trace)
  2603. {
  2604. printf ("\033[33m%s\033[0m %02x %02x\n",
  2605. "/** 0110 0001 1101 0000 and %0, %e1 */",
  2606. op[0], op[1]);
  2607. }
  2608. SYNTAX("and %0, %e1");
  2609. #line 293 "rl78-decode.opc"
  2610. ID(and); DR(A); SM2(HL, B, 0); Fz;
  2611. }
  2612. break;
  2613. case 0xd2:
  2614. {
  2615. /** 0110 0001 1101 0010 and %0, %e1 */
  2616. if (trace)
  2617. {
  2618. printf ("\033[33m%s\033[0m %02x %02x\n",
  2619. "/** 0110 0001 1101 0010 and %0, %e1 */",
  2620. op[0], op[1]);
  2621. }
  2622. SYNTAX("and %0, %e1");
  2623. #line 299 "rl78-decode.opc"
  2624. ID(and); DR(A); SM2(HL, C, 0); Fz;
  2625. }
  2626. break;
  2627. case 0xd3:
  2628. {
  2629. /** 0110 0001 1101 0011 bnh $%a0 */
  2630. if (trace)
  2631. {
  2632. printf ("\033[33m%s\033[0m %02x %02x\n",
  2633. "/** 0110 0001 1101 0011 bnh $%a0 */",
  2634. op[0], op[1]);
  2635. }
  2636. SYNTAX("bnh $%a0");
  2637. #line 345 "rl78-decode.opc"
  2638. ID(branch_cond); DC(pc+IMMS(1)+3); SR(None); COND(NH);
  2639. }
  2640. break;
  2641. case 0xd8:
  2642. {
  2643. /** 0110 0001 1101 1000 sk%c1 */
  2644. if (trace)
  2645. {
  2646. printf ("\033[33m%s\033[0m %02x %02x\n",
  2647. "/** 0110 0001 1101 1000 sk%c1 */",
  2648. op[0], op[1]);
  2649. }
  2650. SYNTAX("sk%c1");
  2651. #line 1102 "rl78-decode.opc"
  2652. ID(skip); COND(NC);
  2653. }
  2654. break;
  2655. case 0xd9:
  2656. {
  2657. /** 0110 0001 1101 1001 mov %e0, %1 */
  2658. if (trace)
  2659. {
  2660. printf ("\033[33m%s\033[0m %02x %02x\n",
  2661. "/** 0110 0001 1101 1001 mov %e0, %1 */",
  2662. op[0], op[1]);
  2663. }
  2664. SYNTAX("mov %e0, %1");
  2665. #line 629 "rl78-decode.opc"
  2666. ID(mov); DM2(HL, B, 0); SR(A);
  2667. }
  2668. break;
  2669. case 0xdb:
  2670. {
  2671. /** 0110 0001 1101 1011 ror %0, %1 */
  2672. if (trace)
  2673. {
  2674. printf ("\033[33m%s\033[0m %02x %02x\n",
  2675. "/** 0110 0001 1101 1011 ror %0, %1 */",
  2676. op[0], op[1]);
  2677. }
  2678. SYNTAX("ror %0, %1");
  2679. #line 1024 "rl78-decode.opc"
  2680. ID(ror); DR(A); SC(1);
  2681. }
  2682. break;
  2683. case 0xdc:
  2684. {
  2685. /** 0110 0001 1101 1100 rolc %0, %1 */
  2686. if (trace)
  2687. {
  2688. printf ("\033[33m%s\033[0m %02x %02x\n",
  2689. "/** 0110 0001 1101 1100 rolc %0, %1 */",
  2690. op[0], op[1]);
  2691. }
  2692. SYNTAX("rolc %0, %1");
  2693. #line 1018 "rl78-decode.opc"
  2694. ID(rolc); DR(A); SC(1);
  2695. }
  2696. break;
  2697. case 0xdd:
  2698. {
  2699. /** 0110 0001 1101 1101 push %s1 */
  2700. if (trace)
  2701. {
  2702. printf ("\033[33m%s\033[0m %02x %02x\n",
  2703. "/** 0110 0001 1101 1101 push %s1 */",
  2704. op[0], op[1]);
  2705. }
  2706. SYNTAX("push %s1");
  2707. #line 999 "rl78-decode.opc"
  2708. ID(mov); W(); DPUSH(); SR(PSW);
  2709. /*----------------------------------------------------------------------*/
  2710. }
  2711. break;
  2712. case 0xde:
  2713. {
  2714. /** 0110 0001 1101 1110 cmps %0, %ea1 */
  2715. if (trace)
  2716. {
  2717. printf ("\033[33m%s\033[0m %02x %02x\n",
  2718. "/** 0110 0001 1101 1110 cmps %0, %ea1 */",
  2719. op[0], op[1]);
  2720. }
  2721. SYNTAX("cmps %0, %ea1");
  2722. #line 528 "rl78-decode.opc"
  2723. ID(cmp); DR(X); SM(HL, IMMU(1)); Fzac;
  2724. /*----------------------------------------------------------------------*/
  2725. }
  2726. break;
  2727. case 0xe0:
  2728. {
  2729. /** 0110 0001 1110 0000 or %0, %e1 */
  2730. if (trace)
  2731. {
  2732. printf ("\033[33m%s\033[0m %02x %02x\n",
  2733. "/** 0110 0001 1110 0000 or %0, %e1 */",
  2734. op[0], op[1]);
  2735. }
  2736. SYNTAX("or %0, %e1");
  2737. #line 948 "rl78-decode.opc"
  2738. ID(or); DR(A); SM2(HL, B, 0); Fz;
  2739. }
  2740. break;
  2741. case 0xe2:
  2742. {
  2743. /** 0110 0001 1110 0010 or %0, %e1 */
  2744. if (trace)
  2745. {
  2746. printf ("\033[33m%s\033[0m %02x %02x\n",
  2747. "/** 0110 0001 1110 0010 or %0, %e1 */",
  2748. op[0], op[1]);
  2749. }
  2750. SYNTAX("or %0, %e1");
  2751. #line 954 "rl78-decode.opc"
  2752. ID(or); DR(A); SM2(HL, C, 0); Fz;
  2753. }
  2754. break;
  2755. case 0xe3:
  2756. {
  2757. /** 0110 0001 1110 0011 sk%c1 */
  2758. if (trace)
  2759. {
  2760. printf ("\033[33m%s\033[0m %02x %02x\n",
  2761. "/** 0110 0001 1110 0011 sk%c1 */",
  2762. op[0], op[1]);
  2763. }
  2764. SYNTAX("sk%c1");
  2765. #line 1099 "rl78-decode.opc"
  2766. ID(skip); COND(H);
  2767. }
  2768. break;
  2769. case 0xe8:
  2770. {
  2771. /** 0110 0001 1110 1000 sk%c1 */
  2772. if (trace)
  2773. {
  2774. printf ("\033[33m%s\033[0m %02x %02x\n",
  2775. "/** 0110 0001 1110 1000 sk%c1 */",
  2776. op[0], op[1]);
  2777. }
  2778. SYNTAX("sk%c1");
  2779. #line 1111 "rl78-decode.opc"
  2780. ID(skip); COND(Z);
  2781. /*----------------------------------------------------------------------*/
  2782. }
  2783. break;
  2784. case 0xe9:
  2785. {
  2786. /** 0110 0001 1110 1001 mov %0, %e1 */
  2787. if (trace)
  2788. {
  2789. printf ("\033[33m%s\033[0m %02x %02x\n",
  2790. "/** 0110 0001 1110 1001 mov %0, %e1 */",
  2791. op[0], op[1]);
  2792. }
  2793. SYNTAX("mov %0, %e1");
  2794. #line 665 "rl78-decode.opc"
  2795. ID(mov); DR(A); SM2(HL, C, 0);
  2796. }
  2797. break;
  2798. case 0xeb:
  2799. {
  2800. /** 0110 0001 1110 1011 rol %0, %1 */
  2801. if (trace)
  2802. {
  2803. printf ("\033[33m%s\033[0m %02x %02x\n",
  2804. "/** 0110 0001 1110 1011 rol %0, %1 */",
  2805. op[0], op[1]);
  2806. }
  2807. SYNTAX("rol %0, %1");
  2808. #line 1015 "rl78-decode.opc"
  2809. ID(rol); DR(A); SC(1);
  2810. }
  2811. break;
  2812. case 0xec:
  2813. {
  2814. /** 0110 0001 1110 1100 retb */
  2815. if (trace)
  2816. {
  2817. printf ("\033[33m%s\033[0m %02x %02x\n",
  2818. "/** 0110 0001 1110 1100 retb */",
  2819. op[0], op[1]);
  2820. }
  2821. SYNTAX("retb");
  2822. #line 1010 "rl78-decode.opc"
  2823. ID(reti);
  2824. /*----------------------------------------------------------------------*/
  2825. }
  2826. break;
  2827. case 0xed:
  2828. {
  2829. /** 0110 0001 1110 1101 halt */
  2830. if (trace)
  2831. {
  2832. printf ("\033[33m%s\033[0m %02x %02x\n",
  2833. "/** 0110 0001 1110 1101 halt */",
  2834. op[0], op[1]);
  2835. }
  2836. SYNTAX("halt");
  2837. #line 578 "rl78-decode.opc"
  2838. ID(halt);
  2839. /*----------------------------------------------------------------------*/
  2840. }
  2841. break;
  2842. case 0xee:
  2843. case 0xfe:
  2844. {
  2845. /** 0110 0001 111r 1110 rolwc %0, %1 */
  2846. #line 1021 "rl78-decode.opc"
  2847. int r AU = (op[1] >> 4) & 0x01;
  2848. if (trace)
  2849. {
  2850. printf ("\033[33m%s\033[0m %02x %02x\n",
  2851. "/** 0110 0001 111r 1110 rolwc %0, %1 */",
  2852. op[0], op[1]);
  2853. printf (" r = 0x%x\n", r);
  2854. }
  2855. SYNTAX("rolwc %0, %1");
  2856. #line 1021 "rl78-decode.opc"
  2857. ID(rolc); W(); DRW(r); SC(1);
  2858. }
  2859. break;
  2860. case 0xf0:
  2861. {
  2862. /** 0110 0001 1111 0000 xor %0, %e1 */
  2863. if (trace)
  2864. {
  2865. printf ("\033[33m%s\033[0m %02x %02x\n",
  2866. "/** 0110 0001 1111 0000 xor %0, %e1 */",
  2867. op[0], op[1]);
  2868. }
  2869. SYNTAX("xor %0, %e1");
  2870. #line 1252 "rl78-decode.opc"
  2871. ID(xor); DR(A); SM2(HL, B, 0); Fz;
  2872. }
  2873. break;
  2874. case 0xf2:
  2875. {
  2876. /** 0110 0001 1111 0010 xor %0, %e1 */
  2877. if (trace)
  2878. {
  2879. printf ("\033[33m%s\033[0m %02x %02x\n",
  2880. "/** 0110 0001 1111 0010 xor %0, %e1 */",
  2881. op[0], op[1]);
  2882. }
  2883. SYNTAX("xor %0, %e1");
  2884. #line 1258 "rl78-decode.opc"
  2885. ID(xor); DR(A); SM2(HL, C, 0); Fz;
  2886. }
  2887. break;
  2888. case 0xf3:
  2889. {
  2890. /** 0110 0001 1111 0011 sk%c1 */
  2891. if (trace)
  2892. {
  2893. printf ("\033[33m%s\033[0m %02x %02x\n",
  2894. "/** 0110 0001 1111 0011 sk%c1 */",
  2895. op[0], op[1]);
  2896. }
  2897. SYNTAX("sk%c1");
  2898. #line 1105 "rl78-decode.opc"
  2899. ID(skip); COND(NH);
  2900. }
  2901. break;
  2902. case 0xf8:
  2903. {
  2904. /** 0110 0001 1111 1000 sk%c1 */
  2905. if (trace)
  2906. {
  2907. printf ("\033[33m%s\033[0m %02x %02x\n",
  2908. "/** 0110 0001 1111 1000 sk%c1 */",
  2909. op[0], op[1]);
  2910. }
  2911. SYNTAX("sk%c1");
  2912. #line 1108 "rl78-decode.opc"
  2913. ID(skip); COND(NZ);
  2914. }
  2915. break;
  2916. case 0xf9:
  2917. {
  2918. /** 0110 0001 1111 1001 mov %e0, %1 */
  2919. if (trace)
  2920. {
  2921. printf ("\033[33m%s\033[0m %02x %02x\n",
  2922. "/** 0110 0001 1111 1001 mov %e0, %1 */",
  2923. op[0], op[1]);
  2924. }
  2925. SYNTAX("mov %e0, %1");
  2926. #line 638 "rl78-decode.opc"
  2927. ID(mov); DM2(HL, C, 0); SR(A);
  2928. }
  2929. break;
  2930. case 0xfb:
  2931. {
  2932. /** 0110 0001 1111 1011 rorc %0, %1 */
  2933. if (trace)
  2934. {
  2935. printf ("\033[33m%s\033[0m %02x %02x\n",
  2936. "/** 0110 0001 1111 1011 rorc %0, %1 */",
  2937. op[0], op[1]);
  2938. }
  2939. SYNTAX("rorc %0, %1");
  2940. #line 1027 "rl78-decode.opc"
  2941. ID(rorc); DR(A); SC(1);
  2942. /*----------------------------------------------------------------------*/
  2943. /* Note that the branch insns need to be listed before the shift
  2944. ones, as "shift count of zero" means "branch insn" */
  2945. }
  2946. break;
  2947. case 0xfc:
  2948. {
  2949. /** 0110 0001 1111 1100 reti */
  2950. if (trace)
  2951. {
  2952. printf ("\033[33m%s\033[0m %02x %02x\n",
  2953. "/** 0110 0001 1111 1100 reti */",
  2954. op[0], op[1]);
  2955. }
  2956. SYNTAX("reti");
  2957. #line 1007 "rl78-decode.opc"
  2958. ID(reti);
  2959. }
  2960. break;
  2961. case 0xfd:
  2962. {
  2963. /** 0110 0001 1111 1101 stop */
  2964. if (trace)
  2965. {
  2966. printf ("\033[33m%s\033[0m %02x %02x\n",
  2967. "/** 0110 0001 1111 1101 stop */",
  2968. op[0], op[1]);
  2969. }
  2970. SYNTAX("stop");
  2971. #line 1116 "rl78-decode.opc"
  2972. ID(stop);
  2973. /*----------------------------------------------------------------------*/
  2974. }
  2975. break;
  2976. default: UNSUPPORTED(); break;
  2977. }
  2978. break;
  2979. case 0x68:
  2980. {
  2981. /** 0110 1000 movw %e0, %1 */
  2982. if (trace)
  2983. {
  2984. printf ("\033[33m%s\033[0m %02x\n",
  2985. "/** 0110 1000 movw %e0, %1 */",
  2986. op[0]);
  2987. }
  2988. SYNTAX("movw %e0, %1");
  2989. #line 876 "rl78-decode.opc"
  2990. ID(mov); W(); DM(C, IMMU(2)); SR(AX);
  2991. }
  2992. break;
  2993. case 0x69:
  2994. {
  2995. /** 0110 1001 movw %0, %e1 */
  2996. if (trace)
  2997. {
  2998. printf ("\033[33m%s\033[0m %02x\n",
  2999. "/** 0110 1001 movw %0, %e1 */",
  3000. op[0]);
  3001. }
  3002. SYNTAX("movw %0, %e1");
  3003. #line 867 "rl78-decode.opc"
  3004. ID(mov); W(); DR(AX); SM(C, IMMU(2));
  3005. }
  3006. break;
  3007. case 0x6a:
  3008. {
  3009. /** 0110 1010 or %0, #%1 */
  3010. if (trace)
  3011. {
  3012. printf ("\033[33m%s\033[0m %02x\n",
  3013. "/** 0110 1010 or %0, #%1 */",
  3014. op[0]);
  3015. }
  3016. SYNTAX("or %0, #%1");
  3017. #line 969 "rl78-decode.opc"
  3018. ID(or); DM(None, SADDR); SC(IMMU(1)); Fz;
  3019. /*----------------------------------------------------------------------*/
  3020. }
  3021. break;
  3022. case 0x6b:
  3023. {
  3024. /** 0110 1011 or %0, %1 */
  3025. if (trace)
  3026. {
  3027. printf ("\033[33m%s\033[0m %02x\n",
  3028. "/** 0110 1011 or %0, %1 */",
  3029. op[0]);
  3030. }
  3031. SYNTAX("or %0, %1");
  3032. #line 966 "rl78-decode.opc"
  3033. ID(or); DR(A); SM(None, SADDR); Fz;
  3034. }
  3035. break;
  3036. case 0x6c:
  3037. {
  3038. /** 0110 1100 or %0, #%1 */
  3039. if (trace)
  3040. {
  3041. printf ("\033[33m%s\033[0m %02x\n",
  3042. "/** 0110 1100 or %0, #%1 */",
  3043. op[0]);
  3044. }
  3045. SYNTAX("or %0, #%1");
  3046. #line 957 "rl78-decode.opc"
  3047. ID(or); DR(A); SC(IMMU(1)); Fz;
  3048. }
  3049. break;
  3050. case 0x6d:
  3051. {
  3052. /** 0110 1101 or %0, %e1 */
  3053. if (trace)
  3054. {
  3055. printf ("\033[33m%s\033[0m %02x\n",
  3056. "/** 0110 1101 or %0, %e1 */",
  3057. op[0]);
  3058. }
  3059. SYNTAX("or %0, %e1");
  3060. #line 945 "rl78-decode.opc"
  3061. ID(or); DR(A); SM(HL, 0); Fz;
  3062. }
  3063. break;
  3064. case 0x6e:
  3065. {
  3066. /** 0110 1110 or %0, %ea1 */
  3067. if (trace)
  3068. {
  3069. printf ("\033[33m%s\033[0m %02x\n",
  3070. "/** 0110 1110 or %0, %ea1 */",
  3071. op[0]);
  3072. }
  3073. SYNTAX("or %0, %ea1");
  3074. #line 951 "rl78-decode.opc"
  3075. ID(or); DR(A); SM(HL, IMMU(1)); Fz;
  3076. }
  3077. break;
  3078. case 0x6f:
  3079. {
  3080. /** 0110 1111 or %0, %e!1 */
  3081. if (trace)
  3082. {
  3083. printf ("\033[33m%s\033[0m %02x\n",
  3084. "/** 0110 1111 or %0, %e!1 */",
  3085. op[0]);
  3086. }
  3087. SYNTAX("or %0, %e!1");
  3088. #line 942 "rl78-decode.opc"
  3089. ID(or); DR(A); SM(None, IMMU(2)); Fz;
  3090. }
  3091. break;
  3092. case 0x70:
  3093. case 0x72:
  3094. case 0x73:
  3095. case 0x74:
  3096. case 0x75:
  3097. case 0x76:
  3098. case 0x77:
  3099. {
  3100. /** 0111 0rba mov %0, %1 */
  3101. #line 698 "rl78-decode.opc"
  3102. int rba AU = op[0] & 0x07;
  3103. if (trace)
  3104. {
  3105. printf ("\033[33m%s\033[0m %02x\n",
  3106. "/** 0111 0rba mov %0, %1 */",
  3107. op[0]);
  3108. printf (" rba = 0x%x\n", rba);
  3109. }
  3110. SYNTAX("mov %0, %1");
  3111. #line 698 "rl78-decode.opc"
  3112. ID(mov); DRB(rba); SR(A);
  3113. }
  3114. break;
  3115. case 0x71:
  3116. GETBYTE ();
  3117. switch (op[1] & 0xff)
  3118. {
  3119. case 0x00:
  3120. case 0x10:
  3121. case 0x20:
  3122. case 0x30:
  3123. case 0x40:
  3124. case 0x50:
  3125. case 0x60:
  3126. case 0x70:
  3127. {
  3128. /** 0111 0001 0bit 0000 set1 %e!0 */
  3129. #line 1048 "rl78-decode.opc"
  3130. int bit AU = (op[1] >> 4) & 0x07;
  3131. if (trace)
  3132. {
  3133. printf ("\033[33m%s\033[0m %02x %02x\n",
  3134. "/** 0111 0001 0bit 0000 set1 %e!0 */",
  3135. op[0], op[1]);
  3136. printf (" bit = 0x%x\n", bit);
  3137. }
  3138. SYNTAX("set1 %e!0");
  3139. #line 1048 "rl78-decode.opc"
  3140. ID(mov); DM(None, IMMU(2)); DB(bit); SC(1);
  3141. }
  3142. break;
  3143. case 0x01:
  3144. case 0x11:
  3145. case 0x21:
  3146. case 0x31:
  3147. case 0x41:
  3148. case 0x51:
  3149. case 0x61:
  3150. case 0x71:
  3151. {
  3152. /** 0111 0001 0bit 0001 mov1 %0, cy */
  3153. #line 805 "rl78-decode.opc"
  3154. int bit AU = (op[1] >> 4) & 0x07;
  3155. if (trace)
  3156. {
  3157. printf ("\033[33m%s\033[0m %02x %02x\n",
  3158. "/** 0111 0001 0bit 0001 mov1 %0, cy */",
  3159. op[0], op[1]);
  3160. printf (" bit = 0x%x\n", bit);
  3161. }
  3162. SYNTAX("mov1 %0, cy");
  3163. #line 805 "rl78-decode.opc"
  3164. ID(mov); DM(None, SADDR); DB(bit); SCY();
  3165. }
  3166. break;
  3167. case 0x02:
  3168. case 0x12:
  3169. case 0x22:
  3170. case 0x32:
  3171. case 0x42:
  3172. case 0x52:
  3173. case 0x62:
  3174. case 0x72:
  3175. {
  3176. /** 0111 0001 0bit 0010 set1 %0 */
  3177. #line 1066 "rl78-decode.opc"
  3178. int bit AU = (op[1] >> 4) & 0x07;
  3179. if (trace)
  3180. {
  3181. printf ("\033[33m%s\033[0m %02x %02x\n",
  3182. "/** 0111 0001 0bit 0010 set1 %0 */",
  3183. op[0], op[1]);
  3184. printf (" bit = 0x%x\n", bit);
  3185. }
  3186. SYNTAX("set1 %0");
  3187. #line 1066 "rl78-decode.opc"
  3188. ID(mov); DM(None, SADDR); DB(bit); SC(1);
  3189. /*----------------------------------------------------------------------*/
  3190. }
  3191. break;
  3192. case 0x03:
  3193. case 0x13:
  3194. case 0x23:
  3195. case 0x33:
  3196. case 0x43:
  3197. case 0x53:
  3198. case 0x63:
  3199. case 0x73:
  3200. {
  3201. /** 0111 0001 0bit 0011 clr1 %0 */
  3202. #line 458 "rl78-decode.opc"
  3203. int bit AU = (op[1] >> 4) & 0x07;
  3204. if (trace)
  3205. {
  3206. printf ("\033[33m%s\033[0m %02x %02x\n",
  3207. "/** 0111 0001 0bit 0011 clr1 %0 */",
  3208. op[0], op[1]);
  3209. printf (" bit = 0x%x\n", bit);
  3210. }
  3211. SYNTAX("clr1 %0");
  3212. #line 458 "rl78-decode.opc"
  3213. ID(mov); DM(None, SADDR); DB(bit); SC(0);
  3214. /*----------------------------------------------------------------------*/
  3215. }
  3216. break;
  3217. case 0x04:
  3218. case 0x14:
  3219. case 0x24:
  3220. case 0x34:
  3221. case 0x44:
  3222. case 0x54:
  3223. case 0x64:
  3224. case 0x74:
  3225. {
  3226. /** 0111 0001 0bit 0100 mov1 cy, %1 */
  3227. #line 799 "rl78-decode.opc"
  3228. int bit AU = (op[1] >> 4) & 0x07;
  3229. if (trace)
  3230. {
  3231. printf ("\033[33m%s\033[0m %02x %02x\n",
  3232. "/** 0111 0001 0bit 0100 mov1 cy, %1 */",
  3233. op[0], op[1]);
  3234. printf (" bit = 0x%x\n", bit);
  3235. }
  3236. SYNTAX("mov1 cy, %1");
  3237. #line 799 "rl78-decode.opc"
  3238. ID(mov); DCY(); SM(None, SADDR); SB(bit);
  3239. }
  3240. break;
  3241. case 0x05:
  3242. case 0x15:
  3243. case 0x25:
  3244. case 0x35:
  3245. case 0x45:
  3246. case 0x55:
  3247. case 0x65:
  3248. case 0x75:
  3249. {
  3250. /** 0111 0001 0bit 0101 and1 cy, %s1 */
  3251. #line 328 "rl78-decode.opc"
  3252. int bit AU = (op[1] >> 4) & 0x07;
  3253. if (trace)
  3254. {
  3255. printf ("\033[33m%s\033[0m %02x %02x\n",
  3256. "/** 0111 0001 0bit 0101 and1 cy, %s1 */",
  3257. op[0], op[1]);
  3258. printf (" bit = 0x%x\n", bit);
  3259. }
  3260. SYNTAX("and1 cy, %s1");
  3261. #line 328 "rl78-decode.opc"
  3262. ID(and); DCY(); SM(None, SADDR); SB(bit);
  3263. /*----------------------------------------------------------------------*/
  3264. /* Note that the branch insns need to be listed before the shift
  3265. ones, as "shift count of zero" means "branch insn" */
  3266. }
  3267. break;
  3268. case 0x06:
  3269. case 0x16:
  3270. case 0x26:
  3271. case 0x36:
  3272. case 0x46:
  3273. case 0x56:
  3274. case 0x66:
  3275. case 0x76:
  3276. {
  3277. /** 0111 0001 0bit 0110 or1 cy, %s1 */
  3278. #line 983 "rl78-decode.opc"
  3279. int bit AU = (op[1] >> 4) & 0x07;
  3280. if (trace)
  3281. {
  3282. printf ("\033[33m%s\033[0m %02x %02x\n",
  3283. "/** 0111 0001 0bit 0110 or1 cy, %s1 */",
  3284. op[0], op[1]);
  3285. printf (" bit = 0x%x\n", bit);
  3286. }
  3287. SYNTAX("or1 cy, %s1");
  3288. #line 983 "rl78-decode.opc"
  3289. ID(or); DCY(); SM(None, SADDR); SB(bit);
  3290. /*----------------------------------------------------------------------*/
  3291. }
  3292. break;
  3293. case 0x07:
  3294. case 0x17:
  3295. case 0x27:
  3296. case 0x37:
  3297. case 0x47:
  3298. case 0x57:
  3299. case 0x67:
  3300. case 0x77:
  3301. {
  3302. /** 0111 0001 0bit 0111 xor1 cy, %s1 */
  3303. #line 1287 "rl78-decode.opc"
  3304. int bit AU = (op[1] >> 4) & 0x07;
  3305. if (trace)
  3306. {
  3307. printf ("\033[33m%s\033[0m %02x %02x\n",
  3308. "/** 0111 0001 0bit 0111 xor1 cy, %s1 */",
  3309. op[0], op[1]);
  3310. printf (" bit = 0x%x\n", bit);
  3311. }
  3312. SYNTAX("xor1 cy, %s1");
  3313. #line 1287 "rl78-decode.opc"
  3314. ID(xor); DCY(); SM(None, SADDR); SB(bit);
  3315. /*----------------------------------------------------------------------*/
  3316. }
  3317. break;
  3318. case 0x08:
  3319. case 0x18:
  3320. case 0x28:
  3321. case 0x38:
  3322. case 0x48:
  3323. case 0x58:
  3324. case 0x68:
  3325. case 0x78:
  3326. {
  3327. /** 0111 0001 0bit 1000 clr1 %e!0 */
  3328. #line 440 "rl78-decode.opc"
  3329. int bit AU = (op[1] >> 4) & 0x07;
  3330. if (trace)
  3331. {
  3332. printf ("\033[33m%s\033[0m %02x %02x\n",
  3333. "/** 0111 0001 0bit 1000 clr1 %e!0 */",
  3334. op[0], op[1]);
  3335. printf (" bit = 0x%x\n", bit);
  3336. }
  3337. SYNTAX("clr1 %e!0");
  3338. #line 440 "rl78-decode.opc"
  3339. ID(mov); DM(None, IMMU(2)); DB(bit); SC(0);
  3340. }
  3341. break;
  3342. case 0x09:
  3343. case 0x19:
  3344. case 0x29:
  3345. case 0x39:
  3346. case 0x49:
  3347. case 0x59:
  3348. case 0x69:
  3349. case 0x79:
  3350. {
  3351. /** 0111 0001 0bit 1001 mov1 %s0, cy */
  3352. #line 808 "rl78-decode.opc"
  3353. int bit AU = (op[1] >> 4) & 0x07;
  3354. if (trace)
  3355. {
  3356. printf ("\033[33m%s\033[0m %02x %02x\n",
  3357. "/** 0111 0001 0bit 1001 mov1 %s0, cy */",
  3358. op[0], op[1]);
  3359. printf (" bit = 0x%x\n", bit);
  3360. }
  3361. SYNTAX("mov1 %s0, cy");
  3362. #line 808 "rl78-decode.opc"
  3363. ID(mov); DM(None, SFR); DB(bit); SCY();
  3364. /*----------------------------------------------------------------------*/
  3365. }
  3366. break;
  3367. case 0x0a:
  3368. case 0x1a:
  3369. case 0x2a:
  3370. case 0x3a:
  3371. case 0x4a:
  3372. case 0x5a:
  3373. case 0x6a:
  3374. case 0x7a:
  3375. {
  3376. /** 0111 0001 0bit 1010 set1 %s0 */
  3377. #line 1060 "rl78-decode.opc"
  3378. int bit AU = (op[1] >> 4) & 0x07;
  3379. if (trace)
  3380. {
  3381. printf ("\033[33m%s\033[0m %02x %02x\n",
  3382. "/** 0111 0001 0bit 1010 set1 %s0 */",
  3383. op[0], op[1]);
  3384. printf (" bit = 0x%x\n", bit);
  3385. }
  3386. SYNTAX("set1 %s0");
  3387. #line 1060 "rl78-decode.opc"
  3388. op0 = SFR;
  3389. ID(mov); DM(None, op0); DB(bit); SC(1);
  3390. if (op0 == RL78_SFR_PSW && bit == 7)
  3391. rl78->syntax = "ei";
  3392. }
  3393. break;
  3394. case 0x0b:
  3395. case 0x1b:
  3396. case 0x2b:
  3397. case 0x3b:
  3398. case 0x4b:
  3399. case 0x5b:
  3400. case 0x6b:
  3401. case 0x7b:
  3402. {
  3403. /** 0111 0001 0bit 1011 clr1 %s0 */
  3404. #line 452 "rl78-decode.opc"
  3405. int bit AU = (op[1] >> 4) & 0x07;
  3406. if (trace)
  3407. {
  3408. printf ("\033[33m%s\033[0m %02x %02x\n",
  3409. "/** 0111 0001 0bit 1011 clr1 %s0 */",
  3410. op[0], op[1]);
  3411. printf (" bit = 0x%x\n", bit);
  3412. }
  3413. SYNTAX("clr1 %s0");
  3414. #line 452 "rl78-decode.opc"
  3415. op0 = SFR;
  3416. ID(mov); DM(None, op0); DB(bit); SC(0);
  3417. if (op0 == RL78_SFR_PSW && bit == 7)
  3418. rl78->syntax = "di";
  3419. }
  3420. break;
  3421. case 0x0c:
  3422. case 0x1c:
  3423. case 0x2c:
  3424. case 0x3c:
  3425. case 0x4c:
  3426. case 0x5c:
  3427. case 0x6c:
  3428. case 0x7c:
  3429. {
  3430. /** 0111 0001 0bit 1100 mov1 cy, %s1 */
  3431. #line 802 "rl78-decode.opc"
  3432. int bit AU = (op[1] >> 4) & 0x07;
  3433. if (trace)
  3434. {
  3435. printf ("\033[33m%s\033[0m %02x %02x\n",
  3436. "/** 0111 0001 0bit 1100 mov1 cy, %s1 */",
  3437. op[0], op[1]);
  3438. printf (" bit = 0x%x\n", bit);
  3439. }
  3440. SYNTAX("mov1 cy, %s1");
  3441. #line 802 "rl78-decode.opc"
  3442. ID(mov); DCY(); SM(None, SFR); SB(bit);
  3443. }
  3444. break;
  3445. case 0x0d:
  3446. case 0x1d:
  3447. case 0x2d:
  3448. case 0x3d:
  3449. case 0x4d:
  3450. case 0x5d:
  3451. case 0x6d:
  3452. case 0x7d:
  3453. {
  3454. /** 0111 0001 0bit 1101 and1 cy, %s1 */
  3455. #line 325 "rl78-decode.opc"
  3456. int bit AU = (op[1] >> 4) & 0x07;
  3457. if (trace)
  3458. {
  3459. printf ("\033[33m%s\033[0m %02x %02x\n",
  3460. "/** 0111 0001 0bit 1101 and1 cy, %s1 */",
  3461. op[0], op[1]);
  3462. printf (" bit = 0x%x\n", bit);
  3463. }
  3464. SYNTAX("and1 cy, %s1");
  3465. #line 325 "rl78-decode.opc"
  3466. ID(and); DCY(); SM(None, SFR); SB(bit);
  3467. }
  3468. break;
  3469. case 0x0e:
  3470. case 0x1e:
  3471. case 0x2e:
  3472. case 0x3e:
  3473. case 0x4e:
  3474. case 0x5e:
  3475. case 0x6e:
  3476. case 0x7e:
  3477. {
  3478. /** 0111 0001 0bit 1110 or1 cy, %s1 */
  3479. #line 980 "rl78-decode.opc"
  3480. int bit AU = (op[1] >> 4) & 0x07;
  3481. if (trace)
  3482. {
  3483. printf ("\033[33m%s\033[0m %02x %02x\n",
  3484. "/** 0111 0001 0bit 1110 or1 cy, %s1 */",
  3485. op[0], op[1]);
  3486. printf (" bit = 0x%x\n", bit);
  3487. }
  3488. SYNTAX("or1 cy, %s1");
  3489. #line 980 "rl78-decode.opc"
  3490. ID(or); DCY(); SM(None, SFR); SB(bit);
  3491. }
  3492. break;
  3493. case 0x0f:
  3494. case 0x1f:
  3495. case 0x2f:
  3496. case 0x3f:
  3497. case 0x4f:
  3498. case 0x5f:
  3499. case 0x6f:
  3500. case 0x7f:
  3501. {
  3502. /** 0111 0001 0bit 1111 xor1 cy, %s1 */
  3503. #line 1284 "rl78-decode.opc"
  3504. int bit AU = (op[1] >> 4) & 0x07;
  3505. if (trace)
  3506. {
  3507. printf ("\033[33m%s\033[0m %02x %02x\n",
  3508. "/** 0111 0001 0bit 1111 xor1 cy, %s1 */",
  3509. op[0], op[1]);
  3510. printf (" bit = 0x%x\n", bit);
  3511. }
  3512. SYNTAX("xor1 cy, %s1");
  3513. #line 1284 "rl78-decode.opc"
  3514. ID(xor); DCY(); SM(None, SFR); SB(bit);
  3515. }
  3516. break;
  3517. case 0x80:
  3518. {
  3519. /** 0111 0001 1000 0000 set1 cy */
  3520. if (trace)
  3521. {
  3522. printf ("\033[33m%s\033[0m %02x %02x\n",
  3523. "/** 0111 0001 1000 0000 set1 cy */",
  3524. op[0], op[1]);
  3525. }
  3526. SYNTAX("set1 cy");
  3527. #line 1057 "rl78-decode.opc"
  3528. ID(mov); DCY(); SC(1);
  3529. }
  3530. break;
  3531. case 0x81:
  3532. case 0x91:
  3533. case 0xa1:
  3534. case 0xb1:
  3535. case 0xc1:
  3536. case 0xd1:
  3537. case 0xe1:
  3538. case 0xf1:
  3539. {
  3540. /** 0111 0001 1bit 0001 mov1 %e0, cy */
  3541. #line 787 "rl78-decode.opc"
  3542. int bit AU = (op[1] >> 4) & 0x07;
  3543. if (trace)
  3544. {
  3545. printf ("\033[33m%s\033[0m %02x %02x\n",
  3546. "/** 0111 0001 1bit 0001 mov1 %e0, cy */",
  3547. op[0], op[1]);
  3548. printf (" bit = 0x%x\n", bit);
  3549. }
  3550. SYNTAX("mov1 %e0, cy");
  3551. #line 787 "rl78-decode.opc"
  3552. ID(mov); DM(HL, 0); DB(bit); SCY();
  3553. }
  3554. break;
  3555. case 0x82:
  3556. case 0x92:
  3557. case 0xa2:
  3558. case 0xb2:
  3559. case 0xc2:
  3560. case 0xd2:
  3561. case 0xe2:
  3562. case 0xf2:
  3563. {
  3564. /** 0111 0001 1bit 0010 set1 %e0 */
  3565. #line 1051 "rl78-decode.opc"
  3566. int bit AU = (op[1] >> 4) & 0x07;
  3567. if (trace)
  3568. {
  3569. printf ("\033[33m%s\033[0m %02x %02x\n",
  3570. "/** 0111 0001 1bit 0010 set1 %e0 */",
  3571. op[0], op[1]);
  3572. printf (" bit = 0x%x\n", bit);
  3573. }
  3574. SYNTAX("set1 %e0");
  3575. #line 1051 "rl78-decode.opc"
  3576. ID(mov); DM(HL, 0); DB(bit); SC(1);
  3577. }
  3578. break;
  3579. case 0x83:
  3580. case 0x93:
  3581. case 0xa3:
  3582. case 0xb3:
  3583. case 0xc3:
  3584. case 0xd3:
  3585. case 0xe3:
  3586. case 0xf3:
  3587. {
  3588. /** 0111 0001 1bit 0011 clr1 %e0 */
  3589. #line 443 "rl78-decode.opc"
  3590. int bit AU = (op[1] >> 4) & 0x07;
  3591. if (trace)
  3592. {
  3593. printf ("\033[33m%s\033[0m %02x %02x\n",
  3594. "/** 0111 0001 1bit 0011 clr1 %e0 */",
  3595. op[0], op[1]);
  3596. printf (" bit = 0x%x\n", bit);
  3597. }
  3598. SYNTAX("clr1 %e0");
  3599. #line 443 "rl78-decode.opc"
  3600. ID(mov); DM(HL, 0); DB(bit); SC(0);
  3601. }
  3602. break;
  3603. case 0x84:
  3604. case 0x94:
  3605. case 0xa4:
  3606. case 0xb4:
  3607. case 0xc4:
  3608. case 0xd4:
  3609. case 0xe4:
  3610. case 0xf4:
  3611. {
  3612. /** 0111 0001 1bit 0100 mov1 cy, %e1 */
  3613. #line 793 "rl78-decode.opc"
  3614. int bit AU = (op[1] >> 4) & 0x07;
  3615. if (trace)
  3616. {
  3617. printf ("\033[33m%s\033[0m %02x %02x\n",
  3618. "/** 0111 0001 1bit 0100 mov1 cy, %e1 */",
  3619. op[0], op[1]);
  3620. printf (" bit = 0x%x\n", bit);
  3621. }
  3622. SYNTAX("mov1 cy, %e1");
  3623. #line 793 "rl78-decode.opc"
  3624. ID(mov); DCY(); SM(HL, 0); SB(bit);
  3625. }
  3626. break;
  3627. case 0x85:
  3628. case 0x95:
  3629. case 0xa5:
  3630. case 0xb5:
  3631. case 0xc5:
  3632. case 0xd5:
  3633. case 0xe5:
  3634. case 0xf5:
  3635. {
  3636. /** 0111 0001 1bit 0101 and1 cy, %e1 */
  3637. #line 319 "rl78-decode.opc"
  3638. int bit AU = (op[1] >> 4) & 0x07;
  3639. if (trace)
  3640. {
  3641. printf ("\033[33m%s\033[0m %02x %02x\n",
  3642. "/** 0111 0001 1bit 0101 and1 cy, %e1 */",
  3643. op[0], op[1]);
  3644. printf (" bit = 0x%x\n", bit);
  3645. }
  3646. SYNTAX("and1 cy, %e1");
  3647. #line 319 "rl78-decode.opc"
  3648. ID(and); DCY(); SM(HL, 0); SB(bit);
  3649. }
  3650. break;
  3651. case 0x86:
  3652. case 0x96:
  3653. case 0xa6:
  3654. case 0xb6:
  3655. case 0xc6:
  3656. case 0xd6:
  3657. case 0xe6:
  3658. case 0xf6:
  3659. {
  3660. /** 0111 0001 1bit 0110 or1 cy, %e1 */
  3661. #line 974 "rl78-decode.opc"
  3662. int bit AU = (op[1] >> 4) & 0x07;
  3663. if (trace)
  3664. {
  3665. printf ("\033[33m%s\033[0m %02x %02x\n",
  3666. "/** 0111 0001 1bit 0110 or1 cy, %e1 */",
  3667. op[0], op[1]);
  3668. printf (" bit = 0x%x\n", bit);
  3669. }
  3670. SYNTAX("or1 cy, %e1");
  3671. #line 974 "rl78-decode.opc"
  3672. ID(or); DCY(); SM(HL, 0); SB(bit);
  3673. }
  3674. break;
  3675. case 0x87:
  3676. case 0x97:
  3677. case 0xa7:
  3678. case 0xb7:
  3679. case 0xc7:
  3680. case 0xd7:
  3681. case 0xe7:
  3682. case 0xf7:
  3683. {
  3684. /** 0111 0001 1bit 0111 xor1 cy, %e1 */
  3685. #line 1278 "rl78-decode.opc"
  3686. int bit AU = (op[1] >> 4) & 0x07;
  3687. if (trace)
  3688. {
  3689. printf ("\033[33m%s\033[0m %02x %02x\n",
  3690. "/** 0111 0001 1bit 0111 xor1 cy, %e1 */",
  3691. op[0], op[1]);
  3692. printf (" bit = 0x%x\n", bit);
  3693. }
  3694. SYNTAX("xor1 cy, %e1");
  3695. #line 1278 "rl78-decode.opc"
  3696. ID(xor); DCY(); SM(HL, 0); SB(bit);
  3697. }
  3698. break;
  3699. case 0x88:
  3700. {
  3701. /** 0111 0001 1000 1000 clr1 cy */
  3702. if (trace)
  3703. {
  3704. printf ("\033[33m%s\033[0m %02x %02x\n",
  3705. "/** 0111 0001 1000 1000 clr1 cy */",
  3706. op[0], op[1]);
  3707. }
  3708. SYNTAX("clr1 cy");
  3709. #line 449 "rl78-decode.opc"
  3710. ID(mov); DCY(); SC(0);
  3711. }
  3712. break;
  3713. case 0x89:
  3714. case 0x99:
  3715. case 0xa9:
  3716. case 0xb9:
  3717. case 0xc9:
  3718. case 0xd9:
  3719. case 0xe9:
  3720. case 0xf9:
  3721. {
  3722. /** 0111 0001 1bit 1001 mov1 %e0, cy */
  3723. #line 790 "rl78-decode.opc"
  3724. int bit AU = (op[1] >> 4) & 0x07;
  3725. if (trace)
  3726. {
  3727. printf ("\033[33m%s\033[0m %02x %02x\n",
  3728. "/** 0111 0001 1bit 1001 mov1 %e0, cy */",
  3729. op[0], op[1]);
  3730. printf (" bit = 0x%x\n", bit);
  3731. }
  3732. SYNTAX("mov1 %e0, cy");
  3733. #line 790 "rl78-decode.opc"
  3734. ID(mov); DR(A); DB(bit); SCY();
  3735. }
  3736. break;
  3737. case 0x8a:
  3738. case 0x9a:
  3739. case 0xaa:
  3740. case 0xba:
  3741. case 0xca:
  3742. case 0xda:
  3743. case 0xea:
  3744. case 0xfa:
  3745. {
  3746. /** 0111 0001 1bit 1010 set1 %0 */
  3747. #line 1054 "rl78-decode.opc"
  3748. int bit AU = (op[1] >> 4) & 0x07;
  3749. if (trace)
  3750. {
  3751. printf ("\033[33m%s\033[0m %02x %02x\n",
  3752. "/** 0111 0001 1bit 1010 set1 %0 */",
  3753. op[0], op[1]);
  3754. printf (" bit = 0x%x\n", bit);
  3755. }
  3756. SYNTAX("set1 %0");
  3757. #line 1054 "rl78-decode.opc"
  3758. ID(mov); DR(A); DB(bit); SC(1);
  3759. }
  3760. break;
  3761. case 0x8b:
  3762. case 0x9b:
  3763. case 0xab:
  3764. case 0xbb:
  3765. case 0xcb:
  3766. case 0xdb:
  3767. case 0xeb:
  3768. case 0xfb:
  3769. {
  3770. /** 0111 0001 1bit 1011 clr1 %0 */
  3771. #line 446 "rl78-decode.opc"
  3772. int bit AU = (op[1] >> 4) & 0x07;
  3773. if (trace)
  3774. {
  3775. printf ("\033[33m%s\033[0m %02x %02x\n",
  3776. "/** 0111 0001 1bit 1011 clr1 %0 */",
  3777. op[0], op[1]);
  3778. printf (" bit = 0x%x\n", bit);
  3779. }
  3780. SYNTAX("clr1 %0");
  3781. #line 446 "rl78-decode.opc"
  3782. ID(mov); DR(A); DB(bit); SC(0);
  3783. }
  3784. break;
  3785. case 0x8c:
  3786. case 0x9c:
  3787. case 0xac:
  3788. case 0xbc:
  3789. case 0xcc:
  3790. case 0xdc:
  3791. case 0xec:
  3792. case 0xfc:
  3793. {
  3794. /** 0111 0001 1bit 1100 mov1 cy, %e1 */
  3795. #line 796 "rl78-decode.opc"
  3796. int bit AU = (op[1] >> 4) & 0x07;
  3797. if (trace)
  3798. {
  3799. printf ("\033[33m%s\033[0m %02x %02x\n",
  3800. "/** 0111 0001 1bit 1100 mov1 cy, %e1 */",
  3801. op[0], op[1]);
  3802. printf (" bit = 0x%x\n", bit);
  3803. }
  3804. SYNTAX("mov1 cy, %e1");
  3805. #line 796 "rl78-decode.opc"
  3806. ID(mov); DCY(); SR(A); SB(bit);
  3807. }
  3808. break;
  3809. case 0x8d:
  3810. case 0x9d:
  3811. case 0xad:
  3812. case 0xbd:
  3813. case 0xcd:
  3814. case 0xdd:
  3815. case 0xed:
  3816. case 0xfd:
  3817. {
  3818. /** 0111 0001 1bit 1101 and1 cy, %1 */
  3819. #line 322 "rl78-decode.opc"
  3820. int bit AU = (op[1] >> 4) & 0x07;
  3821. if (trace)
  3822. {
  3823. printf ("\033[33m%s\033[0m %02x %02x\n",
  3824. "/** 0111 0001 1bit 1101 and1 cy, %1 */",
  3825. op[0], op[1]);
  3826. printf (" bit = 0x%x\n", bit);
  3827. }
  3828. SYNTAX("and1 cy, %1");
  3829. #line 322 "rl78-decode.opc"
  3830. ID(and); DCY(); SR(A); SB(bit);
  3831. }
  3832. break;
  3833. case 0x8e:
  3834. case 0x9e:
  3835. case 0xae:
  3836. case 0xbe:
  3837. case 0xce:
  3838. case 0xde:
  3839. case 0xee:
  3840. case 0xfe:
  3841. {
  3842. /** 0111 0001 1bit 1110 or1 cy, %1 */
  3843. #line 977 "rl78-decode.opc"
  3844. int bit AU = (op[1] >> 4) & 0x07;
  3845. if (trace)
  3846. {
  3847. printf ("\033[33m%s\033[0m %02x %02x\n",
  3848. "/** 0111 0001 1bit 1110 or1 cy, %1 */",
  3849. op[0], op[1]);
  3850. printf (" bit = 0x%x\n", bit);
  3851. }
  3852. SYNTAX("or1 cy, %1");
  3853. #line 977 "rl78-decode.opc"
  3854. ID(or); DCY(); SR(A); SB(bit);
  3855. }
  3856. break;
  3857. case 0x8f:
  3858. case 0x9f:
  3859. case 0xaf:
  3860. case 0xbf:
  3861. case 0xcf:
  3862. case 0xdf:
  3863. case 0xef:
  3864. case 0xff:
  3865. {
  3866. /** 0111 0001 1bit 1111 xor1 cy, %1 */
  3867. #line 1281 "rl78-decode.opc"
  3868. int bit AU = (op[1] >> 4) & 0x07;
  3869. if (trace)
  3870. {
  3871. printf ("\033[33m%s\033[0m %02x %02x\n",
  3872. "/** 0111 0001 1bit 1111 xor1 cy, %1 */",
  3873. op[0], op[1]);
  3874. printf (" bit = 0x%x\n", bit);
  3875. }
  3876. SYNTAX("xor1 cy, %1");
  3877. #line 1281 "rl78-decode.opc"
  3878. ID(xor); DCY(); SR(A); SB(bit);
  3879. }
  3880. break;
  3881. case 0xc0:
  3882. {
  3883. /** 0111 0001 1100 0000 not1 cy */
  3884. if (trace)
  3885. {
  3886. printf ("\033[33m%s\033[0m %02x %02x\n",
  3887. "/** 0111 0001 1100 0000 not1 cy */",
  3888. op[0], op[1]);
  3889. }
  3890. SYNTAX("not1 cy");
  3891. #line 918 "rl78-decode.opc"
  3892. ID(xor); DCY(); SC(1);
  3893. /*----------------------------------------------------------------------*/
  3894. }
  3895. break;
  3896. default: UNSUPPORTED(); break;
  3897. }
  3898. break;
  3899. case 0x78:
  3900. {
  3901. /** 0111 1000 movw %e0, %1 */
  3902. if (trace)
  3903. {
  3904. printf ("\033[33m%s\033[0m %02x\n",
  3905. "/** 0111 1000 movw %e0, %1 */",
  3906. op[0]);
  3907. }
  3908. SYNTAX("movw %e0, %1");
  3909. #line 879 "rl78-decode.opc"
  3910. ID(mov); W(); DM(BC, IMMU(2)); SR(AX);
  3911. }
  3912. break;
  3913. case 0x79:
  3914. {
  3915. /** 0111 1001 movw %0, %e1 */
  3916. if (trace)
  3917. {
  3918. printf ("\033[33m%s\033[0m %02x\n",
  3919. "/** 0111 1001 movw %0, %e1 */",
  3920. op[0]);
  3921. }
  3922. SYNTAX("movw %0, %e1");
  3923. #line 870 "rl78-decode.opc"
  3924. ID(mov); W(); DR(AX); SM(BC, IMMU(2));
  3925. }
  3926. break;
  3927. case 0x7a:
  3928. {
  3929. /** 0111 1010 xor %0, #%1 */
  3930. if (trace)
  3931. {
  3932. printf ("\033[33m%s\033[0m %02x\n",
  3933. "/** 0111 1010 xor %0, #%1 */",
  3934. op[0]);
  3935. }
  3936. SYNTAX("xor %0, #%1");
  3937. #line 1273 "rl78-decode.opc"
  3938. ID(xor); DM(None, SADDR); SC(IMMU(1)); Fz;
  3939. /*----------------------------------------------------------------------*/
  3940. }
  3941. break;
  3942. case 0x7b:
  3943. {
  3944. /** 0111 1011 xor %0, %1 */
  3945. if (trace)
  3946. {
  3947. printf ("\033[33m%s\033[0m %02x\n",
  3948. "/** 0111 1011 xor %0, %1 */",
  3949. op[0]);
  3950. }
  3951. SYNTAX("xor %0, %1");
  3952. #line 1270 "rl78-decode.opc"
  3953. ID(xor); DR(A); SM(None, SADDR); Fz;
  3954. }
  3955. break;
  3956. case 0x7c:
  3957. {
  3958. /** 0111 1100 xor %0, #%1 */
  3959. if (trace)
  3960. {
  3961. printf ("\033[33m%s\033[0m %02x\n",
  3962. "/** 0111 1100 xor %0, #%1 */",
  3963. op[0]);
  3964. }
  3965. SYNTAX("xor %0, #%1");
  3966. #line 1261 "rl78-decode.opc"
  3967. ID(xor); DR(A); SC(IMMU(1)); Fz;
  3968. }
  3969. break;
  3970. case 0x7d:
  3971. {
  3972. /** 0111 1101 xor %0, %e1 */
  3973. if (trace)
  3974. {
  3975. printf ("\033[33m%s\033[0m %02x\n",
  3976. "/** 0111 1101 xor %0, %e1 */",
  3977. op[0]);
  3978. }
  3979. SYNTAX("xor %0, %e1");
  3980. #line 1249 "rl78-decode.opc"
  3981. ID(xor); DR(A); SM(HL, 0); Fz;
  3982. }
  3983. break;
  3984. case 0x7e:
  3985. {
  3986. /** 0111 1110 xor %0, %ea1 */
  3987. if (trace)
  3988. {
  3989. printf ("\033[33m%s\033[0m %02x\n",
  3990. "/** 0111 1110 xor %0, %ea1 */",
  3991. op[0]);
  3992. }
  3993. SYNTAX("xor %0, %ea1");
  3994. #line 1255 "rl78-decode.opc"
  3995. ID(xor); DR(A); SM(HL, IMMU(1)); Fz;
  3996. }
  3997. break;
  3998. case 0x7f:
  3999. {
  4000. /** 0111 1111 xor %0, %e!1 */
  4001. if (trace)
  4002. {
  4003. printf ("\033[33m%s\033[0m %02x\n",
  4004. "/** 0111 1111 xor %0, %e!1 */",
  4005. op[0]);
  4006. }
  4007. SYNTAX("xor %0, %e!1");
  4008. #line 1246 "rl78-decode.opc"
  4009. ID(xor); DR(A); SM(None, IMMU(2)); Fz;
  4010. }
  4011. break;
  4012. case 0x80:
  4013. case 0x81:
  4014. case 0x82:
  4015. case 0x83:
  4016. case 0x84:
  4017. case 0x85:
  4018. case 0x86:
  4019. case 0x87:
  4020. {
  4021. /** 1000 0reg inc %0 */
  4022. #line 589 "rl78-decode.opc"
  4023. int reg AU = op[0] & 0x07;
  4024. if (trace)
  4025. {
  4026. printf ("\033[33m%s\033[0m %02x\n",
  4027. "/** 1000 0reg inc %0 */",
  4028. op[0]);
  4029. printf (" reg = 0x%x\n", reg);
  4030. }
  4031. SYNTAX("inc %0");
  4032. #line 589 "rl78-decode.opc"
  4033. ID(add); DRB(reg); SC(1); Fza;
  4034. }
  4035. break;
  4036. case 0x88:
  4037. {
  4038. /** 1000 1000 mov %0, %ea1 */
  4039. if (trace)
  4040. {
  4041. printf ("\033[33m%s\033[0m %02x\n",
  4042. "/** 1000 1000 mov %0, %ea1 */",
  4043. op[0]);
  4044. }
  4045. SYNTAX("mov %0, %ea1");
  4046. #line 668 "rl78-decode.opc"
  4047. ID(mov); DR(A); SM(SP, IMMU(1));
  4048. }
  4049. break;
  4050. case 0x89:
  4051. {
  4052. /** 1000 1001 mov %0, %e1 */
  4053. if (trace)
  4054. {
  4055. printf ("\033[33m%s\033[0m %02x\n",
  4056. "/** 1000 1001 mov %0, %e1 */",
  4057. op[0]);
  4058. }
  4059. SYNTAX("mov %0, %e1");
  4060. #line 650 "rl78-decode.opc"
  4061. ID(mov); DR(A); SM(DE, 0);
  4062. }
  4063. break;
  4064. case 0x8a:
  4065. {
  4066. /** 1000 1010 mov %0, %ea1 */
  4067. if (trace)
  4068. {
  4069. printf ("\033[33m%s\033[0m %02x\n",
  4070. "/** 1000 1010 mov %0, %ea1 */",
  4071. op[0]);
  4072. }
  4073. SYNTAX("mov %0, %ea1");
  4074. #line 653 "rl78-decode.opc"
  4075. ID(mov); DR(A); SM(DE, IMMU(1));
  4076. }
  4077. break;
  4078. case 0x8b:
  4079. {
  4080. /** 1000 1011 mov %0, %e1 */
  4081. if (trace)
  4082. {
  4083. printf ("\033[33m%s\033[0m %02x\n",
  4084. "/** 1000 1011 mov %0, %e1 */",
  4085. op[0]);
  4086. }
  4087. SYNTAX("mov %0, %e1");
  4088. #line 656 "rl78-decode.opc"
  4089. ID(mov); DR(A); SM(HL, 0);
  4090. }
  4091. break;
  4092. case 0x8c:
  4093. {
  4094. /** 1000 1100 mov %0, %ea1 */
  4095. if (trace)
  4096. {
  4097. printf ("\033[33m%s\033[0m %02x\n",
  4098. "/** 1000 1100 mov %0, %ea1 */",
  4099. op[0]);
  4100. }
  4101. SYNTAX("mov %0, %ea1");
  4102. #line 659 "rl78-decode.opc"
  4103. ID(mov); DR(A); SM(HL, IMMU(1));
  4104. }
  4105. break;
  4106. case 0x8d:
  4107. {
  4108. /** 1000 1101 mov %0, %1 */
  4109. if (trace)
  4110. {
  4111. printf ("\033[33m%s\033[0m %02x\n",
  4112. "/** 1000 1101 mov %0, %1 */",
  4113. op[0]);
  4114. }
  4115. SYNTAX("mov %0, %1");
  4116. #line 692 "rl78-decode.opc"
  4117. ID(mov); DR(A); SM(None, SADDR);
  4118. }
  4119. break;
  4120. case 0x8e:
  4121. {
  4122. /** 1000 1110 mov %0, %s1 */
  4123. if (trace)
  4124. {
  4125. printf ("\033[33m%s\033[0m %02x\n",
  4126. "/** 1000 1110 mov %0, %s1 */",
  4127. op[0]);
  4128. }
  4129. SYNTAX("mov %0, %s1");
  4130. #line 689 "rl78-decode.opc"
  4131. ID(mov); DR(A); SM(None, SFR);
  4132. }
  4133. break;
  4134. case 0x8f:
  4135. {
  4136. /** 1000 1111 mov %0, %e!1 */
  4137. if (trace)
  4138. {
  4139. printf ("\033[33m%s\033[0m %02x\n",
  4140. "/** 1000 1111 mov %0, %e!1 */",
  4141. op[0]);
  4142. }
  4143. SYNTAX("mov %0, %e!1");
  4144. #line 647 "rl78-decode.opc"
  4145. ID(mov); DR(A); SM(None, IMMU(2));
  4146. }
  4147. break;
  4148. case 0x90:
  4149. case 0x91:
  4150. case 0x92:
  4151. case 0x93:
  4152. case 0x94:
  4153. case 0x95:
  4154. case 0x96:
  4155. case 0x97:
  4156. {
  4157. /** 1001 0reg dec %0 */
  4158. #line 556 "rl78-decode.opc"
  4159. int reg AU = op[0] & 0x07;
  4160. if (trace)
  4161. {
  4162. printf ("\033[33m%s\033[0m %02x\n",
  4163. "/** 1001 0reg dec %0 */",
  4164. op[0]);
  4165. printf (" reg = 0x%x\n", reg);
  4166. }
  4167. SYNTAX("dec %0");
  4168. #line 556 "rl78-decode.opc"
  4169. ID(sub); DRB(reg); SC(1); Fza;
  4170. }
  4171. break;
  4172. case 0x98:
  4173. {
  4174. /** 1001 1000 mov %a0, %1 */
  4175. if (trace)
  4176. {
  4177. printf ("\033[33m%s\033[0m %02x\n",
  4178. "/** 1001 1000 mov %a0, %1 */",
  4179. op[0]);
  4180. }
  4181. SYNTAX("mov %a0, %1");
  4182. #line 644 "rl78-decode.opc"
  4183. ID(mov); DM(SP, IMMU(1)); SR(A);
  4184. }
  4185. break;
  4186. case 0x99:
  4187. {
  4188. /** 1001 1001 mov %e0, %1 */
  4189. if (trace)
  4190. {
  4191. printf ("\033[33m%s\033[0m %02x\n",
  4192. "/** 1001 1001 mov %e0, %1 */",
  4193. op[0]);
  4194. }
  4195. SYNTAX("mov %e0, %1");
  4196. #line 617 "rl78-decode.opc"
  4197. ID(mov); DM(DE, 0); SR(A);
  4198. }
  4199. break;
  4200. case 0x9a:
  4201. {
  4202. /** 1001 1010 mov %ea0, %1 */
  4203. if (trace)
  4204. {
  4205. printf ("\033[33m%s\033[0m %02x\n",
  4206. "/** 1001 1010 mov %ea0, %1 */",
  4207. op[0]);
  4208. }
  4209. SYNTAX("mov %ea0, %1");
  4210. #line 623 "rl78-decode.opc"
  4211. ID(mov); DM(DE, IMMU(1)); SR(A);
  4212. }
  4213. break;
  4214. case 0x9b:
  4215. {
  4216. /** 1001 1011 mov %e0, %1 */
  4217. if (trace)
  4218. {
  4219. printf ("\033[33m%s\033[0m %02x\n",
  4220. "/** 1001 1011 mov %e0, %1 */",
  4221. op[0]);
  4222. }
  4223. SYNTAX("mov %e0, %1");
  4224. #line 626 "rl78-decode.opc"
  4225. ID(mov); DM(HL, 0); SR(A);
  4226. }
  4227. break;
  4228. case 0x9c:
  4229. {
  4230. /** 1001 1100 mov %ea0, %1 */
  4231. if (trace)
  4232. {
  4233. printf ("\033[33m%s\033[0m %02x\n",
  4234. "/** 1001 1100 mov %ea0, %1 */",
  4235. op[0]);
  4236. }
  4237. SYNTAX("mov %ea0, %1");
  4238. #line 635 "rl78-decode.opc"
  4239. ID(mov); DM(HL, IMMU(1)); SR(A);
  4240. }
  4241. break;
  4242. case 0x9d:
  4243. {
  4244. /** 1001 1101 mov %0, %1 */
  4245. if (trace)
  4246. {
  4247. printf ("\033[33m%s\033[0m %02x\n",
  4248. "/** 1001 1101 mov %0, %1 */",
  4249. op[0]);
  4250. }
  4251. SYNTAX("mov %0, %1");
  4252. #line 749 "rl78-decode.opc"
  4253. ID(mov); DM(None, SADDR); SR(A);
  4254. }
  4255. break;
  4256. case 0x9e:
  4257. {
  4258. /** 1001 1110 mov %s0, %1 */
  4259. if (trace)
  4260. {
  4261. printf ("\033[33m%s\033[0m %02x\n",
  4262. "/** 1001 1110 mov %s0, %1 */",
  4263. op[0]);
  4264. }
  4265. SYNTAX("mov %s0, %1");
  4266. #line 782 "rl78-decode.opc"
  4267. ID(mov); DM(None, SFR); SR(A);
  4268. /*----------------------------------------------------------------------*/
  4269. }
  4270. break;
  4271. case 0x9f:
  4272. {
  4273. /** 1001 1111 mov %e!0, %1 */
  4274. if (trace)
  4275. {
  4276. printf ("\033[33m%s\033[0m %02x\n",
  4277. "/** 1001 1111 mov %e!0, %1 */",
  4278. op[0]);
  4279. }
  4280. SYNTAX("mov %e!0, %1");
  4281. #line 614 "rl78-decode.opc"
  4282. ID(mov); DM(None, IMMU(2)); SR(A);
  4283. }
  4284. break;
  4285. case 0xa0:
  4286. {
  4287. /** 1010 0000 inc %e!0 */
  4288. if (trace)
  4289. {
  4290. printf ("\033[33m%s\033[0m %02x\n",
  4291. "/** 1010 0000 inc %e!0 */",
  4292. op[0]);
  4293. }
  4294. SYNTAX("inc %e!0");
  4295. #line 583 "rl78-decode.opc"
  4296. ID(add); DM(None, IMMU(2)); SC(1); Fza;
  4297. }
  4298. break;
  4299. case 0xa1:
  4300. case 0xa3:
  4301. case 0xa5:
  4302. case 0xa7:
  4303. {
  4304. /** 1010 0rg1 incw %0 */
  4305. #line 603 "rl78-decode.opc"
  4306. int rg AU = (op[0] >> 1) & 0x03;
  4307. if (trace)
  4308. {
  4309. printf ("\033[33m%s\033[0m %02x\n",
  4310. "/** 1010 0rg1 incw %0 */",
  4311. op[0]);
  4312. printf (" rg = 0x%x\n", rg);
  4313. }
  4314. SYNTAX("incw %0");
  4315. #line 603 "rl78-decode.opc"
  4316. ID(add); W(); DRW(rg); SC(1);
  4317. }
  4318. break;
  4319. case 0xa2:
  4320. {
  4321. /** 1010 0010 incw %e!0 */
  4322. if (trace)
  4323. {
  4324. printf ("\033[33m%s\033[0m %02x\n",
  4325. "/** 1010 0010 incw %e!0 */",
  4326. op[0]);
  4327. }
  4328. SYNTAX("incw %e!0");
  4329. #line 597 "rl78-decode.opc"
  4330. ID(add); W(); DM(None, IMMU(2)); SC(1);
  4331. }
  4332. break;
  4333. case 0xa4:
  4334. {
  4335. /** 1010 0100 inc %0 */
  4336. if (trace)
  4337. {
  4338. printf ("\033[33m%s\033[0m %02x\n",
  4339. "/** 1010 0100 inc %0 */",
  4340. op[0]);
  4341. }
  4342. SYNTAX("inc %0");
  4343. #line 592 "rl78-decode.opc"
  4344. ID(add); DM(None, SADDR); SC(1); Fza;
  4345. /*----------------------------------------------------------------------*/
  4346. }
  4347. break;
  4348. case 0xa6:
  4349. {
  4350. /** 1010 0110 incw %0 */
  4351. if (trace)
  4352. {
  4353. printf ("\033[33m%s\033[0m %02x\n",
  4354. "/** 1010 0110 incw %0 */",
  4355. op[0]);
  4356. }
  4357. SYNTAX("incw %0");
  4358. #line 606 "rl78-decode.opc"
  4359. ID(add); W(); DM(None, SADDR); SC(1);
  4360. /*----------------------------------------------------------------------*/
  4361. }
  4362. break;
  4363. case 0xa8:
  4364. {
  4365. /** 1010 1000 movw %0, %a1 */
  4366. if (trace)
  4367. {
  4368. printf ("\033[33m%s\033[0m %02x\n",
  4369. "/** 1010 1000 movw %0, %a1 */",
  4370. op[0]);
  4371. }
  4372. SYNTAX("movw %0, %a1");
  4373. #line 852 "rl78-decode.opc"
  4374. ID(mov); W(); DR(AX); SM(SP, IMMU(1));
  4375. }
  4376. break;
  4377. case 0xa9:
  4378. {
  4379. /** 1010 1001 movw %0, %e1 */
  4380. if (trace)
  4381. {
  4382. printf ("\033[33m%s\033[0m %02x\n",
  4383. "/** 1010 1001 movw %0, %e1 */",
  4384. op[0]);
  4385. }
  4386. SYNTAX("movw %0, %e1");
  4387. #line 840 "rl78-decode.opc"
  4388. ID(mov); W(); DR(AX); SM(DE, 0);
  4389. }
  4390. break;
  4391. case 0xaa:
  4392. {
  4393. /** 1010 1010 movw %0, %ea1 */
  4394. if (trace)
  4395. {
  4396. printf ("\033[33m%s\033[0m %02x\n",
  4397. "/** 1010 1010 movw %0, %ea1 */",
  4398. op[0]);
  4399. }
  4400. SYNTAX("movw %0, %ea1");
  4401. #line 843 "rl78-decode.opc"
  4402. ID(mov); W(); DR(AX); SM(DE, IMMU(1));
  4403. }
  4404. break;
  4405. case 0xab:
  4406. {
  4407. /** 1010 1011 movw %0, %e1 */
  4408. if (trace)
  4409. {
  4410. printf ("\033[33m%s\033[0m %02x\n",
  4411. "/** 1010 1011 movw %0, %e1 */",
  4412. op[0]);
  4413. }
  4414. SYNTAX("movw %0, %e1");
  4415. #line 846 "rl78-decode.opc"
  4416. ID(mov); W(); DR(AX); SM(HL, 0);
  4417. }
  4418. break;
  4419. case 0xac:
  4420. {
  4421. /** 1010 1100 movw %0, %ea1 */
  4422. if (trace)
  4423. {
  4424. printf ("\033[33m%s\033[0m %02x\n",
  4425. "/** 1010 1100 movw %0, %ea1 */",
  4426. op[0]);
  4427. }
  4428. SYNTAX("movw %0, %ea1");
  4429. #line 849 "rl78-decode.opc"
  4430. ID(mov); W(); DR(AX); SM(HL, IMMU(1));
  4431. }
  4432. break;
  4433. case 0xad:
  4434. {
  4435. /** 1010 1101 movw %0, %1 */
  4436. if (trace)
  4437. {
  4438. printf ("\033[33m%s\033[0m %02x\n",
  4439. "/** 1010 1101 movw %0, %1 */",
  4440. op[0]);
  4441. }
  4442. SYNTAX("movw %0, %1");
  4443. #line 882 "rl78-decode.opc"
  4444. ID(mov); W(); DR(AX); SM(None, SADDR);
  4445. }
  4446. break;
  4447. case 0xae:
  4448. {
  4449. /** 1010 1110 movw %0, %s1 */
  4450. if (trace)
  4451. {
  4452. printf ("\033[33m%s\033[0m %02x\n",
  4453. "/** 1010 1110 movw %0, %s1 */",
  4454. op[0]);
  4455. }
  4456. SYNTAX("movw %0, %s1");
  4457. #line 885 "rl78-decode.opc"
  4458. ID(mov); W(); DR(AX); SM(None, SFR);
  4459. }
  4460. break;
  4461. case 0xaf:
  4462. {
  4463. /** 1010 1111 movw %0, %e!1 */
  4464. if (trace)
  4465. {
  4466. printf ("\033[33m%s\033[0m %02x\n",
  4467. "/** 1010 1111 movw %0, %e!1 */",
  4468. op[0]);
  4469. }
  4470. SYNTAX("movw %0, %e!1");
  4471. #line 836 "rl78-decode.opc"
  4472. ID(mov); W(); DR(AX); SM(None, IMMU(2));
  4473. }
  4474. break;
  4475. case 0xb0:
  4476. {
  4477. /** 1011 0000 dec %e!0 */
  4478. if (trace)
  4479. {
  4480. printf ("\033[33m%s\033[0m %02x\n",
  4481. "/** 1011 0000 dec %e!0 */",
  4482. op[0]);
  4483. }
  4484. SYNTAX("dec %e!0");
  4485. #line 550 "rl78-decode.opc"
  4486. ID(sub); DM(None, IMMU(2)); SC(1); Fza;
  4487. }
  4488. break;
  4489. case 0xb1:
  4490. case 0xb3:
  4491. case 0xb5:
  4492. case 0xb7:
  4493. {
  4494. /** 1011 0rg1 decw %0 */
  4495. #line 570 "rl78-decode.opc"
  4496. int rg AU = (op[0] >> 1) & 0x03;
  4497. if (trace)
  4498. {
  4499. printf ("\033[33m%s\033[0m %02x\n",
  4500. "/** 1011 0rg1 decw %0 */",
  4501. op[0]);
  4502. printf (" rg = 0x%x\n", rg);
  4503. }
  4504. SYNTAX("decw %0");
  4505. #line 570 "rl78-decode.opc"
  4506. ID(sub); W(); DRW(rg); SC(1);
  4507. }
  4508. break;
  4509. case 0xb2:
  4510. {
  4511. /** 1011 0010 decw %e!0 */
  4512. if (trace)
  4513. {
  4514. printf ("\033[33m%s\033[0m %02x\n",
  4515. "/** 1011 0010 decw %e!0 */",
  4516. op[0]);
  4517. }
  4518. SYNTAX("decw %e!0");
  4519. #line 564 "rl78-decode.opc"
  4520. ID(sub); W(); DM(None, IMMU(2)); SC(1);
  4521. }
  4522. break;
  4523. case 0xb4:
  4524. {
  4525. /** 1011 0100 dec %0 */
  4526. if (trace)
  4527. {
  4528. printf ("\033[33m%s\033[0m %02x\n",
  4529. "/** 1011 0100 dec %0 */",
  4530. op[0]);
  4531. }
  4532. SYNTAX("dec %0");
  4533. #line 559 "rl78-decode.opc"
  4534. ID(sub); DM(None, SADDR); SC(1); Fza;
  4535. /*----------------------------------------------------------------------*/
  4536. }
  4537. break;
  4538. case 0xb6:
  4539. {
  4540. /** 1011 0110 decw %0 */
  4541. if (trace)
  4542. {
  4543. printf ("\033[33m%s\033[0m %02x\n",
  4544. "/** 1011 0110 decw %0 */",
  4545. op[0]);
  4546. }
  4547. SYNTAX("decw %0");
  4548. #line 573 "rl78-decode.opc"
  4549. ID(sub); W(); DM(None, SADDR); SC(1);
  4550. /*----------------------------------------------------------------------*/
  4551. }
  4552. break;
  4553. case 0xb8:
  4554. {
  4555. /** 1011 1000 movw %a0, %1 */
  4556. if (trace)
  4557. {
  4558. printf ("\033[33m%s\033[0m %02x\n",
  4559. "/** 1011 1000 movw %a0, %1 */",
  4560. op[0]);
  4561. }
  4562. SYNTAX("movw %a0, %1");
  4563. #line 833 "rl78-decode.opc"
  4564. ID(mov); W(); DM(SP, IMMU(1)); SR(AX);
  4565. }
  4566. break;
  4567. case 0xb9:
  4568. {
  4569. /** 1011 1001 movw %e0, %1 */
  4570. if (trace)
  4571. {
  4572. printf ("\033[33m%s\033[0m %02x\n",
  4573. "/** 1011 1001 movw %e0, %1 */",
  4574. op[0]);
  4575. }
  4576. SYNTAX("movw %e0, %1");
  4577. #line 821 "rl78-decode.opc"
  4578. ID(mov); W(); DM(DE, 0); SR(AX);
  4579. }
  4580. break;
  4581. case 0xba:
  4582. {
  4583. /** 1011 1010 movw %ea0, %1 */
  4584. if (trace)
  4585. {
  4586. printf ("\033[33m%s\033[0m %02x\n",
  4587. "/** 1011 1010 movw %ea0, %1 */",
  4588. op[0]);
  4589. }
  4590. SYNTAX("movw %ea0, %1");
  4591. #line 824 "rl78-decode.opc"
  4592. ID(mov); W(); DM(DE, IMMU(1)); SR(AX);
  4593. }
  4594. break;
  4595. case 0xbb:
  4596. {
  4597. /** 1011 1011 movw %e0, %1 */
  4598. if (trace)
  4599. {
  4600. printf ("\033[33m%s\033[0m %02x\n",
  4601. "/** 1011 1011 movw %e0, %1 */",
  4602. op[0]);
  4603. }
  4604. SYNTAX("movw %e0, %1");
  4605. #line 827 "rl78-decode.opc"
  4606. ID(mov); W(); DM(HL, 0); SR(AX);
  4607. }
  4608. break;
  4609. case 0xbc:
  4610. {
  4611. /** 1011 1100 movw %ea0, %1 */
  4612. if (trace)
  4613. {
  4614. printf ("\033[33m%s\033[0m %02x\n",
  4615. "/** 1011 1100 movw %ea0, %1 */",
  4616. op[0]);
  4617. }
  4618. SYNTAX("movw %ea0, %1");
  4619. #line 830 "rl78-decode.opc"
  4620. ID(mov); W(); DM(HL, IMMU(1)); SR(AX);
  4621. }
  4622. break;
  4623. case 0xbd:
  4624. {
  4625. /** 1011 1101 movw %0, %1 */
  4626. if (trace)
  4627. {
  4628. printf ("\033[33m%s\033[0m %02x\n",
  4629. "/** 1011 1101 movw %0, %1 */",
  4630. op[0]);
  4631. }
  4632. SYNTAX("movw %0, %1");
  4633. #line 897 "rl78-decode.opc"
  4634. ID(mov); W(); DM(None, SADDR); SR(AX);
  4635. }
  4636. break;
  4637. case 0xbe:
  4638. {
  4639. /** 1011 1110 movw %s0, %1 */
  4640. if (trace)
  4641. {
  4642. printf ("\033[33m%s\033[0m %02x\n",
  4643. "/** 1011 1110 movw %s0, %1 */",
  4644. op[0]);
  4645. }
  4646. SYNTAX("movw %s0, %1");
  4647. #line 903 "rl78-decode.opc"
  4648. ID(mov); W(); DM(None, SFR); SR(AX);
  4649. /*----------------------------------------------------------------------*/
  4650. }
  4651. break;
  4652. case 0xbf:
  4653. {
  4654. /** 1011 1111 movw %e!0, %1 */
  4655. if (trace)
  4656. {
  4657. printf ("\033[33m%s\033[0m %02x\n",
  4658. "/** 1011 1111 movw %e!0, %1 */",
  4659. op[0]);
  4660. }
  4661. SYNTAX("movw %e!0, %1");
  4662. #line 818 "rl78-decode.opc"
  4663. ID(mov); W(); DM(None, IMMU(2)); SR(AX);
  4664. }
  4665. break;
  4666. case 0xc0:
  4667. case 0xc2:
  4668. case 0xc4:
  4669. case 0xc6:
  4670. {
  4671. /** 1100 0rg0 pop %0 */
  4672. #line 988 "rl78-decode.opc"
  4673. int rg AU = (op[0] >> 1) & 0x03;
  4674. if (trace)
  4675. {
  4676. printf ("\033[33m%s\033[0m %02x\n",
  4677. "/** 1100 0rg0 pop %0 */",
  4678. op[0]);
  4679. printf (" rg = 0x%x\n", rg);
  4680. }
  4681. SYNTAX("pop %0");
  4682. #line 988 "rl78-decode.opc"
  4683. ID(mov); W(); DRW(rg); SPOP();
  4684. }
  4685. break;
  4686. case 0xc1:
  4687. case 0xc3:
  4688. case 0xc5:
  4689. case 0xc7:
  4690. {
  4691. /** 1100 0rg1 push %1 */
  4692. #line 996 "rl78-decode.opc"
  4693. int rg AU = (op[0] >> 1) & 0x03;
  4694. if (trace)
  4695. {
  4696. printf ("\033[33m%s\033[0m %02x\n",
  4697. "/** 1100 0rg1 push %1 */",
  4698. op[0]);
  4699. printf (" rg = 0x%x\n", rg);
  4700. }
  4701. SYNTAX("push %1");
  4702. #line 996 "rl78-decode.opc"
  4703. ID(mov); W(); DPUSH(); SRW(rg);
  4704. }
  4705. break;
  4706. case 0xc8:
  4707. {
  4708. /** 1100 1000 mov %a0, #%1 */
  4709. if (trace)
  4710. {
  4711. printf ("\033[33m%s\033[0m %02x\n",
  4712. "/** 1100 1000 mov %a0, #%1 */",
  4713. op[0]);
  4714. }
  4715. SYNTAX("mov %a0, #%1");
  4716. #line 641 "rl78-decode.opc"
  4717. ID(mov); DM(SP, IMMU(1)); SC(IMMU(1));
  4718. }
  4719. break;
  4720. case 0xc9:
  4721. {
  4722. /** 1100 1001 movw %0, #%1 */
  4723. if (trace)
  4724. {
  4725. printf ("\033[33m%s\033[0m %02x\n",
  4726. "/** 1100 1001 movw %0, #%1 */",
  4727. op[0]);
  4728. }
  4729. SYNTAX("movw %0, #%1");
  4730. #line 894 "rl78-decode.opc"
  4731. ID(mov); W(); DM(None, SADDR); SC(IMMU(2));
  4732. }
  4733. break;
  4734. case 0xca:
  4735. {
  4736. /** 1100 1010 mov %ea0, #%1 */
  4737. if (trace)
  4738. {
  4739. printf ("\033[33m%s\033[0m %02x\n",
  4740. "/** 1100 1010 mov %ea0, #%1 */",
  4741. op[0]);
  4742. }
  4743. SYNTAX("mov %ea0, #%1");
  4744. #line 620 "rl78-decode.opc"
  4745. ID(mov); DM(DE, IMMU(1)); SC(IMMU(1));
  4746. }
  4747. break;
  4748. case 0xcb:
  4749. {
  4750. /** 1100 1011 movw %s0, #%1 */
  4751. if (trace)
  4752. {
  4753. printf ("\033[33m%s\033[0m %02x\n",
  4754. "/** 1100 1011 movw %s0, #%1 */",
  4755. op[0]);
  4756. }
  4757. SYNTAX("movw %s0, #%1");
  4758. #line 900 "rl78-decode.opc"
  4759. ID(mov); W(); DM(None, SFR); SC(IMMU(2));
  4760. }
  4761. break;
  4762. case 0xcc:
  4763. {
  4764. /** 1100 1100 mov %ea0, #%1 */
  4765. if (trace)
  4766. {
  4767. printf ("\033[33m%s\033[0m %02x\n",
  4768. "/** 1100 1100 mov %ea0, #%1 */",
  4769. op[0]);
  4770. }
  4771. SYNTAX("mov %ea0, #%1");
  4772. #line 632 "rl78-decode.opc"
  4773. ID(mov); DM(HL, IMMU(1)); SC(IMMU(1));
  4774. }
  4775. break;
  4776. case 0xcd:
  4777. {
  4778. /** 1100 1101 mov %0, #%1 */
  4779. if (trace)
  4780. {
  4781. printf ("\033[33m%s\033[0m %02x\n",
  4782. "/** 1100 1101 mov %0, #%1 */",
  4783. op[0]);
  4784. }
  4785. SYNTAX("mov %0, #%1");
  4786. #line 746 "rl78-decode.opc"
  4787. ID(mov); DM(None, SADDR); SC(IMMU(1));
  4788. }
  4789. break;
  4790. case 0xce:
  4791. {
  4792. /** 1100 1110 mov %s0, #%1 */
  4793. if (trace)
  4794. {
  4795. printf ("\033[33m%s\033[0m %02x\n",
  4796. "/** 1100 1110 mov %s0, #%1 */",
  4797. op[0]);
  4798. }
  4799. SYNTAX("mov %s0, #%1");
  4800. #line 752 "rl78-decode.opc"
  4801. op0 = SFR;
  4802. op1 = IMMU(1);
  4803. ID(mov); DM(None, op0); SC(op1);
  4804. if (op0 == 0xffffb && isa == RL78_ISA_G14)
  4805. switch (op1)
  4806. {
  4807. case 0x01:
  4808. rl78->syntax = "mulhu"; ID(mulhu);
  4809. break;
  4810. case 0x02:
  4811. rl78->syntax = "mulh"; ID(mulh);
  4812. break;
  4813. case 0x03:
  4814. rl78->syntax = "divhu"; ID(divhu);
  4815. break;
  4816. case 0x04:
  4817. rl78->syntax = "divwu <old-encoding>"; ID(divwu);
  4818. break;
  4819. case 0x05:
  4820. rl78->syntax = "machu"; ID(machu);
  4821. break;
  4822. case 0x06:
  4823. rl78->syntax = "mach"; ID(mach);
  4824. break;
  4825. case 0x0b:
  4826. rl78->syntax = "divwu"; ID(divwu);
  4827. break;
  4828. }
  4829. }
  4830. break;
  4831. case 0xcf:
  4832. {
  4833. /** 1100 1111 mov %e!0, #%1 */
  4834. if (trace)
  4835. {
  4836. printf ("\033[33m%s\033[0m %02x\n",
  4837. "/** 1100 1111 mov %e!0, #%1 */",
  4838. op[0]);
  4839. }
  4840. SYNTAX("mov %e!0, #%1");
  4841. #line 611 "rl78-decode.opc"
  4842. ID(mov); DM(None, IMMU(2)); SC(IMMU(1));
  4843. }
  4844. break;
  4845. case 0xd0:
  4846. case 0xd1:
  4847. case 0xd2:
  4848. case 0xd3:
  4849. {
  4850. /** 1101 00rg cmp0 %0 */
  4851. #line 520 "rl78-decode.opc"
  4852. int rg AU = op[0] & 0x03;
  4853. if (trace)
  4854. {
  4855. printf ("\033[33m%s\033[0m %02x\n",
  4856. "/** 1101 00rg cmp0 %0 */",
  4857. op[0]);
  4858. printf (" rg = 0x%x\n", rg);
  4859. }
  4860. SYNTAX("cmp0 %0");
  4861. #line 520 "rl78-decode.opc"
  4862. ID(cmp); DRB(rg); SC(0); Fzac;
  4863. }
  4864. break;
  4865. case 0xd4:
  4866. {
  4867. /** 1101 0100 cmp0 %0 */
  4868. if (trace)
  4869. {
  4870. printf ("\033[33m%s\033[0m %02x\n",
  4871. "/** 1101 0100 cmp0 %0 */",
  4872. op[0]);
  4873. }
  4874. SYNTAX("cmp0 %0");
  4875. #line 523 "rl78-decode.opc"
  4876. ID(cmp); DM(None, SADDR); SC(0); Fzac;
  4877. /*----------------------------------------------------------------------*/
  4878. }
  4879. break;
  4880. case 0xd5:
  4881. {
  4882. /** 1101 0101 cmp0 %e!0 */
  4883. if (trace)
  4884. {
  4885. printf ("\033[33m%s\033[0m %02x\n",
  4886. "/** 1101 0101 cmp0 %e!0 */",
  4887. op[0]);
  4888. }
  4889. SYNTAX("cmp0 %e!0");
  4890. #line 517 "rl78-decode.opc"
  4891. ID(cmp); DM(None, IMMU(2)); SC(0); Fzac;
  4892. }
  4893. break;
  4894. case 0xd6:
  4895. {
  4896. /** 1101 0110 mulu x */
  4897. if (trace)
  4898. {
  4899. printf ("\033[33m%s\033[0m %02x\n",
  4900. "/** 1101 0110 mulu x */",
  4901. op[0]);
  4902. }
  4903. SYNTAX("mulu x");
  4904. #line 908 "rl78-decode.opc"
  4905. ID(mulu);
  4906. /*----------------------------------------------------------------------*/
  4907. }
  4908. break;
  4909. case 0xd7:
  4910. {
  4911. /** 1101 0111 ret */
  4912. if (trace)
  4913. {
  4914. printf ("\033[33m%s\033[0m %02x\n",
  4915. "/** 1101 0111 ret */",
  4916. op[0]);
  4917. }
  4918. SYNTAX("ret");
  4919. #line 1004 "rl78-decode.opc"
  4920. ID(ret);
  4921. }
  4922. break;
  4923. case 0xd8:
  4924. {
  4925. /** 1101 1000 mov %0, %1 */
  4926. if (trace)
  4927. {
  4928. printf ("\033[33m%s\033[0m %02x\n",
  4929. "/** 1101 1000 mov %0, %1 */",
  4930. op[0]);
  4931. }
  4932. SYNTAX("mov %0, %1");
  4933. #line 713 "rl78-decode.opc"
  4934. ID(mov); DR(X); SM(None, SADDR);
  4935. }
  4936. break;
  4937. case 0xd9:
  4938. {
  4939. /** 1101 1001 mov %0, %e!1 */
  4940. if (trace)
  4941. {
  4942. printf ("\033[33m%s\033[0m %02x\n",
  4943. "/** 1101 1001 mov %0, %e!1 */",
  4944. op[0]);
  4945. }
  4946. SYNTAX("mov %0, %e!1");
  4947. #line 710 "rl78-decode.opc"
  4948. ID(mov); DR(X); SM(None, IMMU(2));
  4949. }
  4950. break;
  4951. case 0xda:
  4952. case 0xea:
  4953. case 0xfa:
  4954. {
  4955. /** 11ra 1010 movw %0, %1 */
  4956. #line 891 "rl78-decode.opc"
  4957. int ra AU = (op[0] >> 4) & 0x03;
  4958. if (trace)
  4959. {
  4960. printf ("\033[33m%s\033[0m %02x\n",
  4961. "/** 11ra 1010 movw %0, %1 */",
  4962. op[0]);
  4963. printf (" ra = 0x%x\n", ra);
  4964. }
  4965. SYNTAX("movw %0, %1");
  4966. #line 891 "rl78-decode.opc"
  4967. ID(mov); W(); DRW(ra); SM(None, SADDR);
  4968. }
  4969. break;
  4970. case 0xdb:
  4971. case 0xeb:
  4972. case 0xfb:
  4973. {
  4974. /** 11ra 1011 movw %0, %es!1 */
  4975. #line 888 "rl78-decode.opc"
  4976. int ra AU = (op[0] >> 4) & 0x03;
  4977. if (trace)
  4978. {
  4979. printf ("\033[33m%s\033[0m %02x\n",
  4980. "/** 11ra 1011 movw %0, %es!1 */",
  4981. op[0]);
  4982. printf (" ra = 0x%x\n", ra);
  4983. }
  4984. SYNTAX("movw %0, %es!1");
  4985. #line 888 "rl78-decode.opc"
  4986. ID(mov); W(); DRW(ra); SM(None, IMMU(2));
  4987. }
  4988. break;
  4989. case 0xdc:
  4990. {
  4991. /** 1101 1100 bc $%a0 */
  4992. if (trace)
  4993. {
  4994. printf ("\033[33m%s\033[0m %02x\n",
  4995. "/** 1101 1100 bc $%a0 */",
  4996. op[0]);
  4997. }
  4998. SYNTAX("bc $%a0");
  4999. #line 336 "rl78-decode.opc"
  5000. ID(branch_cond); DC(pc+IMMS(1)+2); SR(None); COND(C);
  5001. }
  5002. break;
  5003. case 0xdd:
  5004. {
  5005. /** 1101 1101 bz $%a0 */
  5006. if (trace)
  5007. {
  5008. printf ("\033[33m%s\033[0m %02x\n",
  5009. "/** 1101 1101 bz $%a0 */",
  5010. op[0]);
  5011. }
  5012. SYNTAX("bz $%a0");
  5013. #line 348 "rl78-decode.opc"
  5014. ID(branch_cond); DC(pc+IMMS(1)+2); SR(None); COND(Z);
  5015. }
  5016. break;
  5017. case 0xde:
  5018. {
  5019. /** 1101 1110 bnc $%a0 */
  5020. if (trace)
  5021. {
  5022. printf ("\033[33m%s\033[0m %02x\n",
  5023. "/** 1101 1110 bnc $%a0 */",
  5024. op[0]);
  5025. }
  5026. SYNTAX("bnc $%a0");
  5027. #line 339 "rl78-decode.opc"
  5028. ID(branch_cond); DC(pc+IMMS(1)+2); SR(None); COND(NC);
  5029. }
  5030. break;
  5031. case 0xdf:
  5032. {
  5033. /** 1101 1111 bnz $%a0 */
  5034. if (trace)
  5035. {
  5036. printf ("\033[33m%s\033[0m %02x\n",
  5037. "/** 1101 1111 bnz $%a0 */",
  5038. op[0]);
  5039. }
  5040. SYNTAX("bnz $%a0");
  5041. #line 351 "rl78-decode.opc"
  5042. ID(branch_cond); DC(pc+IMMS(1)+2); SR(None); COND(NZ);
  5043. /*----------------------------------------------------------------------*/
  5044. }
  5045. break;
  5046. case 0xe0:
  5047. case 0xe1:
  5048. case 0xe2:
  5049. case 0xe3:
  5050. {
  5051. /** 1110 00rg oneb %0 */
  5052. #line 926 "rl78-decode.opc"
  5053. int rg AU = op[0] & 0x03;
  5054. if (trace)
  5055. {
  5056. printf ("\033[33m%s\033[0m %02x\n",
  5057. "/** 1110 00rg oneb %0 */",
  5058. op[0]);
  5059. printf (" rg = 0x%x\n", rg);
  5060. }
  5061. SYNTAX("oneb %0");
  5062. #line 926 "rl78-decode.opc"
  5063. ID(mov); DRB(rg); SC(1);
  5064. }
  5065. break;
  5066. case 0xe4:
  5067. {
  5068. /** 1110 0100 oneb %0 */
  5069. if (trace)
  5070. {
  5071. printf ("\033[33m%s\033[0m %02x\n",
  5072. "/** 1110 0100 oneb %0 */",
  5073. op[0]);
  5074. }
  5075. SYNTAX("oneb %0");
  5076. #line 929 "rl78-decode.opc"
  5077. ID(mov); DM(None, SADDR); SC(1);
  5078. /*----------------------------------------------------------------------*/
  5079. }
  5080. break;
  5081. case 0xe5:
  5082. {
  5083. /** 1110 0101 oneb %e!0 */
  5084. if (trace)
  5085. {
  5086. printf ("\033[33m%s\033[0m %02x\n",
  5087. "/** 1110 0101 oneb %e!0 */",
  5088. op[0]);
  5089. }
  5090. SYNTAX("oneb %e!0");
  5091. #line 923 "rl78-decode.opc"
  5092. ID(mov); DM(None, IMMU(2)); SC(1);
  5093. }
  5094. break;
  5095. case 0xe6:
  5096. {
  5097. /** 1110 0110 onew %0 */
  5098. if (trace)
  5099. {
  5100. printf ("\033[33m%s\033[0m %02x\n",
  5101. "/** 1110 0110 onew %0 */",
  5102. op[0]);
  5103. }
  5104. SYNTAX("onew %0");
  5105. #line 934 "rl78-decode.opc"
  5106. ID(mov); DR(AX); SC(1);
  5107. }
  5108. break;
  5109. case 0xe7:
  5110. {
  5111. /** 1110 0111 onew %0 */
  5112. if (trace)
  5113. {
  5114. printf ("\033[33m%s\033[0m %02x\n",
  5115. "/** 1110 0111 onew %0 */",
  5116. op[0]);
  5117. }
  5118. SYNTAX("onew %0");
  5119. #line 937 "rl78-decode.opc"
  5120. ID(mov); DR(BC); SC(1);
  5121. /*----------------------------------------------------------------------*/
  5122. }
  5123. break;
  5124. case 0xe8:
  5125. {
  5126. /** 1110 1000 mov %0, %1 */
  5127. if (trace)
  5128. {
  5129. printf ("\033[33m%s\033[0m %02x\n",
  5130. "/** 1110 1000 mov %0, %1 */",
  5131. op[0]);
  5132. }
  5133. SYNTAX("mov %0, %1");
  5134. #line 701 "rl78-decode.opc"
  5135. ID(mov); DR(B); SM(None, SADDR);
  5136. }
  5137. break;
  5138. case 0xe9:
  5139. {
  5140. /** 1110 1001 mov %0, %e!1 */
  5141. if (trace)
  5142. {
  5143. printf ("\033[33m%s\033[0m %02x\n",
  5144. "/** 1110 1001 mov %0, %e!1 */",
  5145. op[0]);
  5146. }
  5147. SYNTAX("mov %0, %e!1");
  5148. #line 695 "rl78-decode.opc"
  5149. ID(mov); DR(B); SM(None, IMMU(2));
  5150. }
  5151. break;
  5152. case 0xec:
  5153. {
  5154. /** 1110 1100 br !%!a0 */
  5155. if (trace)
  5156. {
  5157. printf ("\033[33m%s\033[0m %02x\n",
  5158. "/** 1110 1100 br !%!a0 */",
  5159. op[0]);
  5160. }
  5161. SYNTAX("br !%!a0");
  5162. #line 370 "rl78-decode.opc"
  5163. ID(branch); DC(IMMU(3));
  5164. }
  5165. break;
  5166. case 0xed:
  5167. {
  5168. /** 1110 1101 br %!a0 */
  5169. if (trace)
  5170. {
  5171. printf ("\033[33m%s\033[0m %02x\n",
  5172. "/** 1110 1101 br %!a0 */",
  5173. op[0]);
  5174. }
  5175. SYNTAX("br %!a0");
  5176. #line 373 "rl78-decode.opc"
  5177. ID(branch); DC(IMMU(2));
  5178. }
  5179. break;
  5180. case 0xee:
  5181. {
  5182. /** 1110 1110 br $%!a0 */
  5183. if (trace)
  5184. {
  5185. printf ("\033[33m%s\033[0m %02x\n",
  5186. "/** 1110 1110 br $%!a0 */",
  5187. op[0]);
  5188. }
  5189. SYNTAX("br $%!a0");
  5190. #line 376 "rl78-decode.opc"
  5191. ID(branch); DC(pc+IMMS(2)+3);
  5192. }
  5193. break;
  5194. case 0xef:
  5195. {
  5196. /** 1110 1111 br $%a0 */
  5197. if (trace)
  5198. {
  5199. printf ("\033[33m%s\033[0m %02x\n",
  5200. "/** 1110 1111 br $%a0 */",
  5201. op[0]);
  5202. }
  5203. SYNTAX("br $%a0");
  5204. #line 379 "rl78-decode.opc"
  5205. ID(branch); DC(pc+IMMS(1)+2);
  5206. }
  5207. break;
  5208. case 0xf0:
  5209. case 0xf1:
  5210. case 0xf2:
  5211. case 0xf3:
  5212. {
  5213. /** 1111 00rg clrb %0 */
  5214. #line 466 "rl78-decode.opc"
  5215. int rg AU = op[0] & 0x03;
  5216. if (trace)
  5217. {
  5218. printf ("\033[33m%s\033[0m %02x\n",
  5219. "/** 1111 00rg clrb %0 */",
  5220. op[0]);
  5221. printf (" rg = 0x%x\n", rg);
  5222. }
  5223. SYNTAX("clrb %0");
  5224. #line 466 "rl78-decode.opc"
  5225. ID(mov); DRB(rg); SC(0);
  5226. }
  5227. break;
  5228. case 0xf4:
  5229. {
  5230. /** 1111 0100 clrb %0 */
  5231. if (trace)
  5232. {
  5233. printf ("\033[33m%s\033[0m %02x\n",
  5234. "/** 1111 0100 clrb %0 */",
  5235. op[0]);
  5236. }
  5237. SYNTAX("clrb %0");
  5238. #line 469 "rl78-decode.opc"
  5239. ID(mov); DM(None, SADDR); SC(0);
  5240. /*----------------------------------------------------------------------*/
  5241. }
  5242. break;
  5243. case 0xf5:
  5244. {
  5245. /** 1111 0101 clrb %e!0 */
  5246. if (trace)
  5247. {
  5248. printf ("\033[33m%s\033[0m %02x\n",
  5249. "/** 1111 0101 clrb %e!0 */",
  5250. op[0]);
  5251. }
  5252. SYNTAX("clrb %e!0");
  5253. #line 463 "rl78-decode.opc"
  5254. ID(mov); DM(None, IMMU(2)); SC(0);
  5255. }
  5256. break;
  5257. case 0xf6:
  5258. {
  5259. /** 1111 0110 clrw %0 */
  5260. if (trace)
  5261. {
  5262. printf ("\033[33m%s\033[0m %02x\n",
  5263. "/** 1111 0110 clrw %0 */",
  5264. op[0]);
  5265. }
  5266. SYNTAX("clrw %0");
  5267. #line 474 "rl78-decode.opc"
  5268. ID(mov); DR(AX); SC(0);
  5269. }
  5270. break;
  5271. case 0xf7:
  5272. {
  5273. /** 1111 0111 clrw %0 */
  5274. if (trace)
  5275. {
  5276. printf ("\033[33m%s\033[0m %02x\n",
  5277. "/** 1111 0111 clrw %0 */",
  5278. op[0]);
  5279. }
  5280. SYNTAX("clrw %0");
  5281. #line 477 "rl78-decode.opc"
  5282. ID(mov); DR(BC); SC(0);
  5283. /*----------------------------------------------------------------------*/
  5284. }
  5285. break;
  5286. case 0xf8:
  5287. {
  5288. /** 1111 1000 mov %0, %1 */
  5289. if (trace)
  5290. {
  5291. printf ("\033[33m%s\033[0m %02x\n",
  5292. "/** 1111 1000 mov %0, %1 */",
  5293. op[0]);
  5294. }
  5295. SYNTAX("mov %0, %1");
  5296. #line 707 "rl78-decode.opc"
  5297. ID(mov); DR(C); SM(None, SADDR);
  5298. }
  5299. break;
  5300. case 0xf9:
  5301. {
  5302. /** 1111 1001 mov %0, %e!1 */
  5303. if (trace)
  5304. {
  5305. printf ("\033[33m%s\033[0m %02x\n",
  5306. "/** 1111 1001 mov %0, %e!1 */",
  5307. op[0]);
  5308. }
  5309. SYNTAX("mov %0, %e!1");
  5310. #line 704 "rl78-decode.opc"
  5311. ID(mov); DR(C); SM(None, IMMU(2));
  5312. }
  5313. break;
  5314. case 0xfc:
  5315. {
  5316. /** 1111 1100 call !%!a0 */
  5317. if (trace)
  5318. {
  5319. printf ("\033[33m%s\033[0m %02x\n",
  5320. "/** 1111 1100 call !%!a0 */",
  5321. op[0]);
  5322. }
  5323. SYNTAX("call !%!a0");
  5324. #line 423 "rl78-decode.opc"
  5325. ID(call); DC(IMMU(3));
  5326. }
  5327. break;
  5328. case 0xfd:
  5329. {
  5330. /** 1111 1101 call %!a0 */
  5331. if (trace)
  5332. {
  5333. printf ("\033[33m%s\033[0m %02x\n",
  5334. "/** 1111 1101 call %!a0 */",
  5335. op[0]);
  5336. }
  5337. SYNTAX("call %!a0");
  5338. #line 426 "rl78-decode.opc"
  5339. ID(call); DC(IMMU(2));
  5340. }
  5341. break;
  5342. case 0xfe:
  5343. {
  5344. /** 1111 1110 call $%!a0 */
  5345. if (trace)
  5346. {
  5347. printf ("\033[33m%s\033[0m %02x\n",
  5348. "/** 1111 1110 call $%!a0 */",
  5349. op[0]);
  5350. }
  5351. SYNTAX("call $%!a0");
  5352. #line 429 "rl78-decode.opc"
  5353. ID(call); DC(pc+IMMS(2)+3);
  5354. }
  5355. break;
  5356. case 0xff:
  5357. {
  5358. /** 1111 1111 brk1 */
  5359. if (trace)
  5360. {
  5361. printf ("\033[33m%s\033[0m %02x\n",
  5362. "/** 1111 1111 brk1 */",
  5363. op[0]);
  5364. }
  5365. SYNTAX("brk1");
  5366. #line 387 "rl78-decode.opc"
  5367. ID(break);
  5368. }
  5369. break;
  5370. }
  5371. #line 1292 "rl78-decode.opc"
  5372. return rl78->n_bytes;
  5373. }