rl78-decode.c 163 KB

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