famec_opcodes.h 559 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527852885298530853185328533853485358536853785388539854085418542854385448545854685478548854985508551855285538554855585568557855885598560856185628563856485658566856785688569857085718572857385748575857685778578857985808581858285838584858585868587858885898590859185928593859485958596859785988599860086018602860386048605860686078608860986108611861286138614861586168617861886198620862186228623862486258626862786288629863086318632863386348635863686378638863986408641864286438644864586468647864886498650865186528653865486558656865786588659866086618662866386648665866686678668866986708671867286738674867586768677867886798680868186828683868486858686868786888689869086918692869386948695869686978698869987008701870287038704870587068707870887098710871187128713871487158716871787188719872087218722872387248725872687278728872987308731873287338734873587368737873887398740874187428743874487458746874787488749875087518752875387548755875687578758875987608761876287638764876587668767876887698770877187728773877487758776877787788779878087818782878387848785878687878788878987908791879287938794879587968797879887998800880188028803880488058806880788088809881088118812881388148815881688178818881988208821882288238824882588268827882888298830883188328833883488358836883788388839884088418842884388448845884688478848884988508851885288538854885588568857885888598860886188628863886488658866886788688869887088718872887388748875887688778878887988808881888288838884888588868887888888898890889188928893889488958896889788988899890089018902890389048905890689078908890989108911891289138914891589168917891889198920892189228923892489258926892789288929893089318932893389348935893689378938893989408941894289438944894589468947894889498950895189528953895489558956895789588959896089618962896389648965896689678968896989708971897289738974897589768977897889798980898189828983898489858986898789888989899089918992899389948995899689978998899990009001900290039004900590069007900890099010901190129013901490159016901790189019902090219022902390249025902690279028902990309031903290339034903590369037903890399040904190429043904490459046904790489049905090519052905390549055905690579058905990609061906290639064906590669067906890699070907190729073907490759076907790789079908090819082908390849085908690879088908990909091909290939094909590969097909890999100910191029103910491059106910791089109911091119112911391149115911691179118911991209121912291239124912591269127912891299130913191329133913491359136913791389139914091419142914391449145914691479148914991509151915291539154915591569157915891599160916191629163916491659166916791689169917091719172917391749175917691779178917991809181918291839184918591869187918891899190919191929193919491959196919791989199920092019202920392049205920692079208920992109211921292139214921592169217921892199220922192229223922492259226922792289229923092319232923392349235923692379238923992409241924292439244924592469247924892499250925192529253925492559256925792589259926092619262926392649265926692679268926992709271927292739274927592769277927892799280928192829283928492859286928792889289929092919292929392949295929692979298929993009301930293039304930593069307930893099310931193129313931493159316931793189319932093219322932393249325932693279328932993309331933293339334933593369337933893399340934193429343934493459346934793489349935093519352935393549355935693579358935993609361936293639364936593669367936893699370937193729373937493759376937793789379938093819382938393849385938693879388938993909391939293939394939593969397939893999400940194029403940494059406940794089409941094119412941394149415941694179418941994209421942294239424942594269427942894299430943194329433943494359436943794389439944094419442944394449445944694479448944994509451945294539454945594569457945894599460946194629463946494659466946794689469947094719472947394749475947694779478947994809481948294839484948594869487948894899490949194929493949494959496949794989499950095019502950395049505950695079508950995109511951295139514951595169517951895199520952195229523952495259526952795289529953095319532953395349535953695379538953995409541954295439544954595469547954895499550955195529553955495559556955795589559956095619562956395649565956695679568956995709571957295739574957595769577957895799580958195829583958495859586958795889589959095919592959395949595959695979598959996009601960296039604960596069607960896099610961196129613961496159616961796189619962096219622962396249625962696279628962996309631963296339634963596369637963896399640964196429643964496459646964796489649965096519652965396549655965696579658965996609661966296639664966596669667966896699670967196729673967496759676967796789679968096819682968396849685968696879688968996909691969296939694969596969697969896999700970197029703970497059706970797089709971097119712971397149715971697179718971997209721972297239724972597269727972897299730973197329733973497359736973797389739974097419742974397449745974697479748974997509751975297539754975597569757975897599760976197629763976497659766976797689769977097719772977397749775977697779778977997809781978297839784978597869787978897899790979197929793979497959796979797989799980098019802980398049805980698079808980998109811981298139814981598169817981898199820982198229823982498259826982798289829983098319832983398349835983698379838983998409841984298439844984598469847984898499850985198529853985498559856985798589859986098619862986398649865986698679868986998709871987298739874987598769877987898799880988198829883988498859886988798889889989098919892989398949895989698979898989999009901990299039904990599069907990899099910991199129913991499159916991799189919992099219922992399249925992699279928992999309931993299339934993599369937993899399940994199429943994499459946994799489949995099519952995399549955995699579958995999609961996299639964996599669967996899699970997199729973997499759976997799789979998099819982998399849985998699879988998999909991999299939994999599969997999899991000010001100021000310004100051000610007100081000910010100111001210013100141001510016100171001810019100201002110022100231002410025100261002710028100291003010031100321003310034100351003610037100381003910040100411004210043100441004510046100471004810049100501005110052100531005410055100561005710058100591006010061100621006310064100651006610067100681006910070100711007210073100741007510076100771007810079100801008110082100831008410085100861008710088100891009010091100921009310094100951009610097100981009910100101011010210103101041010510106101071010810109101101011110112101131011410115101161011710118101191012010121101221012310124101251012610127101281012910130101311013210133101341013510136101371013810139101401014110142101431014410145101461014710148101491015010151101521015310154101551015610157101581015910160101611016210163101641016510166101671016810169101701017110172101731017410175101761017710178101791018010181101821018310184101851018610187101881018910190101911019210193101941019510196101971019810199102001020110202102031020410205102061020710208102091021010211102121021310214102151021610217102181021910220102211022210223102241022510226102271022810229102301023110232102331023410235102361023710238102391024010241102421024310244102451024610247102481024910250102511025210253102541025510256102571025810259102601026110262102631026410265102661026710268102691027010271102721027310274102751027610277102781027910280102811028210283102841028510286102871028810289102901029110292102931029410295102961029710298102991030010301103021030310304103051030610307103081030910310103111031210313103141031510316103171031810319103201032110322103231032410325103261032710328103291033010331103321033310334103351033610337103381033910340103411034210343103441034510346103471034810349103501035110352103531035410355103561035710358103591036010361103621036310364103651036610367103681036910370103711037210373103741037510376103771037810379103801038110382103831038410385103861038710388103891039010391103921039310394103951039610397103981039910400104011040210403104041040510406104071040810409104101041110412104131041410415104161041710418104191042010421104221042310424104251042610427104281042910430104311043210433104341043510436104371043810439104401044110442104431044410445104461044710448104491045010451104521045310454104551045610457104581045910460104611046210463104641046510466104671046810469104701047110472104731047410475104761047710478104791048010481104821048310484104851048610487104881048910490104911049210493104941049510496104971049810499105001050110502105031050410505105061050710508105091051010511105121051310514105151051610517105181051910520105211052210523105241052510526105271052810529105301053110532105331053410535105361053710538105391054010541105421054310544105451054610547105481054910550105511055210553105541055510556105571055810559105601056110562105631056410565105661056710568105691057010571105721057310574105751057610577105781057910580105811058210583105841058510586105871058810589105901059110592105931059410595105961059710598105991060010601106021060310604106051060610607106081060910610106111061210613106141061510616106171061810619106201062110622106231062410625106261062710628106291063010631106321063310634106351063610637106381063910640106411064210643106441064510646106471064810649106501065110652106531065410655106561065710658106591066010661106621066310664106651066610667106681066910670106711067210673106741067510676106771067810679106801068110682106831068410685106861068710688106891069010691106921069310694106951069610697106981069910700107011070210703107041070510706107071070810709107101071110712107131071410715107161071710718107191072010721107221072310724107251072610727107281072910730107311073210733107341073510736107371073810739107401074110742107431074410745107461074710748107491075010751107521075310754107551075610757107581075910760107611076210763107641076510766107671076810769107701077110772107731077410775107761077710778107791078010781107821078310784107851078610787107881078910790107911079210793107941079510796107971079810799108001080110802108031080410805108061080710808108091081010811108121081310814108151081610817108181081910820108211082210823108241082510826108271082810829108301083110832108331083410835108361083710838108391084010841108421084310844108451084610847108481084910850108511085210853108541085510856108571085810859108601086110862108631086410865108661086710868108691087010871108721087310874108751087610877108781087910880108811088210883108841088510886108871088810889108901089110892108931089410895108961089710898108991090010901109021090310904109051090610907109081090910910109111091210913109141091510916109171091810919109201092110922109231092410925109261092710928109291093010931109321093310934109351093610937109381093910940109411094210943109441094510946109471094810949109501095110952109531095410955109561095710958109591096010961109621096310964109651096610967109681096910970109711097210973109741097510976109771097810979109801098110982109831098410985109861098710988109891099010991109921099310994109951099610997109981099911000110011100211003110041100511006110071100811009110101101111012110131101411015110161101711018110191102011021110221102311024110251102611027110281102911030110311103211033110341103511036110371103811039110401104111042110431104411045110461104711048110491105011051110521105311054110551105611057110581105911060110611106211063110641106511066110671106811069110701107111072110731107411075110761107711078110791108011081110821108311084110851108611087110881108911090110911109211093110941109511096110971109811099111001110111102111031110411105111061110711108111091111011111111121111311114111151111611117111181111911120111211112211123111241112511126111271112811129111301113111132111331113411135111361113711138111391114011141111421114311144111451114611147111481114911150111511115211153111541115511156111571115811159111601116111162111631116411165111661116711168111691117011171111721117311174111751117611177111781117911180111811118211183111841118511186111871118811189111901119111192111931119411195111961119711198111991120011201112021120311204112051120611207112081120911210112111121211213112141121511216112171121811219112201122111222112231122411225112261122711228112291123011231112321123311234112351123611237112381123911240112411124211243112441124511246112471124811249112501125111252112531125411255112561125711258112591126011261112621126311264112651126611267112681126911270112711127211273112741127511276112771127811279112801128111282112831128411285112861128711288112891129011291112921129311294112951129611297112981129911300113011130211303113041130511306113071130811309113101131111312113131131411315113161131711318113191132011321113221132311324113251132611327113281132911330113311133211333113341133511336113371133811339113401134111342113431134411345113461134711348113491135011351113521135311354113551135611357113581135911360113611136211363113641136511366113671136811369113701137111372113731137411375113761137711378113791138011381113821138311384113851138611387113881138911390113911139211393113941139511396113971139811399114001140111402114031140411405114061140711408114091141011411114121141311414114151141611417114181141911420114211142211423114241142511426114271142811429114301143111432114331143411435114361143711438114391144011441114421144311444114451144611447114481144911450114511145211453114541145511456114571145811459114601146111462114631146411465114661146711468114691147011471114721147311474114751147611477114781147911480114811148211483114841148511486114871148811489114901149111492114931149411495114961149711498114991150011501115021150311504115051150611507115081150911510115111151211513115141151511516115171151811519115201152111522115231152411525115261152711528115291153011531115321153311534115351153611537115381153911540115411154211543115441154511546115471154811549115501155111552115531155411555115561155711558115591156011561115621156311564115651156611567115681156911570115711157211573115741157511576115771157811579115801158111582115831158411585115861158711588115891159011591115921159311594115951159611597115981159911600116011160211603116041160511606116071160811609116101161111612116131161411615116161161711618116191162011621116221162311624116251162611627116281162911630116311163211633116341163511636116371163811639116401164111642116431164411645116461164711648116491165011651116521165311654116551165611657116581165911660116611166211663116641166511666116671166811669116701167111672116731167411675116761167711678116791168011681116821168311684116851168611687116881168911690116911169211693116941169511696116971169811699117001170111702117031170411705117061170711708117091171011711117121171311714117151171611717117181171911720117211172211723117241172511726117271172811729117301173111732117331173411735117361173711738117391174011741117421174311744117451174611747117481174911750117511175211753117541175511756117571175811759117601176111762117631176411765117661176711768117691177011771117721177311774117751177611777117781177911780117811178211783117841178511786117871178811789117901179111792117931179411795117961179711798117991180011801118021180311804118051180611807118081180911810118111181211813118141181511816118171181811819118201182111822118231182411825118261182711828118291183011831118321183311834118351183611837118381183911840118411184211843118441184511846118471184811849118501185111852118531185411855118561185711858118591186011861118621186311864118651186611867118681186911870118711187211873118741187511876118771187811879118801188111882118831188411885118861188711888118891189011891118921189311894118951189611897118981189911900119011190211903119041190511906119071190811909119101191111912119131191411915119161191711918119191192011921119221192311924119251192611927119281192911930119311193211933119341193511936119371193811939119401194111942119431194411945119461194711948119491195011951119521195311954119551195611957119581195911960119611196211963119641196511966119671196811969119701197111972119731197411975119761197711978119791198011981119821198311984119851198611987119881198911990119911199211993119941199511996119971199811999120001200112002120031200412005120061200712008120091201012011120121201312014120151201612017120181201912020120211202212023120241202512026120271202812029120301203112032120331203412035120361203712038120391204012041120421204312044120451204612047120481204912050120511205212053120541205512056120571205812059120601206112062120631206412065120661206712068120691207012071120721207312074120751207612077120781207912080120811208212083120841208512086120871208812089120901209112092120931209412095120961209712098120991210012101121021210312104121051210612107121081210912110121111211212113121141211512116121171211812119121201212112122121231212412125121261212712128121291213012131121321213312134121351213612137121381213912140121411214212143121441214512146121471214812149121501215112152121531215412155121561215712158121591216012161121621216312164121651216612167121681216912170121711217212173121741217512176121771217812179121801218112182121831218412185121861218712188121891219012191121921219312194121951219612197121981219912200122011220212203122041220512206122071220812209122101221112212122131221412215122161221712218122191222012221122221222312224122251222612227122281222912230122311223212233122341223512236122371223812239122401224112242122431224412245122461224712248122491225012251122521225312254122551225612257122581225912260122611226212263122641226512266122671226812269122701227112272122731227412275122761227712278122791228012281122821228312284122851228612287122881228912290122911229212293122941229512296122971229812299123001230112302123031230412305123061230712308123091231012311123121231312314123151231612317123181231912320123211232212323123241232512326123271232812329123301233112332123331233412335123361233712338123391234012341123421234312344123451234612347123481234912350123511235212353123541235512356123571235812359123601236112362123631236412365123661236712368123691237012371123721237312374123751237612377123781237912380123811238212383123841238512386123871238812389123901239112392123931239412395123961239712398123991240012401124021240312404124051240612407124081240912410124111241212413124141241512416124171241812419124201242112422124231242412425124261242712428124291243012431124321243312434124351243612437124381243912440124411244212443124441244512446124471244812449124501245112452124531245412455124561245712458124591246012461124621246312464124651246612467124681246912470124711247212473124741247512476124771247812479124801248112482124831248412485124861248712488124891249012491124921249312494124951249612497124981249912500125011250212503125041250512506125071250812509125101251112512125131251412515125161251712518125191252012521125221252312524125251252612527125281252912530125311253212533125341253512536125371253812539125401254112542125431254412545125461254712548125491255012551125521255312554125551255612557125581255912560125611256212563125641256512566125671256812569125701257112572125731257412575125761257712578125791258012581125821258312584125851258612587125881258912590125911259212593125941259512596125971259812599126001260112602126031260412605126061260712608126091261012611126121261312614126151261612617126181261912620126211262212623126241262512626126271262812629126301263112632126331263412635126361263712638126391264012641126421264312644126451264612647126481264912650126511265212653126541265512656126571265812659126601266112662126631266412665126661266712668126691267012671126721267312674126751267612677126781267912680126811268212683126841268512686126871268812689126901269112692126931269412695126961269712698126991270012701127021270312704127051270612707127081270912710127111271212713127141271512716127171271812719127201272112722127231272412725127261272712728127291273012731127321273312734127351273612737127381273912740127411274212743127441274512746127471274812749127501275112752127531275412755127561275712758127591276012761127621276312764127651276612767127681276912770127711277212773127741277512776127771277812779127801278112782127831278412785127861278712788127891279012791127921279312794127951279612797127981279912800128011280212803128041280512806128071280812809128101281112812128131281412815128161281712818128191282012821128221282312824128251282612827128281282912830128311283212833128341283512836128371283812839128401284112842128431284412845128461284712848128491285012851128521285312854128551285612857128581285912860128611286212863128641286512866128671286812869128701287112872128731287412875128761287712878128791288012881128821288312884128851288612887128881288912890128911289212893128941289512896128971289812899129001290112902129031290412905129061290712908129091291012911129121291312914129151291612917129181291912920129211292212923129241292512926129271292812929129301293112932129331293412935129361293712938129391294012941129421294312944129451294612947129481294912950129511295212953129541295512956129571295812959129601296112962129631296412965129661296712968129691297012971129721297312974129751297612977129781297912980129811298212983129841298512986129871298812989129901299112992129931299412995129961299712998129991300013001130021300313004130051300613007130081300913010130111301213013130141301513016130171301813019130201302113022130231302413025130261302713028130291303013031130321303313034130351303613037130381303913040130411304213043130441304513046130471304813049130501305113052130531305413055130561305713058130591306013061130621306313064130651306613067130681306913070130711307213073130741307513076130771307813079130801308113082130831308413085130861308713088130891309013091130921309313094130951309613097130981309913100131011310213103131041310513106131071310813109131101311113112131131311413115131161311713118131191312013121131221312313124131251312613127131281312913130131311313213133131341313513136131371313813139131401314113142131431314413145131461314713148131491315013151131521315313154131551315613157131581315913160131611316213163131641316513166131671316813169131701317113172131731317413175131761317713178131791318013181131821318313184131851318613187131881318913190131911319213193131941319513196131971319813199132001320113202132031320413205132061320713208132091321013211132121321313214132151321613217132181321913220132211322213223132241322513226132271322813229132301323113232132331323413235132361323713238132391324013241132421324313244132451324613247132481324913250132511325213253132541325513256132571325813259132601326113262132631326413265132661326713268132691327013271132721327313274132751327613277132781327913280132811328213283132841328513286132871328813289132901329113292132931329413295132961329713298132991330013301133021330313304133051330613307133081330913310133111331213313133141331513316133171331813319133201332113322133231332413325133261332713328133291333013331133321333313334133351333613337133381333913340133411334213343133441334513346133471334813349133501335113352133531335413355133561335713358133591336013361133621336313364133651336613367133681336913370133711337213373133741337513376133771337813379133801338113382133831338413385133861338713388133891339013391133921339313394133951339613397133981339913400134011340213403134041340513406134071340813409134101341113412134131341413415134161341713418134191342013421134221342313424134251342613427134281342913430134311343213433134341343513436134371343813439134401344113442134431344413445134461344713448134491345013451134521345313454134551345613457134581345913460134611346213463134641346513466134671346813469134701347113472134731347413475134761347713478134791348013481134821348313484134851348613487134881348913490134911349213493134941349513496134971349813499135001350113502135031350413505135061350713508135091351013511135121351313514135151351613517135181351913520135211352213523135241352513526135271352813529135301353113532135331353413535135361353713538135391354013541135421354313544135451354613547135481354913550135511355213553135541355513556135571355813559135601356113562135631356413565135661356713568135691357013571135721357313574135751357613577135781357913580135811358213583135841358513586135871358813589135901359113592135931359413595135961359713598135991360013601136021360313604136051360613607136081360913610136111361213613136141361513616136171361813619136201362113622136231362413625136261362713628136291363013631136321363313634136351363613637136381363913640136411364213643136441364513646136471364813649136501365113652136531365413655136561365713658136591366013661136621366313664136651366613667136681366913670136711367213673136741367513676136771367813679136801368113682136831368413685136861368713688136891369013691136921369313694136951369613697136981369913700137011370213703137041370513706137071370813709137101371113712137131371413715137161371713718137191372013721137221372313724137251372613727137281372913730137311373213733137341373513736137371373813739137401374113742137431374413745137461374713748137491375013751137521375313754137551375613757137581375913760137611376213763137641376513766137671376813769137701377113772137731377413775137761377713778137791378013781137821378313784137851378613787137881378913790137911379213793137941379513796137971379813799138001380113802138031380413805138061380713808138091381013811138121381313814138151381613817138181381913820138211382213823138241382513826138271382813829138301383113832138331383413835138361383713838138391384013841138421384313844138451384613847138481384913850138511385213853138541385513856138571385813859138601386113862138631386413865138661386713868138691387013871138721387313874138751387613877138781387913880138811388213883138841388513886138871388813889138901389113892138931389413895138961389713898138991390013901139021390313904139051390613907139081390913910139111391213913139141391513916139171391813919139201392113922139231392413925139261392713928139291393013931139321393313934139351393613937139381393913940139411394213943139441394513946139471394813949139501395113952139531395413955139561395713958139591396013961139621396313964139651396613967139681396913970139711397213973139741397513976139771397813979139801398113982139831398413985139861398713988139891399013991139921399313994139951399613997139981399914000140011400214003140041400514006140071400814009140101401114012140131401414015140161401714018140191402014021140221402314024140251402614027140281402914030140311403214033140341403514036140371403814039140401404114042140431404414045140461404714048140491405014051140521405314054140551405614057140581405914060140611406214063140641406514066140671406814069140701407114072140731407414075140761407714078140791408014081140821408314084140851408614087140881408914090140911409214093140941409514096140971409814099141001410114102141031410414105141061410714108141091411014111141121411314114141151411614117141181411914120141211412214123141241412514126141271412814129141301413114132141331413414135141361413714138141391414014141141421414314144141451414614147141481414914150141511415214153141541415514156141571415814159141601416114162141631416414165141661416714168141691417014171141721417314174141751417614177141781417914180141811418214183141841418514186141871418814189141901419114192141931419414195141961419714198141991420014201142021420314204142051420614207142081420914210142111421214213142141421514216142171421814219142201422114222142231422414225142261422714228142291423014231142321423314234142351423614237142381423914240142411424214243142441424514246142471424814249142501425114252142531425414255142561425714258142591426014261142621426314264142651426614267142681426914270142711427214273142741427514276142771427814279142801428114282142831428414285142861428714288142891429014291142921429314294142951429614297142981429914300143011430214303143041430514306143071430814309143101431114312143131431414315143161431714318143191432014321143221432314324143251432614327143281432914330143311433214333143341433514336143371433814339143401434114342143431434414345143461434714348143491435014351143521435314354143551435614357143581435914360143611436214363143641436514366143671436814369143701437114372143731437414375143761437714378143791438014381143821438314384143851438614387143881438914390143911439214393143941439514396143971439814399144001440114402144031440414405144061440714408144091441014411144121441314414144151441614417144181441914420144211442214423144241442514426144271442814429144301443114432144331443414435144361443714438144391444014441144421444314444144451444614447144481444914450144511445214453144541445514456144571445814459144601446114462144631446414465144661446714468144691447014471144721447314474144751447614477144781447914480144811448214483144841448514486144871448814489144901449114492144931449414495144961449714498144991450014501145021450314504145051450614507145081450914510145111451214513145141451514516145171451814519145201452114522145231452414525145261452714528145291453014531145321453314534145351453614537145381453914540145411454214543145441454514546145471454814549145501455114552145531455414555145561455714558145591456014561145621456314564145651456614567145681456914570145711457214573145741457514576145771457814579145801458114582145831458414585145861458714588145891459014591145921459314594145951459614597145981459914600146011460214603146041460514606146071460814609146101461114612146131461414615146161461714618146191462014621146221462314624146251462614627146281462914630146311463214633146341463514636146371463814639146401464114642146431464414645146461464714648146491465014651146521465314654146551465614657146581465914660146611466214663146641466514666146671466814669146701467114672146731467414675146761467714678146791468014681146821468314684146851468614687146881468914690146911469214693146941469514696146971469814699147001470114702147031470414705147061470714708147091471014711147121471314714147151471614717147181471914720147211472214723147241472514726147271472814729147301473114732147331473414735147361473714738147391474014741147421474314744147451474614747147481474914750147511475214753147541475514756147571475814759147601476114762147631476414765147661476714768147691477014771147721477314774147751477614777147781477914780147811478214783147841478514786147871478814789147901479114792147931479414795147961479714798147991480014801148021480314804148051480614807148081480914810148111481214813148141481514816148171481814819148201482114822148231482414825148261482714828148291483014831148321483314834148351483614837148381483914840148411484214843148441484514846148471484814849148501485114852148531485414855148561485714858148591486014861148621486314864148651486614867148681486914870148711487214873148741487514876148771487814879148801488114882148831488414885148861488714888148891489014891148921489314894148951489614897148981489914900149011490214903149041490514906149071490814909149101491114912149131491414915149161491714918149191492014921149221492314924149251492614927149281492914930149311493214933149341493514936149371493814939149401494114942149431494414945149461494714948149491495014951149521495314954149551495614957149581495914960149611496214963149641496514966149671496814969149701497114972149731497414975149761497714978149791498014981149821498314984149851498614987149881498914990149911499214993149941499514996149971499814999150001500115002150031500415005150061500715008150091501015011150121501315014150151501615017150181501915020150211502215023150241502515026150271502815029150301503115032150331503415035150361503715038150391504015041150421504315044150451504615047150481504915050150511505215053150541505515056150571505815059150601506115062150631506415065150661506715068150691507015071150721507315074150751507615077150781507915080150811508215083150841508515086150871508815089150901509115092150931509415095150961509715098150991510015101151021510315104151051510615107151081510915110151111511215113151141511515116151171511815119151201512115122151231512415125151261512715128151291513015131151321513315134151351513615137151381513915140151411514215143151441514515146151471514815149151501515115152151531515415155151561515715158151591516015161151621516315164151651516615167151681516915170151711517215173151741517515176151771517815179151801518115182151831518415185151861518715188151891519015191151921519315194151951519615197151981519915200152011520215203152041520515206152071520815209152101521115212152131521415215152161521715218152191522015221152221522315224152251522615227152281522915230152311523215233152341523515236152371523815239152401524115242152431524415245152461524715248152491525015251152521525315254152551525615257152581525915260152611526215263152641526515266152671526815269152701527115272152731527415275152761527715278152791528015281152821528315284152851528615287152881528915290152911529215293152941529515296152971529815299153001530115302153031530415305153061530715308153091531015311153121531315314153151531615317153181531915320153211532215323153241532515326153271532815329153301533115332153331533415335153361533715338153391534015341153421534315344153451534615347153481534915350153511535215353153541535515356153571535815359153601536115362153631536415365153661536715368153691537015371153721537315374153751537615377153781537915380153811538215383153841538515386153871538815389153901539115392153931539415395153961539715398153991540015401154021540315404154051540615407154081540915410154111541215413154141541515416154171541815419154201542115422154231542415425154261542715428154291543015431154321543315434154351543615437154381543915440154411544215443154441544515446154471544815449154501545115452154531545415455154561545715458154591546015461154621546315464154651546615467154681546915470154711547215473154741547515476154771547815479154801548115482154831548415485154861548715488154891549015491154921549315494154951549615497154981549915500155011550215503155041550515506155071550815509155101551115512155131551415515155161551715518155191552015521155221552315524155251552615527155281552915530155311553215533155341553515536155371553815539155401554115542155431554415545155461554715548155491555015551155521555315554155551555615557155581555915560155611556215563155641556515566155671556815569155701557115572155731557415575155761557715578155791558015581155821558315584155851558615587155881558915590155911559215593155941559515596155971559815599156001560115602156031560415605156061560715608156091561015611156121561315614156151561615617156181561915620156211562215623156241562515626156271562815629156301563115632156331563415635156361563715638156391564015641156421564315644156451564615647156481564915650156511565215653156541565515656156571565815659156601566115662156631566415665156661566715668156691567015671156721567315674156751567615677156781567915680156811568215683156841568515686156871568815689156901569115692156931569415695156961569715698156991570015701157021570315704157051570615707157081570915710157111571215713157141571515716157171571815719157201572115722157231572415725157261572715728157291573015731157321573315734157351573615737157381573915740157411574215743157441574515746157471574815749157501575115752157531575415755157561575715758157591576015761157621576315764157651576615767157681576915770157711577215773157741577515776157771577815779157801578115782157831578415785157861578715788157891579015791157921579315794157951579615797157981579915800158011580215803158041580515806158071580815809158101581115812158131581415815158161581715818158191582015821158221582315824158251582615827158281582915830158311583215833158341583515836158371583815839158401584115842158431584415845158461584715848158491585015851158521585315854158551585615857158581585915860158611586215863158641586515866158671586815869158701587115872158731587415875158761587715878158791588015881158821588315884158851588615887158881588915890158911589215893158941589515896158971589815899159001590115902159031590415905159061590715908159091591015911159121591315914159151591615917159181591915920159211592215923159241592515926159271592815929159301593115932159331593415935159361593715938159391594015941159421594315944159451594615947159481594915950159511595215953159541595515956159571595815959159601596115962159631596415965159661596715968159691597015971159721597315974159751597615977159781597915980159811598215983159841598515986159871598815989159901599115992159931599415995159961599715998159991600016001160021600316004160051600616007160081600916010160111601216013160141601516016160171601816019160201602116022160231602416025160261602716028160291603016031160321603316034160351603616037160381603916040160411604216043160441604516046160471604816049160501605116052160531605416055160561605716058160591606016061160621606316064160651606616067160681606916070160711607216073160741607516076160771607816079160801608116082160831608416085160861608716088160891609016091160921609316094160951609616097160981609916100161011610216103161041610516106161071610816109161101611116112161131611416115161161611716118161191612016121161221612316124161251612616127161281612916130161311613216133161341613516136161371613816139161401614116142161431614416145161461614716148161491615016151161521615316154161551615616157161581615916160161611616216163161641616516166161671616816169161701617116172161731617416175161761617716178161791618016181161821618316184161851618616187161881618916190161911619216193161941619516196161971619816199162001620116202162031620416205162061620716208162091621016211162121621316214162151621616217162181621916220162211622216223162241622516226162271622816229162301623116232162331623416235162361623716238162391624016241162421624316244162451624616247162481624916250162511625216253162541625516256162571625816259162601626116262162631626416265162661626716268162691627016271162721627316274162751627616277162781627916280162811628216283162841628516286162871628816289162901629116292162931629416295162961629716298162991630016301163021630316304163051630616307163081630916310163111631216313163141631516316163171631816319163201632116322163231632416325163261632716328163291633016331163321633316334163351633616337163381633916340163411634216343163441634516346163471634816349163501635116352163531635416355163561635716358163591636016361163621636316364163651636616367163681636916370163711637216373163741637516376163771637816379163801638116382163831638416385163861638716388163891639016391163921639316394163951639616397163981639916400164011640216403164041640516406164071640816409164101641116412164131641416415164161641716418164191642016421164221642316424164251642616427164281642916430164311643216433164341643516436164371643816439164401644116442164431644416445164461644716448164491645016451164521645316454164551645616457164581645916460164611646216463164641646516466164671646816469164701647116472164731647416475164761647716478164791648016481164821648316484164851648616487164881648916490164911649216493164941649516496164971649816499165001650116502165031650416505165061650716508165091651016511165121651316514165151651616517165181651916520165211652216523165241652516526165271652816529165301653116532165331653416535165361653716538165391654016541165421654316544165451654616547165481654916550165511655216553165541655516556165571655816559165601656116562165631656416565165661656716568165691657016571165721657316574165751657616577165781657916580165811658216583165841658516586165871658816589165901659116592165931659416595165961659716598165991660016601166021660316604166051660616607166081660916610166111661216613166141661516616166171661816619166201662116622166231662416625166261662716628166291663016631166321663316634166351663616637166381663916640166411664216643166441664516646166471664816649166501665116652166531665416655166561665716658166591666016661166621666316664166651666616667166681666916670166711667216673166741667516676166771667816679166801668116682166831668416685166861668716688166891669016691166921669316694166951669616697166981669916700167011670216703167041670516706167071670816709167101671116712167131671416715167161671716718167191672016721167221672316724167251672616727167281672916730167311673216733167341673516736167371673816739167401674116742167431674416745167461674716748167491675016751167521675316754167551675616757167581675916760167611676216763167641676516766167671676816769167701677116772167731677416775167761677716778167791678016781167821678316784167851678616787167881678916790167911679216793167941679516796167971679816799168001680116802168031680416805168061680716808168091681016811168121681316814168151681616817168181681916820168211682216823168241682516826168271682816829168301683116832168331683416835168361683716838168391684016841168421684316844168451684616847168481684916850168511685216853168541685516856168571685816859168601686116862168631686416865168661686716868168691687016871168721687316874168751687616877168781687916880168811688216883168841688516886168871688816889168901689116892168931689416895168961689716898168991690016901169021690316904169051690616907169081690916910169111691216913169141691516916169171691816919169201692116922169231692416925169261692716928169291693016931169321693316934169351693616937169381693916940169411694216943169441694516946169471694816949169501695116952169531695416955169561695716958169591696016961169621696316964169651696616967169681696916970169711697216973169741697516976169771697816979169801698116982169831698416985169861698716988169891699016991169921699316994169951699616997169981699917000170011700217003170041700517006170071700817009170101701117012170131701417015170161701717018170191702017021170221702317024170251702617027170281702917030170311703217033170341703517036170371703817039170401704117042170431704417045170461704717048170491705017051170521705317054170551705617057170581705917060170611706217063170641706517066170671706817069170701707117072170731707417075170761707717078170791708017081170821708317084170851708617087170881708917090170911709217093170941709517096170971709817099171001710117102171031710417105171061710717108171091711017111171121711317114171151711617117171181711917120171211712217123171241712517126171271712817129171301713117132171331713417135171361713717138171391714017141171421714317144171451714617147171481714917150171511715217153171541715517156171571715817159171601716117162171631716417165171661716717168171691717017171171721717317174171751717617177171781717917180171811718217183171841718517186171871718817189171901719117192171931719417195171961719717198171991720017201172021720317204172051720617207172081720917210172111721217213172141721517216172171721817219172201722117222172231722417225172261722717228172291723017231172321723317234172351723617237172381723917240172411724217243172441724517246172471724817249172501725117252172531725417255172561725717258172591726017261172621726317264172651726617267172681726917270172711727217273172741727517276172771727817279172801728117282172831728417285172861728717288172891729017291172921729317294172951729617297172981729917300173011730217303173041730517306173071730817309173101731117312173131731417315173161731717318173191732017321173221732317324173251732617327173281732917330173311733217333173341733517336173371733817339173401734117342173431734417345173461734717348173491735017351173521735317354173551735617357173581735917360173611736217363173641736517366173671736817369173701737117372173731737417375173761737717378173791738017381173821738317384173851738617387173881738917390173911739217393173941739517396173971739817399174001740117402174031740417405174061740717408174091741017411174121741317414174151741617417174181741917420174211742217423174241742517426174271742817429174301743117432174331743417435174361743717438174391744017441174421744317444174451744617447174481744917450174511745217453174541745517456174571745817459174601746117462174631746417465174661746717468174691747017471174721747317474174751747617477174781747917480174811748217483174841748517486174871748817489174901749117492174931749417495174961749717498174991750017501175021750317504175051750617507175081750917510175111751217513175141751517516175171751817519175201752117522175231752417525175261752717528175291753017531175321753317534175351753617537175381753917540175411754217543175441754517546175471754817549175501755117552175531755417555175561755717558175591756017561175621756317564175651756617567175681756917570175711757217573175741757517576175771757817579175801758117582175831758417585175861758717588175891759017591175921759317594175951759617597175981759917600176011760217603176041760517606176071760817609176101761117612176131761417615176161761717618176191762017621176221762317624176251762617627176281762917630176311763217633176341763517636176371763817639176401764117642176431764417645176461764717648176491765017651176521765317654176551765617657176581765917660176611766217663176641766517666176671766817669176701767117672176731767417675176761767717678176791768017681176821768317684176851768617687176881768917690176911769217693176941769517696176971769817699177001770117702177031770417705177061770717708177091771017711177121771317714177151771617717177181771917720177211772217723177241772517726177271772817729177301773117732177331773417735177361773717738177391774017741177421774317744177451774617747177481774917750177511775217753177541775517756177571775817759177601776117762177631776417765177661776717768177691777017771177721777317774177751777617777177781777917780177811778217783177841778517786177871778817789177901779117792177931779417795177961779717798177991780017801178021780317804178051780617807178081780917810178111781217813178141781517816178171781817819178201782117822178231782417825178261782717828178291783017831178321783317834178351783617837178381783917840178411784217843178441784517846178471784817849178501785117852178531785417855178561785717858178591786017861178621786317864178651786617867178681786917870178711787217873178741787517876178771787817879178801788117882178831788417885178861788717888178891789017891178921789317894178951789617897178981789917900179011790217903179041790517906179071790817909179101791117912179131791417915179161791717918179191792017921179221792317924179251792617927179281792917930179311793217933179341793517936179371793817939179401794117942179431794417945179461794717948179491795017951179521795317954179551795617957179581795917960179611796217963179641796517966179671796817969179701797117972179731797417975179761797717978179791798017981179821798317984179851798617987179881798917990179911799217993179941799517996179971799817999180001800118002180031800418005180061800718008180091801018011180121801318014180151801618017180181801918020180211802218023180241802518026180271802818029180301803118032180331803418035180361803718038180391804018041180421804318044180451804618047180481804918050180511805218053180541805518056180571805818059180601806118062180631806418065180661806718068180691807018071180721807318074180751807618077180781807918080180811808218083180841808518086180871808818089180901809118092180931809418095180961809718098180991810018101181021810318104181051810618107181081810918110181111811218113181141811518116181171811818119181201812118122181231812418125181261812718128181291813018131181321813318134181351813618137181381813918140181411814218143181441814518146181471814818149181501815118152181531815418155181561815718158181591816018161181621816318164181651816618167181681816918170181711817218173181741817518176181771817818179181801818118182181831818418185181861818718188181891819018191181921819318194181951819618197181981819918200182011820218203182041820518206182071820818209182101821118212182131821418215182161821718218182191822018221182221822318224182251822618227182281822918230182311823218233182341823518236182371823818239182401824118242182431824418245182461824718248182491825018251182521825318254182551825618257182581825918260182611826218263182641826518266182671826818269182701827118272182731827418275182761827718278182791828018281182821828318284182851828618287182881828918290182911829218293182941829518296182971829818299183001830118302183031830418305183061830718308183091831018311183121831318314183151831618317183181831918320183211832218323183241832518326183271832818329183301833118332183331833418335183361833718338183391834018341183421834318344183451834618347183481834918350183511835218353183541835518356183571835818359183601836118362183631836418365183661836718368183691837018371183721837318374183751837618377183781837918380183811838218383183841838518386183871838818389183901839118392183931839418395183961839718398183991840018401184021840318404184051840618407184081840918410184111841218413184141841518416184171841818419184201842118422184231842418425184261842718428184291843018431184321843318434184351843618437184381843918440184411844218443184441844518446184471844818449184501845118452184531845418455184561845718458184591846018461184621846318464184651846618467184681846918470184711847218473184741847518476184771847818479184801848118482184831848418485184861848718488184891849018491184921849318494184951849618497184981849918500185011850218503185041850518506185071850818509185101851118512185131851418515185161851718518185191852018521185221852318524185251852618527185281852918530185311853218533185341853518536185371853818539185401854118542185431854418545185461854718548185491855018551185521855318554185551855618557185581855918560185611856218563185641856518566185671856818569185701857118572185731857418575185761857718578185791858018581185821858318584185851858618587185881858918590185911859218593185941859518596185971859818599186001860118602186031860418605186061860718608186091861018611186121861318614186151861618617186181861918620186211862218623186241862518626186271862818629186301863118632186331863418635186361863718638186391864018641186421864318644186451864618647186481864918650186511865218653186541865518656186571865818659186601866118662186631866418665186661866718668186691867018671186721867318674186751867618677186781867918680186811868218683186841868518686186871868818689186901869118692186931869418695186961869718698186991870018701187021870318704187051870618707187081870918710187111871218713187141871518716187171871818719187201872118722187231872418725187261872718728187291873018731187321873318734187351873618737187381873918740187411874218743187441874518746187471874818749187501875118752187531875418755187561875718758187591876018761187621876318764187651876618767187681876918770187711877218773187741877518776187771877818779187801878118782187831878418785187861878718788187891879018791187921879318794187951879618797187981879918800188011880218803188041880518806188071880818809188101881118812188131881418815188161881718818188191882018821188221882318824188251882618827188281882918830188311883218833188341883518836188371883818839188401884118842188431884418845188461884718848188491885018851188521885318854188551885618857188581885918860188611886218863188641886518866188671886818869188701887118872188731887418875188761887718878188791888018881188821888318884188851888618887188881888918890188911889218893188941889518896188971889818899189001890118902189031890418905189061890718908189091891018911189121891318914189151891618917189181891918920189211892218923189241892518926189271892818929189301893118932189331893418935189361893718938189391894018941189421894318944189451894618947189481894918950189511895218953189541895518956189571895818959189601896118962189631896418965189661896718968189691897018971189721897318974189751897618977189781897918980189811898218983189841898518986189871898818989189901899118992189931899418995189961899718998189991900019001190021900319004190051900619007190081900919010190111901219013190141901519016190171901819019190201902119022190231902419025190261902719028190291903019031190321903319034190351903619037190381903919040190411904219043190441904519046190471904819049190501905119052190531905419055190561905719058190591906019061190621906319064190651906619067190681906919070190711907219073190741907519076190771907819079190801908119082190831908419085190861908719088190891909019091190921909319094190951909619097190981909919100191011910219103191041910519106191071910819109191101911119112191131911419115191161911719118191191912019121191221912319124191251912619127191281912919130191311913219133191341913519136191371913819139191401914119142191431914419145191461914719148191491915019151191521915319154191551915619157191581915919160191611916219163191641916519166191671916819169191701917119172191731917419175191761917719178191791918019181191821918319184191851918619187191881918919190191911919219193191941919519196191971919819199192001920119202192031920419205192061920719208192091921019211192121921319214192151921619217192181921919220192211922219223192241922519226192271922819229192301923119232192331923419235192361923719238192391924019241192421924319244192451924619247192481924919250192511925219253192541925519256192571925819259192601926119262192631926419265192661926719268192691927019271192721927319274192751927619277192781927919280192811928219283192841928519286192871928819289192901929119292192931929419295192961929719298192991930019301193021930319304193051930619307193081930919310193111931219313193141931519316193171931819319193201932119322193231932419325193261932719328193291933019331193321933319334193351933619337193381933919340193411934219343193441934519346193471934819349193501935119352193531935419355193561935719358193591936019361193621936319364193651936619367193681936919370193711937219373193741937519376193771937819379193801938119382193831938419385193861938719388193891939019391193921939319394193951939619397193981939919400194011940219403194041940519406194071940819409194101941119412194131941419415194161941719418194191942019421194221942319424194251942619427194281942919430194311943219433194341943519436194371943819439194401944119442194431944419445194461944719448194491945019451194521945319454194551945619457194581945919460194611946219463194641946519466194671946819469194701947119472194731947419475194761947719478194791948019481194821948319484194851948619487194881948919490194911949219493194941949519496194971949819499195001950119502195031950419505195061950719508195091951019511195121951319514195151951619517195181951919520195211952219523195241952519526195271952819529195301953119532195331953419535195361953719538195391954019541195421954319544195451954619547195481954919550195511955219553195541955519556195571955819559195601956119562195631956419565195661956719568195691957019571195721957319574195751957619577195781957919580195811958219583195841958519586195871958819589195901959119592195931959419595195961959719598195991960019601196021960319604196051960619607196081960919610196111961219613196141961519616196171961819619196201962119622196231962419625196261962719628196291963019631196321963319634196351963619637196381963919640196411964219643196441964519646196471964819649196501965119652196531965419655196561965719658196591966019661196621966319664196651966619667196681966919670196711967219673196741967519676196771967819679196801968119682196831968419685196861968719688196891969019691196921969319694196951969619697196981969919700197011970219703197041970519706197071970819709197101971119712197131971419715197161971719718197191972019721197221972319724197251972619727197281972919730197311973219733197341973519736197371973819739197401974119742197431974419745197461974719748197491975019751197521975319754197551975619757197581975919760197611976219763197641976519766197671976819769197701977119772197731977419775197761977719778197791978019781197821978319784197851978619787197881978919790197911979219793197941979519796197971979819799198001980119802198031980419805198061980719808198091981019811198121981319814198151981619817198181981919820198211982219823198241982519826198271982819829198301983119832198331983419835198361983719838198391984019841198421984319844198451984619847198481984919850198511985219853198541985519856198571985819859198601986119862198631986419865198661986719868198691987019871198721987319874198751987619877198781987919880198811988219883198841988519886198871988819889198901989119892198931989419895198961989719898198991990019901199021990319904199051990619907199081990919910199111991219913199141991519916199171991819919199201992119922199231992419925199261992719928199291993019931199321993319934199351993619937199381993919940199411994219943199441994519946199471994819949199501995119952199531995419955199561995719958199591996019961199621996319964199651996619967199681996919970199711997219973199741997519976199771997819979199801998119982199831998419985199861998719988199891999019991199921999319994199951999619997199981999920000200012000220003200042000520006200072000820009200102001120012200132001420015200162001720018200192002020021200222002320024200252002620027200282002920030200312003220033200342003520036200372003820039200402004120042200432004420045200462004720048200492005020051200522005320054200552005620057200582005920060200612006220063200642006520066200672006820069200702007120072200732007420075200762007720078200792008020081200822008320084200852008620087200882008920090200912009220093200942009520096200972009820099201002010120102201032010420105201062010720108201092011020111201122011320114201152011620117201182011920120201212012220123201242012520126201272012820129201302013120132201332013420135201362013720138201392014020141201422014320144201452014620147201482014920150201512015220153201542015520156201572015820159201602016120162201632016420165201662016720168201692017020171201722017320174201752017620177201782017920180201812018220183201842018520186201872018820189201902019120192201932019420195201962019720198201992020020201202022020320204202052020620207202082020920210202112021220213202142021520216202172021820219202202022120222202232022420225202262022720228202292023020231202322023320234202352023620237202382023920240202412024220243202442024520246202472024820249202502025120252202532025420255202562025720258202592026020261202622026320264202652026620267202682026920270202712027220273202742027520276202772027820279202802028120282202832028420285202862028720288202892029020291202922029320294202952029620297202982029920300203012030220303203042030520306203072030820309203102031120312203132031420315203162031720318203192032020321203222032320324203252032620327203282032920330203312033220333203342033520336203372033820339203402034120342203432034420345203462034720348203492035020351203522035320354203552035620357203582035920360203612036220363203642036520366203672036820369203702037120372203732037420375203762037720378203792038020381203822038320384203852038620387203882038920390203912039220393203942039520396203972039820399204002040120402204032040420405204062040720408204092041020411204122041320414204152041620417204182041920420204212042220423204242042520426204272042820429204302043120432204332043420435204362043720438204392044020441204422044320444204452044620447204482044920450204512045220453204542045520456204572045820459204602046120462204632046420465204662046720468204692047020471204722047320474204752047620477204782047920480204812048220483204842048520486204872048820489204902049120492204932049420495204962049720498204992050020501205022050320504205052050620507205082050920510205112051220513205142051520516205172051820519205202052120522205232052420525205262052720528205292053020531205322053320534205352053620537205382053920540205412054220543205442054520546205472054820549205502055120552205532055420555205562055720558205592056020561205622056320564205652056620567205682056920570205712057220573205742057520576205772057820579205802058120582205832058420585205862058720588205892059020591205922059320594205952059620597205982059920600206012060220603206042060520606206072060820609206102061120612206132061420615206162061720618206192062020621206222062320624206252062620627206282062920630206312063220633206342063520636206372063820639206402064120642206432064420645206462064720648206492065020651206522065320654206552065620657206582065920660206612066220663206642066520666206672066820669206702067120672206732067420675206762067720678206792068020681206822068320684206852068620687206882068920690206912069220693206942069520696206972069820699207002070120702207032070420705207062070720708207092071020711207122071320714207152071620717207182071920720207212072220723207242072520726207272072820729207302073120732207332073420735207362073720738207392074020741207422074320744207452074620747207482074920750207512075220753207542075520756207572075820759207602076120762207632076420765207662076720768207692077020771207722077320774207752077620777207782077920780207812078220783207842078520786207872078820789207902079120792207932079420795207962079720798207992080020801208022080320804208052080620807208082080920810208112081220813208142081520816208172081820819208202082120822208232082420825208262082720828208292083020831208322083320834208352083620837208382083920840208412084220843208442084520846208472084820849208502085120852208532085420855208562085720858208592086020861208622086320864208652086620867208682086920870208712087220873208742087520876208772087820879208802088120882208832088420885208862088720888208892089020891208922089320894208952089620897208982089920900209012090220903209042090520906209072090820909209102091120912209132091420915209162091720918209192092020921209222092320924209252092620927209282092920930209312093220933209342093520936209372093820939209402094120942209432094420945209462094720948209492095020951209522095320954209552095620957209582095920960209612096220963209642096520966209672096820969209702097120972209732097420975209762097720978209792098020981209822098320984209852098620987209882098920990209912099220993209942099520996209972099820999210002100121002210032100421005210062100721008210092101021011210122101321014210152101621017210182101921020210212102221023210242102521026210272102821029210302103121032210332103421035210362103721038210392104021041210422104321044210452104621047210482104921050210512105221053210542105521056210572105821059210602106121062210632106421065210662106721068210692107021071210722107321074210752107621077210782107921080210812108221083210842108521086210872108821089210902109121092210932109421095210962109721098210992110021101211022110321104211052110621107211082110921110211112111221113211142111521116211172111821119211202112121122211232112421125211262112721128211292113021131211322113321134211352113621137211382113921140211412114221143211442114521146211472114821149211502115121152211532115421155211562115721158211592116021161211622116321164211652116621167211682116921170211712117221173211742117521176211772117821179211802118121182211832118421185211862118721188211892119021191211922119321194211952119621197211982119921200212012120221203212042120521206212072120821209212102121121212212132121421215212162121721218212192122021221212222122321224212252122621227212282122921230212312123221233212342123521236212372123821239212402124121242212432124421245212462124721248212492125021251212522125321254212552125621257212582125921260212612126221263212642126521266212672126821269212702127121272212732127421275212762127721278212792128021281212822128321284212852128621287212882128921290212912129221293212942129521296212972129821299213002130121302213032130421305213062130721308213092131021311213122131321314213152131621317213182131921320213212132221323213242132521326213272132821329213302133121332213332133421335213362133721338213392134021341213422134321344213452134621347213482134921350213512135221353213542135521356213572135821359213602136121362213632136421365213662136721368213692137021371213722137321374213752137621377213782137921380213812138221383213842138521386213872138821389213902139121392213932139421395213962139721398213992140021401214022140321404214052140621407214082140921410214112141221413214142141521416214172141821419214202142121422214232142421425214262142721428214292143021431214322143321434214352143621437214382143921440214412144221443214442144521446214472144821449214502145121452214532145421455214562145721458214592146021461214622146321464214652146621467214682146921470214712147221473214742147521476214772147821479214802148121482214832148421485214862148721488214892149021491214922149321494214952149621497214982149921500215012150221503215042150521506215072150821509215102151121512215132151421515215162151721518215192152021521215222152321524215252152621527215282152921530215312153221533215342153521536215372153821539215402154121542215432154421545215462154721548215492155021551215522155321554215552155621557215582155921560215612156221563215642156521566215672156821569215702157121572215732157421575215762157721578215792158021581215822158321584215852158621587215882158921590215912159221593215942159521596215972159821599216002160121602216032160421605216062160721608216092161021611216122161321614216152161621617216182161921620216212162221623216242162521626216272162821629216302163121632216332163421635216362163721638216392164021641216422164321644216452164621647216482164921650216512165221653216542165521656216572165821659216602166121662216632166421665216662166721668216692167021671216722167321674216752167621677216782167921680216812168221683216842168521686216872168821689216902169121692216932169421695216962169721698216992170021701217022170321704217052170621707217082170921710217112171221713217142171521716217172171821719217202172121722217232172421725217262172721728217292173021731217322173321734217352173621737217382173921740217412174221743217442174521746217472174821749217502175121752217532175421755217562175721758217592176021761217622176321764217652176621767217682176921770217712177221773217742177521776217772177821779217802178121782217832178421785217862178721788217892179021791217922179321794217952179621797217982179921800218012180221803218042180521806218072180821809218102181121812218132181421815218162181721818218192182021821218222182321824218252182621827218282182921830218312183221833218342183521836218372183821839218402184121842218432184421845218462184721848218492185021851218522185321854218552185621857218582185921860218612186221863218642186521866218672186821869218702187121872218732187421875218762187721878218792188021881218822188321884218852188621887218882188921890218912189221893218942189521896218972189821899219002190121902219032190421905219062190721908219092191021911219122191321914219152191621917219182191921920219212192221923219242192521926219272192821929219302193121932219332193421935219362193721938219392194021941219422194321944219452194621947219482194921950219512195221953219542195521956219572195821959219602196121962219632196421965219662196721968219692197021971219722197321974219752197621977219782197921980219812198221983219842198521986219872198821989219902199121992219932199421995219962199721998219992200022001220022200322004220052200622007220082200922010220112201222013220142201522016220172201822019220202202122022220232202422025220262202722028220292203022031220322203322034220352203622037220382203922040220412204222043220442204522046220472204822049220502205122052220532205422055220562205722058220592206022061220622206322064220652206622067220682206922070220712207222073220742207522076220772207822079220802208122082220832208422085220862208722088220892209022091220922209322094220952209622097220982209922100221012210222103221042210522106221072210822109221102211122112221132211422115221162211722118221192212022121221222212322124221252212622127221282212922130221312213222133221342213522136221372213822139221402214122142221432214422145221462214722148221492215022151221522215322154221552215622157221582215922160221612216222163221642216522166221672216822169221702217122172221732217422175221762217722178221792218022181221822218322184221852218622187221882218922190221912219222193221942219522196221972219822199222002220122202222032220422205222062220722208222092221022211222122221322214222152221622217222182221922220222212222222223222242222522226222272222822229222302223122232222332223422235222362223722238222392224022241222422224322244222452224622247222482224922250222512225222253222542225522256222572225822259222602226122262222632226422265222662226722268222692227022271222722227322274222752227622277222782227922280222812228222283222842228522286222872228822289222902229122292222932229422295222962229722298222992230022301223022230322304223052230622307223082230922310223112231222313223142231522316223172231822319223202232122322223232232422325223262232722328223292233022331223322233322334223352233622337223382233922340223412234222343223442234522346223472234822349223502235122352223532235422355223562235722358223592236022361223622236322364223652236622367223682236922370223712237222373223742237522376223772237822379223802238122382223832238422385223862238722388223892239022391223922239322394223952239622397223982239922400224012240222403224042240522406224072240822409224102241122412224132241422415224162241722418224192242022421224222242322424224252242622427224282242922430224312243222433224342243522436224372243822439224402244122442224432244422445224462244722448224492245022451224522245322454224552245622457224582245922460224612246222463224642246522466224672246822469224702247122472224732247422475224762247722478224792248022481224822248322484224852248622487224882248922490224912249222493224942249522496224972249822499225002250122502225032250422505225062250722508225092251022511225122251322514225152251622517225182251922520225212252222523225242252522526225272252822529225302253122532225332253422535225362253722538225392254022541225422254322544225452254622547225482254922550225512255222553225542255522556225572255822559225602256122562225632256422565225662256722568225692257022571225722257322574225752257622577225782257922580225812258222583225842258522586225872258822589225902259122592225932259422595225962259722598225992260022601226022260322604226052260622607226082260922610226112261222613226142261522616226172261822619226202262122622226232262422625226262262722628226292263022631226322263322634226352263622637226382263922640226412264222643226442264522646226472264822649226502265122652226532265422655226562265722658226592266022661226622266322664226652266622667226682266922670226712267222673226742267522676226772267822679226802268122682226832268422685226862268722688226892269022691226922269322694226952269622697226982269922700227012270222703227042270522706227072270822709227102271122712227132271422715227162271722718227192272022721227222272322724227252272622727227282272922730227312273222733227342273522736227372273822739227402274122742227432274422745227462274722748227492275022751227522275322754227552275622757227582275922760227612276222763227642276522766227672276822769227702277122772227732277422775227762277722778227792278022781227822278322784227852278622787227882278922790227912279222793227942279522796227972279822799228002280122802228032280422805228062280722808228092281022811228122281322814228152281622817228182281922820228212282222823228242282522826228272282822829228302283122832228332283422835228362283722838228392284022841228422284322844228452284622847228482284922850228512285222853228542285522856228572285822859228602286122862228632286422865228662286722868228692287022871228722287322874228752287622877228782287922880228812288222883228842288522886228872288822889228902289122892228932289422895228962289722898228992290022901229022290322904229052290622907229082290922910229112291222913229142291522916229172291822919229202292122922229232292422925229262292722928229292293022931229322293322934229352293622937229382293922940229412294222943229442294522946229472294822949229502295122952229532295422955229562295722958229592296022961229622296322964229652296622967229682296922970229712297222973229742297522976229772297822979229802298122982229832298422985229862298722988229892299022991229922299322994229952299622997229982299923000230012300223003230042300523006230072300823009230102301123012230132301423015230162301723018230192302023021230222302323024230252302623027230282302923030230312303223033230342303523036230372303823039230402304123042230432304423045230462304723048230492305023051230522305323054230552305623057230582305923060230612306223063230642306523066230672306823069230702307123072230732307423075230762307723078230792308023081230822308323084230852308623087230882308923090230912309223093230942309523096230972309823099231002310123102231032310423105231062310723108231092311023111231122311323114231152311623117231182311923120231212312223123231242312523126231272312823129231302313123132231332313423135231362313723138231392314023141231422314323144231452314623147231482314923150231512315223153231542315523156231572315823159231602316123162231632316423165231662316723168231692317023171231722317323174231752317623177231782317923180231812318223183231842318523186231872318823189231902319123192231932319423195231962319723198231992320023201232022320323204232052320623207232082320923210232112321223213232142321523216232172321823219232202322123222232232322423225232262322723228232292323023231232322323323234232352323623237232382323923240232412324223243232442324523246232472324823249232502325123252232532325423255232562325723258232592326023261232622326323264232652326623267232682326923270232712327223273232742327523276232772327823279232802328123282232832328423285232862328723288232892329023291232922329323294232952329623297232982329923300233012330223303233042330523306233072330823309233102331123312233132331423315233162331723318233192332023321233222332323324233252332623327233282332923330233312333223333233342333523336233372333823339233402334123342233432334423345233462334723348233492335023351233522335323354233552335623357233582335923360233612336223363233642336523366233672336823369233702337123372233732337423375233762337723378233792338023381233822338323384233852338623387233882338923390233912339223393233942339523396233972339823399234002340123402234032340423405234062340723408234092341023411234122341323414234152341623417234182341923420234212342223423234242342523426234272342823429234302343123432234332343423435234362343723438234392344023441234422344323444234452344623447234482344923450234512345223453234542345523456234572345823459234602346123462234632346423465234662346723468234692347023471234722347323474234752347623477234782347923480234812348223483234842348523486234872348823489234902349123492234932349423495234962349723498234992350023501235022350323504235052350623507235082350923510235112351223513235142351523516235172351823519235202352123522235232352423525235262352723528235292353023531235322353323534235352353623537235382353923540235412354223543235442354523546235472354823549235502355123552235532355423555235562355723558235592356023561235622356323564235652356623567235682356923570235712357223573235742357523576235772357823579235802358123582235832358423585235862358723588235892359023591235922359323594235952359623597235982359923600236012360223603236042360523606236072360823609236102361123612236132361423615236162361723618236192362023621236222362323624236252362623627236282362923630236312363223633236342363523636236372363823639236402364123642236432364423645236462364723648236492365023651236522365323654236552365623657236582365923660236612366223663236642366523666236672366823669236702367123672236732367423675236762367723678236792368023681236822368323684236852368623687236882368923690236912369223693236942369523696236972369823699237002370123702237032370423705237062370723708237092371023711237122371323714237152371623717237182371923720237212372223723237242372523726237272372823729237302373123732237332373423735237362373723738237392374023741237422374323744237452374623747237482374923750237512375223753237542375523756237572375823759237602376123762237632376423765237662376723768237692377023771237722377323774237752377623777237782377923780237812378223783237842378523786237872378823789237902379123792237932379423795237962379723798237992380023801238022380323804238052380623807238082380923810238112381223813238142381523816238172381823819238202382123822238232382423825238262382723828238292383023831238322383323834238352383623837238382383923840238412384223843238442384523846238472384823849238502385123852238532385423855238562385723858238592386023861238622386323864238652386623867238682386923870238712387223873238742387523876238772387823879238802388123882238832388423885238862388723888238892389023891238922389323894238952389623897238982389923900239012390223903239042390523906239072390823909239102391123912239132391423915239162391723918239192392023921239222392323924239252392623927239282392923930239312393223933239342393523936239372393823939239402394123942239432394423945239462394723948239492395023951239522395323954239552395623957239582395923960239612396223963239642396523966239672396823969239702397123972239732397423975239762397723978239792398023981239822398323984239852398623987239882398923990239912399223993239942399523996239972399823999240002400124002240032400424005240062400724008240092401024011240122401324014240152401624017240182401924020240212402224023240242402524026240272402824029240302403124032240332403424035240362403724038240392404024041240422404324044240452404624047240482404924050240512405224053240542405524056240572405824059240602406124062240632406424065240662406724068240692407024071240722407324074240752407624077240782407924080240812408224083240842408524086240872408824089240902409124092240932409424095240962409724098240992410024101241022410324104241052410624107241082410924110241112411224113241142411524116241172411824119241202412124122241232412424125241262412724128241292413024131241322413324134241352413624137241382413924140241412414224143241442414524146241472414824149241502415124152241532415424155241562415724158241592416024161241622416324164241652416624167241682416924170241712417224173241742417524176241772417824179241802418124182241832418424185241862418724188241892419024191241922419324194241952419624197241982419924200242012420224203242042420524206242072420824209242102421124212242132421424215242162421724218242192422024221242222422324224242252422624227242282422924230242312423224233242342423524236242372423824239242402424124242242432424424245242462424724248242492425024251242522425324254242552425624257242582425924260242612426224263242642426524266242672426824269242702427124272242732427424275242762427724278242792428024281242822428324284242852428624287242882428924290242912429224293242942429524296242972429824299243002430124302243032430424305243062430724308243092431024311243122431324314243152431624317243182431924320243212432224323243242432524326243272432824329243302433124332243332433424335243362433724338243392434024341243422434324344243452434624347243482434924350243512435224353243542435524356243572435824359243602436124362243632436424365243662436724368243692437024371243722437324374243752437624377243782437924380243812438224383243842438524386243872438824389243902439124392243932439424395243962439724398243992440024401244022440324404244052440624407244082440924410244112441224413244142441524416244172441824419244202442124422244232442424425244262442724428244292443024431244322443324434244352443624437244382443924440244412444224443244442444524446244472444824449244502445124452244532445424455244562445724458244592446024461244622446324464244652446624467244682446924470244712447224473244742447524476244772447824479244802448124482244832448424485244862448724488244892449024491244922449324494244952449624497244982449924500245012450224503245042450524506245072450824509245102451124512245132451424515245162451724518245192452024521245222452324524245252452624527245282452924530245312453224533245342453524536245372453824539245402454124542245432454424545245462454724548245492455024551245522455324554245552455624557245582455924560245612456224563245642456524566245672456824569245702457124572245732457424575245762457724578245792458024581245822458324584245852458624587245882458924590245912459224593245942459524596245972459824599246002460124602246032460424605246062460724608246092461024611246122461324614246152461624617246182461924620246212462224623246242462524626246272462824629246302463124632246332463424635246362463724638246392464024641246422464324644246452464624647246482464924650246512465224653246542465524656246572465824659246602466124662246632466424665246662466724668246692467024671246722467324674246752467624677246782467924680246812468224683246842468524686246872468824689246902469124692246932469424695246962469724698246992470024701247022470324704247052470624707247082470924710247112471224713247142471524716247172471824719247202472124722247232472424725247262472724728247292473024731247322473324734247352473624737247382473924740247412474224743247442474524746247472474824749247502475124752247532475424755247562475724758247592476024761247622476324764247652476624767247682476924770247712477224773247742477524776247772477824779247802478124782247832478424785247862478724788247892479024791247922479324794247952479624797247982479924800248012480224803248042480524806248072480824809248102481124812248132481424815248162481724818248192482024821248222482324824248252482624827248282482924830248312483224833248342483524836248372483824839248402484124842248432484424845248462484724848248492485024851248522485324854248552485624857248582485924860248612486224863248642486524866248672486824869248702487124872248732487424875248762487724878248792488024881248822488324884248852488624887248882488924890248912489224893248942489524896248972489824899249002490124902249032490424905249062490724908249092491024911249122491324914249152491624917249182491924920249212492224923249242492524926249272492824929249302493124932249332493424935249362493724938249392494024941249422494324944249452494624947249482494924950249512495224953249542495524956249572495824959249602496124962249632496424965249662496724968249692497024971249722497324974249752497624977249782497924980249812498224983249842498524986249872498824989249902499124992249932499424995249962499724998249992500025001250022500325004250052500625007250082500925010250112501225013250142501525016250172501825019250202502125022250232502425025250262502725028250292503025031250322503325034250352503625037250382503925040250412504225043250442504525046250472504825049250502505125052250532505425055250562505725058250592506025061250622506325064250652506625067250682506925070250712507225073250742507525076250772507825079250802508125082250832508425085250862508725088250892509025091250922509325094250952509625097250982509925100251012510225103251042510525106251072510825109251102511125112251132511425115251162511725118251192512025121251222512325124251252512625127251282512925130251312513225133251342513525136251372513825139251402514125142251432514425145251462514725148251492515025151251522515325154251552515625157251582515925160251612516225163251642516525166251672516825169251702517125172251732517425175251762517725178251792518025181251822518325184251852518625187251882518925190251912519225193251942519525196251972519825199252002520125202252032520425205252062520725208252092521025211252122521325214252152521625217252182521925220252212522225223252242522525226252272522825229252302523125232252332523425235252362523725238252392524025241252422524325244252452524625247252482524925250252512525225253252542525525256252572525825259252602526125262252632526425265252662526725268252692527025271252722527325274252752527625277252782527925280252812528225283252842528525286252872528825289252902529125292252932529425295252962529725298252992530025301253022530325304253052530625307253082530925310253112531225313253142531525316253172531825319253202532125322253232532425325253262532725328253292533025331253322533325334253352533625337253382533925340253412534225343253442534525346253472534825349253502535125352253532535425355253562535725358253592536025361253622536325364253652536625367253682536925370253712537225373253742537525376253772537825379253802538125382253832538425385253862538725388253892539025391253922539325394253952539625397253982539925400254012540225403254042540525406254072540825409254102541125412254132541425415254162541725418254192542025421254222542325424254252542625427254282542925430254312543225433254342543525436254372543825439254402544125442254432544425445254462544725448254492545025451254522545325454254552545625457254582545925460254612546225463254642546525466254672546825469254702547125472254732547425475254762547725478254792548025481254822548325484254852548625487254882548925490254912549225493254942549525496254972549825499255002550125502255032550425505255062550725508255092551025511255122551325514255152551625517255182551925520255212552225523255242552525526255272552825529255302553125532255332553425535255362553725538255392554025541255422554325544255452554625547255482554925550255512555225553255542555525556255572555825559255602556125562255632556425565255662556725568255692557025571255722557325574255752557625577255782557925580255812558225583255842558525586255872558825589255902559125592255932559425595255962559725598255992560025601256022560325604256052560625607256082560925610256112561225613256142561525616256172561825619256202562125622256232562425625256262562725628256292563025631256322563325634256352563625637256382563925640256412564225643256442564525646256472564825649256502565125652256532565425655256562565725658256592566025661256622566325664256652566625667256682566925670256712567225673256742567525676256772567825679256802568125682256832568425685256862568725688256892569025691256922569325694256952569625697256982569925700257012570225703257042570525706257072570825709257102571125712257132571425715257162571725718257192572025721257222572325724257252572625727257282572925730257312573225733257342573525736257372573825739257402574125742257432574425745257462574725748257492575025751257522575325754257552575625757257582575925760257612576225763257642576525766257672576825769257702577125772257732577425775257762577725778257792578025781257822578325784257852578625787257882578925790257912579225793257942579525796257972579825799258002580125802258032580425805258062580725808258092581025811258122581325814258152581625817258182581925820258212582225823258242582525826258272582825829258302583125832258332583425835258362583725838258392584025841258422584325844258452584625847258482584925850258512585225853258542585525856258572585825859258602586125862258632586425865258662586725868258692587025871258722587325874258752587625877258782587925880258812588225883258842588525886258872588825889258902589125892258932589425895258962589725898258992590025901259022590325904259052590625907259082590925910259112591225913259142591525916259172591825919259202592125922259232592425925259262592725928259292593025931259322593325934259352593625937259382593925940259412594225943259442594525946259472594825949259502595125952259532595425955259562595725958259592596025961259622596325964259652596625967259682596925970259712597225973259742597525976259772597825979259802598125982259832598425985259862598725988259892599025991259922599325994259952599625997259982599926000260012600226003260042600526006260072600826009260102601126012260132601426015260162601726018260192602026021260222602326024260252602626027260282602926030260312603226033260342603526036260372603826039260402604126042260432604426045260462604726048260492605026051260522605326054260552605626057260582605926060260612606226063260642606526066260672606826069260702607126072260732607426075260762607726078260792608026081260822608326084260852608626087260882608926090260912609226093260942609526096260972609826099261002610126102261032610426105261062610726108261092611026111261122611326114261152611626117261182611926120261212612226123261242612526126261272612826129261302613126132261332613426135261362613726138261392614026141261422614326144261452614626147261482614926150261512615226153261542615526156261572615826159261602616126162261632616426165261662616726168261692617026171261722617326174261752617626177261782617926180261812618226183261842618526186261872618826189261902619126192261932619426195261962619726198261992620026201262022620326204262052620626207262082620926210262112621226213262142621526216262172621826219262202622126222262232622426225262262622726228262292623026231262322623326234262352623626237262382623926240262412624226243262442624526246262472624826249262502625126252262532625426255262562625726258262592626026261262622626326264262652626626267262682626926270262712627226273262742627526276262772627826279262802628126282262832628426285262862628726288262892629026291262922629326294262952629626297262982629926300263012630226303263042630526306263072630826309263102631126312263132631426315263162631726318263192632026321263222632326324263252632626327263282632926330263312633226333263342633526336263372633826339263402634126342263432634426345263462634726348263492635026351263522635326354263552635626357263582635926360263612636226363263642636526366263672636826369263702637126372263732637426375263762637726378263792638026381263822638326384263852638626387263882638926390263912639226393263942639526396263972639826399264002640126402264032640426405264062640726408264092641026411264122641326414264152641626417264182641926420264212642226423264242642526426264272642826429264302643126432264332643426435264362643726438264392644026441264422644326444264452644626447264482644926450264512645226453264542645526456264572645826459264602646126462264632646426465264662646726468264692647026471264722647326474264752647626477264782647926480264812648226483264842648526486264872648826489264902649126492264932649426495264962649726498264992650026501265022650326504265052650626507265082650926510265112651226513265142651526516265172651826519265202652126522265232652426525265262652726528265292653026531265322653326534265352653626537265382653926540265412654226543265442654526546265472654826549265502655126552265532655426555265562655726558265592656026561265622656326564265652656626567265682656926570265712657226573265742657526576265772657826579265802658126582265832658426585265862658726588265892659026591265922659326594265952659626597265982659926600266012660226603266042660526606266072660826609266102661126612266132661426615266162661726618266192662026621266222662326624266252662626627266282662926630266312663226633266342663526636266372663826639266402664126642266432664426645266462664726648266492665026651266522665326654266552665626657266582665926660266612666226663266642666526666266672666826669266702667126672266732667426675266762667726678266792668026681266822668326684266852668626687266882668926690266912669226693266942669526696266972669826699267002670126702267032670426705267062670726708267092671026711267122671326714267152671626717267182671926720267212672226723267242672526726267272672826729267302673126732267332673426735267362673726738267392674026741267422674326744267452674626747267482674926750267512675226753267542675526756267572675826759267602676126762267632676426765267662676726768267692677026771267722677326774267752677626777267782677926780267812678226783267842678526786267872678826789267902679126792267932679426795267962679726798267992680026801268022680326804268052680626807268082680926810268112681226813268142681526816268172681826819268202682126822268232682426825268262682726828268292683026831268322683326834268352683626837268382683926840268412684226843268442684526846268472684826849268502685126852268532685426855268562685726858268592686026861268622686326864268652686626867268682686926870268712687226873268742687526876268772687826879268802688126882268832688426885268862688726888268892689026891268922689326894268952689626897268982689926900269012690226903269042690526906269072690826909269102691126912269132691426915269162691726918269192692026921269222692326924269252692626927269282692926930269312693226933269342693526936269372693826939269402694126942269432694426945269462694726948269492695026951269522695326954269552695626957269582695926960269612696226963269642696526966269672696826969269702697126972269732697426975269762697726978269792698026981269822698326984269852698626987269882698926990269912699226993269942699526996269972699826999270002700127002270032700427005270062700727008270092701027011270122701327014270152701627017270182701927020270212702227023270242702527026270272702827029270302703127032270332703427035270362703727038270392704027041270422704327044270452704627047270482704927050270512705227053270542705527056270572705827059270602706127062270632706427065270662706727068270692707027071270722707327074270752707627077270782707927080270812708227083270842708527086270872708827089270902709127092270932709427095270962709727098270992710027101271022710327104271052710627107271082710927110271112711227113271142711527116271172711827119271202712127122271232712427125271262712727128271292713027131271322713327134271352713627137271382713927140271412714227143271442714527146271472714827149271502715127152271532715427155271562715727158271592716027161271622716327164271652716627167271682716927170271712717227173271742717527176271772717827179271802718127182271832718427185271862718727188271892719027191271922719327194271952719627197271982719927200272012720227203272042720527206272072720827209272102721127212272132721427215272162721727218272192722027221272222722327224272252722627227272282722927230272312723227233272342723527236272372723827239272402724127242272432724427245272462724727248272492725027251272522725327254272552725627257272582725927260272612726227263272642726527266272672726827269272702727127272272732727427275272762727727278272792728027281272822728327284272852728627287272882728927290272912729227293272942729527296272972729827299273002730127302273032730427305273062730727308273092731027311273122731327314273152731627317273182731927320273212732227323273242732527326273272732827329273302733127332273332733427335273362733727338273392734027341273422734327344273452734627347273482734927350273512735227353273542735527356273572735827359273602736127362273632736427365273662736727368273692737027371273722737327374273752737627377273782737927380273812738227383273842738527386273872738827389273902739127392273932739427395273962739727398273992740027401274022740327404274052740627407274082740927410274112741227413274142741527416274172741827419274202742127422274232742427425274262742727428274292743027431274322743327434274352743627437274382743927440274412744227443274442744527446274472744827449274502745127452274532745427455274562745727458274592746027461274622746327464274652746627467274682746927470274712747227473274742747527476274772747827479274802748127482274832748427485274862748727488274892749027491274922749327494274952749627497274982749927500275012750227503275042750527506275072750827509275102751127512275132751427515275162751727518275192752027521275222752327524275252752627527275282752927530275312753227533275342753527536275372753827539275402754127542275432754427545275462754727548275492755027551275522755327554275552755627557275582755927560275612756227563275642756527566275672756827569275702757127572275732757427575275762757727578275792758027581275822758327584275852758627587275882758927590275912759227593275942759527596275972759827599276002760127602276032760427605276062760727608276092761027611276122761327614276152761627617276182761927620276212762227623276242762527626276272762827629276302763127632276332763427635276362763727638276392764027641276422764327644276452764627647276482764927650276512765227653276542765527656276572765827659276602766127662276632766427665276662766727668276692767027671276722767327674276752767627677276782767927680276812768227683276842768527686276872768827689276902769127692276932769427695276962769727698276992770027701277022770327704277052770627707277082770927710277112771227713277142771527716277172771827719277202772127722277232772427725277262772727728277292773027731277322773327734277352773627737277382773927740277412774227743277442774527746277472774827749277502775127752277532775427755277562775727758277592776027761277622776327764277652776627767277682776927770277712777227773277742777527776277772777827779277802778127782277832778427785277862778727788277892779027791277922779327794277952779627797277982779927800278012780227803278042780527806278072780827809278102781127812278132781427815278162781727818278192782027821278222782327824278252782627827278282782927830278312783227833278342783527836278372783827839278402784127842278432784427845278462784727848278492785027851278522785327854278552785627857278582785927860278612786227863278642786527866278672786827869278702787127872278732787427875278762787727878278792788027881278822788327884278852788627887278882788927890278912789227893278942789527896278972789827899279002790127902279032790427905279062790727908279092791027911279122791327914279152791627917279182791927920279212792227923279242792527926279272792827929279302793127932279332793427935279362793727938279392794027941279422794327944279452794627947279482794927950279512795227953279542795527956279572795827959279602796127962279632796427965279662796727968279692797027971279722797327974279752797627977279782797927980279812798227983279842798527986279872798827989279902799127992279932799427995279962799727998279992800028001280022800328004280052800628007280082800928010280112801228013280142801528016280172801828019280202802128022280232802428025280262802728028280292803028031280322803328034280352803628037280382803928040280412804228043280442804528046280472804828049280502805128052280532805428055280562805728058280592806028061280622806328064280652806628067280682806928070280712807228073280742807528076280772807828079280802808128082280832808428085280862808728088280892809028091280922809328094280952809628097280982809928100281012810228103281042810528106281072810828109281102811128112281132811428115281162811728118281192812028121281222812328124281252812628127281282812928130281312813228133281342813528136281372813828139281402814128142281432814428145281462814728148281492815028151281522815328154281552815628157281582815928160281612816228163281642816528166281672816828169281702817128172281732817428175281762817728178281792818028181281822818328184281852818628187281882818928190281912819228193281942819528196281972819828199282002820128202282032820428205282062820728208282092821028211282122821328214282152821628217282182821928220282212822228223282242822528226282272822828229282302823128232282332823428235282362823728238282392824028241282422824328244282452824628247282482824928250282512825228253282542825528256282572825828259282602826128262282632826428265282662826728268282692827028271282722827328274282752827628277282782827928280282812828228283282842828528286282872828828289282902829128292282932829428295282962829728298282992830028301283022830328304283052830628307283082830928310283112831228313283142831528316283172831828319283202832128322283232832428325283262832728328283292833028331283322833328334283352833628337283382833928340283412834228343283442834528346283472834828349283502835128352283532835428355283562835728358283592836028361283622836328364283652836628367283682836928370283712837228373283742837528376283772837828379283802838128382283832838428385283862838728388283892839028391283922839328394283952839628397283982839928400284012840228403284042840528406284072840828409284102841128412284132841428415284162841728418284192842028421284222842328424284252842628427284282842928430284312843228433284342843528436284372843828439284402844128442284432844428445284462844728448284492845028451284522845328454284552845628457284582845928460284612846228463284642846528466284672846828469284702847128472284732847428475284762847728478284792848028481284822848328484284852848628487284882848928490284912849228493284942849528496284972849828499285002850128502285032850428505285062850728508285092851028511285122851328514285152851628517285182851928520285212852228523285242852528526285272852828529285302853128532285332853428535285362853728538285392854028541285422854328544285452854628547285482854928550285512855228553285542855528556285572855828559285602856128562285632856428565285662856728568285692857028571285722857328574285752857628577285782857928580285812858228583285842858528586285872858828589285902859128592285932859428595285962859728598285992860028601286022860328604286052860628607286082860928610286112861228613286142861528616286172861828619286202862128622286232862428625286262862728628286292863028631286322863328634286352863628637286382863928640286412864228643286442864528646286472864828649286502865128652286532865428655286562865728658286592866028661286622866328664286652866628667286682866928670286712867228673286742867528676286772867828679286802868128682286832868428685286862868728688286892869028691286922869328694286952869628697286982869928700287012870228703287042870528706287072870828709287102871128712287132871428715287162871728718287192872028721287222872328724287252872628727287282872928730287312873228733287342873528736287372873828739287402874128742287432874428745287462874728748287492875028751287522875328754287552875628757287582875928760287612876228763287642876528766287672876828769287702877128772287732877428775287762877728778287792878028781287822878328784287852878628787287882878928790287912879228793287942879528796287972879828799288002880128802288032880428805288062880728808288092881028811288122881328814288152881628817288182881928820288212882228823288242882528826288272882828829288302883128832288332883428835288362883728838288392884028841288422884328844288452884628847288482884928850288512885228853288542885528856288572885828859288602886128862288632886428865288662886728868288692887028871288722887328874288752887628877288782887928880288812888228883288842888528886288872888828889288902889128892288932889428895288962889728898288992890028901289022890328904289052890628907289082890928910289112891228913289142891528916289172891828919289202892128922289232892428925289262892728928289292893028931289322893328934289352893628937289382893928940289412894228943289442894528946289472894828949289502895128952289532895428955289562895728958289592896028961289622896328964289652896628967289682896928970289712897228973289742897528976289772897828979289802898128982289832898428985289862898728988289892899028991289922899328994289952899628997289982899929000290012900229003290042900529006290072900829009290102901129012290132901429015290162901729018290192902029021290222902329024290252902629027290282902929030290312903229033290342903529036290372903829039290402904129042290432904429045290462904729048290492905029051290522905329054290552905629057290582905929060290612906229063290642906529066290672906829069290702907129072290732907429075290762907729078290792908029081290822908329084290852908629087290882908929090290912909229093290942909529096290972909829099291002910129102291032910429105291062910729108291092911029111291122911329114291152911629117291182911929120291212912229123291242912529126291272912829129291302913129132291332913429135291362913729138291392914029141291422914329144291452914629147291482914929150291512915229153291542915529156291572915829159291602916129162291632916429165291662916729168291692917029171291722917329174291752917629177291782917929180291812918229183291842918529186291872918829189291902919129192291932919429195291962919729198291992920029201292022920329204292052920629207292082920929210292112921229213292142921529216292172921829219292202922129222292232922429225292262922729228292292923029231292322923329234292352923629237292382923929240292412924229243292442924529246292472924829249292502925129252292532925429255292562925729258292592926029261292622926329264292652926629267292682926929270292712927229273292742927529276292772927829279292802928129282292832928429285292862928729288292892929029291292922929329294292952929629297292982929929300293012930229303293042930529306293072930829309293102931129312293132931429315293162931729318293192932029321293222932329324293252932629327293282932929330293312933229333293342933529336293372933829339293402934129342293432934429345293462934729348293492935029351293522935329354293552935629357293582935929360293612936229363293642936529366293672936829369293702937129372293732937429375293762937729378293792938029381293822938329384293852938629387293882938929390293912939229393293942939529396293972939829399294002940129402294032940429405294062940729408294092941029411294122941329414294152941629417294182941929420294212942229423294242942529426294272942829429294302943129432294332943429435294362943729438294392944029441294422944329444294452944629447294482944929450294512945229453294542945529456294572945829459294602946129462294632946429465294662946729468294692947029471294722947329474294752947629477294782947929480294812948229483294842948529486294872948829489294902949129492294932949429495294962949729498294992950029501295022950329504295052950629507295082950929510295112951229513295142951529516295172951829519295202952129522295232952429525295262952729528295292953029531295322953329534295352953629537295382953929540295412954229543295442954529546295472954829549295502955129552295532955429555295562955729558295592956029561295622956329564295652956629567295682956929570295712957229573295742957529576295772957829579295802958129582295832958429585295862958729588295892959029591295922959329594295952959629597295982959929600296012960229603296042960529606296072960829609296102961129612296132961429615296162961729618296192962029621296222962329624296252962629627296282962929630296312963229633296342963529636296372963829639296402964129642296432964429645296462964729648296492965029651296522965329654296552965629657296582965929660296612966229663296642966529666296672966829669296702967129672296732967429675296762967729678296792968029681296822968329684296852968629687296882968929690296912969229693296942969529696296972969829699297002970129702297032970429705297062970729708297092971029711297122971329714297152971629717297182971929720297212972229723297242972529726297272972829729297302973129732297332973429735297362973729738297392974029741297422974329744297452974629747297482974929750297512975229753297542975529756297572975829759297602976129762297632976429765297662976729768297692977029771297722977329774297752977629777297782977929780297812978229783297842978529786297872978829789297902979129792297932979429795297962979729798297992980029801298022980329804298052980629807298082980929810298112981229813298142981529816298172981829819298202982129822298232982429825298262982729828298292983029831298322983329834298352983629837298382983929840298412984229843298442984529846298472984829849298502985129852298532985429855298562985729858298592986029861298622986329864298652986629867298682986929870298712987229873298742987529876298772987829879298802988129882298832988429885298862988729888298892989029891298922989329894298952989629897298982989929900299012990229903299042990529906299072990829909299102991129912299132991429915299162991729918299192992029921299222992329924299252992629927299282992929930299312993229933299342993529936299372993829939299402994129942299432994429945299462994729948299492995029951299522995329954299552995629957299582995929960299612996229963299642996529966299672996829969299702997129972299732997429975299762997729978299792998029981299822998329984299852998629987299882998929990299912999229993299942999529996299972999829999300003000130002300033000430005300063000730008300093001030011300123001330014300153001630017300183001930020300213002230023300243002530026300273002830029300303003130032300333003430035300363003730038300393004030041300423004330044300453004630047300483004930050300513005230053300543005530056300573005830059300603006130062300633006430065300663006730068300693007030071300723007330074300753007630077300783007930080300813008230083300843008530086300873008830089300903009130092300933009430095300963009730098300993010030101301023010330104301053010630107301083010930110301113011230113301143011530116301173011830119301203012130122301233012430125301263012730128301293013030131301323013330134301353013630137301383013930140301413014230143301443014530146301473014830149301503015130152301533015430155301563015730158301593016030161301623016330164301653016630167301683016930170301713017230173301743017530176301773017830179301803018130182301833018430185301863018730188301893019030191301923019330194301953019630197301983019930200302013020230203302043020530206302073020830209302103021130212302133021430215302163021730218302193022030221302223022330224302253022630227302283022930230302313023230233302343023530236302373023830239302403024130242302433024430245302463024730248302493025030251302523025330254302553025630257302583025930260302613026230263302643026530266302673026830269302703027130272302733027430275302763027730278302793028030281302823028330284302853028630287302883028930290302913029230293302943029530296302973029830299303003030130302303033030430305303063030730308303093031030311303123031330314303153031630317303183031930320303213032230323303243032530326303273032830329303303033130332303333033430335303363033730338303393034030341303423034330344303453034630347303483034930350303513035230353303543035530356303573035830359303603036130362303633036430365303663036730368303693037030371303723037330374303753037630377303783037930380303813038230383303843038530386303873038830389303903039130392303933039430395303963039730398303993040030401304023040330404304053040630407304083040930410304113041230413304143041530416304173041830419304203042130422304233042430425304263042730428304293043030431304323043330434304353043630437304383043930440304413044230443304443044530446304473044830449304503045130452304533045430455304563045730458304593046030461304623046330464304653046630467304683046930470304713047230473304743047530476304773047830479304803048130482304833048430485304863048730488304893049030491304923049330494304953049630497304983049930500305013050230503305043050530506305073050830509305103051130512305133051430515305163051730518305193052030521305223052330524305253052630527305283052930530305313053230533305343053530536305373053830539305403054130542305433054430545305463054730548305493055030551305523055330554305553055630557305583055930560305613056230563305643056530566305673056830569305703057130572305733057430575305763057730578305793058030581305823058330584305853058630587305883058930590305913059230593305943059530596305973059830599306003060130602306033060430605306063060730608306093061030611306123061330614306153061630617306183061930620306213062230623306243062530626306273062830629306303063130632306333063430635306363063730638306393064030641306423064330644306453064630647306483064930650306513065230653306543065530656306573065830659306603066130662306633066430665306663066730668306693067030671306723067330674306753067630677306783067930680306813068230683306843068530686306873068830689306903069130692306933069430695306963069730698306993070030701307023070330704307053070630707307083070930710307113071230713307143071530716307173071830719307203072130722307233072430725307263072730728307293073030731307323073330734307353073630737307383073930740307413074230743307443074530746307473074830749307503075130752307533075430755307563075730758307593076030761307623076330764307653076630767307683076930770307713077230773307743077530776307773077830779307803078130782307833078430785307863078730788307893079030791307923079330794307953079630797307983079930800308013080230803308043080530806308073080830809308103081130812308133081430815308163081730818308193082030821308223082330824308253082630827308283082930830308313083230833308343083530836308373083830839308403084130842308433084430845308463084730848308493085030851308523085330854308553085630857308583085930860308613086230863308643086530866308673086830869308703087130872308733087430875308763087730878308793088030881308823088330884308853088630887308883088930890308913089230893308943089530896308973089830899309003090130902309033090430905309063090730908309093091030911309123091330914309153091630917309183091930920309213092230923309243092530926309273092830929309303093130932309333093430935309363093730938309393094030941309423094330944309453094630947309483094930950309513095230953309543095530956309573095830959309603096130962309633096430965309663096730968309693097030971309723097330974309753097630977309783097930980309813098230983309843098530986309873098830989309903099130992309933099430995309963099730998309993100031001310023100331004310053100631007310083100931010310113101231013310143101531016310173101831019310203102131022310233102431025310263102731028310293103031031310323103331034310353103631037310383103931040310413104231043310443104531046310473104831049310503105131052310533105431055310563105731058310593106031061310623106331064310653106631067310683106931070310713107231073310743107531076310773107831079310803108131082310833108431085310863108731088310893109031091310923109331094310953109631097310983109931100311013110231103311043110531106311073110831109311103111131112311133111431115311163111731118311193112031121311223112331124311253112631127311283112931130311313113231133311343113531136311373113831139311403114131142311433114431145311463114731148311493115031151311523115331154311553115631157311583115931160311613116231163311643116531166311673116831169311703117131172311733117431175311763117731178311793118031181311823118331184311853118631187311883118931190311913119231193311943119531196311973119831199312003120131202312033120431205312063120731208312093121031211312123121331214312153121631217312183121931220312213122231223312243122531226312273122831229312303123131232312333123431235312363123731238312393124031241312423124331244312453124631247312483124931250312513125231253312543125531256312573125831259312603126131262312633126431265312663126731268312693127031271312723127331274312753127631277312783127931280312813128231283312843128531286312873128831289312903129131292312933129431295312963129731298312993130031301313023130331304313053130631307313083130931310313113131231313313143131531316313173131831319313203132131322313233132431325313263132731328313293133031331313323133331334313353133631337313383133931340313413134231343313443134531346313473134831349313503135131352313533135431355313563135731358313593136031361313623136331364313653136631367313683136931370313713137231373313743137531376313773137831379313803138131382313833138431385313863138731388313893139031391313923139331394313953139631397313983139931400314013140231403314043140531406314073140831409314103141131412314133141431415314163141731418314193142031421314223142331424314253142631427314283142931430314313143231433314343143531436314373143831439314403144131442314433144431445314463144731448314493145031451314523145331454314553145631457314583145931460314613146231463314643146531466314673146831469314703147131472314733147431475314763147731478314793148031481314823148331484314853148631487314883148931490314913149231493314943149531496314973149831499315003150131502315033150431505315063150731508315093151031511315123151331514315153151631517315183151931520315213152231523315243152531526315273152831529315303153131532315333153431535315363153731538315393154031541315423154331544315453154631547315483154931550315513155231553315543155531556315573155831559315603156131562315633156431565315663156731568315693157031571315723157331574315753157631577315783157931580315813158231583315843158531586315873158831589315903159131592315933159431595315963159731598315993160031601316023160331604316053160631607316083160931610316113161231613316143161531616316173161831619316203162131622316233162431625316263162731628316293163031631316323163331634316353163631637316383163931640316413164231643316443164531646316473164831649316503165131652316533165431655316563165731658316593166031661316623166331664316653166631667316683166931670316713167231673316743167531676316773167831679316803168131682316833168431685316863168731688316893169031691316923169331694316953169631697316983169931700317013170231703317043170531706317073170831709317103171131712317133171431715317163171731718317193172031721317223172331724317253172631727317283172931730317313173231733317343173531736317373173831739317403174131742317433174431745317463174731748317493175031751317523175331754317553175631757317583175931760317613176231763317643176531766317673176831769317703177131772317733177431775317763177731778317793178031781317823178331784317853178631787317883178931790317913179231793317943179531796317973179831799318003180131802318033180431805318063180731808318093181031811318123181331814318153181631817318183181931820318213182231823318243182531826318273182831829318303183131832318333183431835318363183731838318393184031841318423184331844318453184631847318483184931850318513185231853318543185531856318573185831859318603186131862318633186431865318663186731868318693187031871318723187331874318753187631877318783187931880318813188231883318843188531886318873188831889318903189131892318933189431895318963189731898318993190031901319023190331904319053190631907319083190931910319113191231913319143191531916319173191831919319203192131922319233192431925319263192731928319293193031931319323193331934319353193631937319383193931940319413194231943319443194531946319473194831949319503195131952319533195431955319563195731958319593196031961319623196331964319653196631967319683196931970319713197231973319743197531976319773197831979319803198131982319833198431985319863198731988319893199031991319923199331994319953199631997319983199932000320013200232003320043200532006320073200832009320103201132012320133201432015320163201732018320193202032021320223202332024320253202632027320283202932030320313203232033320343203532036320373203832039320403204132042320433204432045320463204732048320493205032051320523205332054320553205632057320583205932060320613206232063320643206532066320673206832069320703207132072320733207432075320763207732078320793208032081320823208332084320853208632087320883208932090320913209232093320943209532096320973209832099321003210132102321033210432105321063210732108321093211032111321123211332114321153211632117321183211932120321213212232123321243212532126321273212832129321303213132132321333213432135321363213732138321393214032141321423214332144321453214632147321483214932150321513215232153321543215532156321573215832159321603216132162321633216432165321663216732168321693217032171321723217332174321753217632177321783217932180321813218232183321843218532186321873218832189321903219132192321933219432195321963219732198321993220032201322023220332204322053220632207322083220932210322113221232213322143221532216322173221832219322203222132222322233222432225322263222732228322293223032231322323223332234322353223632237322383223932240322413224232243322443224532246322473224832249322503225132252322533225432255322563225732258322593226032261322623226332264322653226632267322683226932270322713227232273322743227532276322773227832279322803228132282322833228432285322863228732288322893229032291322923229332294322953229632297322983229932300323013230232303323043230532306323073230832309323103231132312323133231432315323163231732318323193232032321323223232332324323253232632327323283232932330323313233232333323343233532336323373233832339323403234132342323433234432345323463234732348323493235032351323523235332354323553235632357323583235932360323613236232363323643236532366323673236832369323703237132372323733237432375323763237732378323793238032381323823238332384323853238632387323883238932390323913239232393323943239532396323973239832399324003240132402324033240432405324063240732408324093241032411324123241332414324153241632417324183241932420324213242232423324243242532426324273242832429324303243132432324333243432435324363243732438324393244032441324423244332444324453244632447324483244932450324513245232453324543245532456324573245832459324603246132462324633246432465324663246732468324693247032471324723247332474324753247632477324783247932480324813248232483324843248532486324873248832489324903249132492324933249432495324963249732498324993250032501325023250332504325053250632507325083250932510325113251232513325143251532516325173251832519325203252132522325233252432525325263252732528325293253032531325323253332534325353253632537325383253932540325413254232543325443254532546325473254832549325503255132552325533255432555325563255732558325593256032561325623256332564325653256632567325683256932570325713257232573325743257532576325773257832579325803258132582325833258432585325863258732588325893259032591325923259332594325953259632597325983259932600326013260232603326043260532606326073260832609326103261132612326133261432615326163261732618326193262032621326223262332624326253262632627326283262932630326313263232633326343263532636326373263832639326403264132642326433264432645326463264732648326493265032651326523265332654326553265632657326583265932660326613266232663326643266532666326673266832669326703267132672326733267432675326763267732678326793268032681326823268332684326853268632687326883268932690326913269232693326943269532696326973269832699327003270132702327033270432705327063270732708327093271032711327123271332714327153271632717327183271932720327213272232723327243272532726327273272832729327303273132732327333273432735327363273732738327393274032741327423274332744327453274632747327483274932750327513275232753327543275532756327573275832759327603276132762327633276432765327663276732768327693277032771327723277332774327753277632777327783277932780327813278232783327843278532786327873278832789327903279132792327933279432795327963279732798327993280032801328023280332804328053280632807328083280932810328113281232813328143281532816328173281832819328203282132822328233282432825328263282732828328293283032831328323283332834328353283632837328383283932840328413284232843328443284532846328473284832849328503285132852328533285432855328563285732858328593286032861328623286332864328653286632867328683286932870328713287232873328743287532876328773287832879328803288132882328833288432885328863288732888328893289032891328923289332894328953289632897328983289932900329013290232903329043290532906329073290832909329103291132912329133291432915329163291732918329193292032921329223292332924329253292632927329283292932930329313293232933329343293532936329373293832939329403294132942329433294432945329463294732948329493295032951329523295332954329553295632957329583295932960329613296232963329643296532966329673296832969329703297132972329733297432975329763297732978329793298032981329823298332984329853298632987329883298932990329913299232993329943299532996329973299832999330003300133002330033300433005330063300733008330093301033011330123301333014330153301633017330183301933020330213302233023330243302533026330273302833029330303303133032330333303433035330363303733038330393304033041330423304333044330453304633047330483304933050330513305233053330543305533056330573305833059330603306133062330633306433065330663306733068330693307033071330723307333074330753307633077330783307933080330813308233083330843308533086330873308833089330903309133092330933309433095330963309733098330993310033101331023310333104331053310633107331083310933110331113311233113331143311533116331173311833119331203312133122331233312433125331263312733128331293313033131331323313333134331353313633137331383313933140331413314233143331443314533146331473314833149331503315133152331533315433155331563315733158331593316033161331623316333164331653316633167331683316933170331713317233173331743317533176331773317833179331803318133182331833318433185331863318733188331893319033191331923319333194331953319633197331983319933200332013320233203332043320533206332073320833209332103321133212332133321433215332163321733218332193322033221332223322333224332253322633227332283322933230332313323233233332343323533236332373323833239332403324133242332433324433245332463324733248332493325033251332523325333254332553325633257332583325933260332613326233263332643326533266332673326833269332703327133272332733327433275332763327733278332793328033281332823328333284332853328633287332883328933290332913329233293332943329533296332973329833299333003330133302333033330433305333063330733308333093331033311333123331333314333153331633317333183331933320333213332233323333243332533326333273332833329333303333133332333333333433335333363333733338333393334033341333423334333344333453334633347333483334933350333513335233353333543335533356333573335833359333603336133362333633336433365333663336733368333693337033371333723337333374333753337633377333783337933380333813338233383333843338533386333873338833389333903339133392333933339433395333963339733398333993340033401334023340333404334053340633407334083340933410334113341233413334143341533416334173341833419334203342133422334233342433425334263342733428334293343033431334323343333434334353343633437334383343933440334413344233443334443344533446334473344833449334503345133452334533345433455334563345733458334593346033461334623346333464334653346633467334683346933470334713347233473334743347533476334773347833479334803348133482334833348433485334863348733488334893349033491334923349333494334953349633497334983349933500335013350233503335043350533506335073350833509335103351133512335133351433515335163351733518335193352033521335223352333524335253352633527335283352933530335313353233533335343353533536335373353833539335403354133542335433354433545335463354733548335493355033551335523355333554335553355633557335583355933560335613356233563335643356533566335673356833569335703357133572335733357433575335763357733578335793358033581335823358333584335853358633587335883358933590335913359233593335943359533596335973359833599336003360133602336033360433605336063360733608336093361033611336123361333614336153361633617336183361933620336213362233623336243362533626336273362833629336303363133632336333363433635336363363733638336393364033641336423364333644336453364633647336483364933650336513365233653336543365533656336573365833659336603366133662336633366433665336663366733668336693367033671336723367333674336753367633677336783367933680336813368233683336843368533686336873368833689336903369133692336933369433695336963369733698336993370033701337023370333704337053370633707337083370933710337113371233713337143371533716337173371833719337203372133722337233372433725337263372733728337293373033731337323373333734337353373633737337383373933740337413374233743337443374533746337473374833749337503375133752337533375433755337563375733758337593376033761337623376333764337653376633767337683376933770337713377233773337743377533776337773377833779337803378133782337833378433785337863378733788337893379033791337923379333794337953379633797337983379933800338013380233803338043380533806338073380833809338103381133812338133381433815338163381733818338193382033821338223382333824338253382633827338283382933830338313383233833338343383533836338373383833839338403384133842338433384433845338463384733848338493385033851338523385333854338553385633857338583385933860338613386233863338643386533866338673386833869338703387133872338733387433875338763387733878338793388033881338823388333884338853388633887338883388933890338913389233893338943389533896338973389833899339003390133902339033390433905339063390733908339093391033911339123391333914339153391633917339183391933920339213392233923339243392533926339273392833929339303393133932339333393433935339363393733938339393394033941339423394333944339453394633947339483394933950339513395233953339543395533956339573395833959339603396133962339633396433965339663396733968339693397033971339723397333974339753397633977339783397933980339813398233983339843398533986339873398833989339903399133992339933399433995339963399733998339993400034001340023400334004340053400634007340083400934010340113401234013340143401534016340173401834019340203402134022340233402434025340263402734028340293403034031340323403334034340353403634037340383403934040340413404234043340443404534046340473404834049340503405134052340533405434055340563405734058340593406034061340623406334064340653406634067340683406934070340713407234073340743407534076340773407834079340803408134082340833408434085340863408734088340893409034091340923409334094340953409634097340983409934100341013410234103341043410534106341073410834109341103411134112341133411434115341163411734118341193412034121341223412334124341253412634127341283412934130341313413234133341343413534136341373413834139341403414134142341433414434145341463414734148341493415034151341523415334154341553415634157341583415934160341613416234163341643416534166341673416834169341703417134172341733417434175341763417734178341793418034181341823418334184341853418634187341883418934190341913419234193341943419534196341973419834199342003420134202342033420434205342063420734208342093421034211342123421334214342153421634217342183421934220342213422234223342243422534226342273422834229342303423134232342333423434235342363423734238342393424034241342423424334244342453424634247342483424934250342513425234253342543425534256342573425834259342603426134262342633426434265342663426734268342693427034271342723427334274342753427634277342783427934280342813428234283342843428534286342873428834289342903429134292342933429434295342963429734298342993430034301343023430334304343053430634307343083430934310343113431234313343143431534316343173431834319343203432134322343233432434325343263432734328343293433034331343323433334334343353433634337343383433934340343413434234343343443434534346343473434834349343503435134352343533435434355343563435734358343593436034361343623436334364343653436634367343683436934370343713437234373343743437534376343773437834379343803438134382343833438434385343863438734388343893439034391343923439334394343953439634397343983439934400344013440234403344043440534406344073440834409344103441134412344133441434415344163441734418344193442034421344223442334424344253442634427344283442934430344313443234433344343443534436344373443834439344403444134442344433444434445344463444734448344493445034451344523445334454344553445634457344583445934460344613446234463344643446534466344673446834469344703447134472344733447434475344763447734478344793448034481344823448334484344853448634487344883448934490344913449234493344943449534496344973449834499345003450134502345033450434505345063450734508345093451034511345123451334514345153451634517345183451934520345213452234523345243452534526345273452834529345303453134532345333453434535345363453734538345393454034541345423454334544345453454634547345483454934550345513455234553345543455534556345573455834559345603456134562345633456434565345663456734568345693457034571345723457334574345753457634577345783457934580345813458234583345843458534586345873458834589345903459134592345933459434595345963459734598345993460034601346023460334604346053460634607346083460934610346113461234613346143461534616346173461834619346203462134622346233462434625346263462734628346293463034631346323463334634346353463634637346383463934640346413464234643346443464534646346473464834649346503465134652346533465434655346563465734658346593466034661346623466334664346653466634667346683466934670346713467234673346743467534676346773467834679346803468134682346833468434685346863468734688346893469034691346923469334694346953469634697346983469934700347013470234703347043470534706347073470834709347103471134712347133471434715347163471734718347193472034721347223472334724347253472634727347283472934730347313473234733347343473534736347373473834739347403474134742347433474434745347463474734748347493475034751347523475334754347553475634757347583475934760347613476234763347643476534766347673476834769347703477134772347733477434775347763477734778347793478034781347823478334784347853478634787347883478934790347913479234793347943479534796347973479834799348003480134802348033480434805348063480734808348093481034811348123481334814348153481634817348183481934820348213482234823348243482534826348273482834829348303483134832348333483434835348363483734838348393484034841348423484334844348453484634847348483484934850348513485234853348543485534856348573485834859348603486134862348633486434865348663486734868348693487034871348723487334874348753487634877348783487934880348813488234883348843488534886348873488834889348903489134892348933489434895348963489734898348993490034901349023490334904349053490634907349083490934910349113491234913349143491534916349173491834919349203492134922349233492434925349263492734928349293493034931349323493334934349353493634937349383493934940349413494234943349443494534946349473494834949349503495134952349533495434955349563495734958349593496034961349623496334964349653496634967349683496934970349713497234973349743497534976349773497834979349803498134982349833498434985349863498734988349893499034991349923499334994349953499634997349983499935000350013500235003350043500535006350073500835009350103501135012350133501435015350163501735018350193502035021350223502335024350253502635027350283502935030350313503235033350343503535036350373503835039350403504135042350433504435045350463504735048350493505035051350523505335054350553505635057350583505935060350613506235063350643506535066350673506835069350703507135072350733507435075350763507735078350793508035081350823508335084350853508635087350883508935090350913509235093350943509535096350973509835099351003510135102351033510435105351063510735108351093511035111351123511335114351153511635117351183511935120351213512235123351243512535126351273512835129351303513135132351333513435135351363513735138351393514035141351423514335144351453514635147351483514935150351513515235153351543515535156351573515835159351603516135162351633516435165351663516735168351693517035171351723517335174351753517635177351783517935180351813518235183351843518535186351873518835189351903519135192351933519435195351963519735198351993520035201352023520335204352053520635207352083520935210352113521235213352143521535216352173521835219352203522135222352233522435225352263522735228352293523035231352323523335234352353523635237352383523935240352413524235243352443524535246352473524835249352503525135252352533525435255352563525735258352593526035261352623526335264352653526635267352683526935270352713527235273352743527535276352773527835279352803528135282352833528435285352863528735288352893529035291352923529335294352953529635297352983529935300353013530235303353043530535306353073530835309353103531135312353133531435315353163531735318353193532035321353223532335324353253532635327353283532935330353313533235333353343533535336353373533835339353403534135342353433534435345353463534735348353493535035351353523535335354353553535635357353583535935360353613536235363353643536535366353673536835369353703537135372353733537435375353763537735378353793538035381353823538335384353853538635387353883538935390353913539235393353943539535396353973539835399354003540135402354033540435405354063540735408354093541035411354123541335414354153541635417354183541935420354213542235423354243542535426354273542835429354303543135432354333543435435354363543735438354393544035441354423544335444354453544635447354483544935450354513545235453354543545535456354573545835459354603546135462354633546435465354663546735468354693547035471354723547335474354753547635477354783547935480354813548235483354843548535486354873548835489354903549135492354933549435495354963549735498354993550035501355023550335504355053550635507355083550935510355113551235513355143551535516355173551835519355203552135522355233552435525355263552735528355293553035531355323553335534355353553635537355383553935540355413554235543355443554535546355473554835549355503555135552355533555435555355563555735558355593556035561355623556335564355653556635567355683556935570355713557235573355743557535576355773557835579355803558135582355833558435585355863558735588355893559035591355923559335594355953559635597355983559935600356013560235603356043560535606356073560835609356103561135612356133561435615356163561735618356193562035621356223562335624356253562635627356283562935630356313563235633356343563535636356373563835639356403564135642356433564435645356463564735648356493565035651356523565335654356553565635657356583565935660356613566235663356643566535666356673566835669356703567135672356733567435675356763567735678356793568035681356823568335684356853568635687356883568935690356913569235693356943569535696356973569835699357003570135702357033570435705357063570735708357093571035711357123571335714357153571635717357183571935720357213572235723357243572535726357273572835729357303573135732357333573435735357363573735738357393574035741357423574335744357453574635747357483574935750357513575235753357543575535756357573575835759357603576135762357633576435765357663576735768357693577035771357723577335774357753577635777357783577935780357813578235783357843578535786357873578835789357903579135792357933579435795357963579735798357993580035801358023580335804358053580635807358083580935810358113581235813358143581535816358173581835819358203582135822358233582435825358263582735828358293583035831358323583335834358353583635837358383583935840358413584235843358443584535846358473584835849358503585135852358533585435855358563585735858358593586035861358623586335864358653586635867358683586935870358713587235873358743587535876358773587835879358803588135882358833588435885358863588735888358893589035891358923589335894358953589635897358983589935900359013590235903359043590535906359073590835909359103591135912359133591435915359163591735918359193592035921359223592335924359253592635927359283592935930359313593235933359343593535936359373593835939359403594135942359433594435945359463594735948359493595035951359523595335954359553595635957359583595935960359613596235963359643596535966359673596835969359703597135972359733597435975359763597735978359793598035981359823598335984359853598635987359883598935990359913599235993359943599535996359973599835999360003600136002360033600436005360063600736008360093601036011360123601336014360153601636017360183601936020360213602236023360243602536026360273602836029360303603136032360333603436035360363603736038360393604036041360423604336044360453604636047360483604936050360513605236053360543605536056360573605836059360603606136062360633606436065360663606736068360693607036071360723607336074360753607636077360783607936080360813608236083360843608536086360873608836089360903609136092360933609436095360963609736098360993610036101361023610336104361053610636107361083610936110361113611236113361143611536116361173611836119361203612136122361233612436125361263612736128361293613036131361323613336134361353613636137361383613936140361413614236143361443614536146361473614836149361503615136152361533615436155361563615736158361593616036161361623616336164361653616636167361683616936170361713617236173361743617536176361773617836179361803618136182361833618436185361863618736188361893619036191361923619336194361953619636197361983619936200362013620236203362043620536206362073620836209362103621136212362133621436215362163621736218362193622036221362223622336224362253622636227362283622936230362313623236233362343623536236362373623836239362403624136242362433624436245362463624736248362493625036251362523625336254362553625636257362583625936260362613626236263362643626536266362673626836269362703627136272362733627436275362763627736278362793628036281362823628336284362853628636287362883628936290362913629236293362943629536296362973629836299363003630136302363033630436305363063630736308363093631036311363123631336314363153631636317363183631936320363213632236323363243632536326363273632836329363303633136332363333633436335363363633736338363393634036341363423634336344363453634636347363483634936350363513635236353363543635536356363573635836359363603636136362363633636436365363663636736368363693637036371363723637336374363753637636377363783637936380363813638236383363843638536386363873638836389363903639136392363933639436395363963639736398363993640036401364023640336404364053640636407364083640936410364113641236413364143641536416364173641836419364203642136422364233642436425364263642736428364293643036431364323643336434364353643636437364383643936440364413644236443364443644536446364473644836449364503645136452364533645436455364563645736458364593646036461364623646336464364653646636467364683646936470364713647236473364743647536476364773647836479364803648136482364833648436485364863648736488364893649036491364923649336494364953649636497364983649936500365013650236503365043650536506365073650836509365103651136512365133651436515365163651736518365193652036521365223652336524365253652636527365283652936530365313653236533365343653536536365373653836539365403654136542365433654436545365463654736548365493655036551365523655336554365553655636557365583655936560365613656236563365643656536566365673656836569365703657136572365733657436575365763657736578365793658036581365823658336584365853658636587365883658936590365913659236593365943659536596365973659836599366003660136602366033660436605366063660736608366093661036611366123661336614366153661636617366183661936620366213662236623366243662536626366273662836629366303663136632366333663436635366363663736638366393664036641366423664336644366453664636647366483664936650366513665236653366543665536656366573665836659366603666136662366633666436665366663666736668366693667036671366723667336674366753667636677366783667936680366813668236683366843668536686366873668836689366903669136692366933669436695366963669736698366993670036701367023670336704367053670636707367083670936710367113671236713367143671536716367173671836719367203672136722367233672436725367263672736728367293673036731367323673336734367353673636737367383673936740367413674236743367443674536746367473674836749367503675136752367533675436755367563675736758367593676036761367623676336764367653676636767367683676936770367713677236773367743677536776367773677836779367803678136782367833678436785367863678736788367893679036791367923679336794367953679636797367983679936800368013680236803368043680536806368073680836809368103681136812368133681436815368163681736818368193682036821368223682336824368253682636827368283682936830368313683236833368343683536836368373683836839368403684136842368433684436845368463684736848368493685036851368523685336854368553685636857368583685936860368613686236863368643686536866368673686836869368703687136872368733687436875368763687736878368793688036881368823688336884368853688636887368883688936890368913689236893368943689536896368973689836899369003690136902369033690436905369063690736908369093691036911369123691336914369153691636917369183691936920369213692236923369243692536926369273692836929369303693136932369333693436935369363693736938369393694036941369423694336944369453694636947369483694936950369513695236953369543695536956369573695836959369603696136962369633696436965369663696736968369693697036971369723697336974369753697636977369783697936980369813698236983369843698536986369873698836989369903699136992369933699436995369963699736998369993700037001370023700337004370053700637007370083700937010370113701237013370143701537016370173701837019370203702137022370233702437025370263702737028370293703037031370323703337034370353703637037370383703937040370413704237043370443704537046370473704837049370503705137052370533705437055370563705737058370593706037061370623706337064370653706637067370683706937070370713707237073370743707537076370773707837079370803708137082370833708437085370863708737088370893709037091370923709337094370953709637097370983709937100371013710237103371043710537106371073710837109371103711137112371133711437115371163711737118371193712037121371223712337124371253712637127371283712937130371313713237133371343713537136371373713837139371403714137142371433714437145371463714737148371493715037151371523715337154371553715637157371583715937160371613716237163371643716537166371673716837169371703717137172371733717437175371763717737178371793718037181371823718337184371853718637187371883718937190371913719237193371943719537196371973719837199372003720137202372033720437205372063720737208372093721037211372123721337214372153721637217372183721937220372213722237223372243722537226372273722837229372303723137232372333723437235372363723737238372393724037241372423724337244372453724637247372483724937250372513725237253372543725537256372573725837259372603726137262372633726437265372663726737268372693727037271372723727337274372753727637277372783727937280372813728237283372843728537286372873728837289372903729137292372933729437295372963729737298372993730037301373023730337304373053730637307373083730937310373113731237313373143731537316373173731837319373203732137322373233732437325373263732737328373293733037331373323733337334373353733637337373383733937340373413734237343373443734537346373473734837349373503735137352373533735437355373563735737358373593736037361373623736337364373653736637367373683736937370373713737237373373743737537376373773737837379373803738137382373833738437385373863738737388373893739037391373923739337394373953739637397373983739937400374013740237403374043740537406374073740837409374103741137412374133741437415374163741737418374193742037421374223742337424374253742637427374283742937430374313743237433374343743537436374373743837439374403744137442374433744437445374463744737448374493745037451374523745337454374553745637457374583745937460374613746237463374643746537466374673746837469374703747137472374733747437475374763747737478374793748037481374823748337484374853748637487374883748937490374913749237493374943749537496374973749837499375003750137502375033750437505375063750737508375093751037511375123751337514375153751637517375183751937520375213752237523375243752537526375273752837529375303753137532375333753437535375363753737538375393754037541375423754337544375453754637547375483754937550375513755237553375543755537556375573755837559375603756137562375633756437565375663756737568375693757037571375723757337574375753757637577375783757937580375813758237583375843758537586375873758837589375903759137592375933759437595375963759737598375993760037601376023760337604376053760637607376083760937610376113761237613376143761537616376173761837619376203762137622376233762437625376263762737628376293763037631376323763337634376353763637637376383763937640376413764237643376443764537646376473764837649376503765137652376533765437655376563765737658376593766037661376623766337664376653766637667376683766937670376713767237673376743767537676376773767837679376803768137682376833768437685376863768737688376893769037691376923769337694376953769637697376983769937700377013770237703377043770537706377073770837709377103771137712377133771437715377163771737718377193772037721377223772337724377253772637727377283772937730377313773237733377343773537736377373773837739377403774137742377433774437745377463774737748377493775037751377523775337754377553775637757377583775937760377613776237763377643776537766377673776837769377703777137772377733777437775377763777737778377793778037781377823778337784377853778637787377883778937790377913779237793377943779537796377973779837799378003780137802378033780437805378063780737808378093781037811378123781337814378153781637817378183781937820378213782237823378243782537826378273782837829378303783137832378333783437835378363783737838378393784037841378423784337844378453784637847378483784937850378513785237853378543785537856378573785837859378603786137862378633786437865378663786737868378693787037871378723787337874378753787637877378783787937880378813788237883378843788537886378873788837889378903789137892378933789437895378963789737898378993790037901379023790337904379053790637907379083790937910379113791237913379143791537916379173791837919379203792137922379233792437925379263792737928379293793037931379323793337934379353793637937379383793937940379413794237943379443794537946379473794837949379503795137952379533795437955379563795737958379593796037961379623796337964379653796637967379683796937970379713797237973379743797537976379773797837979379803798137982379833798437985379863798737988379893799037991379923799337994379953799637997379983799938000380013800238003380043800538006380073800838009380103801138012380133801438015380163801738018380193802038021380223802338024380253802638027380283802938030380313803238033380343803538036380373803838039380403804138042380433804438045380463804738048380493805038051380523805338054380553805638057380583805938060380613806238063380643806538066380673806838069380703807138072380733807438075380763807738078380793808038081380823808338084380853808638087380883808938090380913809238093380943809538096380973809838099381003810138102381033810438105381063810738108381093811038111381123811338114381153811638117381183811938120381213812238123381243812538126381273812838129381303813138132381333813438135381363813738138381393814038141381423814338144381453814638147381483814938150381513815238153381543815538156381573815838159381603816138162381633816438165381663816738168381693817038171381723817338174381753817638177381783817938180381813818238183381843818538186381873818838189381903819138192381933819438195381963819738198381993820038201382023820338204382053820638207382083820938210382113821238213382143821538216382173821838219382203822138222382233822438225382263822738228382293823038231382323823338234382353823638237382383823938240382413824238243382443824538246382473824838249382503825138252382533825438255382563825738258382593826038261382623826338264382653826638267382683826938270382713827238273382743827538276382773827838279382803828138282382833828438285382863828738288382893829038291382923829338294382953829638297382983829938300383013830238303383043830538306383073830838309383103831138312383133831438315383163831738318383193832038321383223832338324383253832638327383283832938330383313833238333383343833538336383373833838339383403834138342383433834438345383463834738348383493835038351383523835338354383553835638357383583835938360383613836238363383643836538366383673836838369383703837138372383733837438375383763837738378383793838038381383823838338384383853838638387383883838938390383913839238393383943839538396383973839838399384003840138402384033840438405384063840738408384093841038411384123841338414384153841638417384183841938420384213842238423384243842538426384273842838429384303843138432384333843438435384363843738438384393844038441384423844338444384453844638447384483844938450384513845238453384543845538456384573845838459384603846138462384633846438465384663846738468384693847038471384723847338474384753847638477384783847938480384813848238483384843848538486384873848838489384903849138492384933849438495384963849738498384993850038501385023850338504385053850638507385083850938510385113851238513385143851538516385173851838519385203852138522385233852438525385263852738528385293853038531385323853338534385353853638537385383853938540385413854238543385443854538546385473854838549385503855138552385533855438555385563855738558385593856038561385623856338564385653856638567385683856938570385713857238573385743857538576385773857838579385803858138582385833858438585385863858738588385893859038591385923859338594385953859638597385983859938600386013860238603386043860538606386073860838609386103861138612386133861438615386163861738618386193862038621386223862338624386253862638627386283862938630386313863238633386343863538636386373863838639386403864138642386433864438645386463864738648386493865038651386523865338654386553865638657386583865938660386613866238663386643866538666386673866838669386703867138672386733867438675386763867738678386793868038681386823868338684386853868638687386883868938690386913869238693386943869538696386973869838699387003870138702387033870438705387063870738708387093871038711387123871338714387153871638717387183871938720387213872238723387243872538726387273872838729387303873138732387333873438735387363873738738387393874038741387423874338744387453874638747387483874938750387513875238753387543875538756387573875838759387603876138762387633876438765387663876738768387693877038771387723877338774387753877638777387783877938780387813878238783387843878538786387873878838789387903879138792387933879438795387963879738798387993880038801388023880338804388053880638807388083880938810388113881238813388143881538816388173881838819388203882138822388233882438825388263882738828388293883038831388323883338834388353883638837388383883938840388413884238843388443884538846388473884838849388503885138852388533885438855388563885738858388593886038861388623886338864388653886638867388683886938870388713887238873388743887538876388773887838879388803888138882388833888438885388863888738888388893889038891388923889338894388953889638897388983889938900389013890238903389043890538906389073890838909389103891138912389133891438915389163891738918389193892038921389223892338924389253892638927389283892938930389313893238933389343893538936389373893838939389403894138942389433894438945389463894738948389493895038951389523895338954389553895638957389583895938960389613896238963389643896538966389673896838969389703897138972389733897438975389763897738978389793898038981389823898338984389853898638987389883898938990389913899238993389943899538996389973899838999390003900139002390033900439005390063900739008390093901039011390123901339014390153901639017390183901939020390213902239023390243902539026390273902839029390303903139032390333903439035390363903739038390393904039041390423904339044390453904639047390483904939050390513905239053390543905539056390573905839059390603906139062390633906439065390663906739068390693907039071390723907339074390753907639077390783907939080390813908239083390843908539086390873908839089390903909139092390933909439095390963909739098390993910039101391023910339104391053910639107391083910939110391113911239113391143911539116391173911839119391203912139122391233912439125391263912739128391293913039131391323913339134391353913639137391383913939140391413914239143391443914539146391473914839149391503915139152391533915439155391563915739158391593916039161391623916339164391653916639167391683916939170391713917239173391743917539176391773917839179391803918139182391833918439185391863918739188391893919039191391923919339194391953919639197391983919939200392013920239203392043920539206392073920839209392103921139212392133921439215392163921739218392193922039221392223922339224392253922639227392283922939230392313923239233392343923539236392373923839239392403924139242392433924439245392463924739248392493925039251392523925339254392553925639257392583925939260392613926239263392643926539266392673926839269392703927139272392733927439275392763927739278392793928039281392823928339284392853928639287392883928939290392913929239293392943929539296392973929839299393003930139302393033930439305393063930739308393093931039311393123931339314393153931639317393183931939320393213932239323393243932539326393273932839329393303933139332393333933439335393363933739338393393934039341393423934339344393453934639347393483934939350393513935239353393543935539356393573935839359393603936139362393633936439365393663936739368393693937039371393723937339374393753937639377393783937939380393813938239383393843938539386393873938839389393903939139392393933939439395393963939739398393993940039401394023940339404394053940639407394083940939410394113941239413394143941539416394173941839419394203942139422394233942439425394263942739428394293943039431394323943339434394353943639437394383943939440394413944239443394443944539446394473944839449394503945139452394533945439455394563945739458394593946039461394623946339464394653946639467394683946939470394713947239473394743947539476394773947839479394803948139482394833948439485394863948739488394893949039491394923949339494394953949639497394983949939500395013950239503395043950539506395073950839509395103951139512395133951439515395163951739518395193952039521395223952339524395253952639527395283952939530395313953239533395343953539536395373953839539395403954139542395433954439545395463954739548395493955039551395523955339554395553955639557395583955939560395613956239563395643956539566395673956839569395703957139572395733957439575395763957739578395793958039581395823958339584395853958639587395883958939590395913959239593395943959539596395973959839599396003960139602396033960439605396063960739608396093961039611396123961339614396153961639617396183961939620396213962239623396243962539626396273962839629396303963139632396333963439635396363963739638396393964039641396423964339644396453964639647396483964939650396513965239653396543965539656396573965839659396603966139662396633966439665396663966739668396693967039671396723967339674396753967639677396783967939680396813968239683396843968539686396873968839689396903969139692396933969439695396963969739698396993970039701397023970339704397053970639707397083970939710397113971239713397143971539716397173971839719397203972139722397233972439725397263972739728397293973039731397323973339734397353973639737397383973939740397413974239743397443974539746397473974839749397503975139752397533975439755397563975739758397593976039761397623976339764397653976639767397683976939770397713977239773397743977539776397773977839779397803978139782397833978439785397863978739788397893979039791397923979339794397953979639797397983979939800398013980239803398043980539806398073980839809398103981139812398133981439815398163981739818398193982039821398223982339824398253982639827398283982939830398313983239833398343983539836398373983839839398403984139842398433984439845398463984739848398493985039851398523985339854398553985639857398583985939860398613986239863398643986539866398673986839869398703987139872398733987439875398763987739878398793988039881398823988339884398853988639887398883988939890398913989239893398943989539896398973989839899399003990139902399033990439905399063990739908399093991039911399123991339914399153991639917399183991939920399213992239923399243992539926399273992839929399303993139932399333993439935399363993739938399393994039941399423994339944399453994639947399483994939950399513995239953399543995539956399573995839959399603996139962399633996439965399663996739968399693997039971399723997339974399753997639977399783997939980399813998239983399843998539986399873998839989399903999139992399933999439995399963999739998399994000040001400024000340004400054000640007400084000940010400114001240013400144001540016400174001840019400204002140022400234002440025400264002740028400294003040031400324003340034400354003640037400384003940040400414004240043400444004540046400474004840049400504005140052400534005440055400564005740058400594006040061400624006340064400654006640067400684006940070400714007240073400744007540076400774007840079400804008140082400834008440085400864008740088400894009040091400924009340094400954009640097400984009940100401014010240103401044010540106401074010840109401104011140112401134011440115401164011740118401194012040121401224012340124401254012640127401284012940130401314013240133
  1. #ifdef PICODRIVE_HACK
  2. #define NOT_POLLING ctx->not_polling = 1;
  3. #else
  4. #define NOT_POLLING
  5. #endif
  6. // ORI
  7. OPCODE(0x0000)
  8. {
  9. u32 adr, res;
  10. u32 src, dst;
  11. FETCH_BYTE(src);
  12. res = DREGu8((Opcode >> 0) & 7);
  13. res |= src;
  14. flag_C = 0;
  15. flag_V = 0;
  16. flag_NotZ = res;
  17. flag_N = res;
  18. DREGu8((Opcode >> 0) & 7) = res;
  19. RET(8)
  20. }
  21. // ORI
  22. OPCODE(0x0010)
  23. {
  24. u32 adr, res;
  25. u32 src, dst;
  26. FETCH_BYTE(src);
  27. adr = AREG((Opcode >> 0) & 7);
  28. PRE_IO
  29. READ_BYTE_F(adr, res)
  30. res |= src;
  31. flag_C = 0;
  32. flag_V = 0;
  33. flag_NotZ = res;
  34. flag_N = res;
  35. WRITE_BYTE_F(adr, res)
  36. POST_IO
  37. RET(16)
  38. }
  39. // ORI
  40. OPCODE(0x0018)
  41. {
  42. u32 adr, res;
  43. u32 src, dst;
  44. FETCH_BYTE(src);
  45. adr = AREG((Opcode >> 0) & 7);
  46. AREG((Opcode >> 0) & 7) += 1;
  47. PRE_IO
  48. READ_BYTE_F(adr, res)
  49. res |= src;
  50. flag_C = 0;
  51. flag_V = 0;
  52. flag_NotZ = res;
  53. flag_N = res;
  54. WRITE_BYTE_F(adr, res)
  55. POST_IO
  56. RET(16)
  57. }
  58. // ORI
  59. OPCODE(0x0020)
  60. {
  61. u32 adr, res;
  62. u32 src, dst;
  63. FETCH_BYTE(src);
  64. adr = AREG((Opcode >> 0) & 7) - 1;
  65. AREG((Opcode >> 0) & 7) = adr;
  66. PRE_IO
  67. READ_BYTE_F(adr, res)
  68. res |= src;
  69. flag_C = 0;
  70. flag_V = 0;
  71. flag_NotZ = res;
  72. flag_N = res;
  73. WRITE_BYTE_F(adr, res)
  74. POST_IO
  75. RET(18)
  76. }
  77. // ORI
  78. OPCODE(0x0028)
  79. {
  80. u32 adr, res;
  81. u32 src, dst;
  82. FETCH_BYTE(src);
  83. FETCH_SWORD(adr);
  84. adr += AREG((Opcode >> 0) & 7);
  85. PRE_IO
  86. READ_BYTE_F(adr, res)
  87. res |= src;
  88. flag_C = 0;
  89. flag_V = 0;
  90. flag_NotZ = res;
  91. flag_N = res;
  92. WRITE_BYTE_F(adr, res)
  93. POST_IO
  94. RET(20)
  95. }
  96. // ORI
  97. OPCODE(0x0030)
  98. {
  99. u32 adr, res;
  100. u32 src, dst;
  101. FETCH_BYTE(src);
  102. adr = AREG((Opcode >> 0) & 7);
  103. DECODE_EXT_WORD
  104. PRE_IO
  105. READ_BYTE_F(adr, res)
  106. res |= src;
  107. flag_C = 0;
  108. flag_V = 0;
  109. flag_NotZ = res;
  110. flag_N = res;
  111. WRITE_BYTE_F(adr, res)
  112. POST_IO
  113. RET(22)
  114. }
  115. // ORI
  116. OPCODE(0x0038)
  117. {
  118. u32 adr, res;
  119. u32 src, dst;
  120. FETCH_BYTE(src);
  121. FETCH_SWORD(adr);
  122. PRE_IO
  123. READ_BYTE_F(adr, res)
  124. res |= src;
  125. flag_C = 0;
  126. flag_V = 0;
  127. flag_NotZ = res;
  128. flag_N = res;
  129. WRITE_BYTE_F(adr, res)
  130. POST_IO
  131. RET(20)
  132. }
  133. // ORI
  134. OPCODE(0x0039)
  135. {
  136. u32 adr, res;
  137. u32 src, dst;
  138. FETCH_BYTE(src);
  139. FETCH_LONG(adr);
  140. PRE_IO
  141. READ_BYTE_F(adr, res)
  142. res |= src;
  143. flag_C = 0;
  144. flag_V = 0;
  145. flag_NotZ = res;
  146. flag_N = res;
  147. WRITE_BYTE_F(adr, res)
  148. POST_IO
  149. RET(24)
  150. }
  151. // ORI
  152. OPCODE(0x001F)
  153. {
  154. u32 adr, res;
  155. u32 src, dst;
  156. FETCH_BYTE(src);
  157. adr = AREG(7);
  158. AREG(7) += 2;
  159. PRE_IO
  160. READ_BYTE_F(adr, res)
  161. res |= src;
  162. flag_C = 0;
  163. flag_V = 0;
  164. flag_NotZ = res;
  165. flag_N = res;
  166. WRITE_BYTE_F(adr, res)
  167. POST_IO
  168. RET(16)
  169. }
  170. // ORI
  171. OPCODE(0x0027)
  172. {
  173. u32 adr, res;
  174. u32 src, dst;
  175. FETCH_BYTE(src);
  176. adr = AREG(7) - 2;
  177. AREG(7) = adr;
  178. PRE_IO
  179. READ_BYTE_F(adr, res)
  180. res |= src;
  181. flag_C = 0;
  182. flag_V = 0;
  183. flag_NotZ = res;
  184. flag_N = res;
  185. WRITE_BYTE_F(adr, res)
  186. POST_IO
  187. RET(18)
  188. }
  189. // ORI
  190. OPCODE(0x0040)
  191. {
  192. u32 adr, res;
  193. u32 src, dst;
  194. FETCH_WORD(src);
  195. res = DREGu16((Opcode >> 0) & 7);
  196. res |= src;
  197. flag_C = 0;
  198. flag_V = 0;
  199. flag_NotZ = res;
  200. flag_N = res >> 8;
  201. DREGu16((Opcode >> 0) & 7) = res;
  202. RET(8)
  203. }
  204. // ORI
  205. OPCODE(0x0050)
  206. {
  207. u32 adr, res;
  208. u32 src, dst;
  209. FETCH_WORD(src);
  210. adr = AREG((Opcode >> 0) & 7);
  211. PRE_IO
  212. READ_WORD_F(adr, res)
  213. res |= src;
  214. flag_C = 0;
  215. flag_V = 0;
  216. flag_NotZ = res;
  217. flag_N = res >> 8;
  218. WRITE_WORD_F(adr, res)
  219. POST_IO
  220. RET(16)
  221. }
  222. // ORI
  223. OPCODE(0x0058)
  224. {
  225. u32 adr, res;
  226. u32 src, dst;
  227. FETCH_WORD(src);
  228. adr = AREG((Opcode >> 0) & 7);
  229. AREG((Opcode >> 0) & 7) += 2;
  230. PRE_IO
  231. READ_WORD_F(adr, res)
  232. res |= src;
  233. flag_C = 0;
  234. flag_V = 0;
  235. flag_NotZ = res;
  236. flag_N = res >> 8;
  237. WRITE_WORD_F(adr, res)
  238. POST_IO
  239. RET(16)
  240. }
  241. // ORI
  242. OPCODE(0x0060)
  243. {
  244. u32 adr, res;
  245. u32 src, dst;
  246. FETCH_WORD(src);
  247. adr = AREG((Opcode >> 0) & 7) - 2;
  248. AREG((Opcode >> 0) & 7) = adr;
  249. PRE_IO
  250. READ_WORD_F(adr, res)
  251. res |= src;
  252. flag_C = 0;
  253. flag_V = 0;
  254. flag_NotZ = res;
  255. flag_N = res >> 8;
  256. WRITE_WORD_F(adr, res)
  257. POST_IO
  258. RET(18)
  259. }
  260. // ORI
  261. OPCODE(0x0068)
  262. {
  263. u32 adr, res;
  264. u32 src, dst;
  265. FETCH_WORD(src);
  266. FETCH_SWORD(adr);
  267. adr += AREG((Opcode >> 0) & 7);
  268. PRE_IO
  269. READ_WORD_F(adr, res)
  270. res |= src;
  271. flag_C = 0;
  272. flag_V = 0;
  273. flag_NotZ = res;
  274. flag_N = res >> 8;
  275. WRITE_WORD_F(adr, res)
  276. POST_IO
  277. RET(20)
  278. }
  279. // ORI
  280. OPCODE(0x0070)
  281. {
  282. u32 adr, res;
  283. u32 src, dst;
  284. FETCH_WORD(src);
  285. adr = AREG((Opcode >> 0) & 7);
  286. DECODE_EXT_WORD
  287. PRE_IO
  288. READ_WORD_F(adr, res)
  289. res |= src;
  290. flag_C = 0;
  291. flag_V = 0;
  292. flag_NotZ = res;
  293. flag_N = res >> 8;
  294. WRITE_WORD_F(adr, res)
  295. POST_IO
  296. RET(22)
  297. }
  298. // ORI
  299. OPCODE(0x0078)
  300. {
  301. u32 adr, res;
  302. u32 src, dst;
  303. FETCH_WORD(src);
  304. FETCH_SWORD(adr);
  305. PRE_IO
  306. READ_WORD_F(adr, res)
  307. res |= src;
  308. flag_C = 0;
  309. flag_V = 0;
  310. flag_NotZ = res;
  311. flag_N = res >> 8;
  312. WRITE_WORD_F(adr, res)
  313. POST_IO
  314. RET(20)
  315. }
  316. // ORI
  317. OPCODE(0x0079)
  318. {
  319. u32 adr, res;
  320. u32 src, dst;
  321. FETCH_WORD(src);
  322. FETCH_LONG(adr);
  323. PRE_IO
  324. READ_WORD_F(adr, res)
  325. res |= src;
  326. flag_C = 0;
  327. flag_V = 0;
  328. flag_NotZ = res;
  329. flag_N = res >> 8;
  330. WRITE_WORD_F(adr, res)
  331. POST_IO
  332. RET(24)
  333. }
  334. // ORI
  335. OPCODE(0x005F)
  336. {
  337. u32 adr, res;
  338. u32 src, dst;
  339. FETCH_WORD(src);
  340. adr = AREG(7);
  341. AREG(7) += 2;
  342. PRE_IO
  343. READ_WORD_F(adr, res)
  344. res |= src;
  345. flag_C = 0;
  346. flag_V = 0;
  347. flag_NotZ = res;
  348. flag_N = res >> 8;
  349. WRITE_WORD_F(adr, res)
  350. POST_IO
  351. RET(16)
  352. }
  353. // ORI
  354. OPCODE(0x0067)
  355. {
  356. u32 adr, res;
  357. u32 src, dst;
  358. FETCH_WORD(src);
  359. adr = AREG(7) - 2;
  360. AREG(7) = adr;
  361. PRE_IO
  362. READ_WORD_F(adr, res)
  363. res |= src;
  364. flag_C = 0;
  365. flag_V = 0;
  366. flag_NotZ = res;
  367. flag_N = res >> 8;
  368. WRITE_WORD_F(adr, res)
  369. POST_IO
  370. RET(18)
  371. }
  372. // ORI
  373. OPCODE(0x0080)
  374. {
  375. u32 adr, res;
  376. u32 src, dst;
  377. FETCH_LONG(src);
  378. res = DREGu32((Opcode >> 0) & 7);
  379. res |= src;
  380. flag_C = 0;
  381. flag_V = 0;
  382. flag_NotZ = res;
  383. flag_N = res >> 24;
  384. DREGu32((Opcode >> 0) & 7) = res;
  385. RET(16)
  386. }
  387. // ORI
  388. OPCODE(0x0090)
  389. {
  390. u32 adr, res;
  391. u32 src, dst;
  392. FETCH_LONG(src);
  393. adr = AREG((Opcode >> 0) & 7);
  394. PRE_IO
  395. READ_LONG_F(adr, res)
  396. res |= src;
  397. flag_C = 0;
  398. flag_V = 0;
  399. flag_NotZ = res;
  400. flag_N = res >> 24;
  401. WRITE_LONG_F(adr, res)
  402. POST_IO
  403. RET(28)
  404. }
  405. // ORI
  406. OPCODE(0x0098)
  407. {
  408. u32 adr, res;
  409. u32 src, dst;
  410. FETCH_LONG(src);
  411. adr = AREG((Opcode >> 0) & 7);
  412. AREG((Opcode >> 0) & 7) += 4;
  413. PRE_IO
  414. READ_LONG_F(adr, res)
  415. res |= src;
  416. flag_C = 0;
  417. flag_V = 0;
  418. flag_NotZ = res;
  419. flag_N = res >> 24;
  420. WRITE_LONG_F(adr, res)
  421. POST_IO
  422. RET(28)
  423. }
  424. // ORI
  425. OPCODE(0x00A0)
  426. {
  427. u32 adr, res;
  428. u32 src, dst;
  429. FETCH_LONG(src);
  430. adr = AREG((Opcode >> 0) & 7) - 4;
  431. AREG((Opcode >> 0) & 7) = adr;
  432. PRE_IO
  433. READ_LONG_F(adr, res)
  434. res |= src;
  435. flag_C = 0;
  436. flag_V = 0;
  437. flag_NotZ = res;
  438. flag_N = res >> 24;
  439. WRITE_LONG_F(adr, res)
  440. POST_IO
  441. RET(30)
  442. }
  443. // ORI
  444. OPCODE(0x00A8)
  445. {
  446. u32 adr, res;
  447. u32 src, dst;
  448. FETCH_LONG(src);
  449. FETCH_SWORD(adr);
  450. adr += AREG((Opcode >> 0) & 7);
  451. PRE_IO
  452. READ_LONG_F(adr, res)
  453. res |= src;
  454. flag_C = 0;
  455. flag_V = 0;
  456. flag_NotZ = res;
  457. flag_N = res >> 24;
  458. WRITE_LONG_F(adr, res)
  459. POST_IO
  460. RET(32)
  461. }
  462. // ORI
  463. OPCODE(0x00B0)
  464. {
  465. u32 adr, res;
  466. u32 src, dst;
  467. FETCH_LONG(src);
  468. adr = AREG((Opcode >> 0) & 7);
  469. DECODE_EXT_WORD
  470. PRE_IO
  471. READ_LONG_F(adr, res)
  472. res |= src;
  473. flag_C = 0;
  474. flag_V = 0;
  475. flag_NotZ = res;
  476. flag_N = res >> 24;
  477. WRITE_LONG_F(adr, res)
  478. POST_IO
  479. RET(34)
  480. }
  481. // ORI
  482. OPCODE(0x00B8)
  483. {
  484. u32 adr, res;
  485. u32 src, dst;
  486. FETCH_LONG(src);
  487. FETCH_SWORD(adr);
  488. PRE_IO
  489. READ_LONG_F(adr, res)
  490. res |= src;
  491. flag_C = 0;
  492. flag_V = 0;
  493. flag_NotZ = res;
  494. flag_N = res >> 24;
  495. WRITE_LONG_F(adr, res)
  496. POST_IO
  497. RET(32)
  498. }
  499. // ORI
  500. OPCODE(0x00B9)
  501. {
  502. u32 adr, res;
  503. u32 src, dst;
  504. FETCH_LONG(src);
  505. FETCH_LONG(adr);
  506. PRE_IO
  507. READ_LONG_F(adr, res)
  508. res |= src;
  509. flag_C = 0;
  510. flag_V = 0;
  511. flag_NotZ = res;
  512. flag_N = res >> 24;
  513. WRITE_LONG_F(adr, res)
  514. POST_IO
  515. RET(36)
  516. }
  517. // ORI
  518. OPCODE(0x009F)
  519. {
  520. u32 adr, res;
  521. u32 src, dst;
  522. FETCH_LONG(src);
  523. adr = AREG(7);
  524. AREG(7) += 4;
  525. PRE_IO
  526. READ_LONG_F(adr, res)
  527. res |= src;
  528. flag_C = 0;
  529. flag_V = 0;
  530. flag_NotZ = res;
  531. flag_N = res >> 24;
  532. WRITE_LONG_F(adr, res)
  533. POST_IO
  534. RET(28)
  535. }
  536. // ORI
  537. OPCODE(0x00A7)
  538. {
  539. u32 adr, res;
  540. u32 src, dst;
  541. FETCH_LONG(src);
  542. adr = AREG(7) - 4;
  543. AREG(7) = adr;
  544. PRE_IO
  545. READ_LONG_F(adr, res)
  546. res |= src;
  547. flag_C = 0;
  548. flag_V = 0;
  549. flag_NotZ = res;
  550. flag_N = res >> 24;
  551. WRITE_LONG_F(adr, res)
  552. POST_IO
  553. RET(30)
  554. }
  555. // ORICCR
  556. OPCODE(0x003C)
  557. {
  558. u32 adr, res;
  559. u32 src, dst;
  560. FETCH_BYTE(res);
  561. res &= M68K_CCR_MASK;
  562. res |= GET_CCR;
  563. SET_CCR(res)
  564. RET(20)
  565. }
  566. // ORISR
  567. OPCODE(0x007C)
  568. {
  569. u32 adr, res;
  570. u32 src, dst;
  571. if (flag_S)
  572. {
  573. u32 res;
  574. FETCH_WORD(res);
  575. res &= M68K_SR_MASK;
  576. res |= GET_SR;
  577. SET_SR(res)
  578. CHECK_INT_TO_JUMP(20)
  579. }
  580. else
  581. {
  582. SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
  583. #ifdef USE_CYCLONE_TIMING
  584. RET(0)
  585. #else
  586. RET(4)
  587. #endif
  588. }
  589. RET(20)
  590. }
  591. // ANDI
  592. OPCODE(0x0200)
  593. {
  594. u32 adr, res;
  595. u32 src, dst;
  596. FETCH_BYTE(src);
  597. res = DREGu8((Opcode >> 0) & 7);
  598. res &= src;
  599. flag_C = 0;
  600. flag_V = 0;
  601. flag_NotZ = res;
  602. flag_N = res;
  603. DREGu8((Opcode >> 0) & 7) = res;
  604. RET(8)
  605. }
  606. // ANDI
  607. OPCODE(0x0210)
  608. {
  609. u32 adr, res;
  610. u32 src, dst;
  611. FETCH_BYTE(src);
  612. adr = AREG((Opcode >> 0) & 7);
  613. PRE_IO
  614. READ_BYTE_F(adr, res)
  615. res &= src;
  616. flag_C = 0;
  617. flag_V = 0;
  618. flag_NotZ = res;
  619. flag_N = res;
  620. WRITE_BYTE_F(adr, res)
  621. POST_IO
  622. RET(16)
  623. }
  624. // ANDI
  625. OPCODE(0x0218)
  626. {
  627. u32 adr, res;
  628. u32 src, dst;
  629. FETCH_BYTE(src);
  630. adr = AREG((Opcode >> 0) & 7);
  631. AREG((Opcode >> 0) & 7) += 1;
  632. PRE_IO
  633. READ_BYTE_F(adr, res)
  634. res &= src;
  635. flag_C = 0;
  636. flag_V = 0;
  637. flag_NotZ = res;
  638. flag_N = res;
  639. WRITE_BYTE_F(adr, res)
  640. POST_IO
  641. RET(16)
  642. }
  643. // ANDI
  644. OPCODE(0x0220)
  645. {
  646. u32 adr, res;
  647. u32 src, dst;
  648. FETCH_BYTE(src);
  649. adr = AREG((Opcode >> 0) & 7) - 1;
  650. AREG((Opcode >> 0) & 7) = adr;
  651. PRE_IO
  652. READ_BYTE_F(adr, res)
  653. res &= src;
  654. flag_C = 0;
  655. flag_V = 0;
  656. flag_NotZ = res;
  657. flag_N = res;
  658. WRITE_BYTE_F(adr, res)
  659. POST_IO
  660. RET(18)
  661. }
  662. // ANDI
  663. OPCODE(0x0228)
  664. {
  665. u32 adr, res;
  666. u32 src, dst;
  667. FETCH_BYTE(src);
  668. FETCH_SWORD(adr);
  669. adr += AREG((Opcode >> 0) & 7);
  670. PRE_IO
  671. READ_BYTE_F(adr, res)
  672. res &= src;
  673. flag_C = 0;
  674. flag_V = 0;
  675. flag_NotZ = res;
  676. flag_N = res;
  677. WRITE_BYTE_F(adr, res)
  678. POST_IO
  679. RET(20)
  680. }
  681. // ANDI
  682. OPCODE(0x0230)
  683. {
  684. u32 adr, res;
  685. u32 src, dst;
  686. FETCH_BYTE(src);
  687. adr = AREG((Opcode >> 0) & 7);
  688. DECODE_EXT_WORD
  689. PRE_IO
  690. READ_BYTE_F(adr, res)
  691. res &= src;
  692. flag_C = 0;
  693. flag_V = 0;
  694. flag_NotZ = res;
  695. flag_N = res;
  696. WRITE_BYTE_F(adr, res)
  697. POST_IO
  698. RET(22)
  699. }
  700. // ANDI
  701. OPCODE(0x0238)
  702. {
  703. u32 adr, res;
  704. u32 src, dst;
  705. FETCH_BYTE(src);
  706. FETCH_SWORD(adr);
  707. PRE_IO
  708. READ_BYTE_F(adr, res)
  709. res &= src;
  710. flag_C = 0;
  711. flag_V = 0;
  712. flag_NotZ = res;
  713. flag_N = res;
  714. WRITE_BYTE_F(adr, res)
  715. POST_IO
  716. RET(20)
  717. }
  718. // ANDI
  719. OPCODE(0x0239)
  720. {
  721. u32 adr, res;
  722. u32 src, dst;
  723. FETCH_BYTE(src);
  724. FETCH_LONG(adr);
  725. PRE_IO
  726. READ_BYTE_F(adr, res)
  727. res &= src;
  728. flag_C = 0;
  729. flag_V = 0;
  730. flag_NotZ = res;
  731. flag_N = res;
  732. WRITE_BYTE_F(adr, res)
  733. POST_IO
  734. RET(24)
  735. }
  736. // ANDI
  737. OPCODE(0x021F)
  738. {
  739. u32 adr, res;
  740. u32 src, dst;
  741. FETCH_BYTE(src);
  742. adr = AREG(7);
  743. AREG(7) += 2;
  744. PRE_IO
  745. READ_BYTE_F(adr, res)
  746. res &= src;
  747. flag_C = 0;
  748. flag_V = 0;
  749. flag_NotZ = res;
  750. flag_N = res;
  751. WRITE_BYTE_F(adr, res)
  752. POST_IO
  753. RET(16)
  754. }
  755. // ANDI
  756. OPCODE(0x0227)
  757. {
  758. u32 adr, res;
  759. u32 src, dst;
  760. FETCH_BYTE(src);
  761. adr = AREG(7) - 2;
  762. AREG(7) = adr;
  763. PRE_IO
  764. READ_BYTE_F(adr, res)
  765. res &= src;
  766. flag_C = 0;
  767. flag_V = 0;
  768. flag_NotZ = res;
  769. flag_N = res;
  770. WRITE_BYTE_F(adr, res)
  771. POST_IO
  772. RET(18)
  773. }
  774. // ANDI
  775. OPCODE(0x0240)
  776. {
  777. u32 adr, res;
  778. u32 src, dst;
  779. FETCH_WORD(src);
  780. res = DREGu16((Opcode >> 0) & 7);
  781. res &= src;
  782. flag_C = 0;
  783. flag_V = 0;
  784. flag_NotZ = res;
  785. flag_N = res >> 8;
  786. DREGu16((Opcode >> 0) & 7) = res;
  787. RET(8)
  788. }
  789. // ANDI
  790. OPCODE(0x0250)
  791. {
  792. u32 adr, res;
  793. u32 src, dst;
  794. FETCH_WORD(src);
  795. adr = AREG((Opcode >> 0) & 7);
  796. PRE_IO
  797. READ_WORD_F(adr, res)
  798. res &= src;
  799. flag_C = 0;
  800. flag_V = 0;
  801. flag_NotZ = res;
  802. flag_N = res >> 8;
  803. WRITE_WORD_F(adr, res)
  804. POST_IO
  805. RET(16)
  806. }
  807. // ANDI
  808. OPCODE(0x0258)
  809. {
  810. u32 adr, res;
  811. u32 src, dst;
  812. FETCH_WORD(src);
  813. adr = AREG((Opcode >> 0) & 7);
  814. AREG((Opcode >> 0) & 7) += 2;
  815. PRE_IO
  816. READ_WORD_F(adr, res)
  817. res &= src;
  818. flag_C = 0;
  819. flag_V = 0;
  820. flag_NotZ = res;
  821. flag_N = res >> 8;
  822. WRITE_WORD_F(adr, res)
  823. POST_IO
  824. RET(16)
  825. }
  826. // ANDI
  827. OPCODE(0x0260)
  828. {
  829. u32 adr, res;
  830. u32 src, dst;
  831. FETCH_WORD(src);
  832. adr = AREG((Opcode >> 0) & 7) - 2;
  833. AREG((Opcode >> 0) & 7) = adr;
  834. PRE_IO
  835. READ_WORD_F(adr, res)
  836. res &= src;
  837. flag_C = 0;
  838. flag_V = 0;
  839. flag_NotZ = res;
  840. flag_N = res >> 8;
  841. WRITE_WORD_F(adr, res)
  842. POST_IO
  843. RET(18)
  844. }
  845. // ANDI
  846. OPCODE(0x0268)
  847. {
  848. u32 adr, res;
  849. u32 src, dst;
  850. FETCH_WORD(src);
  851. FETCH_SWORD(adr);
  852. adr += AREG((Opcode >> 0) & 7);
  853. PRE_IO
  854. READ_WORD_F(adr, res)
  855. res &= src;
  856. flag_C = 0;
  857. flag_V = 0;
  858. flag_NotZ = res;
  859. flag_N = res >> 8;
  860. WRITE_WORD_F(adr, res)
  861. POST_IO
  862. RET(20)
  863. }
  864. // ANDI
  865. OPCODE(0x0270)
  866. {
  867. u32 adr, res;
  868. u32 src, dst;
  869. FETCH_WORD(src);
  870. adr = AREG((Opcode >> 0) & 7);
  871. DECODE_EXT_WORD
  872. PRE_IO
  873. READ_WORD_F(adr, res)
  874. res &= src;
  875. flag_C = 0;
  876. flag_V = 0;
  877. flag_NotZ = res;
  878. flag_N = res >> 8;
  879. WRITE_WORD_F(adr, res)
  880. POST_IO
  881. RET(22)
  882. }
  883. // ANDI
  884. OPCODE(0x0278)
  885. {
  886. u32 adr, res;
  887. u32 src, dst;
  888. FETCH_WORD(src);
  889. FETCH_SWORD(adr);
  890. PRE_IO
  891. READ_WORD_F(adr, res)
  892. res &= src;
  893. flag_C = 0;
  894. flag_V = 0;
  895. flag_NotZ = res;
  896. flag_N = res >> 8;
  897. WRITE_WORD_F(adr, res)
  898. POST_IO
  899. RET(20)
  900. }
  901. // ANDI
  902. OPCODE(0x0279)
  903. {
  904. u32 adr, res;
  905. u32 src, dst;
  906. FETCH_WORD(src);
  907. FETCH_LONG(adr);
  908. PRE_IO
  909. READ_WORD_F(adr, res)
  910. res &= src;
  911. flag_C = 0;
  912. flag_V = 0;
  913. flag_NotZ = res;
  914. flag_N = res >> 8;
  915. WRITE_WORD_F(adr, res)
  916. POST_IO
  917. RET(24)
  918. }
  919. // ANDI
  920. OPCODE(0x025F)
  921. {
  922. u32 adr, res;
  923. u32 src, dst;
  924. FETCH_WORD(src);
  925. adr = AREG(7);
  926. AREG(7) += 2;
  927. PRE_IO
  928. READ_WORD_F(adr, res)
  929. res &= src;
  930. flag_C = 0;
  931. flag_V = 0;
  932. flag_NotZ = res;
  933. flag_N = res >> 8;
  934. WRITE_WORD_F(adr, res)
  935. POST_IO
  936. RET(16)
  937. }
  938. // ANDI
  939. OPCODE(0x0267)
  940. {
  941. u32 adr, res;
  942. u32 src, dst;
  943. FETCH_WORD(src);
  944. adr = AREG(7) - 2;
  945. AREG(7) = adr;
  946. PRE_IO
  947. READ_WORD_F(adr, res)
  948. res &= src;
  949. flag_C = 0;
  950. flag_V = 0;
  951. flag_NotZ = res;
  952. flag_N = res >> 8;
  953. WRITE_WORD_F(adr, res)
  954. POST_IO
  955. RET(18)
  956. }
  957. // ANDI
  958. OPCODE(0x0280)
  959. {
  960. u32 adr, res;
  961. u32 src, dst;
  962. FETCH_LONG(src);
  963. res = DREGu32((Opcode >> 0) & 7);
  964. res &= src;
  965. flag_C = 0;
  966. flag_V = 0;
  967. flag_NotZ = res;
  968. flag_N = res >> 24;
  969. DREGu32((Opcode >> 0) & 7) = res;
  970. #ifdef USE_CYCLONE_TIMING
  971. RET(14)
  972. #else
  973. RET(16)
  974. #endif
  975. }
  976. // ANDI
  977. OPCODE(0x0290)
  978. {
  979. u32 adr, res;
  980. u32 src, dst;
  981. FETCH_LONG(src);
  982. adr = AREG((Opcode >> 0) & 7);
  983. PRE_IO
  984. READ_LONG_F(adr, res)
  985. res &= src;
  986. flag_C = 0;
  987. flag_V = 0;
  988. flag_NotZ = res;
  989. flag_N = res >> 24;
  990. WRITE_LONG_F(adr, res)
  991. POST_IO
  992. RET(28)
  993. }
  994. // ANDI
  995. OPCODE(0x0298)
  996. {
  997. u32 adr, res;
  998. u32 src, dst;
  999. FETCH_LONG(src);
  1000. adr = AREG((Opcode >> 0) & 7);
  1001. AREG((Opcode >> 0) & 7) += 4;
  1002. PRE_IO
  1003. READ_LONG_F(adr, res)
  1004. res &= src;
  1005. flag_C = 0;
  1006. flag_V = 0;
  1007. flag_NotZ = res;
  1008. flag_N = res >> 24;
  1009. WRITE_LONG_F(adr, res)
  1010. POST_IO
  1011. RET(28)
  1012. }
  1013. // ANDI
  1014. OPCODE(0x02A0)
  1015. {
  1016. u32 adr, res;
  1017. u32 src, dst;
  1018. FETCH_LONG(src);
  1019. adr = AREG((Opcode >> 0) & 7) - 4;
  1020. AREG((Opcode >> 0) & 7) = adr;
  1021. PRE_IO
  1022. READ_LONG_F(adr, res)
  1023. res &= src;
  1024. flag_C = 0;
  1025. flag_V = 0;
  1026. flag_NotZ = res;
  1027. flag_N = res >> 24;
  1028. WRITE_LONG_F(adr, res)
  1029. POST_IO
  1030. RET(30)
  1031. }
  1032. // ANDI
  1033. OPCODE(0x02A8)
  1034. {
  1035. u32 adr, res;
  1036. u32 src, dst;
  1037. FETCH_LONG(src);
  1038. FETCH_SWORD(adr);
  1039. adr += AREG((Opcode >> 0) & 7);
  1040. PRE_IO
  1041. READ_LONG_F(adr, res)
  1042. res &= src;
  1043. flag_C = 0;
  1044. flag_V = 0;
  1045. flag_NotZ = res;
  1046. flag_N = res >> 24;
  1047. WRITE_LONG_F(adr, res)
  1048. POST_IO
  1049. RET(32)
  1050. }
  1051. // ANDI
  1052. OPCODE(0x02B0)
  1053. {
  1054. u32 adr, res;
  1055. u32 src, dst;
  1056. FETCH_LONG(src);
  1057. adr = AREG((Opcode >> 0) & 7);
  1058. DECODE_EXT_WORD
  1059. PRE_IO
  1060. READ_LONG_F(adr, res)
  1061. res &= src;
  1062. flag_C = 0;
  1063. flag_V = 0;
  1064. flag_NotZ = res;
  1065. flag_N = res >> 24;
  1066. WRITE_LONG_F(adr, res)
  1067. POST_IO
  1068. RET(34)
  1069. }
  1070. // ANDI
  1071. OPCODE(0x02B8)
  1072. {
  1073. u32 adr, res;
  1074. u32 src, dst;
  1075. FETCH_LONG(src);
  1076. FETCH_SWORD(adr);
  1077. PRE_IO
  1078. READ_LONG_F(adr, res)
  1079. res &= src;
  1080. flag_C = 0;
  1081. flag_V = 0;
  1082. flag_NotZ = res;
  1083. flag_N = res >> 24;
  1084. WRITE_LONG_F(adr, res)
  1085. POST_IO
  1086. RET(32)
  1087. }
  1088. // ANDI
  1089. OPCODE(0x02B9)
  1090. {
  1091. u32 adr, res;
  1092. u32 src, dst;
  1093. FETCH_LONG(src);
  1094. FETCH_LONG(adr);
  1095. PRE_IO
  1096. READ_LONG_F(adr, res)
  1097. res &= src;
  1098. flag_C = 0;
  1099. flag_V = 0;
  1100. flag_NotZ = res;
  1101. flag_N = res >> 24;
  1102. WRITE_LONG_F(adr, res)
  1103. POST_IO
  1104. RET(36)
  1105. }
  1106. // ANDI
  1107. OPCODE(0x029F)
  1108. {
  1109. u32 adr, res;
  1110. u32 src, dst;
  1111. FETCH_LONG(src);
  1112. adr = AREG(7);
  1113. AREG(7) += 4;
  1114. PRE_IO
  1115. READ_LONG_F(adr, res)
  1116. res &= src;
  1117. flag_C = 0;
  1118. flag_V = 0;
  1119. flag_NotZ = res;
  1120. flag_N = res >> 24;
  1121. WRITE_LONG_F(adr, res)
  1122. POST_IO
  1123. RET(28)
  1124. }
  1125. // ANDI
  1126. OPCODE(0x02A7)
  1127. {
  1128. u32 adr, res;
  1129. u32 src, dst;
  1130. FETCH_LONG(src);
  1131. adr = AREG(7) - 4;
  1132. AREG(7) = adr;
  1133. PRE_IO
  1134. READ_LONG_F(adr, res)
  1135. res &= src;
  1136. flag_C = 0;
  1137. flag_V = 0;
  1138. flag_NotZ = res;
  1139. flag_N = res >> 24;
  1140. WRITE_LONG_F(adr, res)
  1141. POST_IO
  1142. RET(30)
  1143. }
  1144. // ANDICCR
  1145. OPCODE(0x023C)
  1146. {
  1147. u32 adr, res;
  1148. u32 src, dst;
  1149. FETCH_BYTE(res);
  1150. res &= M68K_CCR_MASK;
  1151. res &= GET_CCR;
  1152. SET_CCR(res)
  1153. RET(20)
  1154. }
  1155. // ANDISR
  1156. OPCODE(0x027C)
  1157. {
  1158. u32 adr, res;
  1159. u32 src, dst;
  1160. if (flag_S)
  1161. {
  1162. FETCH_WORD(res);
  1163. res &= M68K_SR_MASK;
  1164. res &= GET_SR;
  1165. SET_SR(res)
  1166. if (!flag_S)
  1167. {
  1168. res = AREG(7);
  1169. AREG(7) = ASP;
  1170. ASP = res;
  1171. }
  1172. CHECK_INT_TO_JUMP(20)
  1173. }
  1174. else
  1175. {
  1176. SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
  1177. RET(4)
  1178. }
  1179. RET(20)
  1180. }
  1181. // EORI
  1182. OPCODE(0x0A00)
  1183. {
  1184. u32 adr, res;
  1185. u32 src, dst;
  1186. FETCH_BYTE(src);
  1187. res = DREGu8((Opcode >> 0) & 7);
  1188. res ^= src;
  1189. flag_C = 0;
  1190. flag_V = 0;
  1191. flag_NotZ = res;
  1192. flag_N = res;
  1193. DREGu8((Opcode >> 0) & 7) = res;
  1194. RET(8)
  1195. }
  1196. // EORI
  1197. OPCODE(0x0A10)
  1198. {
  1199. u32 adr, res;
  1200. u32 src, dst;
  1201. FETCH_BYTE(src);
  1202. adr = AREG((Opcode >> 0) & 7);
  1203. PRE_IO
  1204. READ_BYTE_F(adr, res)
  1205. res ^= src;
  1206. flag_C = 0;
  1207. flag_V = 0;
  1208. flag_NotZ = res;
  1209. flag_N = res;
  1210. WRITE_BYTE_F(adr, res)
  1211. POST_IO
  1212. RET(16)
  1213. }
  1214. // EORI
  1215. OPCODE(0x0A18)
  1216. {
  1217. u32 adr, res;
  1218. u32 src, dst;
  1219. FETCH_BYTE(src);
  1220. adr = AREG((Opcode >> 0) & 7);
  1221. AREG((Opcode >> 0) & 7) += 1;
  1222. PRE_IO
  1223. READ_BYTE_F(adr, res)
  1224. res ^= src;
  1225. flag_C = 0;
  1226. flag_V = 0;
  1227. flag_NotZ = res;
  1228. flag_N = res;
  1229. WRITE_BYTE_F(adr, res)
  1230. POST_IO
  1231. RET(16)
  1232. }
  1233. // EORI
  1234. OPCODE(0x0A20)
  1235. {
  1236. u32 adr, res;
  1237. u32 src, dst;
  1238. FETCH_BYTE(src);
  1239. adr = AREG((Opcode >> 0) & 7) - 1;
  1240. AREG((Opcode >> 0) & 7) = adr;
  1241. PRE_IO
  1242. READ_BYTE_F(adr, res)
  1243. res ^= src;
  1244. flag_C = 0;
  1245. flag_V = 0;
  1246. flag_NotZ = res;
  1247. flag_N = res;
  1248. WRITE_BYTE_F(adr, res)
  1249. POST_IO
  1250. RET(18)
  1251. }
  1252. // EORI
  1253. OPCODE(0x0A28)
  1254. {
  1255. u32 adr, res;
  1256. u32 src, dst;
  1257. FETCH_BYTE(src);
  1258. FETCH_SWORD(adr);
  1259. adr += AREG((Opcode >> 0) & 7);
  1260. PRE_IO
  1261. READ_BYTE_F(adr, res)
  1262. res ^= src;
  1263. flag_C = 0;
  1264. flag_V = 0;
  1265. flag_NotZ = res;
  1266. flag_N = res;
  1267. WRITE_BYTE_F(adr, res)
  1268. POST_IO
  1269. RET(20)
  1270. }
  1271. // EORI
  1272. OPCODE(0x0A30)
  1273. {
  1274. u32 adr, res;
  1275. u32 src, dst;
  1276. FETCH_BYTE(src);
  1277. adr = AREG((Opcode >> 0) & 7);
  1278. DECODE_EXT_WORD
  1279. PRE_IO
  1280. READ_BYTE_F(adr, res)
  1281. res ^= src;
  1282. flag_C = 0;
  1283. flag_V = 0;
  1284. flag_NotZ = res;
  1285. flag_N = res;
  1286. WRITE_BYTE_F(adr, res)
  1287. POST_IO
  1288. RET(22)
  1289. }
  1290. // EORI
  1291. OPCODE(0x0A38)
  1292. {
  1293. u32 adr, res;
  1294. u32 src, dst;
  1295. FETCH_BYTE(src);
  1296. FETCH_SWORD(adr);
  1297. PRE_IO
  1298. READ_BYTE_F(adr, res)
  1299. res ^= src;
  1300. flag_C = 0;
  1301. flag_V = 0;
  1302. flag_NotZ = res;
  1303. flag_N = res;
  1304. WRITE_BYTE_F(adr, res)
  1305. POST_IO
  1306. RET(20)
  1307. }
  1308. // EORI
  1309. OPCODE(0x0A39)
  1310. {
  1311. u32 adr, res;
  1312. u32 src, dst;
  1313. FETCH_BYTE(src);
  1314. FETCH_LONG(adr);
  1315. PRE_IO
  1316. READ_BYTE_F(adr, res)
  1317. res ^= src;
  1318. flag_C = 0;
  1319. flag_V = 0;
  1320. flag_NotZ = res;
  1321. flag_N = res;
  1322. WRITE_BYTE_F(adr, res)
  1323. POST_IO
  1324. RET(24)
  1325. }
  1326. // EORI
  1327. OPCODE(0x0A1F)
  1328. {
  1329. u32 adr, res;
  1330. u32 src, dst;
  1331. FETCH_BYTE(src);
  1332. adr = AREG(7);
  1333. AREG(7) += 2;
  1334. PRE_IO
  1335. READ_BYTE_F(adr, res)
  1336. res ^= src;
  1337. flag_C = 0;
  1338. flag_V = 0;
  1339. flag_NotZ = res;
  1340. flag_N = res;
  1341. WRITE_BYTE_F(adr, res)
  1342. POST_IO
  1343. RET(16)
  1344. }
  1345. // EORI
  1346. OPCODE(0x0A27)
  1347. {
  1348. u32 adr, res;
  1349. u32 src, dst;
  1350. FETCH_BYTE(src);
  1351. adr = AREG(7) - 2;
  1352. AREG(7) = adr;
  1353. PRE_IO
  1354. READ_BYTE_F(adr, res)
  1355. res ^= src;
  1356. flag_C = 0;
  1357. flag_V = 0;
  1358. flag_NotZ = res;
  1359. flag_N = res;
  1360. WRITE_BYTE_F(adr, res)
  1361. POST_IO
  1362. RET(18)
  1363. }
  1364. // EORI
  1365. OPCODE(0x0A40)
  1366. {
  1367. u32 adr, res;
  1368. u32 src, dst;
  1369. FETCH_WORD(src);
  1370. res = DREGu16((Opcode >> 0) & 7);
  1371. res ^= src;
  1372. flag_C = 0;
  1373. flag_V = 0;
  1374. flag_NotZ = res;
  1375. flag_N = res >> 8;
  1376. DREGu16((Opcode >> 0) & 7) = res;
  1377. RET(8)
  1378. }
  1379. // EORI
  1380. OPCODE(0x0A50)
  1381. {
  1382. u32 adr, res;
  1383. u32 src, dst;
  1384. FETCH_WORD(src);
  1385. adr = AREG((Opcode >> 0) & 7);
  1386. PRE_IO
  1387. READ_WORD_F(adr, res)
  1388. res ^= src;
  1389. flag_C = 0;
  1390. flag_V = 0;
  1391. flag_NotZ = res;
  1392. flag_N = res >> 8;
  1393. WRITE_WORD_F(adr, res)
  1394. POST_IO
  1395. RET(16)
  1396. }
  1397. // EORI
  1398. OPCODE(0x0A58)
  1399. {
  1400. u32 adr, res;
  1401. u32 src, dst;
  1402. FETCH_WORD(src);
  1403. adr = AREG((Opcode >> 0) & 7);
  1404. AREG((Opcode >> 0) & 7) += 2;
  1405. PRE_IO
  1406. READ_WORD_F(adr, res)
  1407. res ^= src;
  1408. flag_C = 0;
  1409. flag_V = 0;
  1410. flag_NotZ = res;
  1411. flag_N = res >> 8;
  1412. WRITE_WORD_F(adr, res)
  1413. POST_IO
  1414. RET(16)
  1415. }
  1416. // EORI
  1417. OPCODE(0x0A60)
  1418. {
  1419. u32 adr, res;
  1420. u32 src, dst;
  1421. FETCH_WORD(src);
  1422. adr = AREG((Opcode >> 0) & 7) - 2;
  1423. AREG((Opcode >> 0) & 7) = adr;
  1424. PRE_IO
  1425. READ_WORD_F(adr, res)
  1426. res ^= src;
  1427. flag_C = 0;
  1428. flag_V = 0;
  1429. flag_NotZ = res;
  1430. flag_N = res >> 8;
  1431. WRITE_WORD_F(adr, res)
  1432. POST_IO
  1433. RET(18)
  1434. }
  1435. // EORI
  1436. OPCODE(0x0A68)
  1437. {
  1438. u32 adr, res;
  1439. u32 src, dst;
  1440. FETCH_WORD(src);
  1441. FETCH_SWORD(adr);
  1442. adr += AREG((Opcode >> 0) & 7);
  1443. PRE_IO
  1444. READ_WORD_F(adr, res)
  1445. res ^= src;
  1446. flag_C = 0;
  1447. flag_V = 0;
  1448. flag_NotZ = res;
  1449. flag_N = res >> 8;
  1450. WRITE_WORD_F(adr, res)
  1451. POST_IO
  1452. RET(20)
  1453. }
  1454. // EORI
  1455. OPCODE(0x0A70)
  1456. {
  1457. u32 adr, res;
  1458. u32 src, dst;
  1459. FETCH_WORD(src);
  1460. adr = AREG((Opcode >> 0) & 7);
  1461. DECODE_EXT_WORD
  1462. PRE_IO
  1463. READ_WORD_F(adr, res)
  1464. res ^= src;
  1465. flag_C = 0;
  1466. flag_V = 0;
  1467. flag_NotZ = res;
  1468. flag_N = res >> 8;
  1469. WRITE_WORD_F(adr, res)
  1470. POST_IO
  1471. RET(22)
  1472. }
  1473. // EORI
  1474. OPCODE(0x0A78)
  1475. {
  1476. u32 adr, res;
  1477. u32 src, dst;
  1478. FETCH_WORD(src);
  1479. FETCH_SWORD(adr);
  1480. PRE_IO
  1481. READ_WORD_F(adr, res)
  1482. res ^= src;
  1483. flag_C = 0;
  1484. flag_V = 0;
  1485. flag_NotZ = res;
  1486. flag_N = res >> 8;
  1487. WRITE_WORD_F(adr, res)
  1488. POST_IO
  1489. RET(20)
  1490. }
  1491. // EORI
  1492. OPCODE(0x0A79)
  1493. {
  1494. u32 adr, res;
  1495. u32 src, dst;
  1496. FETCH_WORD(src);
  1497. FETCH_LONG(adr);
  1498. PRE_IO
  1499. READ_WORD_F(adr, res)
  1500. res ^= src;
  1501. flag_C = 0;
  1502. flag_V = 0;
  1503. flag_NotZ = res;
  1504. flag_N = res >> 8;
  1505. WRITE_WORD_F(adr, res)
  1506. POST_IO
  1507. RET(24)
  1508. }
  1509. // EORI
  1510. OPCODE(0x0A5F)
  1511. {
  1512. u32 adr, res;
  1513. u32 src, dst;
  1514. FETCH_WORD(src);
  1515. adr = AREG(7);
  1516. AREG(7) += 2;
  1517. PRE_IO
  1518. READ_WORD_F(adr, res)
  1519. res ^= src;
  1520. flag_C = 0;
  1521. flag_V = 0;
  1522. flag_NotZ = res;
  1523. flag_N = res >> 8;
  1524. WRITE_WORD_F(adr, res)
  1525. POST_IO
  1526. RET(16)
  1527. }
  1528. // EORI
  1529. OPCODE(0x0A67)
  1530. {
  1531. u32 adr, res;
  1532. u32 src, dst;
  1533. FETCH_WORD(src);
  1534. adr = AREG(7) - 2;
  1535. AREG(7) = adr;
  1536. PRE_IO
  1537. READ_WORD_F(adr, res)
  1538. res ^= src;
  1539. flag_C = 0;
  1540. flag_V = 0;
  1541. flag_NotZ = res;
  1542. flag_N = res >> 8;
  1543. WRITE_WORD_F(adr, res)
  1544. POST_IO
  1545. RET(18)
  1546. }
  1547. // EORI
  1548. OPCODE(0x0A80)
  1549. {
  1550. u32 adr, res;
  1551. u32 src, dst;
  1552. FETCH_LONG(src);
  1553. res = DREGu32((Opcode >> 0) & 7);
  1554. res ^= src;
  1555. flag_C = 0;
  1556. flag_V = 0;
  1557. flag_NotZ = res;
  1558. flag_N = res >> 24;
  1559. DREGu32((Opcode >> 0) & 7) = res;
  1560. RET(16)
  1561. }
  1562. // EORI
  1563. OPCODE(0x0A90)
  1564. {
  1565. u32 adr, res;
  1566. u32 src, dst;
  1567. FETCH_LONG(src);
  1568. adr = AREG((Opcode >> 0) & 7);
  1569. PRE_IO
  1570. READ_LONG_F(adr, res)
  1571. res ^= src;
  1572. flag_C = 0;
  1573. flag_V = 0;
  1574. flag_NotZ = res;
  1575. flag_N = res >> 24;
  1576. WRITE_LONG_F(adr, res)
  1577. POST_IO
  1578. RET(28)
  1579. }
  1580. // EORI
  1581. OPCODE(0x0A98)
  1582. {
  1583. u32 adr, res;
  1584. u32 src, dst;
  1585. FETCH_LONG(src);
  1586. adr = AREG((Opcode >> 0) & 7);
  1587. AREG((Opcode >> 0) & 7) += 4;
  1588. PRE_IO
  1589. READ_LONG_F(adr, res)
  1590. res ^= src;
  1591. flag_C = 0;
  1592. flag_V = 0;
  1593. flag_NotZ = res;
  1594. flag_N = res >> 24;
  1595. WRITE_LONG_F(adr, res)
  1596. POST_IO
  1597. RET(28)
  1598. }
  1599. // EORI
  1600. OPCODE(0x0AA0)
  1601. {
  1602. u32 adr, res;
  1603. u32 src, dst;
  1604. FETCH_LONG(src);
  1605. adr = AREG((Opcode >> 0) & 7) - 4;
  1606. AREG((Opcode >> 0) & 7) = adr;
  1607. PRE_IO
  1608. READ_LONG_F(adr, res)
  1609. res ^= src;
  1610. flag_C = 0;
  1611. flag_V = 0;
  1612. flag_NotZ = res;
  1613. flag_N = res >> 24;
  1614. WRITE_LONG_F(adr, res)
  1615. POST_IO
  1616. RET(30)
  1617. }
  1618. // EORI
  1619. OPCODE(0x0AA8)
  1620. {
  1621. u32 adr, res;
  1622. u32 src, dst;
  1623. FETCH_LONG(src);
  1624. FETCH_SWORD(adr);
  1625. adr += AREG((Opcode >> 0) & 7);
  1626. PRE_IO
  1627. READ_LONG_F(adr, res)
  1628. res ^= src;
  1629. flag_C = 0;
  1630. flag_V = 0;
  1631. flag_NotZ = res;
  1632. flag_N = res >> 24;
  1633. WRITE_LONG_F(adr, res)
  1634. POST_IO
  1635. RET(32)
  1636. }
  1637. // EORI
  1638. OPCODE(0x0AB0)
  1639. {
  1640. u32 adr, res;
  1641. u32 src, dst;
  1642. FETCH_LONG(src);
  1643. adr = AREG((Opcode >> 0) & 7);
  1644. DECODE_EXT_WORD
  1645. PRE_IO
  1646. READ_LONG_F(adr, res)
  1647. res ^= src;
  1648. flag_C = 0;
  1649. flag_V = 0;
  1650. flag_NotZ = res;
  1651. flag_N = res >> 24;
  1652. WRITE_LONG_F(adr, res)
  1653. POST_IO
  1654. RET(34)
  1655. }
  1656. // EORI
  1657. OPCODE(0x0AB8)
  1658. {
  1659. u32 adr, res;
  1660. u32 src, dst;
  1661. FETCH_LONG(src);
  1662. FETCH_SWORD(adr);
  1663. PRE_IO
  1664. READ_LONG_F(adr, res)
  1665. res ^= src;
  1666. flag_C = 0;
  1667. flag_V = 0;
  1668. flag_NotZ = res;
  1669. flag_N = res >> 24;
  1670. WRITE_LONG_F(adr, res)
  1671. POST_IO
  1672. RET(32)
  1673. }
  1674. // EORI
  1675. OPCODE(0x0AB9)
  1676. {
  1677. u32 adr, res;
  1678. u32 src, dst;
  1679. FETCH_LONG(src);
  1680. FETCH_LONG(adr);
  1681. PRE_IO
  1682. READ_LONG_F(adr, res)
  1683. res ^= src;
  1684. flag_C = 0;
  1685. flag_V = 0;
  1686. flag_NotZ = res;
  1687. flag_N = res >> 24;
  1688. WRITE_LONG_F(adr, res)
  1689. POST_IO
  1690. RET(36)
  1691. }
  1692. // EORI
  1693. OPCODE(0x0A9F)
  1694. {
  1695. u32 adr, res;
  1696. u32 src, dst;
  1697. FETCH_LONG(src);
  1698. adr = AREG(7);
  1699. AREG(7) += 4;
  1700. PRE_IO
  1701. READ_LONG_F(adr, res)
  1702. res ^= src;
  1703. flag_C = 0;
  1704. flag_V = 0;
  1705. flag_NotZ = res;
  1706. flag_N = res >> 24;
  1707. WRITE_LONG_F(adr, res)
  1708. POST_IO
  1709. RET(28)
  1710. }
  1711. // EORI
  1712. OPCODE(0x0AA7)
  1713. {
  1714. u32 adr, res;
  1715. u32 src, dst;
  1716. FETCH_LONG(src);
  1717. adr = AREG(7) - 4;
  1718. AREG(7) = adr;
  1719. PRE_IO
  1720. READ_LONG_F(adr, res)
  1721. res ^= src;
  1722. flag_C = 0;
  1723. flag_V = 0;
  1724. flag_NotZ = res;
  1725. flag_N = res >> 24;
  1726. WRITE_LONG_F(adr, res)
  1727. POST_IO
  1728. RET(30)
  1729. }
  1730. // EORICCR
  1731. OPCODE(0x0A3C)
  1732. {
  1733. u32 adr, res;
  1734. u32 src, dst;
  1735. FETCH_BYTE(res);
  1736. res &= M68K_CCR_MASK;
  1737. res ^= GET_CCR;
  1738. SET_CCR(res)
  1739. RET(20)
  1740. }
  1741. // EORISR
  1742. OPCODE(0x0A7C)
  1743. {
  1744. u32 adr, res;
  1745. u32 src, dst;
  1746. if (flag_S)
  1747. {
  1748. FETCH_WORD(res);
  1749. res &= M68K_SR_MASK;
  1750. res ^= GET_SR;
  1751. SET_SR(res)
  1752. if (!flag_S)
  1753. {
  1754. res = AREG(7);
  1755. AREG(7) = ASP;
  1756. ASP = res;
  1757. }
  1758. CHECK_INT_TO_JUMP(20)
  1759. }
  1760. else
  1761. {
  1762. SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
  1763. RET(0)
  1764. }
  1765. RET(20)
  1766. }
  1767. // SUBI
  1768. OPCODE(0x0400)
  1769. {
  1770. u32 adr, res;
  1771. u32 src, dst;
  1772. FETCH_BYTE(src);
  1773. dst = DREGu8((Opcode >> 0) & 7);
  1774. res = dst - src;
  1775. flag_N = flag_X = flag_C = res;
  1776. flag_V = (src ^ dst) & (res ^ dst);
  1777. flag_NotZ = res & 0xFF;
  1778. DREGu8((Opcode >> 0) & 7) = res;
  1779. RET(8)
  1780. }
  1781. // SUBI
  1782. OPCODE(0x0410)
  1783. {
  1784. u32 adr, res;
  1785. u32 src, dst;
  1786. FETCH_BYTE(src);
  1787. adr = AREG((Opcode >> 0) & 7);
  1788. PRE_IO
  1789. READ_BYTE_F(adr, dst)
  1790. res = dst - src;
  1791. flag_N = flag_X = flag_C = res;
  1792. flag_V = (src ^ dst) & (res ^ dst);
  1793. flag_NotZ = res & 0xFF;
  1794. WRITE_BYTE_F(adr, res)
  1795. POST_IO
  1796. RET(16)
  1797. }
  1798. // SUBI
  1799. OPCODE(0x0418)
  1800. {
  1801. u32 adr, res;
  1802. u32 src, dst;
  1803. FETCH_BYTE(src);
  1804. adr = AREG((Opcode >> 0) & 7);
  1805. AREG((Opcode >> 0) & 7) += 1;
  1806. PRE_IO
  1807. READ_BYTE_F(adr, dst)
  1808. res = dst - src;
  1809. flag_N = flag_X = flag_C = res;
  1810. flag_V = (src ^ dst) & (res ^ dst);
  1811. flag_NotZ = res & 0xFF;
  1812. WRITE_BYTE_F(adr, res)
  1813. POST_IO
  1814. RET(16)
  1815. }
  1816. // SUBI
  1817. OPCODE(0x0420)
  1818. {
  1819. u32 adr, res;
  1820. u32 src, dst;
  1821. FETCH_BYTE(src);
  1822. adr = AREG((Opcode >> 0) & 7) - 1;
  1823. AREG((Opcode >> 0) & 7) = adr;
  1824. PRE_IO
  1825. READ_BYTE_F(adr, dst)
  1826. res = dst - src;
  1827. flag_N = flag_X = flag_C = res;
  1828. flag_V = (src ^ dst) & (res ^ dst);
  1829. flag_NotZ = res & 0xFF;
  1830. WRITE_BYTE_F(adr, res)
  1831. POST_IO
  1832. RET(18)
  1833. }
  1834. // SUBI
  1835. OPCODE(0x0428)
  1836. {
  1837. u32 adr, res;
  1838. u32 src, dst;
  1839. FETCH_BYTE(src);
  1840. FETCH_SWORD(adr);
  1841. adr += AREG((Opcode >> 0) & 7);
  1842. PRE_IO
  1843. READ_BYTE_F(adr, dst)
  1844. res = dst - src;
  1845. flag_N = flag_X = flag_C = res;
  1846. flag_V = (src ^ dst) & (res ^ dst);
  1847. flag_NotZ = res & 0xFF;
  1848. WRITE_BYTE_F(adr, res)
  1849. POST_IO
  1850. RET(20)
  1851. }
  1852. // SUBI
  1853. OPCODE(0x0430)
  1854. {
  1855. u32 adr, res;
  1856. u32 src, dst;
  1857. FETCH_BYTE(src);
  1858. adr = AREG((Opcode >> 0) & 7);
  1859. DECODE_EXT_WORD
  1860. PRE_IO
  1861. READ_BYTE_F(adr, dst)
  1862. res = dst - src;
  1863. flag_N = flag_X = flag_C = res;
  1864. flag_V = (src ^ dst) & (res ^ dst);
  1865. flag_NotZ = res & 0xFF;
  1866. WRITE_BYTE_F(adr, res)
  1867. POST_IO
  1868. RET(22)
  1869. }
  1870. // SUBI
  1871. OPCODE(0x0438)
  1872. {
  1873. u32 adr, res;
  1874. u32 src, dst;
  1875. FETCH_BYTE(src);
  1876. FETCH_SWORD(adr);
  1877. PRE_IO
  1878. READ_BYTE_F(adr, dst)
  1879. res = dst - src;
  1880. flag_N = flag_X = flag_C = res;
  1881. flag_V = (src ^ dst) & (res ^ dst);
  1882. flag_NotZ = res & 0xFF;
  1883. WRITE_BYTE_F(adr, res)
  1884. POST_IO
  1885. RET(20)
  1886. }
  1887. // SUBI
  1888. OPCODE(0x0439)
  1889. {
  1890. u32 adr, res;
  1891. u32 src, dst;
  1892. FETCH_BYTE(src);
  1893. FETCH_LONG(adr);
  1894. PRE_IO
  1895. READ_BYTE_F(adr, dst)
  1896. res = dst - src;
  1897. flag_N = flag_X = flag_C = res;
  1898. flag_V = (src ^ dst) & (res ^ dst);
  1899. flag_NotZ = res & 0xFF;
  1900. WRITE_BYTE_F(adr, res)
  1901. POST_IO
  1902. RET(24)
  1903. }
  1904. // SUBI
  1905. OPCODE(0x041F)
  1906. {
  1907. u32 adr, res;
  1908. u32 src, dst;
  1909. FETCH_BYTE(src);
  1910. adr = AREG(7);
  1911. AREG(7) += 2;
  1912. PRE_IO
  1913. READ_BYTE_F(adr, dst)
  1914. res = dst - src;
  1915. flag_N = flag_X = flag_C = res;
  1916. flag_V = (src ^ dst) & (res ^ dst);
  1917. flag_NotZ = res & 0xFF;
  1918. WRITE_BYTE_F(adr, res)
  1919. POST_IO
  1920. RET(16)
  1921. }
  1922. // SUBI
  1923. OPCODE(0x0427)
  1924. {
  1925. u32 adr, res;
  1926. u32 src, dst;
  1927. FETCH_BYTE(src);
  1928. adr = AREG(7) - 2;
  1929. AREG(7) = adr;
  1930. PRE_IO
  1931. READ_BYTE_F(adr, dst)
  1932. res = dst - src;
  1933. flag_N = flag_X = flag_C = res;
  1934. flag_V = (src ^ dst) & (res ^ dst);
  1935. flag_NotZ = res & 0xFF;
  1936. WRITE_BYTE_F(adr, res)
  1937. POST_IO
  1938. RET(18)
  1939. }
  1940. // SUBI
  1941. OPCODE(0x0440)
  1942. {
  1943. u32 adr, res;
  1944. u32 src, dst;
  1945. FETCH_WORD(src);
  1946. dst = DREGu16((Opcode >> 0) & 7);
  1947. res = dst - src;
  1948. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  1949. flag_N = flag_X = flag_C = res >> 8;
  1950. flag_NotZ = res & 0xFFFF;
  1951. DREGu16((Opcode >> 0) & 7) = res;
  1952. RET(8)
  1953. }
  1954. // SUBI
  1955. OPCODE(0x0450)
  1956. {
  1957. u32 adr, res;
  1958. u32 src, dst;
  1959. FETCH_WORD(src);
  1960. adr = AREG((Opcode >> 0) & 7);
  1961. PRE_IO
  1962. READ_WORD_F(adr, dst)
  1963. res = dst - src;
  1964. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  1965. flag_N = flag_X = flag_C = res >> 8;
  1966. flag_NotZ = res & 0xFFFF;
  1967. WRITE_WORD_F(adr, res)
  1968. POST_IO
  1969. RET(16)
  1970. }
  1971. // SUBI
  1972. OPCODE(0x0458)
  1973. {
  1974. u32 adr, res;
  1975. u32 src, dst;
  1976. FETCH_WORD(src);
  1977. adr = AREG((Opcode >> 0) & 7);
  1978. AREG((Opcode >> 0) & 7) += 2;
  1979. PRE_IO
  1980. READ_WORD_F(adr, dst)
  1981. res = dst - src;
  1982. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  1983. flag_N = flag_X = flag_C = res >> 8;
  1984. flag_NotZ = res & 0xFFFF;
  1985. WRITE_WORD_F(adr, res)
  1986. POST_IO
  1987. RET(16)
  1988. }
  1989. // SUBI
  1990. OPCODE(0x0460)
  1991. {
  1992. u32 adr, res;
  1993. u32 src, dst;
  1994. FETCH_WORD(src);
  1995. adr = AREG((Opcode >> 0) & 7) - 2;
  1996. AREG((Opcode >> 0) & 7) = adr;
  1997. PRE_IO
  1998. READ_WORD_F(adr, dst)
  1999. res = dst - src;
  2000. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  2001. flag_N = flag_X = flag_C = res >> 8;
  2002. flag_NotZ = res & 0xFFFF;
  2003. WRITE_WORD_F(adr, res)
  2004. POST_IO
  2005. RET(18)
  2006. }
  2007. // SUBI
  2008. OPCODE(0x0468)
  2009. {
  2010. u32 adr, res;
  2011. u32 src, dst;
  2012. FETCH_WORD(src);
  2013. FETCH_SWORD(adr);
  2014. adr += AREG((Opcode >> 0) & 7);
  2015. PRE_IO
  2016. READ_WORD_F(adr, dst)
  2017. res = dst - src;
  2018. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  2019. flag_N = flag_X = flag_C = res >> 8;
  2020. flag_NotZ = res & 0xFFFF;
  2021. WRITE_WORD_F(adr, res)
  2022. POST_IO
  2023. RET(20)
  2024. }
  2025. // SUBI
  2026. OPCODE(0x0470)
  2027. {
  2028. u32 adr, res;
  2029. u32 src, dst;
  2030. FETCH_WORD(src);
  2031. adr = AREG((Opcode >> 0) & 7);
  2032. DECODE_EXT_WORD
  2033. PRE_IO
  2034. READ_WORD_F(adr, dst)
  2035. res = dst - src;
  2036. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  2037. flag_N = flag_X = flag_C = res >> 8;
  2038. flag_NotZ = res & 0xFFFF;
  2039. WRITE_WORD_F(adr, res)
  2040. POST_IO
  2041. RET(22)
  2042. }
  2043. // SUBI
  2044. OPCODE(0x0478)
  2045. {
  2046. u32 adr, res;
  2047. u32 src, dst;
  2048. FETCH_WORD(src);
  2049. FETCH_SWORD(adr);
  2050. PRE_IO
  2051. READ_WORD_F(adr, dst)
  2052. res = dst - src;
  2053. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  2054. flag_N = flag_X = flag_C = res >> 8;
  2055. flag_NotZ = res & 0xFFFF;
  2056. WRITE_WORD_F(adr, res)
  2057. POST_IO
  2058. RET(20)
  2059. }
  2060. // SUBI
  2061. OPCODE(0x0479)
  2062. {
  2063. u32 adr, res;
  2064. u32 src, dst;
  2065. FETCH_WORD(src);
  2066. FETCH_LONG(adr);
  2067. PRE_IO
  2068. READ_WORD_F(adr, dst)
  2069. res = dst - src;
  2070. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  2071. flag_N = flag_X = flag_C = res >> 8;
  2072. flag_NotZ = res & 0xFFFF;
  2073. WRITE_WORD_F(adr, res)
  2074. POST_IO
  2075. RET(24)
  2076. }
  2077. // SUBI
  2078. OPCODE(0x045F)
  2079. {
  2080. u32 adr, res;
  2081. u32 src, dst;
  2082. FETCH_WORD(src);
  2083. adr = AREG(7);
  2084. AREG(7) += 2;
  2085. PRE_IO
  2086. READ_WORD_F(adr, dst)
  2087. res = dst - src;
  2088. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  2089. flag_N = flag_X = flag_C = res >> 8;
  2090. flag_NotZ = res & 0xFFFF;
  2091. WRITE_WORD_F(adr, res)
  2092. POST_IO
  2093. RET(16)
  2094. }
  2095. // SUBI
  2096. OPCODE(0x0467)
  2097. {
  2098. u32 adr, res;
  2099. u32 src, dst;
  2100. FETCH_WORD(src);
  2101. adr = AREG(7) - 2;
  2102. AREG(7) = adr;
  2103. PRE_IO
  2104. READ_WORD_F(adr, dst)
  2105. res = dst - src;
  2106. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  2107. flag_N = flag_X = flag_C = res >> 8;
  2108. flag_NotZ = res & 0xFFFF;
  2109. WRITE_WORD_F(adr, res)
  2110. POST_IO
  2111. RET(18)
  2112. }
  2113. // SUBI
  2114. OPCODE(0x0480)
  2115. {
  2116. u32 adr, res;
  2117. u32 src, dst;
  2118. FETCH_LONG(src);
  2119. dst = DREGu32((Opcode >> 0) & 7);
  2120. res = dst - src;
  2121. flag_NotZ = res;
  2122. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  2123. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  2124. flag_N = res >> 24;
  2125. DREGu32((Opcode >> 0) & 7) = res;
  2126. RET(16)
  2127. }
  2128. // SUBI
  2129. OPCODE(0x0490)
  2130. {
  2131. u32 adr, res;
  2132. u32 src, dst;
  2133. FETCH_LONG(src);
  2134. adr = AREG((Opcode >> 0) & 7);
  2135. PRE_IO
  2136. READ_LONG_F(adr, dst)
  2137. res = dst - src;
  2138. flag_NotZ = res;
  2139. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  2140. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  2141. flag_N = res >> 24;
  2142. WRITE_LONG_F(adr, res)
  2143. POST_IO
  2144. RET(28)
  2145. }
  2146. // SUBI
  2147. OPCODE(0x0498)
  2148. {
  2149. u32 adr, res;
  2150. u32 src, dst;
  2151. FETCH_LONG(src);
  2152. adr = AREG((Opcode >> 0) & 7);
  2153. AREG((Opcode >> 0) & 7) += 4;
  2154. PRE_IO
  2155. READ_LONG_F(adr, dst)
  2156. res = dst - src;
  2157. flag_NotZ = res;
  2158. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  2159. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  2160. flag_N = res >> 24;
  2161. WRITE_LONG_F(adr, res)
  2162. POST_IO
  2163. RET(28)
  2164. }
  2165. // SUBI
  2166. OPCODE(0x04A0)
  2167. {
  2168. u32 adr, res;
  2169. u32 src, dst;
  2170. FETCH_LONG(src);
  2171. adr = AREG((Opcode >> 0) & 7) - 4;
  2172. AREG((Opcode >> 0) & 7) = adr;
  2173. PRE_IO
  2174. READ_LONG_F(adr, dst)
  2175. res = dst - src;
  2176. flag_NotZ = res;
  2177. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  2178. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  2179. flag_N = res >> 24;
  2180. WRITE_LONG_F(adr, res)
  2181. POST_IO
  2182. RET(30)
  2183. }
  2184. // SUBI
  2185. OPCODE(0x04A8)
  2186. {
  2187. u32 adr, res;
  2188. u32 src, dst;
  2189. FETCH_LONG(src);
  2190. FETCH_SWORD(adr);
  2191. adr += AREG((Opcode >> 0) & 7);
  2192. PRE_IO
  2193. READ_LONG_F(adr, dst)
  2194. res = dst - src;
  2195. flag_NotZ = res;
  2196. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  2197. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  2198. flag_N = res >> 24;
  2199. WRITE_LONG_F(adr, res)
  2200. POST_IO
  2201. RET(32)
  2202. }
  2203. // SUBI
  2204. OPCODE(0x04B0)
  2205. {
  2206. u32 adr, res;
  2207. u32 src, dst;
  2208. FETCH_LONG(src);
  2209. adr = AREG((Opcode >> 0) & 7);
  2210. DECODE_EXT_WORD
  2211. PRE_IO
  2212. READ_LONG_F(adr, dst)
  2213. res = dst - src;
  2214. flag_NotZ = res;
  2215. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  2216. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  2217. flag_N = res >> 24;
  2218. WRITE_LONG_F(adr, res)
  2219. POST_IO
  2220. RET(34)
  2221. }
  2222. // SUBI
  2223. OPCODE(0x04B8)
  2224. {
  2225. u32 adr, res;
  2226. u32 src, dst;
  2227. FETCH_LONG(src);
  2228. FETCH_SWORD(adr);
  2229. PRE_IO
  2230. READ_LONG_F(adr, dst)
  2231. res = dst - src;
  2232. flag_NotZ = res;
  2233. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  2234. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  2235. flag_N = res >> 24;
  2236. WRITE_LONG_F(adr, res)
  2237. POST_IO
  2238. RET(32)
  2239. }
  2240. // SUBI
  2241. OPCODE(0x04B9)
  2242. {
  2243. u32 adr, res;
  2244. u32 src, dst;
  2245. FETCH_LONG(src);
  2246. FETCH_LONG(adr);
  2247. PRE_IO
  2248. READ_LONG_F(adr, dst)
  2249. res = dst - src;
  2250. flag_NotZ = res;
  2251. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  2252. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  2253. flag_N = res >> 24;
  2254. WRITE_LONG_F(adr, res)
  2255. POST_IO
  2256. RET(36)
  2257. }
  2258. // SUBI
  2259. OPCODE(0x049F)
  2260. {
  2261. u32 adr, res;
  2262. u32 src, dst;
  2263. FETCH_LONG(src);
  2264. adr = AREG(7);
  2265. AREG(7) += 4;
  2266. PRE_IO
  2267. READ_LONG_F(adr, dst)
  2268. res = dst - src;
  2269. flag_NotZ = res;
  2270. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  2271. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  2272. flag_N = res >> 24;
  2273. WRITE_LONG_F(adr, res)
  2274. POST_IO
  2275. RET(28)
  2276. }
  2277. // SUBI
  2278. OPCODE(0x04A7)
  2279. {
  2280. u32 adr, res;
  2281. u32 src, dst;
  2282. FETCH_LONG(src);
  2283. adr = AREG(7) - 4;
  2284. AREG(7) = adr;
  2285. PRE_IO
  2286. READ_LONG_F(adr, dst)
  2287. res = dst - src;
  2288. flag_NotZ = res;
  2289. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  2290. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  2291. flag_N = res >> 24;
  2292. WRITE_LONG_F(adr, res)
  2293. POST_IO
  2294. RET(30)
  2295. }
  2296. // ADDI
  2297. OPCODE(0x0600)
  2298. {
  2299. u32 adr, res;
  2300. u32 src, dst;
  2301. FETCH_BYTE(src);
  2302. dst = DREGu8((Opcode >> 0) & 7);
  2303. res = dst + src;
  2304. flag_N = flag_X = flag_C = res;
  2305. flag_V = (src ^ res) & (dst ^ res);
  2306. flag_NotZ = res & 0xFF;
  2307. DREGu8((Opcode >> 0) & 7) = res;
  2308. RET(8)
  2309. }
  2310. // ADDI
  2311. OPCODE(0x0610)
  2312. {
  2313. u32 adr, res;
  2314. u32 src, dst;
  2315. FETCH_BYTE(src);
  2316. adr = AREG((Opcode >> 0) & 7);
  2317. PRE_IO
  2318. READ_BYTE_F(adr, dst)
  2319. res = dst + src;
  2320. flag_N = flag_X = flag_C = res;
  2321. flag_V = (src ^ res) & (dst ^ res);
  2322. flag_NotZ = res & 0xFF;
  2323. WRITE_BYTE_F(adr, res)
  2324. POST_IO
  2325. RET(16)
  2326. }
  2327. // ADDI
  2328. OPCODE(0x0618)
  2329. {
  2330. u32 adr, res;
  2331. u32 src, dst;
  2332. FETCH_BYTE(src);
  2333. adr = AREG((Opcode >> 0) & 7);
  2334. AREG((Opcode >> 0) & 7) += 1;
  2335. PRE_IO
  2336. READ_BYTE_F(adr, dst)
  2337. res = dst + src;
  2338. flag_N = flag_X = flag_C = res;
  2339. flag_V = (src ^ res) & (dst ^ res);
  2340. flag_NotZ = res & 0xFF;
  2341. WRITE_BYTE_F(adr, res)
  2342. POST_IO
  2343. RET(16)
  2344. }
  2345. // ADDI
  2346. OPCODE(0x0620)
  2347. {
  2348. u32 adr, res;
  2349. u32 src, dst;
  2350. FETCH_BYTE(src);
  2351. adr = AREG((Opcode >> 0) & 7) - 1;
  2352. AREG((Opcode >> 0) & 7) = adr;
  2353. PRE_IO
  2354. READ_BYTE_F(adr, dst)
  2355. res = dst + src;
  2356. flag_N = flag_X = flag_C = res;
  2357. flag_V = (src ^ res) & (dst ^ res);
  2358. flag_NotZ = res & 0xFF;
  2359. WRITE_BYTE_F(adr, res)
  2360. POST_IO
  2361. RET(18)
  2362. }
  2363. // ADDI
  2364. OPCODE(0x0628)
  2365. {
  2366. u32 adr, res;
  2367. u32 src, dst;
  2368. FETCH_BYTE(src);
  2369. FETCH_SWORD(adr);
  2370. adr += AREG((Opcode >> 0) & 7);
  2371. PRE_IO
  2372. READ_BYTE_F(adr, dst)
  2373. res = dst + src;
  2374. flag_N = flag_X = flag_C = res;
  2375. flag_V = (src ^ res) & (dst ^ res);
  2376. flag_NotZ = res & 0xFF;
  2377. WRITE_BYTE_F(adr, res)
  2378. POST_IO
  2379. RET(20)
  2380. }
  2381. // ADDI
  2382. OPCODE(0x0630)
  2383. {
  2384. u32 adr, res;
  2385. u32 src, dst;
  2386. FETCH_BYTE(src);
  2387. adr = AREG((Opcode >> 0) & 7);
  2388. DECODE_EXT_WORD
  2389. PRE_IO
  2390. READ_BYTE_F(adr, dst)
  2391. res = dst + src;
  2392. flag_N = flag_X = flag_C = res;
  2393. flag_V = (src ^ res) & (dst ^ res);
  2394. flag_NotZ = res & 0xFF;
  2395. WRITE_BYTE_F(adr, res)
  2396. POST_IO
  2397. RET(22)
  2398. }
  2399. // ADDI
  2400. OPCODE(0x0638)
  2401. {
  2402. u32 adr, res;
  2403. u32 src, dst;
  2404. FETCH_BYTE(src);
  2405. FETCH_SWORD(adr);
  2406. PRE_IO
  2407. READ_BYTE_F(adr, dst)
  2408. res = dst + src;
  2409. flag_N = flag_X = flag_C = res;
  2410. flag_V = (src ^ res) & (dst ^ res);
  2411. flag_NotZ = res & 0xFF;
  2412. WRITE_BYTE_F(adr, res)
  2413. POST_IO
  2414. RET(20)
  2415. }
  2416. // ADDI
  2417. OPCODE(0x0639)
  2418. {
  2419. u32 adr, res;
  2420. u32 src, dst;
  2421. FETCH_BYTE(src);
  2422. FETCH_LONG(adr);
  2423. PRE_IO
  2424. READ_BYTE_F(adr, dst)
  2425. res = dst + src;
  2426. flag_N = flag_X = flag_C = res;
  2427. flag_V = (src ^ res) & (dst ^ res);
  2428. flag_NotZ = res & 0xFF;
  2429. WRITE_BYTE_F(adr, res)
  2430. POST_IO
  2431. RET(24)
  2432. }
  2433. // ADDI
  2434. OPCODE(0x061F)
  2435. {
  2436. u32 adr, res;
  2437. u32 src, dst;
  2438. FETCH_BYTE(src);
  2439. adr = AREG(7);
  2440. AREG(7) += 2;
  2441. PRE_IO
  2442. READ_BYTE_F(adr, dst)
  2443. res = dst + src;
  2444. flag_N = flag_X = flag_C = res;
  2445. flag_V = (src ^ res) & (dst ^ res);
  2446. flag_NotZ = res & 0xFF;
  2447. WRITE_BYTE_F(adr, res)
  2448. POST_IO
  2449. RET(16)
  2450. }
  2451. // ADDI
  2452. OPCODE(0x0627)
  2453. {
  2454. u32 adr, res;
  2455. u32 src, dst;
  2456. FETCH_BYTE(src);
  2457. adr = AREG(7) - 2;
  2458. AREG(7) = adr;
  2459. PRE_IO
  2460. READ_BYTE_F(adr, dst)
  2461. res = dst + src;
  2462. flag_N = flag_X = flag_C = res;
  2463. flag_V = (src ^ res) & (dst ^ res);
  2464. flag_NotZ = res & 0xFF;
  2465. WRITE_BYTE_F(adr, res)
  2466. POST_IO
  2467. RET(18)
  2468. }
  2469. // ADDI
  2470. OPCODE(0x0640)
  2471. {
  2472. u32 adr, res;
  2473. u32 src, dst;
  2474. FETCH_WORD(src);
  2475. dst = DREGu16((Opcode >> 0) & 7);
  2476. res = dst + src;
  2477. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  2478. flag_N = flag_X = flag_C = res >> 8;
  2479. flag_NotZ = res & 0xFFFF;
  2480. DREGu16((Opcode >> 0) & 7) = res;
  2481. RET(8)
  2482. }
  2483. // ADDI
  2484. OPCODE(0x0650)
  2485. {
  2486. u32 adr, res;
  2487. u32 src, dst;
  2488. FETCH_WORD(src);
  2489. adr = AREG((Opcode >> 0) & 7);
  2490. PRE_IO
  2491. READ_WORD_F(adr, dst)
  2492. res = dst + src;
  2493. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  2494. flag_N = flag_X = flag_C = res >> 8;
  2495. flag_NotZ = res & 0xFFFF;
  2496. WRITE_WORD_F(adr, res)
  2497. POST_IO
  2498. RET(16)
  2499. }
  2500. // ADDI
  2501. OPCODE(0x0658)
  2502. {
  2503. u32 adr, res;
  2504. u32 src, dst;
  2505. FETCH_WORD(src);
  2506. adr = AREG((Opcode >> 0) & 7);
  2507. AREG((Opcode >> 0) & 7) += 2;
  2508. PRE_IO
  2509. READ_WORD_F(adr, dst)
  2510. res = dst + src;
  2511. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  2512. flag_N = flag_X = flag_C = res >> 8;
  2513. flag_NotZ = res & 0xFFFF;
  2514. WRITE_WORD_F(adr, res)
  2515. POST_IO
  2516. RET(16)
  2517. }
  2518. // ADDI
  2519. OPCODE(0x0660)
  2520. {
  2521. u32 adr, res;
  2522. u32 src, dst;
  2523. FETCH_WORD(src);
  2524. adr = AREG((Opcode >> 0) & 7) - 2;
  2525. AREG((Opcode >> 0) & 7) = adr;
  2526. PRE_IO
  2527. READ_WORD_F(adr, dst)
  2528. res = dst + src;
  2529. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  2530. flag_N = flag_X = flag_C = res >> 8;
  2531. flag_NotZ = res & 0xFFFF;
  2532. WRITE_WORD_F(adr, res)
  2533. POST_IO
  2534. RET(18)
  2535. }
  2536. // ADDI
  2537. OPCODE(0x0668)
  2538. {
  2539. u32 adr, res;
  2540. u32 src, dst;
  2541. FETCH_WORD(src);
  2542. FETCH_SWORD(adr);
  2543. adr += AREG((Opcode >> 0) & 7);
  2544. PRE_IO
  2545. READ_WORD_F(adr, dst)
  2546. res = dst + src;
  2547. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  2548. flag_N = flag_X = flag_C = res >> 8;
  2549. flag_NotZ = res & 0xFFFF;
  2550. WRITE_WORD_F(adr, res)
  2551. POST_IO
  2552. RET(20)
  2553. }
  2554. // ADDI
  2555. OPCODE(0x0670)
  2556. {
  2557. u32 adr, res;
  2558. u32 src, dst;
  2559. FETCH_WORD(src);
  2560. adr = AREG((Opcode >> 0) & 7);
  2561. DECODE_EXT_WORD
  2562. PRE_IO
  2563. READ_WORD_F(adr, dst)
  2564. res = dst + src;
  2565. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  2566. flag_N = flag_X = flag_C = res >> 8;
  2567. flag_NotZ = res & 0xFFFF;
  2568. WRITE_WORD_F(adr, res)
  2569. POST_IO
  2570. RET(22)
  2571. }
  2572. // ADDI
  2573. OPCODE(0x0678)
  2574. {
  2575. u32 adr, res;
  2576. u32 src, dst;
  2577. FETCH_WORD(src);
  2578. FETCH_SWORD(adr);
  2579. PRE_IO
  2580. READ_WORD_F(adr, dst)
  2581. res = dst + src;
  2582. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  2583. flag_N = flag_X = flag_C = res >> 8;
  2584. flag_NotZ = res & 0xFFFF;
  2585. WRITE_WORD_F(adr, res)
  2586. POST_IO
  2587. RET(20)
  2588. }
  2589. // ADDI
  2590. OPCODE(0x0679)
  2591. {
  2592. u32 adr, res;
  2593. u32 src, dst;
  2594. FETCH_WORD(src);
  2595. FETCH_LONG(adr);
  2596. PRE_IO
  2597. READ_WORD_F(adr, dst)
  2598. res = dst + src;
  2599. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  2600. flag_N = flag_X = flag_C = res >> 8;
  2601. flag_NotZ = res & 0xFFFF;
  2602. WRITE_WORD_F(adr, res)
  2603. POST_IO
  2604. RET(24)
  2605. }
  2606. // ADDI
  2607. OPCODE(0x065F)
  2608. {
  2609. u32 adr, res;
  2610. u32 src, dst;
  2611. FETCH_WORD(src);
  2612. adr = AREG(7);
  2613. AREG(7) += 2;
  2614. PRE_IO
  2615. READ_WORD_F(adr, dst)
  2616. res = dst + src;
  2617. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  2618. flag_N = flag_X = flag_C = res >> 8;
  2619. flag_NotZ = res & 0xFFFF;
  2620. WRITE_WORD_F(adr, res)
  2621. POST_IO
  2622. RET(16)
  2623. }
  2624. // ADDI
  2625. OPCODE(0x0667)
  2626. {
  2627. u32 adr, res;
  2628. u32 src, dst;
  2629. FETCH_WORD(src);
  2630. adr = AREG(7) - 2;
  2631. AREG(7) = adr;
  2632. PRE_IO
  2633. READ_WORD_F(adr, dst)
  2634. res = dst + src;
  2635. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  2636. flag_N = flag_X = flag_C = res >> 8;
  2637. flag_NotZ = res & 0xFFFF;
  2638. WRITE_WORD_F(adr, res)
  2639. POST_IO
  2640. RET(18)
  2641. }
  2642. // ADDI
  2643. OPCODE(0x0680)
  2644. {
  2645. u32 adr, res;
  2646. u32 src, dst;
  2647. FETCH_LONG(src);
  2648. dst = DREGu32((Opcode >> 0) & 7);
  2649. res = dst + src;
  2650. flag_NotZ = res;
  2651. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  2652. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  2653. flag_N = res >> 24;
  2654. DREGu32((Opcode >> 0) & 7) = res;
  2655. RET(16)
  2656. }
  2657. // ADDI
  2658. OPCODE(0x0690)
  2659. {
  2660. u32 adr, res;
  2661. u32 src, dst;
  2662. FETCH_LONG(src);
  2663. adr = AREG((Opcode >> 0) & 7);
  2664. PRE_IO
  2665. READ_LONG_F(adr, dst)
  2666. res = dst + src;
  2667. flag_NotZ = res;
  2668. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  2669. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  2670. flag_N = res >> 24;
  2671. WRITE_LONG_F(adr, res)
  2672. POST_IO
  2673. RET(28)
  2674. }
  2675. // ADDI
  2676. OPCODE(0x0698)
  2677. {
  2678. u32 adr, res;
  2679. u32 src, dst;
  2680. FETCH_LONG(src);
  2681. adr = AREG((Opcode >> 0) & 7);
  2682. AREG((Opcode >> 0) & 7) += 4;
  2683. PRE_IO
  2684. READ_LONG_F(adr, dst)
  2685. res = dst + src;
  2686. flag_NotZ = res;
  2687. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  2688. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  2689. flag_N = res >> 24;
  2690. WRITE_LONG_F(adr, res)
  2691. POST_IO
  2692. RET(28)
  2693. }
  2694. // ADDI
  2695. OPCODE(0x06A0)
  2696. {
  2697. u32 adr, res;
  2698. u32 src, dst;
  2699. FETCH_LONG(src);
  2700. adr = AREG((Opcode >> 0) & 7) - 4;
  2701. AREG((Opcode >> 0) & 7) = adr;
  2702. PRE_IO
  2703. READ_LONG_F(adr, dst)
  2704. res = dst + src;
  2705. flag_NotZ = res;
  2706. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  2707. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  2708. flag_N = res >> 24;
  2709. WRITE_LONG_F(adr, res)
  2710. POST_IO
  2711. RET(30)
  2712. }
  2713. // ADDI
  2714. OPCODE(0x06A8)
  2715. {
  2716. u32 adr, res;
  2717. u32 src, dst;
  2718. FETCH_LONG(src);
  2719. FETCH_SWORD(adr);
  2720. adr += AREG((Opcode >> 0) & 7);
  2721. PRE_IO
  2722. READ_LONG_F(adr, dst)
  2723. res = dst + src;
  2724. flag_NotZ = res;
  2725. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  2726. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  2727. flag_N = res >> 24;
  2728. WRITE_LONG_F(adr, res)
  2729. POST_IO
  2730. RET(32)
  2731. }
  2732. // ADDI
  2733. OPCODE(0x06B0)
  2734. {
  2735. u32 adr, res;
  2736. u32 src, dst;
  2737. FETCH_LONG(src);
  2738. adr = AREG((Opcode >> 0) & 7);
  2739. DECODE_EXT_WORD
  2740. PRE_IO
  2741. READ_LONG_F(adr, dst)
  2742. res = dst + src;
  2743. flag_NotZ = res;
  2744. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  2745. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  2746. flag_N = res >> 24;
  2747. WRITE_LONG_F(adr, res)
  2748. POST_IO
  2749. RET(34)
  2750. }
  2751. // ADDI
  2752. OPCODE(0x06B8)
  2753. {
  2754. u32 adr, res;
  2755. u32 src, dst;
  2756. FETCH_LONG(src);
  2757. FETCH_SWORD(adr);
  2758. PRE_IO
  2759. READ_LONG_F(adr, dst)
  2760. res = dst + src;
  2761. flag_NotZ = res;
  2762. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  2763. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  2764. flag_N = res >> 24;
  2765. WRITE_LONG_F(adr, res)
  2766. POST_IO
  2767. RET(32)
  2768. }
  2769. // ADDI
  2770. OPCODE(0x06B9)
  2771. {
  2772. u32 adr, res;
  2773. u32 src, dst;
  2774. FETCH_LONG(src);
  2775. FETCH_LONG(adr);
  2776. PRE_IO
  2777. READ_LONG_F(adr, dst)
  2778. res = dst + src;
  2779. flag_NotZ = res;
  2780. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  2781. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  2782. flag_N = res >> 24;
  2783. WRITE_LONG_F(adr, res)
  2784. POST_IO
  2785. RET(36)
  2786. }
  2787. // ADDI
  2788. OPCODE(0x069F)
  2789. {
  2790. u32 adr, res;
  2791. u32 src, dst;
  2792. FETCH_LONG(src);
  2793. adr = AREG(7);
  2794. AREG(7) += 4;
  2795. PRE_IO
  2796. READ_LONG_F(adr, dst)
  2797. res = dst + src;
  2798. flag_NotZ = res;
  2799. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  2800. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  2801. flag_N = res >> 24;
  2802. WRITE_LONG_F(adr, res)
  2803. POST_IO
  2804. RET(28)
  2805. }
  2806. // ADDI
  2807. OPCODE(0x06A7)
  2808. {
  2809. u32 adr, res;
  2810. u32 src, dst;
  2811. FETCH_LONG(src);
  2812. adr = AREG(7) - 4;
  2813. AREG(7) = adr;
  2814. PRE_IO
  2815. READ_LONG_F(adr, dst)
  2816. res = dst + src;
  2817. flag_NotZ = res;
  2818. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  2819. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  2820. flag_N = res >> 24;
  2821. WRITE_LONG_F(adr, res)
  2822. POST_IO
  2823. RET(30)
  2824. }
  2825. // CMPI
  2826. OPCODE(0x0C00)
  2827. {
  2828. u32 adr, res;
  2829. u32 src, dst;
  2830. FETCH_BYTE(src);
  2831. dst = DREGu8((Opcode >> 0) & 7);
  2832. res = dst - src;
  2833. flag_N = flag_C = res;
  2834. flag_V = (src ^ dst) & (res ^ dst);
  2835. flag_NotZ = res & 0xFF;
  2836. RET(8)
  2837. }
  2838. // CMPI
  2839. OPCODE(0x0C10)
  2840. {
  2841. u32 adr, res;
  2842. u32 src, dst;
  2843. FETCH_BYTE(src);
  2844. adr = AREG((Opcode >> 0) & 7);
  2845. PRE_IO
  2846. READ_BYTE_F(adr, dst)
  2847. res = dst - src;
  2848. flag_N = flag_C = res;
  2849. flag_V = (src ^ dst) & (res ^ dst);
  2850. flag_NotZ = res & 0xFF;
  2851. POST_IO
  2852. RET(12)
  2853. }
  2854. // CMPI
  2855. OPCODE(0x0C18)
  2856. {
  2857. u32 adr, res;
  2858. u32 src, dst;
  2859. FETCH_BYTE(src);
  2860. adr = AREG((Opcode >> 0) & 7);
  2861. AREG((Opcode >> 0) & 7) += 1;
  2862. PRE_IO
  2863. READ_BYTE_F(adr, dst)
  2864. res = dst - src;
  2865. flag_N = flag_C = res;
  2866. flag_V = (src ^ dst) & (res ^ dst);
  2867. flag_NotZ = res & 0xFF;
  2868. POST_IO
  2869. RET(12)
  2870. }
  2871. // CMPI
  2872. OPCODE(0x0C20)
  2873. {
  2874. u32 adr, res;
  2875. u32 src, dst;
  2876. FETCH_BYTE(src);
  2877. adr = AREG((Opcode >> 0) & 7) - 1;
  2878. AREG((Opcode >> 0) & 7) = adr;
  2879. PRE_IO
  2880. READ_BYTE_F(adr, dst)
  2881. res = dst - src;
  2882. flag_N = flag_C = res;
  2883. flag_V = (src ^ dst) & (res ^ dst);
  2884. flag_NotZ = res & 0xFF;
  2885. POST_IO
  2886. RET(14)
  2887. }
  2888. // CMPI
  2889. OPCODE(0x0C28)
  2890. {
  2891. u32 adr, res;
  2892. u32 src, dst;
  2893. FETCH_BYTE(src);
  2894. FETCH_SWORD(adr);
  2895. adr += AREG((Opcode >> 0) & 7);
  2896. PRE_IO
  2897. READ_BYTE_F(adr, dst)
  2898. res = dst - src;
  2899. flag_N = flag_C = res;
  2900. flag_V = (src ^ dst) & (res ^ dst);
  2901. flag_NotZ = res & 0xFF;
  2902. POST_IO
  2903. RET(16)
  2904. }
  2905. // CMPI
  2906. OPCODE(0x0C30)
  2907. {
  2908. u32 adr, res;
  2909. u32 src, dst;
  2910. FETCH_BYTE(src);
  2911. adr = AREG((Opcode >> 0) & 7);
  2912. DECODE_EXT_WORD
  2913. PRE_IO
  2914. READ_BYTE_F(adr, dst)
  2915. res = dst - src;
  2916. flag_N = flag_C = res;
  2917. flag_V = (src ^ dst) & (res ^ dst);
  2918. flag_NotZ = res & 0xFF;
  2919. POST_IO
  2920. RET(18)
  2921. }
  2922. // CMPI
  2923. OPCODE(0x0C38)
  2924. {
  2925. u32 adr, res;
  2926. u32 src, dst;
  2927. FETCH_BYTE(src);
  2928. FETCH_SWORD(adr);
  2929. PRE_IO
  2930. READ_BYTE_F(adr, dst)
  2931. res = dst - src;
  2932. flag_N = flag_C = res;
  2933. flag_V = (src ^ dst) & (res ^ dst);
  2934. flag_NotZ = res & 0xFF;
  2935. POST_IO
  2936. RET(16)
  2937. }
  2938. // CMPI
  2939. OPCODE(0x0C39)
  2940. {
  2941. u32 adr, res;
  2942. u32 src, dst;
  2943. FETCH_BYTE(src);
  2944. FETCH_LONG(adr);
  2945. PRE_IO
  2946. READ_BYTE_F(adr, dst)
  2947. res = dst - src;
  2948. flag_N = flag_C = res;
  2949. flag_V = (src ^ dst) & (res ^ dst);
  2950. flag_NotZ = res & 0xFF;
  2951. POST_IO
  2952. RET(20)
  2953. }
  2954. // CMPI
  2955. OPCODE(0x0C1F)
  2956. {
  2957. u32 adr, res;
  2958. u32 src, dst;
  2959. FETCH_BYTE(src);
  2960. adr = AREG(7);
  2961. AREG(7) += 2;
  2962. PRE_IO
  2963. READ_BYTE_F(adr, dst)
  2964. res = dst - src;
  2965. flag_N = flag_C = res;
  2966. flag_V = (src ^ dst) & (res ^ dst);
  2967. flag_NotZ = res & 0xFF;
  2968. POST_IO
  2969. RET(12)
  2970. }
  2971. // CMPI
  2972. OPCODE(0x0C27)
  2973. {
  2974. u32 adr, res;
  2975. u32 src, dst;
  2976. FETCH_BYTE(src);
  2977. adr = AREG(7) - 2;
  2978. AREG(7) = adr;
  2979. PRE_IO
  2980. READ_BYTE_F(adr, dst)
  2981. res = dst - src;
  2982. flag_N = flag_C = res;
  2983. flag_V = (src ^ dst) & (res ^ dst);
  2984. flag_NotZ = res & 0xFF;
  2985. POST_IO
  2986. RET(14)
  2987. }
  2988. // CMPI
  2989. OPCODE(0x0C40)
  2990. {
  2991. u32 adr, res;
  2992. u32 src, dst;
  2993. FETCH_WORD(src);
  2994. dst = DREGu16((Opcode >> 0) & 7);
  2995. res = dst - src;
  2996. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  2997. flag_N = flag_C = res >> 8;
  2998. flag_NotZ = res & 0xFFFF;
  2999. RET(8)
  3000. }
  3001. // CMPI
  3002. OPCODE(0x0C50)
  3003. {
  3004. u32 adr, res;
  3005. u32 src, dst;
  3006. FETCH_WORD(src);
  3007. adr = AREG((Opcode >> 0) & 7);
  3008. PRE_IO
  3009. READ_WORD_F(adr, dst)
  3010. res = dst - src;
  3011. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  3012. flag_N = flag_C = res >> 8;
  3013. flag_NotZ = res & 0xFFFF;
  3014. POST_IO
  3015. RET(12)
  3016. }
  3017. // CMPI
  3018. OPCODE(0x0C58)
  3019. {
  3020. u32 adr, res;
  3021. u32 src, dst;
  3022. FETCH_WORD(src);
  3023. adr = AREG((Opcode >> 0) & 7);
  3024. AREG((Opcode >> 0) & 7) += 2;
  3025. PRE_IO
  3026. READ_WORD_F(adr, dst)
  3027. res = dst - src;
  3028. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  3029. flag_N = flag_C = res >> 8;
  3030. flag_NotZ = res & 0xFFFF;
  3031. POST_IO
  3032. RET(12)
  3033. }
  3034. // CMPI
  3035. OPCODE(0x0C60)
  3036. {
  3037. u32 adr, res;
  3038. u32 src, dst;
  3039. FETCH_WORD(src);
  3040. adr = AREG((Opcode >> 0) & 7) - 2;
  3041. AREG((Opcode >> 0) & 7) = adr;
  3042. PRE_IO
  3043. READ_WORD_F(adr, dst)
  3044. res = dst - src;
  3045. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  3046. flag_N = flag_C = res >> 8;
  3047. flag_NotZ = res & 0xFFFF;
  3048. POST_IO
  3049. RET(14)
  3050. }
  3051. // CMPI
  3052. OPCODE(0x0C68)
  3053. {
  3054. u32 adr, res;
  3055. u32 src, dst;
  3056. FETCH_WORD(src);
  3057. FETCH_SWORD(adr);
  3058. adr += AREG((Opcode >> 0) & 7);
  3059. PRE_IO
  3060. READ_WORD_F(adr, dst)
  3061. res = dst - src;
  3062. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  3063. flag_N = flag_C = res >> 8;
  3064. flag_NotZ = res & 0xFFFF;
  3065. POST_IO
  3066. RET(16)
  3067. }
  3068. // CMPI
  3069. OPCODE(0x0C70)
  3070. {
  3071. u32 adr, res;
  3072. u32 src, dst;
  3073. FETCH_WORD(src);
  3074. adr = AREG((Opcode >> 0) & 7);
  3075. DECODE_EXT_WORD
  3076. PRE_IO
  3077. READ_WORD_F(adr, dst)
  3078. res = dst - src;
  3079. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  3080. flag_N = flag_C = res >> 8;
  3081. flag_NotZ = res & 0xFFFF;
  3082. POST_IO
  3083. RET(18)
  3084. }
  3085. // CMPI
  3086. OPCODE(0x0C78)
  3087. {
  3088. u32 adr, res;
  3089. u32 src, dst;
  3090. FETCH_WORD(src);
  3091. FETCH_SWORD(adr);
  3092. PRE_IO
  3093. READ_WORD_F(adr, dst)
  3094. res = dst - src;
  3095. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  3096. flag_N = flag_C = res >> 8;
  3097. flag_NotZ = res & 0xFFFF;
  3098. POST_IO
  3099. RET(16)
  3100. }
  3101. // CMPI
  3102. OPCODE(0x0C79)
  3103. {
  3104. u32 adr, res;
  3105. u32 src, dst;
  3106. FETCH_WORD(src);
  3107. FETCH_LONG(adr);
  3108. PRE_IO
  3109. READ_WORD_F(adr, dst)
  3110. res = dst - src;
  3111. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  3112. flag_N = flag_C = res >> 8;
  3113. flag_NotZ = res & 0xFFFF;
  3114. POST_IO
  3115. RET(20)
  3116. }
  3117. // CMPI
  3118. OPCODE(0x0C5F)
  3119. {
  3120. u32 adr, res;
  3121. u32 src, dst;
  3122. FETCH_WORD(src);
  3123. adr = AREG(7);
  3124. AREG(7) += 2;
  3125. PRE_IO
  3126. READ_WORD_F(adr, dst)
  3127. res = dst - src;
  3128. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  3129. flag_N = flag_C = res >> 8;
  3130. flag_NotZ = res & 0xFFFF;
  3131. POST_IO
  3132. RET(12)
  3133. }
  3134. // CMPI
  3135. OPCODE(0x0C67)
  3136. {
  3137. u32 adr, res;
  3138. u32 src, dst;
  3139. FETCH_WORD(src);
  3140. adr = AREG(7) - 2;
  3141. AREG(7) = adr;
  3142. PRE_IO
  3143. READ_WORD_F(adr, dst)
  3144. res = dst - src;
  3145. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  3146. flag_N = flag_C = res >> 8;
  3147. flag_NotZ = res & 0xFFFF;
  3148. POST_IO
  3149. RET(14)
  3150. }
  3151. // CMPI
  3152. OPCODE(0x0C80)
  3153. {
  3154. u32 adr, res;
  3155. u32 src, dst;
  3156. FETCH_LONG(src);
  3157. dst = DREGu32((Opcode >> 0) & 7);
  3158. res = dst - src;
  3159. flag_NotZ = res;
  3160. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  3161. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  3162. flag_N = res >> 24;
  3163. RET(14)
  3164. }
  3165. // CMPI
  3166. OPCODE(0x0C90)
  3167. {
  3168. u32 adr, res;
  3169. u32 src, dst;
  3170. FETCH_LONG(src);
  3171. adr = AREG((Opcode >> 0) & 7);
  3172. PRE_IO
  3173. READ_LONG_F(adr, dst)
  3174. res = dst - src;
  3175. flag_NotZ = res;
  3176. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  3177. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  3178. flag_N = res >> 24;
  3179. POST_IO
  3180. RET(20)
  3181. }
  3182. // CMPI
  3183. OPCODE(0x0C98)
  3184. {
  3185. u32 adr, res;
  3186. u32 src, dst;
  3187. FETCH_LONG(src);
  3188. adr = AREG((Opcode >> 0) & 7);
  3189. AREG((Opcode >> 0) & 7) += 4;
  3190. PRE_IO
  3191. READ_LONG_F(adr, dst)
  3192. res = dst - src;
  3193. flag_NotZ = res;
  3194. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  3195. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  3196. flag_N = res >> 24;
  3197. POST_IO
  3198. RET(20)
  3199. }
  3200. // CMPI
  3201. OPCODE(0x0CA0)
  3202. {
  3203. u32 adr, res;
  3204. u32 src, dst;
  3205. FETCH_LONG(src);
  3206. adr = AREG((Opcode >> 0) & 7) - 4;
  3207. AREG((Opcode >> 0) & 7) = adr;
  3208. PRE_IO
  3209. READ_LONG_F(adr, dst)
  3210. res = dst - src;
  3211. flag_NotZ = res;
  3212. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  3213. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  3214. flag_N = res >> 24;
  3215. POST_IO
  3216. RET(22)
  3217. }
  3218. // CMPI
  3219. OPCODE(0x0CA8)
  3220. {
  3221. u32 adr, res;
  3222. u32 src, dst;
  3223. FETCH_LONG(src);
  3224. FETCH_SWORD(adr);
  3225. adr += AREG((Opcode >> 0) & 7);
  3226. PRE_IO
  3227. READ_LONG_F(adr, dst)
  3228. res = dst - src;
  3229. flag_NotZ = res;
  3230. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  3231. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  3232. flag_N = res >> 24;
  3233. POST_IO
  3234. RET(24)
  3235. }
  3236. // CMPI
  3237. OPCODE(0x0CB0)
  3238. {
  3239. u32 adr, res;
  3240. u32 src, dst;
  3241. FETCH_LONG(src);
  3242. adr = AREG((Opcode >> 0) & 7);
  3243. DECODE_EXT_WORD
  3244. PRE_IO
  3245. READ_LONG_F(adr, dst)
  3246. res = dst - src;
  3247. flag_NotZ = res;
  3248. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  3249. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  3250. flag_N = res >> 24;
  3251. POST_IO
  3252. RET(26)
  3253. }
  3254. // CMPI
  3255. OPCODE(0x0CB8)
  3256. {
  3257. u32 adr, res;
  3258. u32 src, dst;
  3259. FETCH_LONG(src);
  3260. FETCH_SWORD(adr);
  3261. PRE_IO
  3262. READ_LONG_F(adr, dst)
  3263. res = dst - src;
  3264. flag_NotZ = res;
  3265. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  3266. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  3267. flag_N = res >> 24;
  3268. POST_IO
  3269. RET(24)
  3270. }
  3271. // CMPI
  3272. OPCODE(0x0CB9)
  3273. {
  3274. u32 adr, res;
  3275. u32 src, dst;
  3276. FETCH_LONG(src);
  3277. FETCH_LONG(adr);
  3278. PRE_IO
  3279. READ_LONG_F(adr, dst)
  3280. res = dst - src;
  3281. flag_NotZ = res;
  3282. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  3283. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  3284. flag_N = res >> 24;
  3285. POST_IO
  3286. RET(28)
  3287. }
  3288. // CMPI
  3289. OPCODE(0x0C9F)
  3290. {
  3291. u32 adr, res;
  3292. u32 src, dst;
  3293. FETCH_LONG(src);
  3294. adr = AREG(7);
  3295. AREG(7) += 4;
  3296. PRE_IO
  3297. READ_LONG_F(adr, dst)
  3298. res = dst - src;
  3299. flag_NotZ = res;
  3300. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  3301. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  3302. flag_N = res >> 24;
  3303. POST_IO
  3304. RET(20)
  3305. }
  3306. // CMPI
  3307. OPCODE(0x0CA7)
  3308. {
  3309. u32 adr, res;
  3310. u32 src, dst;
  3311. FETCH_LONG(src);
  3312. adr = AREG(7) - 4;
  3313. AREG(7) = adr;
  3314. PRE_IO
  3315. READ_LONG_F(adr, dst)
  3316. res = dst - src;
  3317. flag_NotZ = res;
  3318. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  3319. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  3320. flag_N = res >> 24;
  3321. POST_IO
  3322. RET(22)
  3323. }
  3324. // BTSTn
  3325. OPCODE(0x0800)
  3326. {
  3327. u32 adr, res;
  3328. u32 src, dst;
  3329. FETCH_BYTE(src);
  3330. src = 1 << (src & 31);
  3331. res = DREGu32((Opcode >> 0) & 7);
  3332. flag_NotZ = res & src;
  3333. RET(10)
  3334. }
  3335. // BTSTn
  3336. OPCODE(0x0810)
  3337. {
  3338. u32 adr, res;
  3339. u32 src, dst;
  3340. FETCH_BYTE(src);
  3341. src = 1 << (src & 7);
  3342. adr = AREG((Opcode >> 0) & 7);
  3343. PRE_IO
  3344. READ_BYTE_F(adr, res)
  3345. flag_NotZ = res & src;
  3346. POST_IO
  3347. RET(12)
  3348. }
  3349. // BTSTn
  3350. OPCODE(0x0818)
  3351. {
  3352. u32 adr, res;
  3353. u32 src, dst;
  3354. FETCH_BYTE(src);
  3355. src = 1 << (src & 7);
  3356. adr = AREG((Opcode >> 0) & 7);
  3357. AREG((Opcode >> 0) & 7) += 1;
  3358. PRE_IO
  3359. READ_BYTE_F(adr, res)
  3360. flag_NotZ = res & src;
  3361. POST_IO
  3362. RET(12)
  3363. }
  3364. // BTSTn
  3365. OPCODE(0x0820)
  3366. {
  3367. u32 adr, res;
  3368. u32 src, dst;
  3369. FETCH_BYTE(src);
  3370. src = 1 << (src & 7);
  3371. adr = AREG((Opcode >> 0) & 7) - 1;
  3372. AREG((Opcode >> 0) & 7) = adr;
  3373. PRE_IO
  3374. READ_BYTE_F(adr, res)
  3375. flag_NotZ = res & src;
  3376. POST_IO
  3377. RET(14)
  3378. }
  3379. // BTSTn
  3380. OPCODE(0x0828)
  3381. {
  3382. u32 adr, res;
  3383. u32 src, dst;
  3384. FETCH_BYTE(src);
  3385. src = 1 << (src & 7);
  3386. FETCH_SWORD(adr);
  3387. adr += AREG((Opcode >> 0) & 7);
  3388. PRE_IO
  3389. READ_BYTE_F(adr, res)
  3390. flag_NotZ = res & src;
  3391. POST_IO
  3392. RET(16)
  3393. }
  3394. // BTSTn
  3395. OPCODE(0x0830)
  3396. {
  3397. u32 adr, res;
  3398. u32 src, dst;
  3399. FETCH_BYTE(src);
  3400. src = 1 << (src & 7);
  3401. adr = AREG((Opcode >> 0) & 7);
  3402. DECODE_EXT_WORD
  3403. PRE_IO
  3404. READ_BYTE_F(adr, res)
  3405. flag_NotZ = res & src;
  3406. POST_IO
  3407. RET(18)
  3408. }
  3409. // BTSTn
  3410. OPCODE(0x0838)
  3411. {
  3412. u32 adr, res;
  3413. u32 src, dst;
  3414. FETCH_BYTE(src);
  3415. src = 1 << (src & 7);
  3416. FETCH_SWORD(adr);
  3417. PRE_IO
  3418. READ_BYTE_F(adr, res)
  3419. flag_NotZ = res & src;
  3420. POST_IO
  3421. RET(16)
  3422. }
  3423. // BTSTn
  3424. OPCODE(0x0839)
  3425. {
  3426. u32 adr, res;
  3427. u32 src, dst;
  3428. FETCH_BYTE(src);
  3429. src = 1 << (src & 7);
  3430. FETCH_LONG(adr);
  3431. PRE_IO
  3432. READ_BYTE_F(adr, res)
  3433. flag_NotZ = res & src;
  3434. POST_IO
  3435. RET(20)
  3436. }
  3437. // BTSTn
  3438. OPCODE(0x083A)
  3439. {
  3440. u32 adr, res;
  3441. u32 src, dst;
  3442. FETCH_BYTE(src);
  3443. src = 1 << (src & 7);
  3444. adr = GET_SWORD + GET_PC;
  3445. PC++;
  3446. PRE_IO
  3447. READ_BYTE_F(adr, res)
  3448. flag_NotZ = res & src;
  3449. POST_IO
  3450. RET(16)
  3451. }
  3452. // BTSTn
  3453. OPCODE(0x083B)
  3454. {
  3455. u32 adr, res;
  3456. u32 src, dst;
  3457. FETCH_BYTE(src);
  3458. src = 1 << (src & 7);
  3459. adr = (uptr)(PC) - BasePC;
  3460. DECODE_EXT_WORD
  3461. PRE_IO
  3462. READ_BYTE_F(adr, res)
  3463. flag_NotZ = res & src;
  3464. POST_IO
  3465. RET(18)
  3466. }
  3467. // BTSTn
  3468. OPCODE(0x081F)
  3469. {
  3470. u32 adr, res;
  3471. u32 src, dst;
  3472. FETCH_BYTE(src);
  3473. src = 1 << (src & 7);
  3474. adr = AREG(7);
  3475. AREG(7) += 2;
  3476. PRE_IO
  3477. READ_BYTE_F(adr, res)
  3478. flag_NotZ = res & src;
  3479. POST_IO
  3480. RET(12)
  3481. }
  3482. // BTSTn
  3483. OPCODE(0x0827)
  3484. {
  3485. u32 adr, res;
  3486. u32 src, dst;
  3487. FETCH_BYTE(src);
  3488. src = 1 << (src & 7);
  3489. adr = AREG(7) - 2;
  3490. AREG(7) = adr;
  3491. PRE_IO
  3492. READ_BYTE_F(adr, res)
  3493. flag_NotZ = res & src;
  3494. POST_IO
  3495. RET(14)
  3496. }
  3497. // BCHGn
  3498. OPCODE(0x0840)
  3499. {
  3500. u32 adr, res;
  3501. u32 src, dst;
  3502. FETCH_BYTE(src);
  3503. src = 1 << (src & 31);
  3504. res = DREGu32((Opcode >> 0) & 7);
  3505. flag_NotZ = res & src;
  3506. res ^= src;
  3507. DREGu32((Opcode >> 0) & 7) = res;
  3508. RET(12)
  3509. }
  3510. // BCHGn
  3511. OPCODE(0x0850)
  3512. {
  3513. u32 adr, res;
  3514. u32 src, dst;
  3515. FETCH_BYTE(src);
  3516. src = 1 << (src & 7);
  3517. adr = AREG((Opcode >> 0) & 7);
  3518. PRE_IO
  3519. READ_BYTE_F(adr, res)
  3520. flag_NotZ = res & src;
  3521. res ^= src;
  3522. WRITE_BYTE_F(adr, res)
  3523. POST_IO
  3524. RET(16)
  3525. }
  3526. // BCHGn
  3527. OPCODE(0x0858)
  3528. {
  3529. u32 adr, res;
  3530. u32 src, dst;
  3531. FETCH_BYTE(src);
  3532. src = 1 << (src & 7);
  3533. adr = AREG((Opcode >> 0) & 7);
  3534. AREG((Opcode >> 0) & 7) += 1;
  3535. PRE_IO
  3536. READ_BYTE_F(adr, res)
  3537. flag_NotZ = res & src;
  3538. res ^= src;
  3539. WRITE_BYTE_F(adr, res)
  3540. POST_IO
  3541. RET(16)
  3542. }
  3543. // BCHGn
  3544. OPCODE(0x0860)
  3545. {
  3546. u32 adr, res;
  3547. u32 src, dst;
  3548. FETCH_BYTE(src);
  3549. src = 1 << (src & 7);
  3550. adr = AREG((Opcode >> 0) & 7) - 1;
  3551. AREG((Opcode >> 0) & 7) = adr;
  3552. PRE_IO
  3553. READ_BYTE_F(adr, res)
  3554. flag_NotZ = res & src;
  3555. res ^= src;
  3556. WRITE_BYTE_F(adr, res)
  3557. POST_IO
  3558. RET(18)
  3559. }
  3560. // BCHGn
  3561. OPCODE(0x0868)
  3562. {
  3563. u32 adr, res;
  3564. u32 src, dst;
  3565. FETCH_BYTE(src);
  3566. src = 1 << (src & 7);
  3567. FETCH_SWORD(adr);
  3568. adr += AREG((Opcode >> 0) & 7);
  3569. PRE_IO
  3570. READ_BYTE_F(adr, res)
  3571. flag_NotZ = res & src;
  3572. res ^= src;
  3573. WRITE_BYTE_F(adr, res)
  3574. POST_IO
  3575. RET(20)
  3576. }
  3577. // BCHGn
  3578. OPCODE(0x0870)
  3579. {
  3580. u32 adr, res;
  3581. u32 src, dst;
  3582. FETCH_BYTE(src);
  3583. src = 1 << (src & 7);
  3584. adr = AREG((Opcode >> 0) & 7);
  3585. DECODE_EXT_WORD
  3586. PRE_IO
  3587. READ_BYTE_F(adr, res)
  3588. flag_NotZ = res & src;
  3589. res ^= src;
  3590. WRITE_BYTE_F(adr, res)
  3591. POST_IO
  3592. RET(22)
  3593. }
  3594. // BCHGn
  3595. OPCODE(0x0878)
  3596. {
  3597. u32 adr, res;
  3598. u32 src, dst;
  3599. FETCH_BYTE(src);
  3600. src = 1 << (src & 7);
  3601. FETCH_SWORD(adr);
  3602. PRE_IO
  3603. READ_BYTE_F(adr, res)
  3604. flag_NotZ = res & src;
  3605. res ^= src;
  3606. WRITE_BYTE_F(adr, res)
  3607. POST_IO
  3608. RET(20)
  3609. }
  3610. // BCHGn
  3611. OPCODE(0x0879)
  3612. {
  3613. u32 adr, res;
  3614. u32 src, dst;
  3615. FETCH_BYTE(src);
  3616. src = 1 << (src & 7);
  3617. FETCH_LONG(adr);
  3618. PRE_IO
  3619. READ_BYTE_F(adr, res)
  3620. flag_NotZ = res & src;
  3621. res ^= src;
  3622. WRITE_BYTE_F(adr, res)
  3623. POST_IO
  3624. RET(24)
  3625. }
  3626. // BCHGn
  3627. OPCODE(0x085F)
  3628. {
  3629. u32 adr, res;
  3630. u32 src, dst;
  3631. FETCH_BYTE(src);
  3632. src = 1 << (src & 7);
  3633. adr = AREG(7);
  3634. AREG(7) += 2;
  3635. PRE_IO
  3636. READ_BYTE_F(adr, res)
  3637. flag_NotZ = res & src;
  3638. res ^= src;
  3639. WRITE_BYTE_F(adr, res)
  3640. POST_IO
  3641. RET(16)
  3642. }
  3643. // BCHGn
  3644. OPCODE(0x0867)
  3645. {
  3646. u32 adr, res;
  3647. u32 src, dst;
  3648. FETCH_BYTE(src);
  3649. src = 1 << (src & 7);
  3650. adr = AREG(7) - 2;
  3651. AREG(7) = adr;
  3652. PRE_IO
  3653. READ_BYTE_F(adr, res)
  3654. flag_NotZ = res & src;
  3655. res ^= src;
  3656. WRITE_BYTE_F(adr, res)
  3657. POST_IO
  3658. RET(18)
  3659. }
  3660. // BCLRn
  3661. OPCODE(0x0880)
  3662. {
  3663. u32 adr, res;
  3664. u32 src, dst;
  3665. FETCH_BYTE(src);
  3666. src = 1 << (src & 31);
  3667. res = DREGu32((Opcode >> 0) & 7);
  3668. flag_NotZ = res & src;
  3669. res &= ~src;
  3670. DREGu32((Opcode >> 0) & 7) = res;
  3671. RET(14)
  3672. }
  3673. // BCLRn
  3674. OPCODE(0x0890)
  3675. {
  3676. u32 adr, res;
  3677. u32 src, dst;
  3678. FETCH_BYTE(src);
  3679. src = 1 << (src & 7);
  3680. adr = AREG((Opcode >> 0) & 7);
  3681. PRE_IO
  3682. READ_BYTE_F(adr, res)
  3683. flag_NotZ = res & src;
  3684. res &= ~src;
  3685. WRITE_BYTE_F(adr, res)
  3686. POST_IO
  3687. RET(16)
  3688. }
  3689. // BCLRn
  3690. OPCODE(0x0898)
  3691. {
  3692. u32 adr, res;
  3693. u32 src, dst;
  3694. FETCH_BYTE(src);
  3695. src = 1 << (src & 7);
  3696. adr = AREG((Opcode >> 0) & 7);
  3697. AREG((Opcode >> 0) & 7) += 1;
  3698. PRE_IO
  3699. READ_BYTE_F(adr, res)
  3700. flag_NotZ = res & src;
  3701. res &= ~src;
  3702. WRITE_BYTE_F(adr, res)
  3703. POST_IO
  3704. RET(16)
  3705. }
  3706. // BCLRn
  3707. OPCODE(0x08A0)
  3708. {
  3709. u32 adr, res;
  3710. u32 src, dst;
  3711. FETCH_BYTE(src);
  3712. src = 1 << (src & 7);
  3713. adr = AREG((Opcode >> 0) & 7) - 1;
  3714. AREG((Opcode >> 0) & 7) = adr;
  3715. PRE_IO
  3716. READ_BYTE_F(adr, res)
  3717. flag_NotZ = res & src;
  3718. res &= ~src;
  3719. WRITE_BYTE_F(adr, res)
  3720. POST_IO
  3721. RET(18)
  3722. }
  3723. // BCLRn
  3724. OPCODE(0x08A8)
  3725. {
  3726. u32 adr, res;
  3727. u32 src, dst;
  3728. FETCH_BYTE(src);
  3729. src = 1 << (src & 7);
  3730. FETCH_SWORD(adr);
  3731. adr += AREG((Opcode >> 0) & 7);
  3732. PRE_IO
  3733. READ_BYTE_F(adr, res)
  3734. flag_NotZ = res & src;
  3735. res &= ~src;
  3736. WRITE_BYTE_F(adr, res)
  3737. POST_IO
  3738. RET(20)
  3739. }
  3740. // BCLRn
  3741. OPCODE(0x08B0)
  3742. {
  3743. u32 adr, res;
  3744. u32 src, dst;
  3745. FETCH_BYTE(src);
  3746. src = 1 << (src & 7);
  3747. adr = AREG((Opcode >> 0) & 7);
  3748. DECODE_EXT_WORD
  3749. PRE_IO
  3750. READ_BYTE_F(adr, res)
  3751. flag_NotZ = res & src;
  3752. res &= ~src;
  3753. WRITE_BYTE_F(adr, res)
  3754. POST_IO
  3755. RET(22)
  3756. }
  3757. // BCLRn
  3758. OPCODE(0x08B8)
  3759. {
  3760. u32 adr, res;
  3761. u32 src, dst;
  3762. FETCH_BYTE(src);
  3763. src = 1 << (src & 7);
  3764. FETCH_SWORD(adr);
  3765. PRE_IO
  3766. READ_BYTE_F(adr, res)
  3767. flag_NotZ = res & src;
  3768. res &= ~src;
  3769. WRITE_BYTE_F(adr, res)
  3770. POST_IO
  3771. RET(20)
  3772. }
  3773. // BCLRn
  3774. OPCODE(0x08B9)
  3775. {
  3776. u32 adr, res;
  3777. u32 src, dst;
  3778. FETCH_BYTE(src);
  3779. src = 1 << (src & 7);
  3780. FETCH_LONG(adr);
  3781. PRE_IO
  3782. READ_BYTE_F(adr, res)
  3783. flag_NotZ = res & src;
  3784. res &= ~src;
  3785. WRITE_BYTE_F(adr, res)
  3786. POST_IO
  3787. RET(24)
  3788. }
  3789. // BCLRn
  3790. OPCODE(0x089F)
  3791. {
  3792. u32 adr, res;
  3793. u32 src, dst;
  3794. FETCH_BYTE(src);
  3795. src = 1 << (src & 7);
  3796. adr = AREG(7);
  3797. AREG(7) += 2;
  3798. PRE_IO
  3799. READ_BYTE_F(adr, res)
  3800. flag_NotZ = res & src;
  3801. res &= ~src;
  3802. WRITE_BYTE_F(adr, res)
  3803. POST_IO
  3804. RET(16)
  3805. }
  3806. // BCLRn
  3807. OPCODE(0x08A7)
  3808. {
  3809. u32 adr, res;
  3810. u32 src, dst;
  3811. FETCH_BYTE(src);
  3812. src = 1 << (src & 7);
  3813. adr = AREG(7) - 2;
  3814. AREG(7) = adr;
  3815. PRE_IO
  3816. READ_BYTE_F(adr, res)
  3817. flag_NotZ = res & src;
  3818. res &= ~src;
  3819. WRITE_BYTE_F(adr, res)
  3820. POST_IO
  3821. RET(18)
  3822. }
  3823. // BSETn
  3824. OPCODE(0x08C0)
  3825. {
  3826. u32 adr, res;
  3827. u32 src, dst;
  3828. FETCH_BYTE(src);
  3829. src = 1 << (src & 31);
  3830. res = DREGu32((Opcode >> 0) & 7);
  3831. flag_NotZ = res & src;
  3832. res |= src;
  3833. DREGu32((Opcode >> 0) & 7) = res;
  3834. RET(12)
  3835. }
  3836. // BSETn
  3837. OPCODE(0x08D0)
  3838. {
  3839. u32 adr, res;
  3840. u32 src, dst;
  3841. FETCH_BYTE(src);
  3842. src = 1 << (src & 7);
  3843. adr = AREG((Opcode >> 0) & 7);
  3844. PRE_IO
  3845. READ_BYTE_F(adr, res)
  3846. flag_NotZ = res & src;
  3847. res |= src;
  3848. WRITE_BYTE_F(adr, res)
  3849. POST_IO
  3850. RET(16)
  3851. }
  3852. // BSETn
  3853. OPCODE(0x08D8)
  3854. {
  3855. u32 adr, res;
  3856. u32 src, dst;
  3857. FETCH_BYTE(src);
  3858. src = 1 << (src & 7);
  3859. adr = AREG((Opcode >> 0) & 7);
  3860. AREG((Opcode >> 0) & 7) += 1;
  3861. PRE_IO
  3862. READ_BYTE_F(adr, res)
  3863. flag_NotZ = res & src;
  3864. res |= src;
  3865. WRITE_BYTE_F(adr, res)
  3866. POST_IO
  3867. RET(16)
  3868. }
  3869. // BSETn
  3870. OPCODE(0x08E0)
  3871. {
  3872. u32 adr, res;
  3873. u32 src, dst;
  3874. FETCH_BYTE(src);
  3875. src = 1 << (src & 7);
  3876. adr = AREG((Opcode >> 0) & 7) - 1;
  3877. AREG((Opcode >> 0) & 7) = adr;
  3878. PRE_IO
  3879. READ_BYTE_F(adr, res)
  3880. flag_NotZ = res & src;
  3881. res |= src;
  3882. WRITE_BYTE_F(adr, res)
  3883. POST_IO
  3884. RET(18)
  3885. }
  3886. // BSETn
  3887. OPCODE(0x08E8)
  3888. {
  3889. u32 adr, res;
  3890. u32 src, dst;
  3891. FETCH_BYTE(src);
  3892. src = 1 << (src & 7);
  3893. FETCH_SWORD(adr);
  3894. adr += AREG((Opcode >> 0) & 7);
  3895. PRE_IO
  3896. READ_BYTE_F(adr, res)
  3897. flag_NotZ = res & src;
  3898. res |= src;
  3899. WRITE_BYTE_F(adr, res)
  3900. POST_IO
  3901. RET(20)
  3902. }
  3903. // BSETn
  3904. OPCODE(0x08F0)
  3905. {
  3906. u32 adr, res;
  3907. u32 src, dst;
  3908. FETCH_BYTE(src);
  3909. src = 1 << (src & 7);
  3910. adr = AREG((Opcode >> 0) & 7);
  3911. DECODE_EXT_WORD
  3912. PRE_IO
  3913. READ_BYTE_F(adr, res)
  3914. flag_NotZ = res & src;
  3915. res |= src;
  3916. WRITE_BYTE_F(adr, res)
  3917. POST_IO
  3918. RET(22)
  3919. }
  3920. // BSETn
  3921. OPCODE(0x08F8)
  3922. {
  3923. u32 adr, res;
  3924. u32 src, dst;
  3925. FETCH_BYTE(src);
  3926. src = 1 << (src & 7);
  3927. FETCH_SWORD(adr);
  3928. PRE_IO
  3929. READ_BYTE_F(adr, res)
  3930. flag_NotZ = res & src;
  3931. res |= src;
  3932. WRITE_BYTE_F(adr, res)
  3933. POST_IO
  3934. RET(20)
  3935. }
  3936. // BSETn
  3937. OPCODE(0x08F9)
  3938. {
  3939. u32 adr, res;
  3940. u32 src, dst;
  3941. FETCH_BYTE(src);
  3942. src = 1 << (src & 7);
  3943. FETCH_LONG(adr);
  3944. PRE_IO
  3945. READ_BYTE_F(adr, res)
  3946. flag_NotZ = res & src;
  3947. res |= src;
  3948. WRITE_BYTE_F(adr, res)
  3949. POST_IO
  3950. RET(24)
  3951. }
  3952. // BSETn
  3953. OPCODE(0x08DF)
  3954. {
  3955. u32 adr, res;
  3956. u32 src, dst;
  3957. FETCH_BYTE(src);
  3958. src = 1 << (src & 7);
  3959. adr = AREG(7);
  3960. AREG(7) += 2;
  3961. PRE_IO
  3962. READ_BYTE_F(adr, res)
  3963. flag_NotZ = res & src;
  3964. res |= src;
  3965. WRITE_BYTE_F(adr, res)
  3966. POST_IO
  3967. RET(16)
  3968. }
  3969. // BSETn
  3970. OPCODE(0x08E7)
  3971. {
  3972. u32 adr, res;
  3973. u32 src, dst;
  3974. FETCH_BYTE(src);
  3975. src = 1 << (src & 7);
  3976. adr = AREG(7) - 2;
  3977. AREG(7) = adr;
  3978. PRE_IO
  3979. READ_BYTE_F(adr, res)
  3980. flag_NotZ = res & src;
  3981. res |= src;
  3982. WRITE_BYTE_F(adr, res)
  3983. POST_IO
  3984. RET(18)
  3985. }
  3986. // BTST
  3987. OPCODE(0x0100)
  3988. {
  3989. u32 adr, res;
  3990. u32 src, dst;
  3991. src = DREGu32((Opcode >> 9) & 7);
  3992. src = 1 << (src & 31);
  3993. res = DREGu32((Opcode >> 0) & 7);
  3994. flag_NotZ = res & src;
  3995. RET(6)
  3996. }
  3997. // BTST
  3998. OPCODE(0x0110)
  3999. {
  4000. u32 adr, res;
  4001. u32 src, dst;
  4002. src = DREGu8((Opcode >> 9) & 7);
  4003. src = 1 << (src & 7);
  4004. adr = AREG((Opcode >> 0) & 7);
  4005. PRE_IO
  4006. READ_BYTE_F(adr, res)
  4007. flag_NotZ = res & src;
  4008. POST_IO
  4009. RET(8)
  4010. }
  4011. // BTST
  4012. OPCODE(0x0118)
  4013. {
  4014. u32 adr, res;
  4015. u32 src, dst;
  4016. src = DREGu8((Opcode >> 9) & 7);
  4017. src = 1 << (src & 7);
  4018. adr = AREG((Opcode >> 0) & 7);
  4019. AREG((Opcode >> 0) & 7) += 1;
  4020. PRE_IO
  4021. READ_BYTE_F(adr, res)
  4022. flag_NotZ = res & src;
  4023. POST_IO
  4024. RET(8)
  4025. }
  4026. // BTST
  4027. OPCODE(0x0120)
  4028. {
  4029. u32 adr, res;
  4030. u32 src, dst;
  4031. src = DREGu8((Opcode >> 9) & 7);
  4032. src = 1 << (src & 7);
  4033. adr = AREG((Opcode >> 0) & 7) - 1;
  4034. AREG((Opcode >> 0) & 7) = adr;
  4035. PRE_IO
  4036. READ_BYTE_F(adr, res)
  4037. flag_NotZ = res & src;
  4038. POST_IO
  4039. RET(10)
  4040. }
  4041. // BTST
  4042. OPCODE(0x0128)
  4043. {
  4044. u32 adr, res;
  4045. u32 src, dst;
  4046. src = DREGu8((Opcode >> 9) & 7);
  4047. src = 1 << (src & 7);
  4048. FETCH_SWORD(adr);
  4049. adr += AREG((Opcode >> 0) & 7);
  4050. PRE_IO
  4051. READ_BYTE_F(adr, res)
  4052. flag_NotZ = res & src;
  4053. POST_IO
  4054. RET(12)
  4055. }
  4056. // BTST
  4057. OPCODE(0x0130)
  4058. {
  4059. u32 adr, res;
  4060. u32 src, dst;
  4061. src = DREGu8((Opcode >> 9) & 7);
  4062. src = 1 << (src & 7);
  4063. adr = AREG((Opcode >> 0) & 7);
  4064. DECODE_EXT_WORD
  4065. PRE_IO
  4066. READ_BYTE_F(adr, res)
  4067. flag_NotZ = res & src;
  4068. POST_IO
  4069. RET(14)
  4070. }
  4071. // BTST
  4072. OPCODE(0x0138)
  4073. {
  4074. u32 adr, res;
  4075. u32 src, dst;
  4076. src = DREGu8((Opcode >> 9) & 7);
  4077. src = 1 << (src & 7);
  4078. FETCH_SWORD(adr);
  4079. PRE_IO
  4080. READ_BYTE_F(adr, res)
  4081. flag_NotZ = res & src;
  4082. POST_IO
  4083. RET(12)
  4084. }
  4085. // BTST
  4086. OPCODE(0x0139)
  4087. {
  4088. u32 adr, res;
  4089. u32 src, dst;
  4090. src = DREGu8((Opcode >> 9) & 7);
  4091. src = 1 << (src & 7);
  4092. FETCH_LONG(adr);
  4093. PRE_IO
  4094. READ_BYTE_F(adr, res)
  4095. flag_NotZ = res & src;
  4096. POST_IO
  4097. RET(16)
  4098. }
  4099. // BTST
  4100. OPCODE(0x013A)
  4101. {
  4102. u32 adr, res;
  4103. u32 src, dst;
  4104. src = DREGu8((Opcode >> 9) & 7);
  4105. src = 1 << (src & 7);
  4106. adr = GET_SWORD + GET_PC;
  4107. PC++;
  4108. PRE_IO
  4109. READ_BYTE_F(adr, res)
  4110. flag_NotZ = res & src;
  4111. POST_IO
  4112. RET(12)
  4113. }
  4114. // BTST
  4115. OPCODE(0x013B)
  4116. {
  4117. u32 adr, res;
  4118. u32 src, dst;
  4119. src = DREGu8((Opcode >> 9) & 7);
  4120. src = 1 << (src & 7);
  4121. adr = (uptr)(PC) - BasePC;
  4122. DECODE_EXT_WORD
  4123. PRE_IO
  4124. READ_BYTE_F(adr, res)
  4125. flag_NotZ = res & src;
  4126. POST_IO
  4127. RET(14)
  4128. }
  4129. // BTST
  4130. OPCODE(0x013C)
  4131. {
  4132. u32 adr, res;
  4133. u32 src, dst;
  4134. src = DREGu8((Opcode >> 9) & 7);
  4135. src = 1 << (src & 7);
  4136. FETCH_BYTE(res);
  4137. flag_NotZ = res & src;
  4138. RET(10)
  4139. }
  4140. // BTST
  4141. OPCODE(0x011F)
  4142. {
  4143. u32 adr, res;
  4144. u32 src, dst;
  4145. src = DREGu8((Opcode >> 9) & 7);
  4146. src = 1 << (src & 7);
  4147. adr = AREG(7);
  4148. AREG(7) += 2;
  4149. PRE_IO
  4150. READ_BYTE_F(adr, res)
  4151. flag_NotZ = res & src;
  4152. POST_IO
  4153. RET(8)
  4154. }
  4155. // BTST
  4156. OPCODE(0x0127)
  4157. {
  4158. u32 adr, res;
  4159. u32 src, dst;
  4160. src = DREGu8((Opcode >> 9) & 7);
  4161. src = 1 << (src & 7);
  4162. adr = AREG(7) - 2;
  4163. AREG(7) = adr;
  4164. PRE_IO
  4165. READ_BYTE_F(adr, res)
  4166. flag_NotZ = res & src;
  4167. POST_IO
  4168. RET(10)
  4169. }
  4170. // BCHG
  4171. OPCODE(0x0140)
  4172. {
  4173. u32 adr, res;
  4174. u32 src, dst;
  4175. src = DREGu32((Opcode >> 9) & 7);
  4176. src = 1 << (src & 31);
  4177. res = DREGu32((Opcode >> 0) & 7);
  4178. flag_NotZ = res & src;
  4179. res ^= src;
  4180. DREGu32((Opcode >> 0) & 7) = res;
  4181. RET(8)
  4182. }
  4183. // BCHG
  4184. OPCODE(0x0150)
  4185. {
  4186. u32 adr, res;
  4187. u32 src, dst;
  4188. src = DREGu8((Opcode >> 9) & 7);
  4189. src = 1 << (src & 7);
  4190. adr = AREG((Opcode >> 0) & 7);
  4191. PRE_IO
  4192. READ_BYTE_F(adr, res)
  4193. flag_NotZ = res & src;
  4194. res ^= src;
  4195. WRITE_BYTE_F(adr, res)
  4196. POST_IO
  4197. RET(12)
  4198. }
  4199. // BCHG
  4200. OPCODE(0x0158)
  4201. {
  4202. u32 adr, res;
  4203. u32 src, dst;
  4204. src = DREGu8((Opcode >> 9) & 7);
  4205. src = 1 << (src & 7);
  4206. adr = AREG((Opcode >> 0) & 7);
  4207. AREG((Opcode >> 0) & 7) += 1;
  4208. PRE_IO
  4209. READ_BYTE_F(adr, res)
  4210. flag_NotZ = res & src;
  4211. res ^= src;
  4212. WRITE_BYTE_F(adr, res)
  4213. POST_IO
  4214. RET(12)
  4215. }
  4216. // BCHG
  4217. OPCODE(0x0160)
  4218. {
  4219. u32 adr, res;
  4220. u32 src, dst;
  4221. src = DREGu8((Opcode >> 9) & 7);
  4222. src = 1 << (src & 7);
  4223. adr = AREG((Opcode >> 0) & 7) - 1;
  4224. AREG((Opcode >> 0) & 7) = adr;
  4225. PRE_IO
  4226. READ_BYTE_F(adr, res)
  4227. flag_NotZ = res & src;
  4228. res ^= src;
  4229. WRITE_BYTE_F(adr, res)
  4230. POST_IO
  4231. RET(14)
  4232. }
  4233. // BCHG
  4234. OPCODE(0x0168)
  4235. {
  4236. u32 adr, res;
  4237. u32 src, dst;
  4238. src = DREGu8((Opcode >> 9) & 7);
  4239. src = 1 << (src & 7);
  4240. FETCH_SWORD(adr);
  4241. adr += AREG((Opcode >> 0) & 7);
  4242. PRE_IO
  4243. READ_BYTE_F(adr, res)
  4244. flag_NotZ = res & src;
  4245. res ^= src;
  4246. WRITE_BYTE_F(adr, res)
  4247. POST_IO
  4248. RET(16)
  4249. }
  4250. // BCHG
  4251. OPCODE(0x0170)
  4252. {
  4253. u32 adr, res;
  4254. u32 src, dst;
  4255. src = DREGu8((Opcode >> 9) & 7);
  4256. src = 1 << (src & 7);
  4257. adr = AREG((Opcode >> 0) & 7);
  4258. DECODE_EXT_WORD
  4259. PRE_IO
  4260. READ_BYTE_F(adr, res)
  4261. flag_NotZ = res & src;
  4262. res ^= src;
  4263. WRITE_BYTE_F(adr, res)
  4264. POST_IO
  4265. RET(18)
  4266. }
  4267. // BCHG
  4268. OPCODE(0x0178)
  4269. {
  4270. u32 adr, res;
  4271. u32 src, dst;
  4272. src = DREGu8((Opcode >> 9) & 7);
  4273. src = 1 << (src & 7);
  4274. FETCH_SWORD(adr);
  4275. PRE_IO
  4276. READ_BYTE_F(adr, res)
  4277. flag_NotZ = res & src;
  4278. res ^= src;
  4279. WRITE_BYTE_F(adr, res)
  4280. POST_IO
  4281. RET(16)
  4282. }
  4283. // BCHG
  4284. OPCODE(0x0179)
  4285. {
  4286. u32 adr, res;
  4287. u32 src, dst;
  4288. src = DREGu8((Opcode >> 9) & 7);
  4289. src = 1 << (src & 7);
  4290. FETCH_LONG(adr);
  4291. PRE_IO
  4292. READ_BYTE_F(adr, res)
  4293. flag_NotZ = res & src;
  4294. res ^= src;
  4295. WRITE_BYTE_F(adr, res)
  4296. POST_IO
  4297. RET(20)
  4298. }
  4299. // BCHG
  4300. OPCODE(0x015F)
  4301. {
  4302. u32 adr, res;
  4303. u32 src, dst;
  4304. src = DREGu8((Opcode >> 9) & 7);
  4305. src = 1 << (src & 7);
  4306. adr = AREG(7);
  4307. AREG(7) += 2;
  4308. PRE_IO
  4309. READ_BYTE_F(adr, res)
  4310. flag_NotZ = res & src;
  4311. res ^= src;
  4312. WRITE_BYTE_F(adr, res)
  4313. POST_IO
  4314. RET(12)
  4315. }
  4316. // BCHG
  4317. OPCODE(0x0167)
  4318. {
  4319. u32 adr, res;
  4320. u32 src, dst;
  4321. src = DREGu8((Opcode >> 9) & 7);
  4322. src = 1 << (src & 7);
  4323. adr = AREG(7) - 2;
  4324. AREG(7) = adr;
  4325. PRE_IO
  4326. READ_BYTE_F(adr, res)
  4327. flag_NotZ = res & src;
  4328. res ^= src;
  4329. WRITE_BYTE_F(adr, res)
  4330. POST_IO
  4331. RET(14)
  4332. }
  4333. // BCLR
  4334. OPCODE(0x0180)
  4335. {
  4336. u32 adr, res;
  4337. u32 src, dst;
  4338. src = DREGu32((Opcode >> 9) & 7);
  4339. src = 1 << (src & 31);
  4340. res = DREGu32((Opcode >> 0) & 7);
  4341. flag_NotZ = res & src;
  4342. res &= ~src;
  4343. DREGu32((Opcode >> 0) & 7) = res;
  4344. RET(10)
  4345. }
  4346. // BCLR
  4347. OPCODE(0x0190)
  4348. {
  4349. u32 adr, res;
  4350. u32 src, dst;
  4351. src = DREGu8((Opcode >> 9) & 7);
  4352. src = 1 << (src & 7);
  4353. adr = AREG((Opcode >> 0) & 7);
  4354. PRE_IO
  4355. READ_BYTE_F(adr, res)
  4356. flag_NotZ = res & src;
  4357. res &= ~src;
  4358. WRITE_BYTE_F(adr, res)
  4359. POST_IO
  4360. RET(12)
  4361. }
  4362. // BCLR
  4363. OPCODE(0x0198)
  4364. {
  4365. u32 adr, res;
  4366. u32 src, dst;
  4367. src = DREGu8((Opcode >> 9) & 7);
  4368. src = 1 << (src & 7);
  4369. adr = AREG((Opcode >> 0) & 7);
  4370. AREG((Opcode >> 0) & 7) += 1;
  4371. PRE_IO
  4372. READ_BYTE_F(adr, res)
  4373. flag_NotZ = res & src;
  4374. res &= ~src;
  4375. WRITE_BYTE_F(adr, res)
  4376. POST_IO
  4377. RET(12)
  4378. }
  4379. // BCLR
  4380. OPCODE(0x01A0)
  4381. {
  4382. u32 adr, res;
  4383. u32 src, dst;
  4384. src = DREGu8((Opcode >> 9) & 7);
  4385. src = 1 << (src & 7);
  4386. adr = AREG((Opcode >> 0) & 7) - 1;
  4387. AREG((Opcode >> 0) & 7) = adr;
  4388. PRE_IO
  4389. READ_BYTE_F(adr, res)
  4390. flag_NotZ = res & src;
  4391. res &= ~src;
  4392. WRITE_BYTE_F(adr, res)
  4393. POST_IO
  4394. RET(14)
  4395. }
  4396. // BCLR
  4397. OPCODE(0x01A8)
  4398. {
  4399. u32 adr, res;
  4400. u32 src, dst;
  4401. src = DREGu8((Opcode >> 9) & 7);
  4402. src = 1 << (src & 7);
  4403. FETCH_SWORD(adr);
  4404. adr += AREG((Opcode >> 0) & 7);
  4405. PRE_IO
  4406. READ_BYTE_F(adr, res)
  4407. flag_NotZ = res & src;
  4408. res &= ~src;
  4409. WRITE_BYTE_F(adr, res)
  4410. POST_IO
  4411. RET(16)
  4412. }
  4413. // BCLR
  4414. OPCODE(0x01B0)
  4415. {
  4416. u32 adr, res;
  4417. u32 src, dst;
  4418. src = DREGu8((Opcode >> 9) & 7);
  4419. src = 1 << (src & 7);
  4420. adr = AREG((Opcode >> 0) & 7);
  4421. DECODE_EXT_WORD
  4422. PRE_IO
  4423. READ_BYTE_F(adr, res)
  4424. flag_NotZ = res & src;
  4425. res &= ~src;
  4426. WRITE_BYTE_F(adr, res)
  4427. POST_IO
  4428. RET(18)
  4429. }
  4430. // BCLR
  4431. OPCODE(0x01B8)
  4432. {
  4433. u32 adr, res;
  4434. u32 src, dst;
  4435. src = DREGu8((Opcode >> 9) & 7);
  4436. src = 1 << (src & 7);
  4437. FETCH_SWORD(adr);
  4438. PRE_IO
  4439. READ_BYTE_F(adr, res)
  4440. flag_NotZ = res & src;
  4441. res &= ~src;
  4442. WRITE_BYTE_F(adr, res)
  4443. POST_IO
  4444. RET(16)
  4445. }
  4446. // BCLR
  4447. OPCODE(0x01B9)
  4448. {
  4449. u32 adr, res;
  4450. u32 src, dst;
  4451. src = DREGu8((Opcode >> 9) & 7);
  4452. src = 1 << (src & 7);
  4453. FETCH_LONG(adr);
  4454. PRE_IO
  4455. READ_BYTE_F(adr, res)
  4456. flag_NotZ = res & src;
  4457. res &= ~src;
  4458. WRITE_BYTE_F(adr, res)
  4459. POST_IO
  4460. RET(20)
  4461. }
  4462. // BCLR
  4463. OPCODE(0x019F)
  4464. {
  4465. u32 adr, res;
  4466. u32 src, dst;
  4467. src = DREGu8((Opcode >> 9) & 7);
  4468. src = 1 << (src & 7);
  4469. adr = AREG(7);
  4470. AREG(7) += 2;
  4471. PRE_IO
  4472. READ_BYTE_F(adr, res)
  4473. flag_NotZ = res & src;
  4474. res &= ~src;
  4475. WRITE_BYTE_F(adr, res)
  4476. POST_IO
  4477. RET(12)
  4478. }
  4479. // BCLR
  4480. OPCODE(0x01A7)
  4481. {
  4482. u32 adr, res;
  4483. u32 src, dst;
  4484. src = DREGu8((Opcode >> 9) & 7);
  4485. src = 1 << (src & 7);
  4486. adr = AREG(7) - 2;
  4487. AREG(7) = adr;
  4488. PRE_IO
  4489. READ_BYTE_F(adr, res)
  4490. flag_NotZ = res & src;
  4491. res &= ~src;
  4492. WRITE_BYTE_F(adr, res)
  4493. POST_IO
  4494. RET(14)
  4495. }
  4496. // BSET
  4497. OPCODE(0x01C0)
  4498. {
  4499. u32 adr, res;
  4500. u32 src, dst;
  4501. src = DREGu32((Opcode >> 9) & 7);
  4502. src = 1 << (src & 31);
  4503. res = DREGu32((Opcode >> 0) & 7);
  4504. flag_NotZ = res & src;
  4505. res |= src;
  4506. DREGu32((Opcode >> 0) & 7) = res;
  4507. RET(8)
  4508. }
  4509. // BSET
  4510. OPCODE(0x01D0)
  4511. {
  4512. u32 adr, res;
  4513. u32 src, dst;
  4514. src = DREGu8((Opcode >> 9) & 7);
  4515. src = 1 << (src & 7);
  4516. adr = AREG((Opcode >> 0) & 7);
  4517. PRE_IO
  4518. READ_BYTE_F(adr, res)
  4519. flag_NotZ = res & src;
  4520. res |= src;
  4521. WRITE_BYTE_F(adr, res)
  4522. POST_IO
  4523. RET(12)
  4524. }
  4525. // BSET
  4526. OPCODE(0x01D8)
  4527. {
  4528. u32 adr, res;
  4529. u32 src, dst;
  4530. src = DREGu8((Opcode >> 9) & 7);
  4531. src = 1 << (src & 7);
  4532. adr = AREG((Opcode >> 0) & 7);
  4533. AREG((Opcode >> 0) & 7) += 1;
  4534. PRE_IO
  4535. READ_BYTE_F(adr, res)
  4536. flag_NotZ = res & src;
  4537. res |= src;
  4538. WRITE_BYTE_F(adr, res)
  4539. POST_IO
  4540. RET(12)
  4541. }
  4542. // BSET
  4543. OPCODE(0x01E0)
  4544. {
  4545. u32 adr, res;
  4546. u32 src, dst;
  4547. src = DREGu8((Opcode >> 9) & 7);
  4548. src = 1 << (src & 7);
  4549. adr = AREG((Opcode >> 0) & 7) - 1;
  4550. AREG((Opcode >> 0) & 7) = adr;
  4551. PRE_IO
  4552. READ_BYTE_F(adr, res)
  4553. flag_NotZ = res & src;
  4554. res |= src;
  4555. WRITE_BYTE_F(adr, res)
  4556. POST_IO
  4557. RET(14)
  4558. }
  4559. // BSET
  4560. OPCODE(0x01E8)
  4561. {
  4562. u32 adr, res;
  4563. u32 src, dst;
  4564. src = DREGu8((Opcode >> 9) & 7);
  4565. src = 1 << (src & 7);
  4566. FETCH_SWORD(adr);
  4567. adr += AREG((Opcode >> 0) & 7);
  4568. PRE_IO
  4569. READ_BYTE_F(adr, res)
  4570. flag_NotZ = res & src;
  4571. res |= src;
  4572. WRITE_BYTE_F(adr, res)
  4573. POST_IO
  4574. RET(16)
  4575. }
  4576. // BSET
  4577. OPCODE(0x01F0)
  4578. {
  4579. u32 adr, res;
  4580. u32 src, dst;
  4581. src = DREGu8((Opcode >> 9) & 7);
  4582. src = 1 << (src & 7);
  4583. adr = AREG((Opcode >> 0) & 7);
  4584. DECODE_EXT_WORD
  4585. PRE_IO
  4586. READ_BYTE_F(adr, res)
  4587. flag_NotZ = res & src;
  4588. res |= src;
  4589. WRITE_BYTE_F(adr, res)
  4590. POST_IO
  4591. RET(18)
  4592. }
  4593. // BSET
  4594. OPCODE(0x01F8)
  4595. {
  4596. u32 adr, res;
  4597. u32 src, dst;
  4598. src = DREGu8((Opcode >> 9) & 7);
  4599. src = 1 << (src & 7);
  4600. FETCH_SWORD(adr);
  4601. PRE_IO
  4602. READ_BYTE_F(adr, res)
  4603. flag_NotZ = res & src;
  4604. res |= src;
  4605. WRITE_BYTE_F(adr, res)
  4606. POST_IO
  4607. RET(16)
  4608. }
  4609. // BSET
  4610. OPCODE(0x01F9)
  4611. {
  4612. u32 adr, res;
  4613. u32 src, dst;
  4614. src = DREGu8((Opcode >> 9) & 7);
  4615. src = 1 << (src & 7);
  4616. FETCH_LONG(adr);
  4617. PRE_IO
  4618. READ_BYTE_F(adr, res)
  4619. flag_NotZ = res & src;
  4620. res |= src;
  4621. WRITE_BYTE_F(adr, res)
  4622. POST_IO
  4623. RET(20)
  4624. }
  4625. // BSET
  4626. OPCODE(0x01DF)
  4627. {
  4628. u32 adr, res;
  4629. u32 src, dst;
  4630. src = DREGu8((Opcode >> 9) & 7);
  4631. src = 1 << (src & 7);
  4632. adr = AREG(7);
  4633. AREG(7) += 2;
  4634. PRE_IO
  4635. READ_BYTE_F(adr, res)
  4636. flag_NotZ = res & src;
  4637. res |= src;
  4638. WRITE_BYTE_F(adr, res)
  4639. POST_IO
  4640. RET(12)
  4641. }
  4642. // BSET
  4643. OPCODE(0x01E7)
  4644. {
  4645. u32 adr, res;
  4646. u32 src, dst;
  4647. src = DREGu8((Opcode >> 9) & 7);
  4648. src = 1 << (src & 7);
  4649. adr = AREG(7) - 2;
  4650. AREG(7) = adr;
  4651. PRE_IO
  4652. READ_BYTE_F(adr, res)
  4653. flag_NotZ = res & src;
  4654. res |= src;
  4655. WRITE_BYTE_F(adr, res)
  4656. POST_IO
  4657. RET(14)
  4658. }
  4659. // MOVEPWaD
  4660. OPCODE(0x0108)
  4661. {
  4662. u32 adr, res;
  4663. u32 src, dst;
  4664. FETCH_SWORD(adr);
  4665. adr += AREG((Opcode >> 0) & 7);
  4666. PRE_IO
  4667. READ_BYTE_F(adr + 0, res)
  4668. READ_BYTE_F(adr + 2, src)
  4669. DREGu16((Opcode >> 9) & 7) = (res << 8) | src;
  4670. POST_IO
  4671. #ifdef USE_CYCLONE_TIMING
  4672. RET(16)
  4673. #else
  4674. RET(24)
  4675. #endif
  4676. }
  4677. // MOVEPLaD
  4678. OPCODE(0x0148)
  4679. {
  4680. u32 adr, res;
  4681. u32 src, dst;
  4682. FETCH_SWORD(adr);
  4683. adr += AREG((Opcode >> 0) & 7);
  4684. PRE_IO
  4685. READ_BYTE_F(adr, res)
  4686. res <<= 24;
  4687. adr += 2;
  4688. READ_BYTE_F(adr, src)
  4689. res |= src << 16;
  4690. adr += 2;
  4691. READ_BYTE_F(adr, src)
  4692. res |= src << 8;
  4693. adr += 2;
  4694. READ_BYTE_F(adr, src)
  4695. DREG((Opcode >> 9) & 7) = res | src;
  4696. POST_IO
  4697. #ifdef USE_CYCLONE_TIMING
  4698. RET(24)
  4699. #else
  4700. RET(32)
  4701. #endif
  4702. }
  4703. // MOVEPWDa
  4704. OPCODE(0x0188)
  4705. {
  4706. u32 adr, res;
  4707. u32 src, dst;
  4708. res = DREGu32((Opcode >> 9) & 7);
  4709. FETCH_SWORD(adr);
  4710. adr += AREG((Opcode >> 0) & 7);
  4711. PRE_IO
  4712. WRITE_BYTE_F(adr + 0, res >> 8)
  4713. WRITE_BYTE_F(adr + 2, res >> 0)
  4714. POST_IO
  4715. #ifdef USE_CYCLONE_TIMING
  4716. RET(16)
  4717. #else
  4718. RET(24)
  4719. #endif
  4720. }
  4721. // MOVEPLDa
  4722. OPCODE(0x01C8)
  4723. {
  4724. u32 adr, res;
  4725. u32 src, dst;
  4726. res = DREGu32((Opcode >> 9) & 7);
  4727. FETCH_SWORD(adr);
  4728. adr += AREG((Opcode >> 0) & 7);
  4729. PRE_IO
  4730. WRITE_BYTE_F(adr, res >> 24)
  4731. adr += 2;
  4732. WRITE_BYTE_F(adr, res >> 16)
  4733. adr += 2;
  4734. WRITE_BYTE_F(adr, res >> 8)
  4735. adr += 2;
  4736. WRITE_BYTE_F(adr, res >> 0)
  4737. POST_IO
  4738. #ifdef USE_CYCLONE_TIMING
  4739. RET(24)
  4740. #else
  4741. RET(32)
  4742. #endif
  4743. }
  4744. // MOVEB
  4745. OPCODE(0x1000)
  4746. {
  4747. u32 adr, res;
  4748. u32 src, dst;
  4749. res = DREGu8((Opcode >> 0) & 7);
  4750. flag_C = 0;
  4751. flag_V = 0;
  4752. flag_NotZ = res;
  4753. flag_N = res;
  4754. DREGu8((Opcode >> 9) & 7) = res;
  4755. RET(4)
  4756. }
  4757. // MOVEB
  4758. OPCODE(0x1080)
  4759. {
  4760. u32 adr, res;
  4761. u32 src, dst;
  4762. res = DREGu8((Opcode >> 0) & 7);
  4763. flag_C = 0;
  4764. flag_V = 0;
  4765. flag_NotZ = res;
  4766. flag_N = res;
  4767. adr = AREG((Opcode >> 9) & 7);
  4768. PRE_IO
  4769. WRITE_BYTE_F(adr, res)
  4770. POST_IO
  4771. RET(8)
  4772. }
  4773. // MOVEB
  4774. OPCODE(0x10C0)
  4775. {
  4776. u32 adr, res;
  4777. u32 src, dst;
  4778. res = DREGu8((Opcode >> 0) & 7);
  4779. flag_C = 0;
  4780. flag_V = 0;
  4781. flag_NotZ = res;
  4782. flag_N = res;
  4783. adr = AREG((Opcode >> 9) & 7);
  4784. AREG((Opcode >> 9) & 7) += 1;
  4785. PRE_IO
  4786. WRITE_BYTE_F(adr, res)
  4787. POST_IO
  4788. RET(8)
  4789. }
  4790. // MOVEB
  4791. OPCODE(0x1100)
  4792. {
  4793. u32 adr, res;
  4794. u32 src, dst;
  4795. res = DREGu8((Opcode >> 0) & 7);
  4796. flag_C = 0;
  4797. flag_V = 0;
  4798. flag_NotZ = res;
  4799. flag_N = res;
  4800. adr = AREG((Opcode >> 9) & 7) - 1;
  4801. AREG((Opcode >> 9) & 7) = adr;
  4802. PRE_IO
  4803. WRITE_BYTE_F(adr, res)
  4804. POST_IO
  4805. RET(8)
  4806. }
  4807. // MOVEB
  4808. OPCODE(0x1140)
  4809. {
  4810. u32 adr, res;
  4811. u32 src, dst;
  4812. res = DREGu8((Opcode >> 0) & 7);
  4813. flag_C = 0;
  4814. flag_V = 0;
  4815. flag_NotZ = res;
  4816. flag_N = res;
  4817. FETCH_SWORD(adr);
  4818. adr += AREG((Opcode >> 9) & 7);
  4819. PRE_IO
  4820. WRITE_BYTE_F(adr, res)
  4821. POST_IO
  4822. RET(12)
  4823. }
  4824. // MOVEB
  4825. OPCODE(0x1180)
  4826. {
  4827. u32 adr, res;
  4828. u32 src, dst;
  4829. res = DREGu8((Opcode >> 0) & 7);
  4830. flag_C = 0;
  4831. flag_V = 0;
  4832. flag_NotZ = res;
  4833. flag_N = res;
  4834. adr = AREG((Opcode >> 9) & 7);
  4835. DECODE_EXT_WORD
  4836. PRE_IO
  4837. WRITE_BYTE_F(adr, res)
  4838. POST_IO
  4839. RET(14)
  4840. }
  4841. // MOVEB
  4842. OPCODE(0x11C0)
  4843. {
  4844. u32 adr, res;
  4845. u32 src, dst;
  4846. res = DREGu8((Opcode >> 0) & 7);
  4847. flag_C = 0;
  4848. flag_V = 0;
  4849. flag_NotZ = res;
  4850. flag_N = res;
  4851. FETCH_SWORD(adr);
  4852. PRE_IO
  4853. WRITE_BYTE_F(adr, res)
  4854. POST_IO
  4855. RET(12)
  4856. }
  4857. // MOVEB
  4858. OPCODE(0x13C0)
  4859. {
  4860. u32 adr, res;
  4861. u32 src, dst;
  4862. res = DREGu8((Opcode >> 0) & 7);
  4863. flag_C = 0;
  4864. flag_V = 0;
  4865. flag_NotZ = res;
  4866. flag_N = res;
  4867. FETCH_LONG(adr);
  4868. PRE_IO
  4869. WRITE_BYTE_F(adr, res)
  4870. POST_IO
  4871. RET(16)
  4872. }
  4873. // MOVEB
  4874. OPCODE(0x1EC0)
  4875. {
  4876. u32 adr, res;
  4877. u32 src, dst;
  4878. res = DREGu8((Opcode >> 0) & 7);
  4879. flag_C = 0;
  4880. flag_V = 0;
  4881. flag_NotZ = res;
  4882. flag_N = res;
  4883. adr = AREG(7);
  4884. AREG(7) += 2;
  4885. PRE_IO
  4886. WRITE_BYTE_F(adr, res)
  4887. POST_IO
  4888. RET(8)
  4889. }
  4890. // MOVEB
  4891. OPCODE(0x1F00)
  4892. {
  4893. u32 adr, res;
  4894. u32 src, dst;
  4895. res = DREGu8((Opcode >> 0) & 7);
  4896. flag_C = 0;
  4897. flag_V = 0;
  4898. flag_NotZ = res;
  4899. flag_N = res;
  4900. adr = AREG(7) - 2;
  4901. AREG(7) = adr;
  4902. PRE_IO
  4903. WRITE_BYTE_F(adr, res)
  4904. POST_IO
  4905. RET(8)
  4906. }
  4907. #if 0
  4908. // MOVEB
  4909. OPCODE(0x1008)
  4910. {
  4911. u32 adr, res;
  4912. u32 src, dst;
  4913. // can't read byte from Ax registers !
  4914. ctx->execinfo |= M68K_FAULTED;
  4915. ctx->io_cycle_counter = 0;
  4916. /*
  4917. goto famec_Exec_End;
  4918. flag_C = 0;
  4919. flag_V = 0;
  4920. flag_NotZ = res;
  4921. flag_N = res;
  4922. DREGu8((Opcode >> 9) & 7) = res;
  4923. */
  4924. RET(4)
  4925. }
  4926. // MOVEB
  4927. OPCODE(0x1088)
  4928. {
  4929. u32 adr, res;
  4930. u32 src, dst;
  4931. // can't read byte from Ax registers !
  4932. ctx->execinfo |= M68K_FAULTED;
  4933. ctx->io_cycle_counter = 0;
  4934. /*
  4935. goto famec_Exec_End;
  4936. flag_C = 0;
  4937. flag_V = 0;
  4938. flag_NotZ = res;
  4939. flag_N = res;
  4940. adr = AREG((Opcode >> 9) & 7);
  4941. PRE_IO
  4942. WRITE_BYTE_F(adr, res)
  4943. POST_IO
  4944. */
  4945. RET(8)
  4946. }
  4947. // MOVEB
  4948. OPCODE(0x10C8)
  4949. {
  4950. u32 adr, res;
  4951. u32 src, dst;
  4952. // can't read byte from Ax registers !
  4953. ctx->execinfo |= M68K_FAULTED;
  4954. ctx->io_cycle_counter = 0;
  4955. /*
  4956. goto famec_Exec_End;
  4957. flag_C = 0;
  4958. flag_V = 0;
  4959. flag_NotZ = res;
  4960. flag_N = res;
  4961. adr = AREG((Opcode >> 9) & 7);
  4962. AREG((Opcode >> 9) & 7) += 1;
  4963. PRE_IO
  4964. WRITE_BYTE_F(adr, res)
  4965. POST_IO
  4966. */
  4967. RET(8)
  4968. }
  4969. // MOVEB
  4970. OPCODE(0x1108)
  4971. {
  4972. u32 adr, res;
  4973. u32 src, dst;
  4974. // can't read byte from Ax registers !
  4975. ctx->execinfo |= M68K_FAULTED;
  4976. ctx->io_cycle_counter = 0;
  4977. /*
  4978. goto famec_Exec_End;
  4979. flag_C = 0;
  4980. flag_V = 0;
  4981. flag_NotZ = res;
  4982. flag_N = res;
  4983. adr = AREG((Opcode >> 9) & 7) - 1;
  4984. AREG((Opcode >> 9) & 7) = adr;
  4985. PRE_IO
  4986. WRITE_BYTE_F(adr, res)
  4987. POST_IO
  4988. */
  4989. RET(8)
  4990. }
  4991. // MOVEB
  4992. OPCODE(0x1148)
  4993. {
  4994. u32 adr, res;
  4995. u32 src, dst;
  4996. // can't read byte from Ax registers !
  4997. ctx->execinfo |= M68K_FAULTED;
  4998. ctx->io_cycle_counter = 0;
  4999. /*
  5000. goto famec_Exec_End;
  5001. flag_C = 0;
  5002. flag_V = 0;
  5003. flag_NotZ = res;
  5004. flag_N = res;
  5005. FETCH_SWORD(adr);
  5006. adr += AREG((Opcode >> 9) & 7);
  5007. PRE_IO
  5008. WRITE_BYTE_F(adr, res)
  5009. POST_IO
  5010. */
  5011. RET(12)
  5012. }
  5013. // MOVEB
  5014. OPCODE(0x1188)
  5015. {
  5016. u32 adr, res;
  5017. u32 src, dst;
  5018. // can't read byte from Ax registers !
  5019. ctx->execinfo |= M68K_FAULTED;
  5020. ctx->io_cycle_counter = 0;
  5021. /*
  5022. goto famec_Exec_End;
  5023. flag_C = 0;
  5024. flag_V = 0;
  5025. flag_NotZ = res;
  5026. flag_N = res;
  5027. adr = AREG((Opcode >> 9) & 7);
  5028. DECODE_EXT_WORD
  5029. PRE_IO
  5030. WRITE_BYTE_F(adr, res)
  5031. POST_IO
  5032. */
  5033. RET(14)
  5034. }
  5035. // MOVEB
  5036. OPCODE(0x11C8)
  5037. {
  5038. u32 adr, res;
  5039. u32 src, dst;
  5040. // can't read byte from Ax registers !
  5041. ctx->execinfo |= M68K_FAULTED;
  5042. ctx->io_cycle_counter = 0;
  5043. /*
  5044. goto famec_Exec_End;
  5045. flag_C = 0;
  5046. flag_V = 0;
  5047. flag_NotZ = res;
  5048. flag_N = res;
  5049. FETCH_SWORD(adr);
  5050. PRE_IO
  5051. WRITE_BYTE_F(adr, res)
  5052. POST_IO
  5053. */
  5054. RET(12)
  5055. }
  5056. // MOVEB
  5057. OPCODE(0x13C8)
  5058. {
  5059. u32 adr, res;
  5060. u32 src, dst;
  5061. // can't read byte from Ax registers !
  5062. ctx->execinfo |= M68K_FAULTED;
  5063. ctx->io_cycle_counter = 0;
  5064. /*
  5065. goto famec_Exec_End;
  5066. flag_C = 0;
  5067. flag_V = 0;
  5068. flag_NotZ = res;
  5069. flag_N = res;
  5070. FETCH_LONG(adr);
  5071. PRE_IO
  5072. WRITE_BYTE_F(adr, res)
  5073. POST_IO
  5074. */
  5075. RET(16)
  5076. }
  5077. // MOVEB
  5078. OPCODE(0x1EC8)
  5079. {
  5080. u32 adr, res;
  5081. u32 src, dst;
  5082. // can't read byte from Ax registers !
  5083. ctx->execinfo |= M68K_FAULTED;
  5084. ctx->io_cycle_counter = 0;
  5085. /*
  5086. goto famec_Exec_End;
  5087. flag_C = 0;
  5088. flag_V = 0;
  5089. flag_NotZ = res;
  5090. flag_N = res;
  5091. adr = AREG(7);
  5092. AREG(7) += 2;
  5093. PRE_IO
  5094. WRITE_BYTE_F(adr, res)
  5095. POST_IO
  5096. */
  5097. RET(8)
  5098. }
  5099. // MOVEB
  5100. OPCODE(0x1F08)
  5101. {
  5102. u32 adr, res;
  5103. u32 src, dst;
  5104. // can't read byte from Ax registers !
  5105. ctx->execinfo |= M68K_FAULTED;
  5106. ctx->io_cycle_counter = 0;
  5107. /*
  5108. goto famec_Exec_End;
  5109. flag_C = 0;
  5110. flag_V = 0;
  5111. flag_NotZ = res;
  5112. flag_N = res;
  5113. adr = AREG(7) - 2;
  5114. AREG(7) = adr;
  5115. PRE_IO
  5116. WRITE_BYTE_F(adr, res)
  5117. POST_IO
  5118. */
  5119. RET(8)
  5120. }
  5121. #endif
  5122. // MOVEB
  5123. OPCODE(0x1010)
  5124. {
  5125. u32 adr, res;
  5126. u32 src, dst;
  5127. adr = AREG((Opcode >> 0) & 7);
  5128. PRE_IO
  5129. READ_BYTE_F(adr, res)
  5130. flag_C = 0;
  5131. flag_V = 0;
  5132. flag_NotZ = res;
  5133. flag_N = res;
  5134. DREGu8((Opcode >> 9) & 7) = res;
  5135. POST_IO
  5136. RET(8)
  5137. }
  5138. // MOVEB
  5139. OPCODE(0x1090)
  5140. {
  5141. u32 adr, res;
  5142. u32 src, dst;
  5143. adr = AREG((Opcode >> 0) & 7);
  5144. PRE_IO
  5145. READ_BYTE_F(adr, res)
  5146. flag_C = 0;
  5147. flag_V = 0;
  5148. flag_NotZ = res;
  5149. flag_N = res;
  5150. adr = AREG((Opcode >> 9) & 7);
  5151. WRITE_BYTE_F(adr, res)
  5152. POST_IO
  5153. RET(12)
  5154. }
  5155. // MOVEB
  5156. OPCODE(0x10D0)
  5157. {
  5158. u32 adr, res;
  5159. u32 src, dst;
  5160. adr = AREG((Opcode >> 0) & 7);
  5161. PRE_IO
  5162. READ_BYTE_F(adr, res)
  5163. flag_C = 0;
  5164. flag_V = 0;
  5165. flag_NotZ = res;
  5166. flag_N = res;
  5167. adr = AREG((Opcode >> 9) & 7);
  5168. AREG((Opcode >> 9) & 7) += 1;
  5169. WRITE_BYTE_F(adr, res)
  5170. POST_IO
  5171. RET(12)
  5172. }
  5173. // MOVEB
  5174. OPCODE(0x1110)
  5175. {
  5176. u32 adr, res;
  5177. u32 src, dst;
  5178. adr = AREG((Opcode >> 0) & 7);
  5179. PRE_IO
  5180. READ_BYTE_F(adr, res)
  5181. flag_C = 0;
  5182. flag_V = 0;
  5183. flag_NotZ = res;
  5184. flag_N = res;
  5185. adr = AREG((Opcode >> 9) & 7) - 1;
  5186. AREG((Opcode >> 9) & 7) = adr;
  5187. WRITE_BYTE_F(adr, res)
  5188. POST_IO
  5189. RET(12)
  5190. }
  5191. // MOVEB
  5192. OPCODE(0x1150)
  5193. {
  5194. u32 adr, res;
  5195. u32 src, dst;
  5196. adr = AREG((Opcode >> 0) & 7);
  5197. PRE_IO
  5198. READ_BYTE_F(adr, res)
  5199. flag_C = 0;
  5200. flag_V = 0;
  5201. flag_NotZ = res;
  5202. flag_N = res;
  5203. FETCH_SWORD(adr);
  5204. adr += AREG((Opcode >> 9) & 7);
  5205. WRITE_BYTE_F(adr, res)
  5206. POST_IO
  5207. RET(16)
  5208. }
  5209. // MOVEB
  5210. OPCODE(0x1190)
  5211. {
  5212. u32 adr, res;
  5213. u32 src, dst;
  5214. adr = AREG((Opcode >> 0) & 7);
  5215. PRE_IO
  5216. READ_BYTE_F(adr, res)
  5217. flag_C = 0;
  5218. flag_V = 0;
  5219. flag_NotZ = res;
  5220. flag_N = res;
  5221. adr = AREG((Opcode >> 9) & 7);
  5222. DECODE_EXT_WORD
  5223. WRITE_BYTE_F(adr, res)
  5224. POST_IO
  5225. RET(18)
  5226. }
  5227. // MOVEB
  5228. OPCODE(0x11D0)
  5229. {
  5230. u32 adr, res;
  5231. u32 src, dst;
  5232. adr = AREG((Opcode >> 0) & 7);
  5233. PRE_IO
  5234. READ_BYTE_F(adr, res)
  5235. flag_C = 0;
  5236. flag_V = 0;
  5237. flag_NotZ = res;
  5238. flag_N = res;
  5239. FETCH_SWORD(adr);
  5240. WRITE_BYTE_F(adr, res)
  5241. POST_IO
  5242. RET(16)
  5243. }
  5244. // MOVEB
  5245. OPCODE(0x13D0)
  5246. {
  5247. u32 adr, res;
  5248. u32 src, dst;
  5249. adr = AREG((Opcode >> 0) & 7);
  5250. PRE_IO
  5251. READ_BYTE_F(adr, res)
  5252. flag_C = 0;
  5253. flag_V = 0;
  5254. flag_NotZ = res;
  5255. flag_N = res;
  5256. FETCH_LONG(adr);
  5257. WRITE_BYTE_F(adr, res)
  5258. POST_IO
  5259. RET(20)
  5260. }
  5261. // MOVEB
  5262. OPCODE(0x1ED0)
  5263. {
  5264. u32 adr, res;
  5265. u32 src, dst;
  5266. adr = AREG((Opcode >> 0) & 7);
  5267. PRE_IO
  5268. READ_BYTE_F(adr, res)
  5269. flag_C = 0;
  5270. flag_V = 0;
  5271. flag_NotZ = res;
  5272. flag_N = res;
  5273. adr = AREG(7);
  5274. AREG(7) += 2;
  5275. WRITE_BYTE_F(adr, res)
  5276. POST_IO
  5277. RET(12)
  5278. }
  5279. // MOVEB
  5280. OPCODE(0x1F10)
  5281. {
  5282. u32 adr, res;
  5283. u32 src, dst;
  5284. adr = AREG((Opcode >> 0) & 7);
  5285. PRE_IO
  5286. READ_BYTE_F(adr, res)
  5287. flag_C = 0;
  5288. flag_V = 0;
  5289. flag_NotZ = res;
  5290. flag_N = res;
  5291. adr = AREG(7) - 2;
  5292. AREG(7) = adr;
  5293. WRITE_BYTE_F(adr, res)
  5294. POST_IO
  5295. RET(12)
  5296. }
  5297. // MOVEB
  5298. OPCODE(0x1018)
  5299. {
  5300. u32 adr, res;
  5301. u32 src, dst;
  5302. adr = AREG((Opcode >> 0) & 7);
  5303. AREG((Opcode >> 0) & 7) += 1;
  5304. PRE_IO
  5305. READ_BYTE_F(adr, res)
  5306. flag_C = 0;
  5307. flag_V = 0;
  5308. flag_NotZ = res;
  5309. flag_N = res;
  5310. DREGu8((Opcode >> 9) & 7) = res;
  5311. POST_IO
  5312. RET(8)
  5313. }
  5314. // MOVEB
  5315. OPCODE(0x1098)
  5316. {
  5317. u32 adr, res;
  5318. u32 src, dst;
  5319. adr = AREG((Opcode >> 0) & 7);
  5320. AREG((Opcode >> 0) & 7) += 1;
  5321. PRE_IO
  5322. READ_BYTE_F(adr, res)
  5323. flag_C = 0;
  5324. flag_V = 0;
  5325. flag_NotZ = res;
  5326. flag_N = res;
  5327. adr = AREG((Opcode >> 9) & 7);
  5328. WRITE_BYTE_F(adr, res)
  5329. POST_IO
  5330. RET(12)
  5331. }
  5332. // MOVEB
  5333. OPCODE(0x10D8)
  5334. {
  5335. u32 adr, res;
  5336. u32 src, dst;
  5337. adr = AREG((Opcode >> 0) & 7);
  5338. AREG((Opcode >> 0) & 7) += 1;
  5339. PRE_IO
  5340. READ_BYTE_F(adr, res)
  5341. flag_C = 0;
  5342. flag_V = 0;
  5343. flag_NotZ = res;
  5344. flag_N = res;
  5345. adr = AREG((Opcode >> 9) & 7);
  5346. AREG((Opcode >> 9) & 7) += 1;
  5347. WRITE_BYTE_F(adr, res)
  5348. POST_IO
  5349. RET(12)
  5350. }
  5351. // MOVEB
  5352. OPCODE(0x1118)
  5353. {
  5354. u32 adr, res;
  5355. u32 src, dst;
  5356. adr = AREG((Opcode >> 0) & 7);
  5357. AREG((Opcode >> 0) & 7) += 1;
  5358. PRE_IO
  5359. READ_BYTE_F(adr, res)
  5360. flag_C = 0;
  5361. flag_V = 0;
  5362. flag_NotZ = res;
  5363. flag_N = res;
  5364. adr = AREG((Opcode >> 9) & 7) - 1;
  5365. AREG((Opcode >> 9) & 7) = adr;
  5366. WRITE_BYTE_F(adr, res)
  5367. POST_IO
  5368. RET(12)
  5369. }
  5370. // MOVEB
  5371. OPCODE(0x1158)
  5372. {
  5373. u32 adr, res;
  5374. u32 src, dst;
  5375. adr = AREG((Opcode >> 0) & 7);
  5376. AREG((Opcode >> 0) & 7) += 1;
  5377. PRE_IO
  5378. READ_BYTE_F(adr, res)
  5379. flag_C = 0;
  5380. flag_V = 0;
  5381. flag_NotZ = res;
  5382. flag_N = res;
  5383. FETCH_SWORD(adr);
  5384. adr += AREG((Opcode >> 9) & 7);
  5385. WRITE_BYTE_F(adr, res)
  5386. POST_IO
  5387. RET(16)
  5388. }
  5389. // MOVEB
  5390. OPCODE(0x1198)
  5391. {
  5392. u32 adr, res;
  5393. u32 src, dst;
  5394. adr = AREG((Opcode >> 0) & 7);
  5395. AREG((Opcode >> 0) & 7) += 1;
  5396. PRE_IO
  5397. READ_BYTE_F(adr, res)
  5398. flag_C = 0;
  5399. flag_V = 0;
  5400. flag_NotZ = res;
  5401. flag_N = res;
  5402. adr = AREG((Opcode >> 9) & 7);
  5403. DECODE_EXT_WORD
  5404. WRITE_BYTE_F(adr, res)
  5405. POST_IO
  5406. RET(18)
  5407. }
  5408. // MOVEB
  5409. OPCODE(0x11D8)
  5410. {
  5411. u32 adr, res;
  5412. u32 src, dst;
  5413. adr = AREG((Opcode >> 0) & 7);
  5414. AREG((Opcode >> 0) & 7) += 1;
  5415. PRE_IO
  5416. READ_BYTE_F(adr, res)
  5417. flag_C = 0;
  5418. flag_V = 0;
  5419. flag_NotZ = res;
  5420. flag_N = res;
  5421. FETCH_SWORD(adr);
  5422. WRITE_BYTE_F(adr, res)
  5423. POST_IO
  5424. RET(16)
  5425. }
  5426. // MOVEB
  5427. OPCODE(0x13D8)
  5428. {
  5429. u32 adr, res;
  5430. u32 src, dst;
  5431. adr = AREG((Opcode >> 0) & 7);
  5432. AREG((Opcode >> 0) & 7) += 1;
  5433. PRE_IO
  5434. READ_BYTE_F(adr, res)
  5435. flag_C = 0;
  5436. flag_V = 0;
  5437. flag_NotZ = res;
  5438. flag_N = res;
  5439. FETCH_LONG(adr);
  5440. WRITE_BYTE_F(adr, res)
  5441. POST_IO
  5442. RET(20)
  5443. }
  5444. // MOVEB
  5445. OPCODE(0x1ED8)
  5446. {
  5447. u32 adr, res;
  5448. u32 src, dst;
  5449. adr = AREG((Opcode >> 0) & 7);
  5450. AREG((Opcode >> 0) & 7) += 1;
  5451. PRE_IO
  5452. READ_BYTE_F(adr, res)
  5453. flag_C = 0;
  5454. flag_V = 0;
  5455. flag_NotZ = res;
  5456. flag_N = res;
  5457. adr = AREG(7);
  5458. AREG(7) += 2;
  5459. WRITE_BYTE_F(adr, res)
  5460. POST_IO
  5461. RET(12)
  5462. }
  5463. // MOVEB
  5464. OPCODE(0x1F18)
  5465. {
  5466. u32 adr, res;
  5467. u32 src, dst;
  5468. adr = AREG((Opcode >> 0) & 7);
  5469. AREG((Opcode >> 0) & 7) += 1;
  5470. PRE_IO
  5471. READ_BYTE_F(adr, res)
  5472. flag_C = 0;
  5473. flag_V = 0;
  5474. flag_NotZ = res;
  5475. flag_N = res;
  5476. adr = AREG(7) - 2;
  5477. AREG(7) = adr;
  5478. WRITE_BYTE_F(adr, res)
  5479. POST_IO
  5480. RET(12)
  5481. }
  5482. // MOVEB
  5483. OPCODE(0x1020)
  5484. {
  5485. u32 adr, res;
  5486. u32 src, dst;
  5487. adr = AREG((Opcode >> 0) & 7) - 1;
  5488. AREG((Opcode >> 0) & 7) = adr;
  5489. PRE_IO
  5490. READ_BYTE_F(adr, res)
  5491. flag_C = 0;
  5492. flag_V = 0;
  5493. flag_NotZ = res;
  5494. flag_N = res;
  5495. DREGu8((Opcode >> 9) & 7) = res;
  5496. POST_IO
  5497. RET(10)
  5498. }
  5499. // MOVEB
  5500. OPCODE(0x10A0)
  5501. {
  5502. u32 adr, res;
  5503. u32 src, dst;
  5504. adr = AREG((Opcode >> 0) & 7) - 1;
  5505. AREG((Opcode >> 0) & 7) = adr;
  5506. PRE_IO
  5507. READ_BYTE_F(adr, res)
  5508. flag_C = 0;
  5509. flag_V = 0;
  5510. flag_NotZ = res;
  5511. flag_N = res;
  5512. adr = AREG((Opcode >> 9) & 7);
  5513. WRITE_BYTE_F(adr, res)
  5514. POST_IO
  5515. RET(14)
  5516. }
  5517. // MOVEB
  5518. OPCODE(0x10E0)
  5519. {
  5520. u32 adr, res;
  5521. u32 src, dst;
  5522. adr = AREG((Opcode >> 0) & 7) - 1;
  5523. AREG((Opcode >> 0) & 7) = adr;
  5524. PRE_IO
  5525. READ_BYTE_F(adr, res)
  5526. flag_C = 0;
  5527. flag_V = 0;
  5528. flag_NotZ = res;
  5529. flag_N = res;
  5530. adr = AREG((Opcode >> 9) & 7);
  5531. AREG((Opcode >> 9) & 7) += 1;
  5532. WRITE_BYTE_F(adr, res)
  5533. POST_IO
  5534. RET(14)
  5535. }
  5536. // MOVEB
  5537. OPCODE(0x1120)
  5538. {
  5539. u32 adr, res;
  5540. u32 src, dst;
  5541. adr = AREG((Opcode >> 0) & 7) - 1;
  5542. AREG((Opcode >> 0) & 7) = adr;
  5543. PRE_IO
  5544. READ_BYTE_F(adr, res)
  5545. flag_C = 0;
  5546. flag_V = 0;
  5547. flag_NotZ = res;
  5548. flag_N = res;
  5549. adr = AREG((Opcode >> 9) & 7) - 1;
  5550. AREG((Opcode >> 9) & 7) = adr;
  5551. WRITE_BYTE_F(adr, res)
  5552. POST_IO
  5553. RET(14)
  5554. }
  5555. // MOVEB
  5556. OPCODE(0x1160)
  5557. {
  5558. u32 adr, res;
  5559. u32 src, dst;
  5560. adr = AREG((Opcode >> 0) & 7) - 1;
  5561. AREG((Opcode >> 0) & 7) = adr;
  5562. PRE_IO
  5563. READ_BYTE_F(adr, res)
  5564. flag_C = 0;
  5565. flag_V = 0;
  5566. flag_NotZ = res;
  5567. flag_N = res;
  5568. FETCH_SWORD(adr);
  5569. adr += AREG((Opcode >> 9) & 7);
  5570. WRITE_BYTE_F(adr, res)
  5571. POST_IO
  5572. RET(18)
  5573. }
  5574. // MOVEB
  5575. OPCODE(0x11A0)
  5576. {
  5577. u32 adr, res;
  5578. u32 src, dst;
  5579. adr = AREG((Opcode >> 0) & 7) - 1;
  5580. AREG((Opcode >> 0) & 7) = adr;
  5581. PRE_IO
  5582. READ_BYTE_F(adr, res)
  5583. flag_C = 0;
  5584. flag_V = 0;
  5585. flag_NotZ = res;
  5586. flag_N = res;
  5587. adr = AREG((Opcode >> 9) & 7);
  5588. DECODE_EXT_WORD
  5589. WRITE_BYTE_F(adr, res)
  5590. POST_IO
  5591. RET(20)
  5592. }
  5593. // MOVEB
  5594. OPCODE(0x11E0)
  5595. {
  5596. u32 adr, res;
  5597. u32 src, dst;
  5598. adr = AREG((Opcode >> 0) & 7) - 1;
  5599. AREG((Opcode >> 0) & 7) = adr;
  5600. PRE_IO
  5601. READ_BYTE_F(adr, res)
  5602. flag_C = 0;
  5603. flag_V = 0;
  5604. flag_NotZ = res;
  5605. flag_N = res;
  5606. FETCH_SWORD(adr);
  5607. WRITE_BYTE_F(adr, res)
  5608. POST_IO
  5609. RET(18)
  5610. }
  5611. // MOVEB
  5612. OPCODE(0x13E0)
  5613. {
  5614. u32 adr, res;
  5615. u32 src, dst;
  5616. adr = AREG((Opcode >> 0) & 7) - 1;
  5617. AREG((Opcode >> 0) & 7) = adr;
  5618. PRE_IO
  5619. READ_BYTE_F(adr, res)
  5620. flag_C = 0;
  5621. flag_V = 0;
  5622. flag_NotZ = res;
  5623. flag_N = res;
  5624. FETCH_LONG(adr);
  5625. WRITE_BYTE_F(adr, res)
  5626. POST_IO
  5627. RET(22)
  5628. }
  5629. // MOVEB
  5630. OPCODE(0x1EE0)
  5631. {
  5632. u32 adr, res;
  5633. u32 src, dst;
  5634. adr = AREG((Opcode >> 0) & 7) - 1;
  5635. AREG((Opcode >> 0) & 7) = adr;
  5636. PRE_IO
  5637. READ_BYTE_F(adr, res)
  5638. flag_C = 0;
  5639. flag_V = 0;
  5640. flag_NotZ = res;
  5641. flag_N = res;
  5642. adr = AREG(7);
  5643. AREG(7) += 2;
  5644. WRITE_BYTE_F(adr, res)
  5645. POST_IO
  5646. RET(14)
  5647. }
  5648. // MOVEB
  5649. OPCODE(0x1F20)
  5650. {
  5651. u32 adr, res;
  5652. u32 src, dst;
  5653. adr = AREG((Opcode >> 0) & 7) - 1;
  5654. AREG((Opcode >> 0) & 7) = adr;
  5655. PRE_IO
  5656. READ_BYTE_F(adr, res)
  5657. flag_C = 0;
  5658. flag_V = 0;
  5659. flag_NotZ = res;
  5660. flag_N = res;
  5661. adr = AREG(7) - 2;
  5662. AREG(7) = adr;
  5663. WRITE_BYTE_F(adr, res)
  5664. POST_IO
  5665. RET(14)
  5666. }
  5667. // MOVEB
  5668. OPCODE(0x1028)
  5669. {
  5670. u32 adr, res;
  5671. u32 src, dst;
  5672. FETCH_SWORD(adr);
  5673. adr += AREG((Opcode >> 0) & 7);
  5674. PRE_IO
  5675. READ_BYTE_F(adr, res)
  5676. flag_C = 0;
  5677. flag_V = 0;
  5678. flag_NotZ = res;
  5679. flag_N = res;
  5680. DREGu8((Opcode >> 9) & 7) = res;
  5681. POST_IO
  5682. RET(12)
  5683. }
  5684. // MOVEB
  5685. OPCODE(0x10A8)
  5686. {
  5687. u32 adr, res;
  5688. u32 src, dst;
  5689. FETCH_SWORD(adr);
  5690. adr += AREG((Opcode >> 0) & 7);
  5691. PRE_IO
  5692. READ_BYTE_F(adr, res)
  5693. flag_C = 0;
  5694. flag_V = 0;
  5695. flag_NotZ = res;
  5696. flag_N = res;
  5697. adr = AREG((Opcode >> 9) & 7);
  5698. WRITE_BYTE_F(adr, res)
  5699. POST_IO
  5700. RET(16)
  5701. }
  5702. // MOVEB
  5703. OPCODE(0x10E8)
  5704. {
  5705. u32 adr, res;
  5706. u32 src, dst;
  5707. FETCH_SWORD(adr);
  5708. adr += AREG((Opcode >> 0) & 7);
  5709. PRE_IO
  5710. READ_BYTE_F(adr, res)
  5711. flag_C = 0;
  5712. flag_V = 0;
  5713. flag_NotZ = res;
  5714. flag_N = res;
  5715. adr = AREG((Opcode >> 9) & 7);
  5716. AREG((Opcode >> 9) & 7) += 1;
  5717. WRITE_BYTE_F(adr, res)
  5718. POST_IO
  5719. RET(16)
  5720. }
  5721. // MOVEB
  5722. OPCODE(0x1128)
  5723. {
  5724. u32 adr, res;
  5725. u32 src, dst;
  5726. FETCH_SWORD(adr);
  5727. adr += AREG((Opcode >> 0) & 7);
  5728. PRE_IO
  5729. READ_BYTE_F(adr, res)
  5730. flag_C = 0;
  5731. flag_V = 0;
  5732. flag_NotZ = res;
  5733. flag_N = res;
  5734. adr = AREG((Opcode >> 9) & 7) - 1;
  5735. AREG((Opcode >> 9) & 7) = adr;
  5736. WRITE_BYTE_F(adr, res)
  5737. POST_IO
  5738. RET(16)
  5739. }
  5740. // MOVEB
  5741. OPCODE(0x1168)
  5742. {
  5743. u32 adr, res;
  5744. u32 src, dst;
  5745. FETCH_SWORD(adr);
  5746. adr += AREG((Opcode >> 0) & 7);
  5747. PRE_IO
  5748. READ_BYTE_F(adr, res)
  5749. flag_C = 0;
  5750. flag_V = 0;
  5751. flag_NotZ = res;
  5752. flag_N = res;
  5753. FETCH_SWORD(adr);
  5754. adr += AREG((Opcode >> 9) & 7);
  5755. WRITE_BYTE_F(adr, res)
  5756. POST_IO
  5757. RET(20)
  5758. }
  5759. // MOVEB
  5760. OPCODE(0x11A8)
  5761. {
  5762. u32 adr, res;
  5763. u32 src, dst;
  5764. FETCH_SWORD(adr);
  5765. adr += AREG((Opcode >> 0) & 7);
  5766. PRE_IO
  5767. READ_BYTE_F(adr, res)
  5768. flag_C = 0;
  5769. flag_V = 0;
  5770. flag_NotZ = res;
  5771. flag_N = res;
  5772. adr = AREG((Opcode >> 9) & 7);
  5773. DECODE_EXT_WORD
  5774. WRITE_BYTE_F(adr, res)
  5775. POST_IO
  5776. RET(22)
  5777. }
  5778. // MOVEB
  5779. OPCODE(0x11E8)
  5780. {
  5781. u32 adr, res;
  5782. u32 src, dst;
  5783. FETCH_SWORD(adr);
  5784. adr += AREG((Opcode >> 0) & 7);
  5785. PRE_IO
  5786. READ_BYTE_F(adr, res)
  5787. flag_C = 0;
  5788. flag_V = 0;
  5789. flag_NotZ = res;
  5790. flag_N = res;
  5791. FETCH_SWORD(adr);
  5792. WRITE_BYTE_F(adr, res)
  5793. POST_IO
  5794. RET(20)
  5795. }
  5796. // MOVEB
  5797. OPCODE(0x13E8)
  5798. {
  5799. u32 adr, res;
  5800. u32 src, dst;
  5801. FETCH_SWORD(adr);
  5802. adr += AREG((Opcode >> 0) & 7);
  5803. PRE_IO
  5804. READ_BYTE_F(adr, res)
  5805. flag_C = 0;
  5806. flag_V = 0;
  5807. flag_NotZ = res;
  5808. flag_N = res;
  5809. FETCH_LONG(adr);
  5810. WRITE_BYTE_F(adr, res)
  5811. POST_IO
  5812. RET(24)
  5813. }
  5814. // MOVEB
  5815. OPCODE(0x1EE8)
  5816. {
  5817. u32 adr, res;
  5818. u32 src, dst;
  5819. FETCH_SWORD(adr);
  5820. adr += AREG((Opcode >> 0) & 7);
  5821. PRE_IO
  5822. READ_BYTE_F(adr, res)
  5823. flag_C = 0;
  5824. flag_V = 0;
  5825. flag_NotZ = res;
  5826. flag_N = res;
  5827. adr = AREG(7);
  5828. AREG(7) += 2;
  5829. WRITE_BYTE_F(adr, res)
  5830. POST_IO
  5831. RET(16)
  5832. }
  5833. // MOVEB
  5834. OPCODE(0x1F28)
  5835. {
  5836. u32 adr, res;
  5837. u32 src, dst;
  5838. FETCH_SWORD(adr);
  5839. adr += AREG((Opcode >> 0) & 7);
  5840. PRE_IO
  5841. READ_BYTE_F(adr, res)
  5842. flag_C = 0;
  5843. flag_V = 0;
  5844. flag_NotZ = res;
  5845. flag_N = res;
  5846. adr = AREG(7) - 2;
  5847. AREG(7) = adr;
  5848. WRITE_BYTE_F(adr, res)
  5849. POST_IO
  5850. RET(16)
  5851. }
  5852. // MOVEB
  5853. OPCODE(0x1030)
  5854. {
  5855. u32 adr, res;
  5856. u32 src, dst;
  5857. adr = AREG((Opcode >> 0) & 7);
  5858. DECODE_EXT_WORD
  5859. PRE_IO
  5860. READ_BYTE_F(adr, res)
  5861. flag_C = 0;
  5862. flag_V = 0;
  5863. flag_NotZ = res;
  5864. flag_N = res;
  5865. DREGu8((Opcode >> 9) & 7) = res;
  5866. POST_IO
  5867. RET(14)
  5868. }
  5869. // MOVEB
  5870. OPCODE(0x10B0)
  5871. {
  5872. u32 adr, res;
  5873. u32 src, dst;
  5874. adr = AREG((Opcode >> 0) & 7);
  5875. DECODE_EXT_WORD
  5876. PRE_IO
  5877. READ_BYTE_F(adr, res)
  5878. flag_C = 0;
  5879. flag_V = 0;
  5880. flag_NotZ = res;
  5881. flag_N = res;
  5882. adr = AREG((Opcode >> 9) & 7);
  5883. WRITE_BYTE_F(adr, res)
  5884. POST_IO
  5885. RET(18)
  5886. }
  5887. // MOVEB
  5888. OPCODE(0x10F0)
  5889. {
  5890. u32 adr, res;
  5891. u32 src, dst;
  5892. adr = AREG((Opcode >> 0) & 7);
  5893. DECODE_EXT_WORD
  5894. PRE_IO
  5895. READ_BYTE_F(adr, res)
  5896. flag_C = 0;
  5897. flag_V = 0;
  5898. flag_NotZ = res;
  5899. flag_N = res;
  5900. adr = AREG((Opcode >> 9) & 7);
  5901. AREG((Opcode >> 9) & 7) += 1;
  5902. WRITE_BYTE_F(adr, res)
  5903. POST_IO
  5904. RET(18)
  5905. }
  5906. // MOVEB
  5907. OPCODE(0x1130)
  5908. {
  5909. u32 adr, res;
  5910. u32 src, dst;
  5911. adr = AREG((Opcode >> 0) & 7);
  5912. DECODE_EXT_WORD
  5913. PRE_IO
  5914. READ_BYTE_F(adr, res)
  5915. flag_C = 0;
  5916. flag_V = 0;
  5917. flag_NotZ = res;
  5918. flag_N = res;
  5919. adr = AREG((Opcode >> 9) & 7) - 1;
  5920. AREG((Opcode >> 9) & 7) = adr;
  5921. WRITE_BYTE_F(adr, res)
  5922. POST_IO
  5923. RET(18)
  5924. }
  5925. // MOVEB
  5926. OPCODE(0x1170)
  5927. {
  5928. u32 adr, res;
  5929. u32 src, dst;
  5930. adr = AREG((Opcode >> 0) & 7);
  5931. DECODE_EXT_WORD
  5932. PRE_IO
  5933. READ_BYTE_F(adr, res)
  5934. flag_C = 0;
  5935. flag_V = 0;
  5936. flag_NotZ = res;
  5937. flag_N = res;
  5938. FETCH_SWORD(adr);
  5939. adr += AREG((Opcode >> 9) & 7);
  5940. WRITE_BYTE_F(adr, res)
  5941. POST_IO
  5942. RET(22)
  5943. }
  5944. // MOVEB
  5945. OPCODE(0x11B0)
  5946. {
  5947. u32 adr, res;
  5948. u32 src, dst;
  5949. adr = AREG((Opcode >> 0) & 7);
  5950. DECODE_EXT_WORD
  5951. PRE_IO
  5952. READ_BYTE_F(adr, res)
  5953. flag_C = 0;
  5954. flag_V = 0;
  5955. flag_NotZ = res;
  5956. flag_N = res;
  5957. adr = AREG((Opcode >> 9) & 7);
  5958. DECODE_EXT_WORD
  5959. WRITE_BYTE_F(adr, res)
  5960. POST_IO
  5961. RET(24)
  5962. }
  5963. // MOVEB
  5964. OPCODE(0x11F0)
  5965. {
  5966. u32 adr, res;
  5967. u32 src, dst;
  5968. adr = AREG((Opcode >> 0) & 7);
  5969. DECODE_EXT_WORD
  5970. PRE_IO
  5971. READ_BYTE_F(adr, res)
  5972. flag_C = 0;
  5973. flag_V = 0;
  5974. flag_NotZ = res;
  5975. flag_N = res;
  5976. FETCH_SWORD(adr);
  5977. WRITE_BYTE_F(adr, res)
  5978. POST_IO
  5979. RET(22)
  5980. }
  5981. // MOVEB
  5982. OPCODE(0x13F0)
  5983. {
  5984. u32 adr, res;
  5985. u32 src, dst;
  5986. adr = AREG((Opcode >> 0) & 7);
  5987. DECODE_EXT_WORD
  5988. PRE_IO
  5989. READ_BYTE_F(adr, res)
  5990. flag_C = 0;
  5991. flag_V = 0;
  5992. flag_NotZ = res;
  5993. flag_N = res;
  5994. FETCH_LONG(adr);
  5995. WRITE_BYTE_F(adr, res)
  5996. POST_IO
  5997. RET(26)
  5998. }
  5999. // MOVEB
  6000. OPCODE(0x1EF0)
  6001. {
  6002. u32 adr, res;
  6003. u32 src, dst;
  6004. adr = AREG((Opcode >> 0) & 7);
  6005. DECODE_EXT_WORD
  6006. PRE_IO
  6007. READ_BYTE_F(adr, res)
  6008. flag_C = 0;
  6009. flag_V = 0;
  6010. flag_NotZ = res;
  6011. flag_N = res;
  6012. adr = AREG(7);
  6013. AREG(7) += 2;
  6014. WRITE_BYTE_F(adr, res)
  6015. POST_IO
  6016. RET(18)
  6017. }
  6018. // MOVEB
  6019. OPCODE(0x1F30)
  6020. {
  6021. u32 adr, res;
  6022. u32 src, dst;
  6023. adr = AREG((Opcode >> 0) & 7);
  6024. DECODE_EXT_WORD
  6025. PRE_IO
  6026. READ_BYTE_F(adr, res)
  6027. flag_C = 0;
  6028. flag_V = 0;
  6029. flag_NotZ = res;
  6030. flag_N = res;
  6031. adr = AREG(7) - 2;
  6032. AREG(7) = adr;
  6033. WRITE_BYTE_F(adr, res)
  6034. POST_IO
  6035. RET(18)
  6036. }
  6037. // MOVEB
  6038. OPCODE(0x1038)
  6039. {
  6040. u32 adr, res;
  6041. u32 src, dst;
  6042. FETCH_SWORD(adr);
  6043. PRE_IO
  6044. READ_BYTE_F(adr, res)
  6045. flag_C = 0;
  6046. flag_V = 0;
  6047. flag_NotZ = res;
  6048. flag_N = res;
  6049. DREGu8((Opcode >> 9) & 7) = res;
  6050. POST_IO
  6051. RET(12)
  6052. }
  6053. // MOVEB
  6054. OPCODE(0x10B8)
  6055. {
  6056. u32 adr, res;
  6057. u32 src, dst;
  6058. FETCH_SWORD(adr);
  6059. PRE_IO
  6060. READ_BYTE_F(adr, res)
  6061. flag_C = 0;
  6062. flag_V = 0;
  6063. flag_NotZ = res;
  6064. flag_N = res;
  6065. adr = AREG((Opcode >> 9) & 7);
  6066. WRITE_BYTE_F(adr, res)
  6067. POST_IO
  6068. RET(16)
  6069. }
  6070. // MOVEB
  6071. OPCODE(0x10F8)
  6072. {
  6073. u32 adr, res;
  6074. u32 src, dst;
  6075. FETCH_SWORD(adr);
  6076. PRE_IO
  6077. READ_BYTE_F(adr, res)
  6078. flag_C = 0;
  6079. flag_V = 0;
  6080. flag_NotZ = res;
  6081. flag_N = res;
  6082. adr = AREG((Opcode >> 9) & 7);
  6083. AREG((Opcode >> 9) & 7) += 1;
  6084. WRITE_BYTE_F(adr, res)
  6085. POST_IO
  6086. RET(16)
  6087. }
  6088. // MOVEB
  6089. OPCODE(0x1138)
  6090. {
  6091. u32 adr, res;
  6092. u32 src, dst;
  6093. FETCH_SWORD(adr);
  6094. PRE_IO
  6095. READ_BYTE_F(adr, res)
  6096. flag_C = 0;
  6097. flag_V = 0;
  6098. flag_NotZ = res;
  6099. flag_N = res;
  6100. adr = AREG((Opcode >> 9) & 7) - 1;
  6101. AREG((Opcode >> 9) & 7) = adr;
  6102. WRITE_BYTE_F(adr, res)
  6103. POST_IO
  6104. RET(16)
  6105. }
  6106. // MOVEB
  6107. OPCODE(0x1178)
  6108. {
  6109. u32 adr, res;
  6110. u32 src, dst;
  6111. FETCH_SWORD(adr);
  6112. PRE_IO
  6113. READ_BYTE_F(adr, res)
  6114. flag_C = 0;
  6115. flag_V = 0;
  6116. flag_NotZ = res;
  6117. flag_N = res;
  6118. FETCH_SWORD(adr);
  6119. adr += AREG((Opcode >> 9) & 7);
  6120. WRITE_BYTE_F(adr, res)
  6121. POST_IO
  6122. RET(20)
  6123. }
  6124. // MOVEB
  6125. OPCODE(0x11B8)
  6126. {
  6127. u32 adr, res;
  6128. u32 src, dst;
  6129. FETCH_SWORD(adr);
  6130. PRE_IO
  6131. READ_BYTE_F(adr, res)
  6132. flag_C = 0;
  6133. flag_V = 0;
  6134. flag_NotZ = res;
  6135. flag_N = res;
  6136. adr = AREG((Opcode >> 9) & 7);
  6137. DECODE_EXT_WORD
  6138. WRITE_BYTE_F(adr, res)
  6139. POST_IO
  6140. RET(22)
  6141. }
  6142. // MOVEB
  6143. OPCODE(0x11F8)
  6144. {
  6145. u32 adr, res;
  6146. u32 src, dst;
  6147. FETCH_SWORD(adr);
  6148. PRE_IO
  6149. READ_BYTE_F(adr, res)
  6150. flag_C = 0;
  6151. flag_V = 0;
  6152. flag_NotZ = res;
  6153. flag_N = res;
  6154. FETCH_SWORD(adr);
  6155. WRITE_BYTE_F(adr, res)
  6156. POST_IO
  6157. RET(20)
  6158. }
  6159. // MOVEB
  6160. OPCODE(0x13F8)
  6161. {
  6162. u32 adr, res;
  6163. u32 src, dst;
  6164. FETCH_SWORD(adr);
  6165. PRE_IO
  6166. READ_BYTE_F(adr, res)
  6167. flag_C = 0;
  6168. flag_V = 0;
  6169. flag_NotZ = res;
  6170. flag_N = res;
  6171. FETCH_LONG(adr);
  6172. WRITE_BYTE_F(adr, res)
  6173. POST_IO
  6174. RET(24)
  6175. }
  6176. // MOVEB
  6177. OPCODE(0x1EF8)
  6178. {
  6179. u32 adr, res;
  6180. u32 src, dst;
  6181. FETCH_SWORD(adr);
  6182. PRE_IO
  6183. READ_BYTE_F(adr, res)
  6184. flag_C = 0;
  6185. flag_V = 0;
  6186. flag_NotZ = res;
  6187. flag_N = res;
  6188. adr = AREG(7);
  6189. AREG(7) += 2;
  6190. WRITE_BYTE_F(adr, res)
  6191. POST_IO
  6192. RET(16)
  6193. }
  6194. // MOVEB
  6195. OPCODE(0x1F38)
  6196. {
  6197. u32 adr, res;
  6198. u32 src, dst;
  6199. FETCH_SWORD(adr);
  6200. PRE_IO
  6201. READ_BYTE_F(adr, res)
  6202. flag_C = 0;
  6203. flag_V = 0;
  6204. flag_NotZ = res;
  6205. flag_N = res;
  6206. adr = AREG(7) - 2;
  6207. AREG(7) = adr;
  6208. WRITE_BYTE_F(adr, res)
  6209. POST_IO
  6210. RET(16)
  6211. }
  6212. // MOVEB
  6213. OPCODE(0x1039)
  6214. {
  6215. u32 adr, res;
  6216. u32 src, dst;
  6217. FETCH_LONG(adr);
  6218. PRE_IO
  6219. READ_BYTE_F(adr, res)
  6220. flag_C = 0;
  6221. flag_V = 0;
  6222. flag_NotZ = res;
  6223. flag_N = res;
  6224. DREGu8((Opcode >> 9) & 7) = res;
  6225. POST_IO
  6226. RET(16)
  6227. }
  6228. // MOVEB
  6229. OPCODE(0x10B9)
  6230. {
  6231. u32 adr, res;
  6232. u32 src, dst;
  6233. FETCH_LONG(adr);
  6234. PRE_IO
  6235. READ_BYTE_F(adr, res)
  6236. flag_C = 0;
  6237. flag_V = 0;
  6238. flag_NotZ = res;
  6239. flag_N = res;
  6240. adr = AREG((Opcode >> 9) & 7);
  6241. WRITE_BYTE_F(adr, res)
  6242. POST_IO
  6243. RET(20)
  6244. }
  6245. // MOVEB
  6246. OPCODE(0x10F9)
  6247. {
  6248. u32 adr, res;
  6249. u32 src, dst;
  6250. FETCH_LONG(adr);
  6251. PRE_IO
  6252. READ_BYTE_F(adr, res)
  6253. flag_C = 0;
  6254. flag_V = 0;
  6255. flag_NotZ = res;
  6256. flag_N = res;
  6257. adr = AREG((Opcode >> 9) & 7);
  6258. AREG((Opcode >> 9) & 7) += 1;
  6259. WRITE_BYTE_F(adr, res)
  6260. POST_IO
  6261. RET(20)
  6262. }
  6263. // MOVEB
  6264. OPCODE(0x1139)
  6265. {
  6266. u32 adr, res;
  6267. u32 src, dst;
  6268. FETCH_LONG(adr);
  6269. PRE_IO
  6270. READ_BYTE_F(adr, res)
  6271. flag_C = 0;
  6272. flag_V = 0;
  6273. flag_NotZ = res;
  6274. flag_N = res;
  6275. adr = AREG((Opcode >> 9) & 7) - 1;
  6276. AREG((Opcode >> 9) & 7) = adr;
  6277. WRITE_BYTE_F(adr, res)
  6278. POST_IO
  6279. RET(20)
  6280. }
  6281. // MOVEB
  6282. OPCODE(0x1179)
  6283. {
  6284. u32 adr, res;
  6285. u32 src, dst;
  6286. FETCH_LONG(adr);
  6287. PRE_IO
  6288. READ_BYTE_F(adr, res)
  6289. flag_C = 0;
  6290. flag_V = 0;
  6291. flag_NotZ = res;
  6292. flag_N = res;
  6293. FETCH_SWORD(adr);
  6294. adr += AREG((Opcode >> 9) & 7);
  6295. WRITE_BYTE_F(adr, res)
  6296. POST_IO
  6297. RET(24)
  6298. }
  6299. // MOVEB
  6300. OPCODE(0x11B9)
  6301. {
  6302. u32 adr, res;
  6303. u32 src, dst;
  6304. FETCH_LONG(adr);
  6305. PRE_IO
  6306. READ_BYTE_F(adr, res)
  6307. flag_C = 0;
  6308. flag_V = 0;
  6309. flag_NotZ = res;
  6310. flag_N = res;
  6311. adr = AREG((Opcode >> 9) & 7);
  6312. DECODE_EXT_WORD
  6313. WRITE_BYTE_F(adr, res)
  6314. POST_IO
  6315. RET(26)
  6316. }
  6317. // MOVEB
  6318. OPCODE(0x11F9)
  6319. {
  6320. u32 adr, res;
  6321. u32 src, dst;
  6322. FETCH_LONG(adr);
  6323. PRE_IO
  6324. READ_BYTE_F(adr, res)
  6325. flag_C = 0;
  6326. flag_V = 0;
  6327. flag_NotZ = res;
  6328. flag_N = res;
  6329. FETCH_SWORD(adr);
  6330. WRITE_BYTE_F(adr, res)
  6331. POST_IO
  6332. RET(24)
  6333. }
  6334. // MOVEB
  6335. OPCODE(0x13F9)
  6336. {
  6337. u32 adr, res;
  6338. u32 src, dst;
  6339. FETCH_LONG(adr);
  6340. PRE_IO
  6341. READ_BYTE_F(adr, res)
  6342. flag_C = 0;
  6343. flag_V = 0;
  6344. flag_NotZ = res;
  6345. flag_N = res;
  6346. FETCH_LONG(adr);
  6347. WRITE_BYTE_F(adr, res)
  6348. POST_IO
  6349. RET(28)
  6350. }
  6351. // MOVEB
  6352. OPCODE(0x1EF9)
  6353. {
  6354. u32 adr, res;
  6355. u32 src, dst;
  6356. FETCH_LONG(adr);
  6357. PRE_IO
  6358. READ_BYTE_F(adr, res)
  6359. flag_C = 0;
  6360. flag_V = 0;
  6361. flag_NotZ = res;
  6362. flag_N = res;
  6363. adr = AREG(7);
  6364. AREG(7) += 2;
  6365. WRITE_BYTE_F(adr, res)
  6366. POST_IO
  6367. RET(20)
  6368. }
  6369. // MOVEB
  6370. OPCODE(0x1F39)
  6371. {
  6372. u32 adr, res;
  6373. u32 src, dst;
  6374. FETCH_LONG(adr);
  6375. PRE_IO
  6376. READ_BYTE_F(adr, res)
  6377. flag_C = 0;
  6378. flag_V = 0;
  6379. flag_NotZ = res;
  6380. flag_N = res;
  6381. adr = AREG(7) - 2;
  6382. AREG(7) = adr;
  6383. WRITE_BYTE_F(adr, res)
  6384. POST_IO
  6385. RET(20)
  6386. }
  6387. // MOVEB
  6388. OPCODE(0x103A)
  6389. {
  6390. u32 adr, res;
  6391. u32 src, dst;
  6392. adr = GET_SWORD + GET_PC;
  6393. PC++;
  6394. PRE_IO
  6395. READ_BYTE_F(adr, res)
  6396. flag_C = 0;
  6397. flag_V = 0;
  6398. flag_NotZ = res;
  6399. flag_N = res;
  6400. DREGu8((Opcode >> 9) & 7) = res;
  6401. POST_IO
  6402. RET(12)
  6403. }
  6404. // MOVEB
  6405. OPCODE(0x10BA)
  6406. {
  6407. u32 adr, res;
  6408. u32 src, dst;
  6409. adr = GET_SWORD + GET_PC;
  6410. PC++;
  6411. PRE_IO
  6412. READ_BYTE_F(adr, res)
  6413. flag_C = 0;
  6414. flag_V = 0;
  6415. flag_NotZ = res;
  6416. flag_N = res;
  6417. adr = AREG((Opcode >> 9) & 7);
  6418. WRITE_BYTE_F(adr, res)
  6419. POST_IO
  6420. RET(16)
  6421. }
  6422. // MOVEB
  6423. OPCODE(0x10FA)
  6424. {
  6425. u32 adr, res;
  6426. u32 src, dst;
  6427. adr = GET_SWORD + GET_PC;
  6428. PC++;
  6429. PRE_IO
  6430. READ_BYTE_F(adr, res)
  6431. flag_C = 0;
  6432. flag_V = 0;
  6433. flag_NotZ = res;
  6434. flag_N = res;
  6435. adr = AREG((Opcode >> 9) & 7);
  6436. AREG((Opcode >> 9) & 7) += 1;
  6437. WRITE_BYTE_F(adr, res)
  6438. POST_IO
  6439. RET(16)
  6440. }
  6441. // MOVEB
  6442. OPCODE(0x113A)
  6443. {
  6444. u32 adr, res;
  6445. u32 src, dst;
  6446. adr = GET_SWORD + GET_PC;
  6447. PC++;
  6448. PRE_IO
  6449. READ_BYTE_F(adr, res)
  6450. flag_C = 0;
  6451. flag_V = 0;
  6452. flag_NotZ = res;
  6453. flag_N = res;
  6454. adr = AREG((Opcode >> 9) & 7) - 1;
  6455. AREG((Opcode >> 9) & 7) = adr;
  6456. WRITE_BYTE_F(adr, res)
  6457. POST_IO
  6458. RET(16)
  6459. }
  6460. // MOVEB
  6461. OPCODE(0x117A)
  6462. {
  6463. u32 adr, res;
  6464. u32 src, dst;
  6465. adr = GET_SWORD + GET_PC;
  6466. PC++;
  6467. PRE_IO
  6468. READ_BYTE_F(adr, res)
  6469. flag_C = 0;
  6470. flag_V = 0;
  6471. flag_NotZ = res;
  6472. flag_N = res;
  6473. FETCH_SWORD(adr);
  6474. adr += AREG((Opcode >> 9) & 7);
  6475. WRITE_BYTE_F(adr, res)
  6476. POST_IO
  6477. RET(20)
  6478. }
  6479. // MOVEB
  6480. OPCODE(0x11BA)
  6481. {
  6482. u32 adr, res;
  6483. u32 src, dst;
  6484. adr = GET_SWORD + GET_PC;
  6485. PC++;
  6486. PRE_IO
  6487. READ_BYTE_F(adr, res)
  6488. flag_C = 0;
  6489. flag_V = 0;
  6490. flag_NotZ = res;
  6491. flag_N = res;
  6492. adr = AREG((Opcode >> 9) & 7);
  6493. DECODE_EXT_WORD
  6494. WRITE_BYTE_F(adr, res)
  6495. POST_IO
  6496. RET(22)
  6497. }
  6498. // MOVEB
  6499. OPCODE(0x11FA)
  6500. {
  6501. u32 adr, res;
  6502. u32 src, dst;
  6503. adr = GET_SWORD + GET_PC;
  6504. PC++;
  6505. PRE_IO
  6506. READ_BYTE_F(adr, res)
  6507. flag_C = 0;
  6508. flag_V = 0;
  6509. flag_NotZ = res;
  6510. flag_N = res;
  6511. FETCH_SWORD(adr);
  6512. WRITE_BYTE_F(adr, res)
  6513. POST_IO
  6514. RET(20)
  6515. }
  6516. // MOVEB
  6517. OPCODE(0x13FA)
  6518. {
  6519. u32 adr, res;
  6520. u32 src, dst;
  6521. adr = GET_SWORD + GET_PC;
  6522. PC++;
  6523. PRE_IO
  6524. READ_BYTE_F(adr, res)
  6525. flag_C = 0;
  6526. flag_V = 0;
  6527. flag_NotZ = res;
  6528. flag_N = res;
  6529. FETCH_LONG(adr);
  6530. WRITE_BYTE_F(adr, res)
  6531. POST_IO
  6532. RET(24)
  6533. }
  6534. // MOVEB
  6535. OPCODE(0x1EFA)
  6536. {
  6537. u32 adr, res;
  6538. u32 src, dst;
  6539. adr = GET_SWORD + GET_PC;
  6540. PC++;
  6541. PRE_IO
  6542. READ_BYTE_F(adr, res)
  6543. flag_C = 0;
  6544. flag_V = 0;
  6545. flag_NotZ = res;
  6546. flag_N = res;
  6547. adr = AREG(7);
  6548. AREG(7) += 2;
  6549. WRITE_BYTE_F(adr, res)
  6550. POST_IO
  6551. RET(16)
  6552. }
  6553. // MOVEB
  6554. OPCODE(0x1F3A)
  6555. {
  6556. u32 adr, res;
  6557. u32 src, dst;
  6558. adr = GET_SWORD + GET_PC;
  6559. PC++;
  6560. PRE_IO
  6561. READ_BYTE_F(adr, res)
  6562. flag_C = 0;
  6563. flag_V = 0;
  6564. flag_NotZ = res;
  6565. flag_N = res;
  6566. adr = AREG(7) - 2;
  6567. AREG(7) = adr;
  6568. WRITE_BYTE_F(adr, res)
  6569. POST_IO
  6570. RET(16)
  6571. }
  6572. // MOVEB
  6573. OPCODE(0x103B)
  6574. {
  6575. u32 adr, res;
  6576. u32 src, dst;
  6577. adr = (uptr)(PC) - BasePC;
  6578. DECODE_EXT_WORD
  6579. PRE_IO
  6580. READ_BYTE_F(adr, res)
  6581. flag_C = 0;
  6582. flag_V = 0;
  6583. flag_NotZ = res;
  6584. flag_N = res;
  6585. DREGu8((Opcode >> 9) & 7) = res;
  6586. POST_IO
  6587. RET(14)
  6588. }
  6589. // MOVEB
  6590. OPCODE(0x10BB)
  6591. {
  6592. u32 adr, res;
  6593. u32 src, dst;
  6594. adr = (uptr)(PC) - BasePC;
  6595. DECODE_EXT_WORD
  6596. PRE_IO
  6597. READ_BYTE_F(adr, res)
  6598. flag_C = 0;
  6599. flag_V = 0;
  6600. flag_NotZ = res;
  6601. flag_N = res;
  6602. adr = AREG((Opcode >> 9) & 7);
  6603. WRITE_BYTE_F(adr, res)
  6604. POST_IO
  6605. RET(18)
  6606. }
  6607. // MOVEB
  6608. OPCODE(0x10FB)
  6609. {
  6610. u32 adr, res;
  6611. u32 src, dst;
  6612. adr = (uptr)(PC) - BasePC;
  6613. DECODE_EXT_WORD
  6614. PRE_IO
  6615. READ_BYTE_F(adr, res)
  6616. flag_C = 0;
  6617. flag_V = 0;
  6618. flag_NotZ = res;
  6619. flag_N = res;
  6620. adr = AREG((Opcode >> 9) & 7);
  6621. AREG((Opcode >> 9) & 7) += 1;
  6622. WRITE_BYTE_F(adr, res)
  6623. POST_IO
  6624. RET(18)
  6625. }
  6626. // MOVEB
  6627. OPCODE(0x113B)
  6628. {
  6629. u32 adr, res;
  6630. u32 src, dst;
  6631. adr = (uptr)(PC) - BasePC;
  6632. DECODE_EXT_WORD
  6633. PRE_IO
  6634. READ_BYTE_F(adr, res)
  6635. flag_C = 0;
  6636. flag_V = 0;
  6637. flag_NotZ = res;
  6638. flag_N = res;
  6639. adr = AREG((Opcode >> 9) & 7) - 1;
  6640. AREG((Opcode >> 9) & 7) = adr;
  6641. WRITE_BYTE_F(adr, res)
  6642. POST_IO
  6643. RET(18)
  6644. }
  6645. // MOVEB
  6646. OPCODE(0x117B)
  6647. {
  6648. u32 adr, res;
  6649. u32 src, dst;
  6650. adr = (uptr)(PC) - BasePC;
  6651. DECODE_EXT_WORD
  6652. PRE_IO
  6653. READ_BYTE_F(adr, res)
  6654. flag_C = 0;
  6655. flag_V = 0;
  6656. flag_NotZ = res;
  6657. flag_N = res;
  6658. FETCH_SWORD(adr);
  6659. adr += AREG((Opcode >> 9) & 7);
  6660. WRITE_BYTE_F(adr, res)
  6661. POST_IO
  6662. RET(22)
  6663. }
  6664. // MOVEB
  6665. OPCODE(0x11BB)
  6666. {
  6667. u32 adr, res;
  6668. u32 src, dst;
  6669. adr = (uptr)(PC) - BasePC;
  6670. DECODE_EXT_WORD
  6671. PRE_IO
  6672. READ_BYTE_F(adr, res)
  6673. flag_C = 0;
  6674. flag_V = 0;
  6675. flag_NotZ = res;
  6676. flag_N = res;
  6677. adr = AREG((Opcode >> 9) & 7);
  6678. DECODE_EXT_WORD
  6679. WRITE_BYTE_F(adr, res)
  6680. POST_IO
  6681. RET(24)
  6682. }
  6683. // MOVEB
  6684. OPCODE(0x11FB)
  6685. {
  6686. u32 adr, res;
  6687. u32 src, dst;
  6688. adr = (uptr)(PC) - BasePC;
  6689. DECODE_EXT_WORD
  6690. PRE_IO
  6691. READ_BYTE_F(adr, res)
  6692. flag_C = 0;
  6693. flag_V = 0;
  6694. flag_NotZ = res;
  6695. flag_N = res;
  6696. FETCH_SWORD(adr);
  6697. WRITE_BYTE_F(adr, res)
  6698. POST_IO
  6699. RET(22)
  6700. }
  6701. // MOVEB
  6702. OPCODE(0x13FB)
  6703. {
  6704. u32 adr, res;
  6705. u32 src, dst;
  6706. adr = (uptr)(PC) - BasePC;
  6707. DECODE_EXT_WORD
  6708. PRE_IO
  6709. READ_BYTE_F(adr, res)
  6710. flag_C = 0;
  6711. flag_V = 0;
  6712. flag_NotZ = res;
  6713. flag_N = res;
  6714. FETCH_LONG(adr);
  6715. WRITE_BYTE_F(adr, res)
  6716. POST_IO
  6717. RET(26)
  6718. }
  6719. // MOVEB
  6720. OPCODE(0x1EFB)
  6721. {
  6722. u32 adr, res;
  6723. u32 src, dst;
  6724. adr = (uptr)(PC) - BasePC;
  6725. DECODE_EXT_WORD
  6726. PRE_IO
  6727. READ_BYTE_F(adr, res)
  6728. flag_C = 0;
  6729. flag_V = 0;
  6730. flag_NotZ = res;
  6731. flag_N = res;
  6732. adr = AREG(7);
  6733. AREG(7) += 2;
  6734. WRITE_BYTE_F(adr, res)
  6735. POST_IO
  6736. RET(18)
  6737. }
  6738. // MOVEB
  6739. OPCODE(0x1F3B)
  6740. {
  6741. u32 adr, res;
  6742. u32 src, dst;
  6743. adr = (uptr)(PC) - BasePC;
  6744. DECODE_EXT_WORD
  6745. PRE_IO
  6746. READ_BYTE_F(adr, res)
  6747. flag_C = 0;
  6748. flag_V = 0;
  6749. flag_NotZ = res;
  6750. flag_N = res;
  6751. adr = AREG(7) - 2;
  6752. AREG(7) = adr;
  6753. WRITE_BYTE_F(adr, res)
  6754. POST_IO
  6755. RET(18)
  6756. }
  6757. // MOVEB
  6758. OPCODE(0x103C)
  6759. {
  6760. u32 adr, res;
  6761. u32 src, dst;
  6762. FETCH_BYTE(res);
  6763. flag_C = 0;
  6764. flag_V = 0;
  6765. flag_NotZ = res;
  6766. flag_N = res;
  6767. DREGu8((Opcode >> 9) & 7) = res;
  6768. RET(8)
  6769. }
  6770. // MOVEB
  6771. OPCODE(0x10BC)
  6772. {
  6773. u32 adr, res;
  6774. u32 src, dst;
  6775. FETCH_BYTE(res);
  6776. flag_C = 0;
  6777. flag_V = 0;
  6778. flag_NotZ = res;
  6779. flag_N = res;
  6780. adr = AREG((Opcode >> 9) & 7);
  6781. PRE_IO
  6782. WRITE_BYTE_F(adr, res)
  6783. POST_IO
  6784. RET(12)
  6785. }
  6786. // MOVEB
  6787. OPCODE(0x10FC)
  6788. {
  6789. u32 adr, res;
  6790. u32 src, dst;
  6791. FETCH_BYTE(res);
  6792. flag_C = 0;
  6793. flag_V = 0;
  6794. flag_NotZ = res;
  6795. flag_N = res;
  6796. adr = AREG((Opcode >> 9) & 7);
  6797. AREG((Opcode >> 9) & 7) += 1;
  6798. PRE_IO
  6799. WRITE_BYTE_F(adr, res)
  6800. POST_IO
  6801. RET(12)
  6802. }
  6803. // MOVEB
  6804. OPCODE(0x113C)
  6805. {
  6806. u32 adr, res;
  6807. u32 src, dst;
  6808. FETCH_BYTE(res);
  6809. flag_C = 0;
  6810. flag_V = 0;
  6811. flag_NotZ = res;
  6812. flag_N = res;
  6813. adr = AREG((Opcode >> 9) & 7) - 1;
  6814. AREG((Opcode >> 9) & 7) = adr;
  6815. PRE_IO
  6816. WRITE_BYTE_F(adr, res)
  6817. POST_IO
  6818. RET(12)
  6819. }
  6820. // MOVEB
  6821. OPCODE(0x117C)
  6822. {
  6823. u32 adr, res;
  6824. u32 src, dst;
  6825. FETCH_BYTE(res);
  6826. flag_C = 0;
  6827. flag_V = 0;
  6828. flag_NotZ = res;
  6829. flag_N = res;
  6830. FETCH_SWORD(adr);
  6831. adr += AREG((Opcode >> 9) & 7);
  6832. PRE_IO
  6833. WRITE_BYTE_F(adr, res)
  6834. POST_IO
  6835. RET(16)
  6836. }
  6837. // MOVEB
  6838. OPCODE(0x11BC)
  6839. {
  6840. u32 adr, res;
  6841. u32 src, dst;
  6842. FETCH_BYTE(res);
  6843. flag_C = 0;
  6844. flag_V = 0;
  6845. flag_NotZ = res;
  6846. flag_N = res;
  6847. adr = AREG((Opcode >> 9) & 7);
  6848. DECODE_EXT_WORD
  6849. PRE_IO
  6850. WRITE_BYTE_F(adr, res)
  6851. POST_IO
  6852. RET(18)
  6853. }
  6854. // MOVEB
  6855. OPCODE(0x11FC)
  6856. {
  6857. u32 adr, res;
  6858. u32 src, dst;
  6859. FETCH_BYTE(res);
  6860. flag_C = 0;
  6861. flag_V = 0;
  6862. flag_NotZ = res;
  6863. flag_N = res;
  6864. FETCH_SWORD(adr);
  6865. PRE_IO
  6866. WRITE_BYTE_F(adr, res)
  6867. POST_IO
  6868. RET(16)
  6869. }
  6870. // MOVEB
  6871. OPCODE(0x13FC)
  6872. {
  6873. u32 adr, res;
  6874. u32 src, dst;
  6875. FETCH_BYTE(res);
  6876. flag_C = 0;
  6877. flag_V = 0;
  6878. flag_NotZ = res;
  6879. flag_N = res;
  6880. FETCH_LONG(adr);
  6881. PRE_IO
  6882. WRITE_BYTE_F(adr, res)
  6883. POST_IO
  6884. RET(20)
  6885. }
  6886. // MOVEB
  6887. OPCODE(0x1EFC)
  6888. {
  6889. u32 adr, res;
  6890. u32 src, dst;
  6891. FETCH_BYTE(res);
  6892. flag_C = 0;
  6893. flag_V = 0;
  6894. flag_NotZ = res;
  6895. flag_N = res;
  6896. adr = AREG(7);
  6897. AREG(7) += 2;
  6898. PRE_IO
  6899. WRITE_BYTE_F(adr, res)
  6900. POST_IO
  6901. RET(12)
  6902. }
  6903. // MOVEB
  6904. OPCODE(0x1F3C)
  6905. {
  6906. u32 adr, res;
  6907. u32 src, dst;
  6908. FETCH_BYTE(res);
  6909. flag_C = 0;
  6910. flag_V = 0;
  6911. flag_NotZ = res;
  6912. flag_N = res;
  6913. adr = AREG(7) - 2;
  6914. AREG(7) = adr;
  6915. PRE_IO
  6916. WRITE_BYTE_F(adr, res)
  6917. POST_IO
  6918. RET(12)
  6919. }
  6920. // MOVEB
  6921. OPCODE(0x101F)
  6922. {
  6923. u32 adr, res;
  6924. u32 src, dst;
  6925. adr = AREG(7);
  6926. AREG(7) += 2;
  6927. PRE_IO
  6928. READ_BYTE_F(adr, res)
  6929. flag_C = 0;
  6930. flag_V = 0;
  6931. flag_NotZ = res;
  6932. flag_N = res;
  6933. DREGu8((Opcode >> 9) & 7) = res;
  6934. POST_IO
  6935. RET(8)
  6936. }
  6937. // MOVEB
  6938. OPCODE(0x109F)
  6939. {
  6940. u32 adr, res;
  6941. u32 src, dst;
  6942. adr = AREG(7);
  6943. AREG(7) += 2;
  6944. PRE_IO
  6945. READ_BYTE_F(adr, res)
  6946. flag_C = 0;
  6947. flag_V = 0;
  6948. flag_NotZ = res;
  6949. flag_N = res;
  6950. adr = AREG((Opcode >> 9) & 7);
  6951. WRITE_BYTE_F(adr, res)
  6952. POST_IO
  6953. RET(12)
  6954. }
  6955. // MOVEB
  6956. OPCODE(0x10DF)
  6957. {
  6958. u32 adr, res;
  6959. u32 src, dst;
  6960. adr = AREG(7);
  6961. AREG(7) += 2;
  6962. PRE_IO
  6963. READ_BYTE_F(adr, res)
  6964. flag_C = 0;
  6965. flag_V = 0;
  6966. flag_NotZ = res;
  6967. flag_N = res;
  6968. adr = AREG((Opcode >> 9) & 7);
  6969. AREG((Opcode >> 9) & 7) += 1;
  6970. WRITE_BYTE_F(adr, res)
  6971. POST_IO
  6972. RET(12)
  6973. }
  6974. // MOVEB
  6975. OPCODE(0x111F)
  6976. {
  6977. u32 adr, res;
  6978. u32 src, dst;
  6979. adr = AREG(7);
  6980. AREG(7) += 2;
  6981. PRE_IO
  6982. READ_BYTE_F(adr, res)
  6983. flag_C = 0;
  6984. flag_V = 0;
  6985. flag_NotZ = res;
  6986. flag_N = res;
  6987. adr = AREG((Opcode >> 9) & 7) - 1;
  6988. AREG((Opcode >> 9) & 7) = adr;
  6989. WRITE_BYTE_F(adr, res)
  6990. POST_IO
  6991. RET(12)
  6992. }
  6993. // MOVEB
  6994. OPCODE(0x115F)
  6995. {
  6996. u32 adr, res;
  6997. u32 src, dst;
  6998. adr = AREG(7);
  6999. AREG(7) += 2;
  7000. PRE_IO
  7001. READ_BYTE_F(adr, res)
  7002. flag_C = 0;
  7003. flag_V = 0;
  7004. flag_NotZ = res;
  7005. flag_N = res;
  7006. FETCH_SWORD(adr);
  7007. adr += AREG((Opcode >> 9) & 7);
  7008. WRITE_BYTE_F(adr, res)
  7009. POST_IO
  7010. RET(16)
  7011. }
  7012. // MOVEB
  7013. OPCODE(0x119F)
  7014. {
  7015. u32 adr, res;
  7016. u32 src, dst;
  7017. adr = AREG(7);
  7018. AREG(7) += 2;
  7019. PRE_IO
  7020. READ_BYTE_F(adr, res)
  7021. flag_C = 0;
  7022. flag_V = 0;
  7023. flag_NotZ = res;
  7024. flag_N = res;
  7025. adr = AREG((Opcode >> 9) & 7);
  7026. DECODE_EXT_WORD
  7027. WRITE_BYTE_F(adr, res)
  7028. POST_IO
  7029. RET(18)
  7030. }
  7031. // MOVEB
  7032. OPCODE(0x11DF)
  7033. {
  7034. u32 adr, res;
  7035. u32 src, dst;
  7036. adr = AREG(7);
  7037. AREG(7) += 2;
  7038. PRE_IO
  7039. READ_BYTE_F(adr, res)
  7040. flag_C = 0;
  7041. flag_V = 0;
  7042. flag_NotZ = res;
  7043. flag_N = res;
  7044. FETCH_SWORD(adr);
  7045. WRITE_BYTE_F(adr, res)
  7046. POST_IO
  7047. RET(16)
  7048. }
  7049. // MOVEB
  7050. OPCODE(0x13DF)
  7051. {
  7052. u32 adr, res;
  7053. u32 src, dst;
  7054. adr = AREG(7);
  7055. AREG(7) += 2;
  7056. PRE_IO
  7057. READ_BYTE_F(adr, res)
  7058. flag_C = 0;
  7059. flag_V = 0;
  7060. flag_NotZ = res;
  7061. flag_N = res;
  7062. FETCH_LONG(adr);
  7063. WRITE_BYTE_F(adr, res)
  7064. POST_IO
  7065. RET(20)
  7066. }
  7067. // MOVEB
  7068. OPCODE(0x1EDF)
  7069. {
  7070. u32 adr, res;
  7071. u32 src, dst;
  7072. adr = AREG(7);
  7073. AREG(7) += 2;
  7074. PRE_IO
  7075. READ_BYTE_F(adr, res)
  7076. flag_C = 0;
  7077. flag_V = 0;
  7078. flag_NotZ = res;
  7079. flag_N = res;
  7080. adr = AREG(7);
  7081. AREG(7) += 2;
  7082. WRITE_BYTE_F(adr, res)
  7083. POST_IO
  7084. RET(12)
  7085. }
  7086. // MOVEB
  7087. OPCODE(0x1F1F)
  7088. {
  7089. u32 adr, res;
  7090. u32 src, dst;
  7091. adr = AREG(7);
  7092. AREG(7) += 2;
  7093. PRE_IO
  7094. READ_BYTE_F(adr, res)
  7095. flag_C = 0;
  7096. flag_V = 0;
  7097. flag_NotZ = res;
  7098. flag_N = res;
  7099. adr = AREG(7) - 2;
  7100. AREG(7) = adr;
  7101. WRITE_BYTE_F(adr, res)
  7102. POST_IO
  7103. RET(12)
  7104. }
  7105. // MOVEB
  7106. OPCODE(0x1027)
  7107. {
  7108. u32 adr, res;
  7109. u32 src, dst;
  7110. adr = AREG(7) - 2;
  7111. AREG(7) = adr;
  7112. PRE_IO
  7113. READ_BYTE_F(adr, res)
  7114. flag_C = 0;
  7115. flag_V = 0;
  7116. flag_NotZ = res;
  7117. flag_N = res;
  7118. DREGu8((Opcode >> 9) & 7) = res;
  7119. POST_IO
  7120. RET(10)
  7121. }
  7122. // MOVEB
  7123. OPCODE(0x10A7)
  7124. {
  7125. u32 adr, res;
  7126. u32 src, dst;
  7127. adr = AREG(7) - 2;
  7128. AREG(7) = adr;
  7129. PRE_IO
  7130. READ_BYTE_F(adr, res)
  7131. flag_C = 0;
  7132. flag_V = 0;
  7133. flag_NotZ = res;
  7134. flag_N = res;
  7135. adr = AREG((Opcode >> 9) & 7);
  7136. WRITE_BYTE_F(adr, res)
  7137. POST_IO
  7138. RET(14)
  7139. }
  7140. // MOVEB
  7141. OPCODE(0x10E7)
  7142. {
  7143. u32 adr, res;
  7144. u32 src, dst;
  7145. adr = AREG(7) - 2;
  7146. AREG(7) = adr;
  7147. PRE_IO
  7148. READ_BYTE_F(adr, res)
  7149. flag_C = 0;
  7150. flag_V = 0;
  7151. flag_NotZ = res;
  7152. flag_N = res;
  7153. adr = AREG((Opcode >> 9) & 7);
  7154. AREG((Opcode >> 9) & 7) += 1;
  7155. WRITE_BYTE_F(adr, res)
  7156. POST_IO
  7157. RET(14)
  7158. }
  7159. // MOVEB
  7160. OPCODE(0x1127)
  7161. {
  7162. u32 adr, res;
  7163. u32 src, dst;
  7164. adr = AREG(7) - 2;
  7165. AREG(7) = adr;
  7166. PRE_IO
  7167. READ_BYTE_F(adr, res)
  7168. flag_C = 0;
  7169. flag_V = 0;
  7170. flag_NotZ = res;
  7171. flag_N = res;
  7172. adr = AREG((Opcode >> 9) & 7) - 1;
  7173. AREG((Opcode >> 9) & 7) = adr;
  7174. WRITE_BYTE_F(adr, res)
  7175. POST_IO
  7176. RET(14)
  7177. }
  7178. // MOVEB
  7179. OPCODE(0x1167)
  7180. {
  7181. u32 adr, res;
  7182. u32 src, dst;
  7183. adr = AREG(7) - 2;
  7184. AREG(7) = adr;
  7185. PRE_IO
  7186. READ_BYTE_F(adr, res)
  7187. flag_C = 0;
  7188. flag_V = 0;
  7189. flag_NotZ = res;
  7190. flag_N = res;
  7191. FETCH_SWORD(adr);
  7192. adr += AREG((Opcode >> 9) & 7);
  7193. WRITE_BYTE_F(adr, res)
  7194. POST_IO
  7195. RET(18)
  7196. }
  7197. // MOVEB
  7198. OPCODE(0x11A7)
  7199. {
  7200. u32 adr, res;
  7201. u32 src, dst;
  7202. adr = AREG(7) - 2;
  7203. AREG(7) = adr;
  7204. PRE_IO
  7205. READ_BYTE_F(adr, res)
  7206. flag_C = 0;
  7207. flag_V = 0;
  7208. flag_NotZ = res;
  7209. flag_N = res;
  7210. adr = AREG((Opcode >> 9) & 7);
  7211. DECODE_EXT_WORD
  7212. WRITE_BYTE_F(adr, res)
  7213. POST_IO
  7214. RET(20)
  7215. }
  7216. // MOVEB
  7217. OPCODE(0x11E7)
  7218. {
  7219. u32 adr, res;
  7220. u32 src, dst;
  7221. adr = AREG(7) - 2;
  7222. AREG(7) = adr;
  7223. PRE_IO
  7224. READ_BYTE_F(adr, res)
  7225. flag_C = 0;
  7226. flag_V = 0;
  7227. flag_NotZ = res;
  7228. flag_N = res;
  7229. FETCH_SWORD(adr);
  7230. WRITE_BYTE_F(adr, res)
  7231. POST_IO
  7232. RET(18)
  7233. }
  7234. // MOVEB
  7235. OPCODE(0x13E7)
  7236. {
  7237. u32 adr, res;
  7238. u32 src, dst;
  7239. adr = AREG(7) - 2;
  7240. AREG(7) = adr;
  7241. PRE_IO
  7242. READ_BYTE_F(adr, res)
  7243. flag_C = 0;
  7244. flag_V = 0;
  7245. flag_NotZ = res;
  7246. flag_N = res;
  7247. FETCH_LONG(adr);
  7248. WRITE_BYTE_F(adr, res)
  7249. POST_IO
  7250. RET(22)
  7251. }
  7252. // MOVEB
  7253. OPCODE(0x1EE7)
  7254. {
  7255. u32 adr, res;
  7256. u32 src, dst;
  7257. adr = AREG(7) - 2;
  7258. AREG(7) = adr;
  7259. PRE_IO
  7260. READ_BYTE_F(adr, res)
  7261. flag_C = 0;
  7262. flag_V = 0;
  7263. flag_NotZ = res;
  7264. flag_N = res;
  7265. adr = AREG(7);
  7266. AREG(7) += 2;
  7267. WRITE_BYTE_F(adr, res)
  7268. POST_IO
  7269. RET(14)
  7270. }
  7271. // MOVEB
  7272. OPCODE(0x1F27)
  7273. {
  7274. u32 adr, res;
  7275. u32 src, dst;
  7276. adr = AREG(7) - 2;
  7277. AREG(7) = adr;
  7278. PRE_IO
  7279. READ_BYTE_F(adr, res)
  7280. flag_C = 0;
  7281. flag_V = 0;
  7282. flag_NotZ = res;
  7283. flag_N = res;
  7284. adr = AREG(7) - 2;
  7285. AREG(7) = adr;
  7286. WRITE_BYTE_F(adr, res)
  7287. POST_IO
  7288. RET(14)
  7289. }
  7290. // MOVEL
  7291. OPCODE(0x2000)
  7292. {
  7293. u32 adr, res;
  7294. u32 src, dst;
  7295. res = DREGu32((Opcode >> 0) & 7);
  7296. flag_C = 0;
  7297. flag_V = 0;
  7298. flag_NotZ = res;
  7299. flag_N = res >> 24;
  7300. DREGu32((Opcode >> 9) & 7) = res;
  7301. RET(4)
  7302. }
  7303. // MOVEL
  7304. OPCODE(0x2080)
  7305. {
  7306. u32 adr, res;
  7307. u32 src, dst;
  7308. res = DREGu32((Opcode >> 0) & 7);
  7309. flag_C = 0;
  7310. flag_V = 0;
  7311. flag_NotZ = res;
  7312. flag_N = res >> 24;
  7313. adr = AREG((Opcode >> 9) & 7);
  7314. PRE_IO
  7315. WRITE_LONG_F(adr, res)
  7316. POST_IO
  7317. RET(12)
  7318. }
  7319. // MOVEL
  7320. OPCODE(0x20C0)
  7321. {
  7322. u32 adr, res;
  7323. u32 src, dst;
  7324. res = DREGu32((Opcode >> 0) & 7);
  7325. flag_C = 0;
  7326. flag_V = 0;
  7327. flag_NotZ = res;
  7328. flag_N = res >> 24;
  7329. adr = AREG((Opcode >> 9) & 7);
  7330. AREG((Opcode >> 9) & 7) += 4;
  7331. PRE_IO
  7332. WRITE_LONG_F(adr, res)
  7333. POST_IO
  7334. RET(12)
  7335. }
  7336. // MOVEL
  7337. OPCODE(0x2100)
  7338. {
  7339. u32 adr, res;
  7340. u32 src, dst;
  7341. res = DREGu32((Opcode >> 0) & 7);
  7342. flag_C = 0;
  7343. flag_V = 0;
  7344. flag_NotZ = res;
  7345. flag_N = res >> 24;
  7346. adr = AREG((Opcode >> 9) & 7) - 4;
  7347. AREG((Opcode >> 9) & 7) = adr;
  7348. PRE_IO
  7349. WRITE_LONG_DEC_F(adr, res)
  7350. POST_IO
  7351. RET(12)
  7352. }
  7353. // MOVEL
  7354. OPCODE(0x2140)
  7355. {
  7356. u32 adr, res;
  7357. u32 src, dst;
  7358. res = DREGu32((Opcode >> 0) & 7);
  7359. flag_C = 0;
  7360. flag_V = 0;
  7361. flag_NotZ = res;
  7362. flag_N = res >> 24;
  7363. FETCH_SWORD(adr);
  7364. adr += AREG((Opcode >> 9) & 7);
  7365. PRE_IO
  7366. WRITE_LONG_F(adr, res)
  7367. POST_IO
  7368. RET(16)
  7369. }
  7370. // MOVEL
  7371. OPCODE(0x2180)
  7372. {
  7373. u32 adr, res;
  7374. u32 src, dst;
  7375. res = DREGu32((Opcode >> 0) & 7);
  7376. flag_C = 0;
  7377. flag_V = 0;
  7378. flag_NotZ = res;
  7379. flag_N = res >> 24;
  7380. adr = AREG((Opcode >> 9) & 7);
  7381. DECODE_EXT_WORD
  7382. PRE_IO
  7383. WRITE_LONG_F(adr, res)
  7384. POST_IO
  7385. RET(18)
  7386. }
  7387. // MOVEL
  7388. OPCODE(0x21C0)
  7389. {
  7390. u32 adr, res;
  7391. u32 src, dst;
  7392. res = DREGu32((Opcode >> 0) & 7);
  7393. flag_C = 0;
  7394. flag_V = 0;
  7395. flag_NotZ = res;
  7396. flag_N = res >> 24;
  7397. FETCH_SWORD(adr);
  7398. PRE_IO
  7399. WRITE_LONG_F(adr, res)
  7400. POST_IO
  7401. RET(16)
  7402. }
  7403. // MOVEL
  7404. OPCODE(0x23C0)
  7405. {
  7406. u32 adr, res;
  7407. u32 src, dst;
  7408. res = DREGu32((Opcode >> 0) & 7);
  7409. flag_C = 0;
  7410. flag_V = 0;
  7411. flag_NotZ = res;
  7412. flag_N = res >> 24;
  7413. FETCH_LONG(adr);
  7414. PRE_IO
  7415. WRITE_LONG_F(adr, res)
  7416. POST_IO
  7417. RET(20)
  7418. }
  7419. // MOVEL
  7420. OPCODE(0x2EC0)
  7421. {
  7422. u32 adr, res;
  7423. u32 src, dst;
  7424. res = DREGu32((Opcode >> 0) & 7);
  7425. flag_C = 0;
  7426. flag_V = 0;
  7427. flag_NotZ = res;
  7428. flag_N = res >> 24;
  7429. adr = AREG(7);
  7430. AREG(7) += 4;
  7431. PRE_IO
  7432. WRITE_LONG_F(adr, res)
  7433. POST_IO
  7434. RET(12)
  7435. }
  7436. // MOVEL
  7437. OPCODE(0x2F00)
  7438. {
  7439. u32 adr, res;
  7440. u32 src, dst;
  7441. res = DREGu32((Opcode >> 0) & 7);
  7442. flag_C = 0;
  7443. flag_V = 0;
  7444. flag_NotZ = res;
  7445. flag_N = res >> 24;
  7446. adr = AREG(7) - 4;
  7447. AREG(7) = adr;
  7448. PRE_IO
  7449. WRITE_LONG_DEC_F(adr, res)
  7450. POST_IO
  7451. RET(12)
  7452. }
  7453. // MOVEL
  7454. OPCODE(0x2008)
  7455. {
  7456. u32 adr, res;
  7457. u32 src, dst;
  7458. res = AREGu32((Opcode >> 0) & 7);
  7459. flag_C = 0;
  7460. flag_V = 0;
  7461. flag_NotZ = res;
  7462. flag_N = res >> 24;
  7463. DREGu32((Opcode >> 9) & 7) = res;
  7464. RET(4)
  7465. }
  7466. // MOVEL
  7467. OPCODE(0x2088)
  7468. {
  7469. u32 adr, res;
  7470. u32 src, dst;
  7471. res = AREGu32((Opcode >> 0) & 7);
  7472. flag_C = 0;
  7473. flag_V = 0;
  7474. flag_NotZ = res;
  7475. flag_N = res >> 24;
  7476. adr = AREG((Opcode >> 9) & 7);
  7477. PRE_IO
  7478. WRITE_LONG_F(adr, res)
  7479. POST_IO
  7480. RET(12)
  7481. }
  7482. // MOVEL
  7483. OPCODE(0x20C8)
  7484. {
  7485. u32 adr, res;
  7486. u32 src, dst;
  7487. res = AREGu32((Opcode >> 0) & 7);
  7488. flag_C = 0;
  7489. flag_V = 0;
  7490. flag_NotZ = res;
  7491. flag_N = res >> 24;
  7492. adr = AREG((Opcode >> 9) & 7);
  7493. AREG((Opcode >> 9) & 7) += 4;
  7494. PRE_IO
  7495. WRITE_LONG_F(adr, res)
  7496. POST_IO
  7497. RET(12)
  7498. }
  7499. // MOVEL
  7500. OPCODE(0x2108)
  7501. {
  7502. u32 adr, res;
  7503. u32 src, dst;
  7504. res = AREGu32((Opcode >> 0) & 7);
  7505. flag_C = 0;
  7506. flag_V = 0;
  7507. flag_NotZ = res;
  7508. flag_N = res >> 24;
  7509. adr = AREG((Opcode >> 9) & 7) - 4;
  7510. AREG((Opcode >> 9) & 7) = adr;
  7511. PRE_IO
  7512. WRITE_LONG_DEC_F(adr, res)
  7513. POST_IO
  7514. RET(12)
  7515. }
  7516. // MOVEL
  7517. OPCODE(0x2148)
  7518. {
  7519. u32 adr, res;
  7520. u32 src, dst;
  7521. res = AREGu32((Opcode >> 0) & 7);
  7522. flag_C = 0;
  7523. flag_V = 0;
  7524. flag_NotZ = res;
  7525. flag_N = res >> 24;
  7526. FETCH_SWORD(adr);
  7527. adr += AREG((Opcode >> 9) & 7);
  7528. PRE_IO
  7529. WRITE_LONG_F(adr, res)
  7530. POST_IO
  7531. RET(16)
  7532. }
  7533. // MOVEL
  7534. OPCODE(0x2188)
  7535. {
  7536. u32 adr, res;
  7537. u32 src, dst;
  7538. res = AREGu32((Opcode >> 0) & 7);
  7539. flag_C = 0;
  7540. flag_V = 0;
  7541. flag_NotZ = res;
  7542. flag_N = res >> 24;
  7543. adr = AREG((Opcode >> 9) & 7);
  7544. DECODE_EXT_WORD
  7545. PRE_IO
  7546. WRITE_LONG_F(adr, res)
  7547. POST_IO
  7548. RET(18)
  7549. }
  7550. // MOVEL
  7551. OPCODE(0x21C8)
  7552. {
  7553. u32 adr, res;
  7554. u32 src, dst;
  7555. res = AREGu32((Opcode >> 0) & 7);
  7556. flag_C = 0;
  7557. flag_V = 0;
  7558. flag_NotZ = res;
  7559. flag_N = res >> 24;
  7560. FETCH_SWORD(adr);
  7561. PRE_IO
  7562. WRITE_LONG_F(adr, res)
  7563. POST_IO
  7564. RET(16)
  7565. }
  7566. // MOVEL
  7567. OPCODE(0x23C8)
  7568. {
  7569. u32 adr, res;
  7570. u32 src, dst;
  7571. res = AREGu32((Opcode >> 0) & 7);
  7572. flag_C = 0;
  7573. flag_V = 0;
  7574. flag_NotZ = res;
  7575. flag_N = res >> 24;
  7576. FETCH_LONG(adr);
  7577. PRE_IO
  7578. WRITE_LONG_F(adr, res)
  7579. POST_IO
  7580. RET(20)
  7581. }
  7582. // MOVEL
  7583. OPCODE(0x2EC8)
  7584. {
  7585. u32 adr, res;
  7586. u32 src, dst;
  7587. res = AREGu32((Opcode >> 0) & 7);
  7588. flag_C = 0;
  7589. flag_V = 0;
  7590. flag_NotZ = res;
  7591. flag_N = res >> 24;
  7592. adr = AREG(7);
  7593. AREG(7) += 4;
  7594. PRE_IO
  7595. WRITE_LONG_F(adr, res)
  7596. POST_IO
  7597. RET(12)
  7598. }
  7599. // MOVEL
  7600. OPCODE(0x2F08)
  7601. {
  7602. u32 adr, res;
  7603. u32 src, dst;
  7604. res = AREGu32((Opcode >> 0) & 7);
  7605. flag_C = 0;
  7606. flag_V = 0;
  7607. flag_NotZ = res;
  7608. flag_N = res >> 24;
  7609. adr = AREG(7) - 4;
  7610. AREG(7) = adr;
  7611. PRE_IO
  7612. WRITE_LONG_DEC_F(adr, res)
  7613. POST_IO
  7614. RET(12)
  7615. }
  7616. // MOVEL
  7617. OPCODE(0x2010)
  7618. {
  7619. u32 adr, res;
  7620. u32 src, dst;
  7621. adr = AREG((Opcode >> 0) & 7);
  7622. PRE_IO
  7623. READ_LONG_F(adr, res)
  7624. flag_C = 0;
  7625. flag_V = 0;
  7626. flag_NotZ = res;
  7627. flag_N = res >> 24;
  7628. DREGu32((Opcode >> 9) & 7) = res;
  7629. POST_IO
  7630. RET(12)
  7631. }
  7632. // MOVEL
  7633. OPCODE(0x2090)
  7634. {
  7635. u32 adr, res;
  7636. u32 src, dst;
  7637. adr = AREG((Opcode >> 0) & 7);
  7638. PRE_IO
  7639. READ_LONG_F(adr, res)
  7640. flag_C = 0;
  7641. flag_V = 0;
  7642. flag_NotZ = res;
  7643. flag_N = res >> 24;
  7644. adr = AREG((Opcode >> 9) & 7);
  7645. WRITE_LONG_F(adr, res)
  7646. POST_IO
  7647. RET(20)
  7648. }
  7649. // MOVEL
  7650. OPCODE(0x20D0)
  7651. {
  7652. u32 adr, res;
  7653. u32 src, dst;
  7654. adr = AREG((Opcode >> 0) & 7);
  7655. PRE_IO
  7656. READ_LONG_F(adr, res)
  7657. flag_C = 0;
  7658. flag_V = 0;
  7659. flag_NotZ = res;
  7660. flag_N = res >> 24;
  7661. adr = AREG((Opcode >> 9) & 7);
  7662. AREG((Opcode >> 9) & 7) += 4;
  7663. WRITE_LONG_F(adr, res)
  7664. POST_IO
  7665. RET(20)
  7666. }
  7667. // MOVEL
  7668. OPCODE(0x2110)
  7669. {
  7670. u32 adr, res;
  7671. u32 src, dst;
  7672. adr = AREG((Opcode >> 0) & 7);
  7673. PRE_IO
  7674. READ_LONG_F(adr, res)
  7675. flag_C = 0;
  7676. flag_V = 0;
  7677. flag_NotZ = res;
  7678. flag_N = res >> 24;
  7679. adr = AREG((Opcode >> 9) & 7) - 4;
  7680. AREG((Opcode >> 9) & 7) = adr;
  7681. WRITE_LONG_DEC_F(adr, res)
  7682. POST_IO
  7683. RET(20)
  7684. }
  7685. // MOVEL
  7686. OPCODE(0x2150)
  7687. {
  7688. u32 adr, res;
  7689. u32 src, dst;
  7690. adr = AREG((Opcode >> 0) & 7);
  7691. PRE_IO
  7692. READ_LONG_F(adr, res)
  7693. flag_C = 0;
  7694. flag_V = 0;
  7695. flag_NotZ = res;
  7696. flag_N = res >> 24;
  7697. FETCH_SWORD(adr);
  7698. adr += AREG((Opcode >> 9) & 7);
  7699. WRITE_LONG_F(adr, res)
  7700. POST_IO
  7701. RET(24)
  7702. }
  7703. // MOVEL
  7704. OPCODE(0x2190)
  7705. {
  7706. u32 adr, res;
  7707. u32 src, dst;
  7708. adr = AREG((Opcode >> 0) & 7);
  7709. PRE_IO
  7710. READ_LONG_F(adr, res)
  7711. flag_C = 0;
  7712. flag_V = 0;
  7713. flag_NotZ = res;
  7714. flag_N = res >> 24;
  7715. adr = AREG((Opcode >> 9) & 7);
  7716. DECODE_EXT_WORD
  7717. WRITE_LONG_F(adr, res)
  7718. POST_IO
  7719. RET(26)
  7720. }
  7721. // MOVEL
  7722. OPCODE(0x21D0)
  7723. {
  7724. u32 adr, res;
  7725. u32 src, dst;
  7726. adr = AREG((Opcode >> 0) & 7);
  7727. PRE_IO
  7728. READ_LONG_F(adr, res)
  7729. flag_C = 0;
  7730. flag_V = 0;
  7731. flag_NotZ = res;
  7732. flag_N = res >> 24;
  7733. FETCH_SWORD(adr);
  7734. WRITE_LONG_F(adr, res)
  7735. POST_IO
  7736. RET(24)
  7737. }
  7738. // MOVEL
  7739. OPCODE(0x23D0)
  7740. {
  7741. u32 adr, res;
  7742. u32 src, dst;
  7743. adr = AREG((Opcode >> 0) & 7);
  7744. PRE_IO
  7745. READ_LONG_F(adr, res)
  7746. flag_C = 0;
  7747. flag_V = 0;
  7748. flag_NotZ = res;
  7749. flag_N = res >> 24;
  7750. FETCH_LONG(adr);
  7751. WRITE_LONG_F(adr, res)
  7752. POST_IO
  7753. RET(28)
  7754. }
  7755. // MOVEL
  7756. OPCODE(0x2ED0)
  7757. {
  7758. u32 adr, res;
  7759. u32 src, dst;
  7760. adr = AREG((Opcode >> 0) & 7);
  7761. PRE_IO
  7762. READ_LONG_F(adr, res)
  7763. flag_C = 0;
  7764. flag_V = 0;
  7765. flag_NotZ = res;
  7766. flag_N = res >> 24;
  7767. adr = AREG(7);
  7768. AREG(7) += 4;
  7769. WRITE_LONG_F(adr, res)
  7770. POST_IO
  7771. RET(20)
  7772. }
  7773. // MOVEL
  7774. OPCODE(0x2F10)
  7775. {
  7776. u32 adr, res;
  7777. u32 src, dst;
  7778. adr = AREG((Opcode >> 0) & 7);
  7779. PRE_IO
  7780. READ_LONG_F(adr, res)
  7781. flag_C = 0;
  7782. flag_V = 0;
  7783. flag_NotZ = res;
  7784. flag_N = res >> 24;
  7785. adr = AREG(7) - 4;
  7786. AREG(7) = adr;
  7787. WRITE_LONG_DEC_F(adr, res)
  7788. POST_IO
  7789. RET(20)
  7790. }
  7791. // MOVEL
  7792. OPCODE(0x2018)
  7793. {
  7794. u32 adr, res;
  7795. u32 src, dst;
  7796. adr = AREG((Opcode >> 0) & 7);
  7797. AREG((Opcode >> 0) & 7) += 4;
  7798. PRE_IO
  7799. READ_LONG_F(adr, res)
  7800. flag_C = 0;
  7801. flag_V = 0;
  7802. flag_NotZ = res;
  7803. flag_N = res >> 24;
  7804. DREGu32((Opcode >> 9) & 7) = res;
  7805. POST_IO
  7806. RET(12)
  7807. }
  7808. // MOVEL
  7809. OPCODE(0x2098)
  7810. {
  7811. u32 adr, res;
  7812. u32 src, dst;
  7813. adr = AREG((Opcode >> 0) & 7);
  7814. AREG((Opcode >> 0) & 7) += 4;
  7815. PRE_IO
  7816. READ_LONG_F(adr, res)
  7817. flag_C = 0;
  7818. flag_V = 0;
  7819. flag_NotZ = res;
  7820. flag_N = res >> 24;
  7821. adr = AREG((Opcode >> 9) & 7);
  7822. WRITE_LONG_F(adr, res)
  7823. POST_IO
  7824. RET(20)
  7825. }
  7826. // MOVEL
  7827. OPCODE(0x20D8)
  7828. {
  7829. u32 adr, res;
  7830. u32 src, dst;
  7831. adr = AREG((Opcode >> 0) & 7);
  7832. AREG((Opcode >> 0) & 7) += 4;
  7833. PRE_IO
  7834. READ_LONG_F(adr, res)
  7835. flag_C = 0;
  7836. flag_V = 0;
  7837. flag_NotZ = res;
  7838. flag_N = res >> 24;
  7839. adr = AREG((Opcode >> 9) & 7);
  7840. AREG((Opcode >> 9) & 7) += 4;
  7841. WRITE_LONG_F(adr, res)
  7842. POST_IO
  7843. RET(20)
  7844. }
  7845. // MOVEL
  7846. OPCODE(0x2118)
  7847. {
  7848. u32 adr, res;
  7849. u32 src, dst;
  7850. adr = AREG((Opcode >> 0) & 7);
  7851. AREG((Opcode >> 0) & 7) += 4;
  7852. PRE_IO
  7853. READ_LONG_F(adr, res)
  7854. flag_C = 0;
  7855. flag_V = 0;
  7856. flag_NotZ = res;
  7857. flag_N = res >> 24;
  7858. adr = AREG((Opcode >> 9) & 7) - 4;
  7859. AREG((Opcode >> 9) & 7) = adr;
  7860. WRITE_LONG_DEC_F(adr, res)
  7861. POST_IO
  7862. RET(20)
  7863. }
  7864. // MOVEL
  7865. OPCODE(0x2158)
  7866. {
  7867. u32 adr, res;
  7868. u32 src, dst;
  7869. adr = AREG((Opcode >> 0) & 7);
  7870. AREG((Opcode >> 0) & 7) += 4;
  7871. PRE_IO
  7872. READ_LONG_F(adr, res)
  7873. flag_C = 0;
  7874. flag_V = 0;
  7875. flag_NotZ = res;
  7876. flag_N = res >> 24;
  7877. FETCH_SWORD(adr);
  7878. adr += AREG((Opcode >> 9) & 7);
  7879. WRITE_LONG_F(adr, res)
  7880. POST_IO
  7881. RET(24)
  7882. }
  7883. // MOVEL
  7884. OPCODE(0x2198)
  7885. {
  7886. u32 adr, res;
  7887. u32 src, dst;
  7888. adr = AREG((Opcode >> 0) & 7);
  7889. AREG((Opcode >> 0) & 7) += 4;
  7890. PRE_IO
  7891. READ_LONG_F(adr, res)
  7892. flag_C = 0;
  7893. flag_V = 0;
  7894. flag_NotZ = res;
  7895. flag_N = res >> 24;
  7896. adr = AREG((Opcode >> 9) & 7);
  7897. DECODE_EXT_WORD
  7898. WRITE_LONG_F(adr, res)
  7899. POST_IO
  7900. RET(26)
  7901. }
  7902. // MOVEL
  7903. OPCODE(0x21D8)
  7904. {
  7905. u32 adr, res;
  7906. u32 src, dst;
  7907. adr = AREG((Opcode >> 0) & 7);
  7908. AREG((Opcode >> 0) & 7) += 4;
  7909. PRE_IO
  7910. READ_LONG_F(adr, res)
  7911. flag_C = 0;
  7912. flag_V = 0;
  7913. flag_NotZ = res;
  7914. flag_N = res >> 24;
  7915. FETCH_SWORD(adr);
  7916. WRITE_LONG_F(adr, res)
  7917. POST_IO
  7918. RET(24)
  7919. }
  7920. // MOVEL
  7921. OPCODE(0x23D8)
  7922. {
  7923. u32 adr, res;
  7924. u32 src, dst;
  7925. adr = AREG((Opcode >> 0) & 7);
  7926. AREG((Opcode >> 0) & 7) += 4;
  7927. PRE_IO
  7928. READ_LONG_F(adr, res)
  7929. flag_C = 0;
  7930. flag_V = 0;
  7931. flag_NotZ = res;
  7932. flag_N = res >> 24;
  7933. FETCH_LONG(adr);
  7934. WRITE_LONG_F(adr, res)
  7935. POST_IO
  7936. RET(28)
  7937. }
  7938. // MOVEL
  7939. OPCODE(0x2ED8)
  7940. {
  7941. u32 adr, res;
  7942. u32 src, dst;
  7943. adr = AREG((Opcode >> 0) & 7);
  7944. AREG((Opcode >> 0) & 7) += 4;
  7945. PRE_IO
  7946. READ_LONG_F(adr, res)
  7947. flag_C = 0;
  7948. flag_V = 0;
  7949. flag_NotZ = res;
  7950. flag_N = res >> 24;
  7951. adr = AREG(7);
  7952. AREG(7) += 4;
  7953. WRITE_LONG_F(adr, res)
  7954. POST_IO
  7955. RET(20)
  7956. }
  7957. // MOVEL
  7958. OPCODE(0x2F18)
  7959. {
  7960. u32 adr, res;
  7961. u32 src, dst;
  7962. adr = AREG((Opcode >> 0) & 7);
  7963. AREG((Opcode >> 0) & 7) += 4;
  7964. PRE_IO
  7965. READ_LONG_F(adr, res)
  7966. flag_C = 0;
  7967. flag_V = 0;
  7968. flag_NotZ = res;
  7969. flag_N = res >> 24;
  7970. adr = AREG(7) - 4;
  7971. AREG(7) = adr;
  7972. WRITE_LONG_DEC_F(adr, res)
  7973. POST_IO
  7974. RET(20)
  7975. }
  7976. // MOVEL
  7977. OPCODE(0x2020)
  7978. {
  7979. u32 adr, res;
  7980. u32 src, dst;
  7981. adr = AREG((Opcode >> 0) & 7) - 4;
  7982. AREG((Opcode >> 0) & 7) = adr;
  7983. PRE_IO
  7984. READ_LONG_F(adr, res)
  7985. flag_C = 0;
  7986. flag_V = 0;
  7987. flag_NotZ = res;
  7988. flag_N = res >> 24;
  7989. DREGu32((Opcode >> 9) & 7) = res;
  7990. POST_IO
  7991. RET(14)
  7992. }
  7993. // MOVEL
  7994. OPCODE(0x20A0)
  7995. {
  7996. u32 adr, res;
  7997. u32 src, dst;
  7998. adr = AREG((Opcode >> 0) & 7) - 4;
  7999. AREG((Opcode >> 0) & 7) = adr;
  8000. PRE_IO
  8001. READ_LONG_F(adr, res)
  8002. flag_C = 0;
  8003. flag_V = 0;
  8004. flag_NotZ = res;
  8005. flag_N = res >> 24;
  8006. adr = AREG((Opcode >> 9) & 7);
  8007. WRITE_LONG_F(adr, res)
  8008. POST_IO
  8009. RET(22)
  8010. }
  8011. // MOVEL
  8012. OPCODE(0x20E0)
  8013. {
  8014. u32 adr, res;
  8015. u32 src, dst;
  8016. adr = AREG((Opcode >> 0) & 7) - 4;
  8017. AREG((Opcode >> 0) & 7) = adr;
  8018. PRE_IO
  8019. READ_LONG_F(adr, res)
  8020. flag_C = 0;
  8021. flag_V = 0;
  8022. flag_NotZ = res;
  8023. flag_N = res >> 24;
  8024. adr = AREG((Opcode >> 9) & 7);
  8025. AREG((Opcode >> 9) & 7) += 4;
  8026. WRITE_LONG_F(adr, res)
  8027. POST_IO
  8028. RET(22)
  8029. }
  8030. // MOVEL
  8031. OPCODE(0x2120)
  8032. {
  8033. u32 adr, res;
  8034. u32 src, dst;
  8035. adr = AREG((Opcode >> 0) & 7) - 4;
  8036. AREG((Opcode >> 0) & 7) = adr;
  8037. PRE_IO
  8038. READ_LONG_F(adr, res)
  8039. flag_C = 0;
  8040. flag_V = 0;
  8041. flag_NotZ = res;
  8042. flag_N = res >> 24;
  8043. adr = AREG((Opcode >> 9) & 7) - 4;
  8044. AREG((Opcode >> 9) & 7) = adr;
  8045. WRITE_LONG_DEC_F(adr, res)
  8046. POST_IO
  8047. RET(22)
  8048. }
  8049. // MOVEL
  8050. OPCODE(0x2160)
  8051. {
  8052. u32 adr, res;
  8053. u32 src, dst;
  8054. adr = AREG((Opcode >> 0) & 7) - 4;
  8055. AREG((Opcode >> 0) & 7) = adr;
  8056. PRE_IO
  8057. READ_LONG_F(adr, res)
  8058. flag_C = 0;
  8059. flag_V = 0;
  8060. flag_NotZ = res;
  8061. flag_N = res >> 24;
  8062. FETCH_SWORD(adr);
  8063. adr += AREG((Opcode >> 9) & 7);
  8064. WRITE_LONG_F(adr, res)
  8065. POST_IO
  8066. RET(26)
  8067. }
  8068. // MOVEL
  8069. OPCODE(0x21A0)
  8070. {
  8071. u32 adr, res;
  8072. u32 src, dst;
  8073. adr = AREG((Opcode >> 0) & 7) - 4;
  8074. AREG((Opcode >> 0) & 7) = adr;
  8075. PRE_IO
  8076. READ_LONG_F(adr, res)
  8077. flag_C = 0;
  8078. flag_V = 0;
  8079. flag_NotZ = res;
  8080. flag_N = res >> 24;
  8081. adr = AREG((Opcode >> 9) & 7);
  8082. DECODE_EXT_WORD
  8083. WRITE_LONG_F(adr, res)
  8084. POST_IO
  8085. RET(28)
  8086. }
  8087. // MOVEL
  8088. OPCODE(0x21E0)
  8089. {
  8090. u32 adr, res;
  8091. u32 src, dst;
  8092. adr = AREG((Opcode >> 0) & 7) - 4;
  8093. AREG((Opcode >> 0) & 7) = adr;
  8094. PRE_IO
  8095. READ_LONG_F(adr, res)
  8096. flag_C = 0;
  8097. flag_V = 0;
  8098. flag_NotZ = res;
  8099. flag_N = res >> 24;
  8100. FETCH_SWORD(adr);
  8101. WRITE_LONG_F(adr, res)
  8102. POST_IO
  8103. RET(26)
  8104. }
  8105. // MOVEL
  8106. OPCODE(0x23E0)
  8107. {
  8108. u32 adr, res;
  8109. u32 src, dst;
  8110. adr = AREG((Opcode >> 0) & 7) - 4;
  8111. AREG((Opcode >> 0) & 7) = adr;
  8112. PRE_IO
  8113. READ_LONG_F(adr, res)
  8114. flag_C = 0;
  8115. flag_V = 0;
  8116. flag_NotZ = res;
  8117. flag_N = res >> 24;
  8118. FETCH_LONG(adr);
  8119. WRITE_LONG_F(adr, res)
  8120. POST_IO
  8121. RET(30)
  8122. }
  8123. // MOVEL
  8124. OPCODE(0x2EE0)
  8125. {
  8126. u32 adr, res;
  8127. u32 src, dst;
  8128. adr = AREG((Opcode >> 0) & 7) - 4;
  8129. AREG((Opcode >> 0) & 7) = adr;
  8130. PRE_IO
  8131. READ_LONG_F(adr, res)
  8132. flag_C = 0;
  8133. flag_V = 0;
  8134. flag_NotZ = res;
  8135. flag_N = res >> 24;
  8136. adr = AREG(7);
  8137. AREG(7) += 4;
  8138. WRITE_LONG_F(adr, res)
  8139. POST_IO
  8140. RET(22)
  8141. }
  8142. // MOVEL
  8143. OPCODE(0x2F20)
  8144. {
  8145. u32 adr, res;
  8146. u32 src, dst;
  8147. adr = AREG((Opcode >> 0) & 7) - 4;
  8148. AREG((Opcode >> 0) & 7) = adr;
  8149. PRE_IO
  8150. READ_LONG_F(adr, res)
  8151. flag_C = 0;
  8152. flag_V = 0;
  8153. flag_NotZ = res;
  8154. flag_N = res >> 24;
  8155. adr = AREG(7) - 4;
  8156. AREG(7) = adr;
  8157. WRITE_LONG_DEC_F(adr, res)
  8158. POST_IO
  8159. RET(22)
  8160. }
  8161. // MOVEL
  8162. OPCODE(0x2028)
  8163. {
  8164. u32 adr, res;
  8165. u32 src, dst;
  8166. FETCH_SWORD(adr);
  8167. adr += AREG((Opcode >> 0) & 7);
  8168. PRE_IO
  8169. READ_LONG_F(adr, res)
  8170. flag_C = 0;
  8171. flag_V = 0;
  8172. flag_NotZ = res;
  8173. flag_N = res >> 24;
  8174. DREGu32((Opcode >> 9) & 7) = res;
  8175. POST_IO
  8176. RET(16)
  8177. }
  8178. // MOVEL
  8179. OPCODE(0x20A8)
  8180. {
  8181. u32 adr, res;
  8182. u32 src, dst;
  8183. FETCH_SWORD(adr);
  8184. adr += AREG((Opcode >> 0) & 7);
  8185. PRE_IO
  8186. READ_LONG_F(adr, res)
  8187. flag_C = 0;
  8188. flag_V = 0;
  8189. flag_NotZ = res;
  8190. flag_N = res >> 24;
  8191. adr = AREG((Opcode >> 9) & 7);
  8192. WRITE_LONG_F(adr, res)
  8193. POST_IO
  8194. RET(24)
  8195. }
  8196. // MOVEL
  8197. OPCODE(0x20E8)
  8198. {
  8199. u32 adr, res;
  8200. u32 src, dst;
  8201. FETCH_SWORD(adr);
  8202. adr += AREG((Opcode >> 0) & 7);
  8203. PRE_IO
  8204. READ_LONG_F(adr, res)
  8205. flag_C = 0;
  8206. flag_V = 0;
  8207. flag_NotZ = res;
  8208. flag_N = res >> 24;
  8209. adr = AREG((Opcode >> 9) & 7);
  8210. AREG((Opcode >> 9) & 7) += 4;
  8211. WRITE_LONG_F(adr, res)
  8212. POST_IO
  8213. RET(24)
  8214. }
  8215. // MOVEL
  8216. OPCODE(0x2128)
  8217. {
  8218. u32 adr, res;
  8219. u32 src, dst;
  8220. FETCH_SWORD(adr);
  8221. adr += AREG((Opcode >> 0) & 7);
  8222. PRE_IO
  8223. READ_LONG_F(adr, res)
  8224. flag_C = 0;
  8225. flag_V = 0;
  8226. flag_NotZ = res;
  8227. flag_N = res >> 24;
  8228. adr = AREG((Opcode >> 9) & 7) - 4;
  8229. AREG((Opcode >> 9) & 7) = adr;
  8230. WRITE_LONG_DEC_F(adr, res)
  8231. POST_IO
  8232. RET(24)
  8233. }
  8234. // MOVEL
  8235. OPCODE(0x2168)
  8236. {
  8237. u32 adr, res;
  8238. u32 src, dst;
  8239. FETCH_SWORD(adr);
  8240. adr += AREG((Opcode >> 0) & 7);
  8241. PRE_IO
  8242. READ_LONG_F(adr, res)
  8243. flag_C = 0;
  8244. flag_V = 0;
  8245. flag_NotZ = res;
  8246. flag_N = res >> 24;
  8247. FETCH_SWORD(adr);
  8248. adr += AREG((Opcode >> 9) & 7);
  8249. WRITE_LONG_F(adr, res)
  8250. POST_IO
  8251. RET(28)
  8252. }
  8253. // MOVEL
  8254. OPCODE(0x21A8)
  8255. {
  8256. u32 adr, res;
  8257. u32 src, dst;
  8258. FETCH_SWORD(adr);
  8259. adr += AREG((Opcode >> 0) & 7);
  8260. PRE_IO
  8261. READ_LONG_F(adr, res)
  8262. flag_C = 0;
  8263. flag_V = 0;
  8264. flag_NotZ = res;
  8265. flag_N = res >> 24;
  8266. adr = AREG((Opcode >> 9) & 7);
  8267. DECODE_EXT_WORD
  8268. WRITE_LONG_F(adr, res)
  8269. POST_IO
  8270. RET(30)
  8271. }
  8272. // MOVEL
  8273. OPCODE(0x21E8)
  8274. {
  8275. u32 adr, res;
  8276. u32 src, dst;
  8277. FETCH_SWORD(adr);
  8278. adr += AREG((Opcode >> 0) & 7);
  8279. PRE_IO
  8280. READ_LONG_F(adr, res)
  8281. flag_C = 0;
  8282. flag_V = 0;
  8283. flag_NotZ = res;
  8284. flag_N = res >> 24;
  8285. FETCH_SWORD(adr);
  8286. WRITE_LONG_F(adr, res)
  8287. POST_IO
  8288. RET(28)
  8289. }
  8290. // MOVEL
  8291. OPCODE(0x23E8)
  8292. {
  8293. u32 adr, res;
  8294. u32 src, dst;
  8295. FETCH_SWORD(adr);
  8296. adr += AREG((Opcode >> 0) & 7);
  8297. PRE_IO
  8298. READ_LONG_F(adr, res)
  8299. flag_C = 0;
  8300. flag_V = 0;
  8301. flag_NotZ = res;
  8302. flag_N = res >> 24;
  8303. FETCH_LONG(adr);
  8304. WRITE_LONG_F(adr, res)
  8305. POST_IO
  8306. RET(32)
  8307. }
  8308. // MOVEL
  8309. OPCODE(0x2EE8)
  8310. {
  8311. u32 adr, res;
  8312. u32 src, dst;
  8313. FETCH_SWORD(adr);
  8314. adr += AREG((Opcode >> 0) & 7);
  8315. PRE_IO
  8316. READ_LONG_F(adr, res)
  8317. flag_C = 0;
  8318. flag_V = 0;
  8319. flag_NotZ = res;
  8320. flag_N = res >> 24;
  8321. adr = AREG(7);
  8322. AREG(7) += 4;
  8323. WRITE_LONG_F(adr, res)
  8324. POST_IO
  8325. RET(24)
  8326. }
  8327. // MOVEL
  8328. OPCODE(0x2F28)
  8329. {
  8330. u32 adr, res;
  8331. u32 src, dst;
  8332. FETCH_SWORD(adr);
  8333. adr += AREG((Opcode >> 0) & 7);
  8334. PRE_IO
  8335. READ_LONG_F(adr, res)
  8336. flag_C = 0;
  8337. flag_V = 0;
  8338. flag_NotZ = res;
  8339. flag_N = res >> 24;
  8340. adr = AREG(7) - 4;
  8341. AREG(7) = adr;
  8342. WRITE_LONG_DEC_F(adr, res)
  8343. POST_IO
  8344. RET(24)
  8345. }
  8346. // MOVEL
  8347. OPCODE(0x2030)
  8348. {
  8349. u32 adr, res;
  8350. u32 src, dst;
  8351. adr = AREG((Opcode >> 0) & 7);
  8352. DECODE_EXT_WORD
  8353. PRE_IO
  8354. READ_LONG_F(adr, res)
  8355. flag_C = 0;
  8356. flag_V = 0;
  8357. flag_NotZ = res;
  8358. flag_N = res >> 24;
  8359. DREGu32((Opcode >> 9) & 7) = res;
  8360. POST_IO
  8361. RET(18)
  8362. }
  8363. // MOVEL
  8364. OPCODE(0x20B0)
  8365. {
  8366. u32 adr, res;
  8367. u32 src, dst;
  8368. adr = AREG((Opcode >> 0) & 7);
  8369. DECODE_EXT_WORD
  8370. PRE_IO
  8371. READ_LONG_F(adr, res)
  8372. flag_C = 0;
  8373. flag_V = 0;
  8374. flag_NotZ = res;
  8375. flag_N = res >> 24;
  8376. adr = AREG((Opcode >> 9) & 7);
  8377. WRITE_LONG_F(adr, res)
  8378. POST_IO
  8379. RET(26)
  8380. }
  8381. // MOVEL
  8382. OPCODE(0x20F0)
  8383. {
  8384. u32 adr, res;
  8385. u32 src, dst;
  8386. adr = AREG((Opcode >> 0) & 7);
  8387. DECODE_EXT_WORD
  8388. PRE_IO
  8389. READ_LONG_F(adr, res)
  8390. flag_C = 0;
  8391. flag_V = 0;
  8392. flag_NotZ = res;
  8393. flag_N = res >> 24;
  8394. adr = AREG((Opcode >> 9) & 7);
  8395. AREG((Opcode >> 9) & 7) += 4;
  8396. WRITE_LONG_F(adr, res)
  8397. POST_IO
  8398. RET(26)
  8399. }
  8400. // MOVEL
  8401. OPCODE(0x2130)
  8402. {
  8403. u32 adr, res;
  8404. u32 src, dst;
  8405. adr = AREG((Opcode >> 0) & 7);
  8406. DECODE_EXT_WORD
  8407. PRE_IO
  8408. READ_LONG_F(adr, res)
  8409. flag_C = 0;
  8410. flag_V = 0;
  8411. flag_NotZ = res;
  8412. flag_N = res >> 24;
  8413. adr = AREG((Opcode >> 9) & 7) - 4;
  8414. AREG((Opcode >> 9) & 7) = adr;
  8415. WRITE_LONG_DEC_F(adr, res)
  8416. POST_IO
  8417. RET(26)
  8418. }
  8419. // MOVEL
  8420. OPCODE(0x2170)
  8421. {
  8422. u32 adr, res;
  8423. u32 src, dst;
  8424. adr = AREG((Opcode >> 0) & 7);
  8425. DECODE_EXT_WORD
  8426. PRE_IO
  8427. READ_LONG_F(adr, res)
  8428. flag_C = 0;
  8429. flag_V = 0;
  8430. flag_NotZ = res;
  8431. flag_N = res >> 24;
  8432. FETCH_SWORD(adr);
  8433. adr += AREG((Opcode >> 9) & 7);
  8434. WRITE_LONG_F(adr, res)
  8435. POST_IO
  8436. RET(30)
  8437. }
  8438. // MOVEL
  8439. OPCODE(0x21B0)
  8440. {
  8441. u32 adr, res;
  8442. u32 src, dst;
  8443. adr = AREG((Opcode >> 0) & 7);
  8444. DECODE_EXT_WORD
  8445. PRE_IO
  8446. READ_LONG_F(adr, res)
  8447. flag_C = 0;
  8448. flag_V = 0;
  8449. flag_NotZ = res;
  8450. flag_N = res >> 24;
  8451. adr = AREG((Opcode >> 9) & 7);
  8452. DECODE_EXT_WORD
  8453. WRITE_LONG_F(adr, res)
  8454. POST_IO
  8455. RET(32)
  8456. }
  8457. // MOVEL
  8458. OPCODE(0x21F0)
  8459. {
  8460. u32 adr, res;
  8461. u32 src, dst;
  8462. adr = AREG((Opcode >> 0) & 7);
  8463. DECODE_EXT_WORD
  8464. PRE_IO
  8465. READ_LONG_F(adr, res)
  8466. flag_C = 0;
  8467. flag_V = 0;
  8468. flag_NotZ = res;
  8469. flag_N = res >> 24;
  8470. FETCH_SWORD(adr);
  8471. WRITE_LONG_F(adr, res)
  8472. POST_IO
  8473. RET(30)
  8474. }
  8475. // MOVEL
  8476. OPCODE(0x23F0)
  8477. {
  8478. u32 adr, res;
  8479. u32 src, dst;
  8480. adr = AREG((Opcode >> 0) & 7);
  8481. DECODE_EXT_WORD
  8482. PRE_IO
  8483. READ_LONG_F(adr, res)
  8484. flag_C = 0;
  8485. flag_V = 0;
  8486. flag_NotZ = res;
  8487. flag_N = res >> 24;
  8488. FETCH_LONG(adr);
  8489. WRITE_LONG_F(adr, res)
  8490. POST_IO
  8491. RET(34)
  8492. }
  8493. // MOVEL
  8494. OPCODE(0x2EF0)
  8495. {
  8496. u32 adr, res;
  8497. u32 src, dst;
  8498. adr = AREG((Opcode >> 0) & 7);
  8499. DECODE_EXT_WORD
  8500. PRE_IO
  8501. READ_LONG_F(adr, res)
  8502. flag_C = 0;
  8503. flag_V = 0;
  8504. flag_NotZ = res;
  8505. flag_N = res >> 24;
  8506. adr = AREG(7);
  8507. AREG(7) += 4;
  8508. WRITE_LONG_F(adr, res)
  8509. POST_IO
  8510. RET(26)
  8511. }
  8512. // MOVEL
  8513. OPCODE(0x2F30)
  8514. {
  8515. u32 adr, res;
  8516. u32 src, dst;
  8517. adr = AREG((Opcode >> 0) & 7);
  8518. DECODE_EXT_WORD
  8519. PRE_IO
  8520. READ_LONG_F(adr, res)
  8521. flag_C = 0;
  8522. flag_V = 0;
  8523. flag_NotZ = res;
  8524. flag_N = res >> 24;
  8525. adr = AREG(7) - 4;
  8526. AREG(7) = adr;
  8527. WRITE_LONG_DEC_F(adr, res)
  8528. POST_IO
  8529. RET(26)
  8530. }
  8531. // MOVEL
  8532. OPCODE(0x2038)
  8533. {
  8534. u32 adr, res;
  8535. u32 src, dst;
  8536. FETCH_SWORD(adr);
  8537. PRE_IO
  8538. READ_LONG_F(adr, res)
  8539. flag_C = 0;
  8540. flag_V = 0;
  8541. flag_NotZ = res;
  8542. flag_N = res >> 24;
  8543. DREGu32((Opcode >> 9) & 7) = res;
  8544. POST_IO
  8545. RET(16)
  8546. }
  8547. // MOVEL
  8548. OPCODE(0x20B8)
  8549. {
  8550. u32 adr, res;
  8551. u32 src, dst;
  8552. FETCH_SWORD(adr);
  8553. PRE_IO
  8554. READ_LONG_F(adr, res)
  8555. flag_C = 0;
  8556. flag_V = 0;
  8557. flag_NotZ = res;
  8558. flag_N = res >> 24;
  8559. adr = AREG((Opcode >> 9) & 7);
  8560. WRITE_LONG_F(adr, res)
  8561. POST_IO
  8562. RET(24)
  8563. }
  8564. // MOVEL
  8565. OPCODE(0x20F8)
  8566. {
  8567. u32 adr, res;
  8568. u32 src, dst;
  8569. FETCH_SWORD(adr);
  8570. PRE_IO
  8571. READ_LONG_F(adr, res)
  8572. flag_C = 0;
  8573. flag_V = 0;
  8574. flag_NotZ = res;
  8575. flag_N = res >> 24;
  8576. adr = AREG((Opcode >> 9) & 7);
  8577. AREG((Opcode >> 9) & 7) += 4;
  8578. WRITE_LONG_F(adr, res)
  8579. POST_IO
  8580. RET(24)
  8581. }
  8582. // MOVEL
  8583. OPCODE(0x2138)
  8584. {
  8585. u32 adr, res;
  8586. u32 src, dst;
  8587. FETCH_SWORD(adr);
  8588. PRE_IO
  8589. READ_LONG_F(adr, res)
  8590. flag_C = 0;
  8591. flag_V = 0;
  8592. flag_NotZ = res;
  8593. flag_N = res >> 24;
  8594. adr = AREG((Opcode >> 9) & 7) - 4;
  8595. AREG((Opcode >> 9) & 7) = adr;
  8596. WRITE_LONG_DEC_F(adr, res)
  8597. POST_IO
  8598. RET(24)
  8599. }
  8600. // MOVEL
  8601. OPCODE(0x2178)
  8602. {
  8603. u32 adr, res;
  8604. u32 src, dst;
  8605. FETCH_SWORD(adr);
  8606. PRE_IO
  8607. READ_LONG_F(adr, res)
  8608. flag_C = 0;
  8609. flag_V = 0;
  8610. flag_NotZ = res;
  8611. flag_N = res >> 24;
  8612. FETCH_SWORD(adr);
  8613. adr += AREG((Opcode >> 9) & 7);
  8614. WRITE_LONG_F(adr, res)
  8615. POST_IO
  8616. RET(28)
  8617. }
  8618. // MOVEL
  8619. OPCODE(0x21B8)
  8620. {
  8621. u32 adr, res;
  8622. u32 src, dst;
  8623. FETCH_SWORD(adr);
  8624. PRE_IO
  8625. READ_LONG_F(adr, res)
  8626. flag_C = 0;
  8627. flag_V = 0;
  8628. flag_NotZ = res;
  8629. flag_N = res >> 24;
  8630. adr = AREG((Opcode >> 9) & 7);
  8631. DECODE_EXT_WORD
  8632. WRITE_LONG_F(adr, res)
  8633. POST_IO
  8634. RET(30)
  8635. }
  8636. // MOVEL
  8637. OPCODE(0x21F8)
  8638. {
  8639. u32 adr, res;
  8640. u32 src, dst;
  8641. FETCH_SWORD(adr);
  8642. PRE_IO
  8643. READ_LONG_F(adr, res)
  8644. flag_C = 0;
  8645. flag_V = 0;
  8646. flag_NotZ = res;
  8647. flag_N = res >> 24;
  8648. FETCH_SWORD(adr);
  8649. WRITE_LONG_F(adr, res)
  8650. POST_IO
  8651. RET(28)
  8652. }
  8653. // MOVEL
  8654. OPCODE(0x23F8)
  8655. {
  8656. u32 adr, res;
  8657. u32 src, dst;
  8658. FETCH_SWORD(adr);
  8659. PRE_IO
  8660. READ_LONG_F(adr, res)
  8661. flag_C = 0;
  8662. flag_V = 0;
  8663. flag_NotZ = res;
  8664. flag_N = res >> 24;
  8665. FETCH_LONG(adr);
  8666. WRITE_LONG_F(adr, res)
  8667. POST_IO
  8668. RET(32)
  8669. }
  8670. // MOVEL
  8671. OPCODE(0x2EF8)
  8672. {
  8673. u32 adr, res;
  8674. u32 src, dst;
  8675. FETCH_SWORD(adr);
  8676. PRE_IO
  8677. READ_LONG_F(adr, res)
  8678. flag_C = 0;
  8679. flag_V = 0;
  8680. flag_NotZ = res;
  8681. flag_N = res >> 24;
  8682. adr = AREG(7);
  8683. AREG(7) += 4;
  8684. WRITE_LONG_F(adr, res)
  8685. POST_IO
  8686. RET(24)
  8687. }
  8688. // MOVEL
  8689. OPCODE(0x2F38)
  8690. {
  8691. u32 adr, res;
  8692. u32 src, dst;
  8693. FETCH_SWORD(adr);
  8694. PRE_IO
  8695. READ_LONG_F(adr, res)
  8696. flag_C = 0;
  8697. flag_V = 0;
  8698. flag_NotZ = res;
  8699. flag_N = res >> 24;
  8700. adr = AREG(7) - 4;
  8701. AREG(7) = adr;
  8702. WRITE_LONG_DEC_F(adr, res)
  8703. POST_IO
  8704. RET(24)
  8705. }
  8706. // MOVEL
  8707. OPCODE(0x2039)
  8708. {
  8709. u32 adr, res;
  8710. u32 src, dst;
  8711. FETCH_LONG(adr);
  8712. PRE_IO
  8713. READ_LONG_F(adr, res)
  8714. flag_C = 0;
  8715. flag_V = 0;
  8716. flag_NotZ = res;
  8717. flag_N = res >> 24;
  8718. DREGu32((Opcode >> 9) & 7) = res;
  8719. POST_IO
  8720. RET(20)
  8721. }
  8722. // MOVEL
  8723. OPCODE(0x20B9)
  8724. {
  8725. u32 adr, res;
  8726. u32 src, dst;
  8727. FETCH_LONG(adr);
  8728. PRE_IO
  8729. READ_LONG_F(adr, res)
  8730. flag_C = 0;
  8731. flag_V = 0;
  8732. flag_NotZ = res;
  8733. flag_N = res >> 24;
  8734. adr = AREG((Opcode >> 9) & 7);
  8735. WRITE_LONG_F(adr, res)
  8736. POST_IO
  8737. RET(28)
  8738. }
  8739. // MOVEL
  8740. OPCODE(0x20F9)
  8741. {
  8742. u32 adr, res;
  8743. u32 src, dst;
  8744. FETCH_LONG(adr);
  8745. PRE_IO
  8746. READ_LONG_F(adr, res)
  8747. flag_C = 0;
  8748. flag_V = 0;
  8749. flag_NotZ = res;
  8750. flag_N = res >> 24;
  8751. adr = AREG((Opcode >> 9) & 7);
  8752. AREG((Opcode >> 9) & 7) += 4;
  8753. WRITE_LONG_F(adr, res)
  8754. POST_IO
  8755. RET(28)
  8756. }
  8757. // MOVEL
  8758. OPCODE(0x2139)
  8759. {
  8760. u32 adr, res;
  8761. u32 src, dst;
  8762. FETCH_LONG(adr);
  8763. PRE_IO
  8764. READ_LONG_F(adr, res)
  8765. flag_C = 0;
  8766. flag_V = 0;
  8767. flag_NotZ = res;
  8768. flag_N = res >> 24;
  8769. adr = AREG((Opcode >> 9) & 7) - 4;
  8770. AREG((Opcode >> 9) & 7) = adr;
  8771. WRITE_LONG_DEC_F(adr, res)
  8772. POST_IO
  8773. RET(28)
  8774. }
  8775. // MOVEL
  8776. OPCODE(0x2179)
  8777. {
  8778. u32 adr, res;
  8779. u32 src, dst;
  8780. FETCH_LONG(adr);
  8781. PRE_IO
  8782. READ_LONG_F(adr, res)
  8783. flag_C = 0;
  8784. flag_V = 0;
  8785. flag_NotZ = res;
  8786. flag_N = res >> 24;
  8787. FETCH_SWORD(adr);
  8788. adr += AREG((Opcode >> 9) & 7);
  8789. WRITE_LONG_F(adr, res)
  8790. POST_IO
  8791. RET(32)
  8792. }
  8793. // MOVEL
  8794. OPCODE(0x21B9)
  8795. {
  8796. u32 adr, res;
  8797. u32 src, dst;
  8798. FETCH_LONG(adr);
  8799. PRE_IO
  8800. READ_LONG_F(adr, res)
  8801. flag_C = 0;
  8802. flag_V = 0;
  8803. flag_NotZ = res;
  8804. flag_N = res >> 24;
  8805. adr = AREG((Opcode >> 9) & 7);
  8806. DECODE_EXT_WORD
  8807. WRITE_LONG_F(adr, res)
  8808. POST_IO
  8809. RET(34)
  8810. }
  8811. // MOVEL
  8812. OPCODE(0x21F9)
  8813. {
  8814. u32 adr, res;
  8815. u32 src, dst;
  8816. FETCH_LONG(adr);
  8817. PRE_IO
  8818. READ_LONG_F(adr, res)
  8819. flag_C = 0;
  8820. flag_V = 0;
  8821. flag_NotZ = res;
  8822. flag_N = res >> 24;
  8823. FETCH_SWORD(adr);
  8824. WRITE_LONG_F(adr, res)
  8825. POST_IO
  8826. RET(32)
  8827. }
  8828. // MOVEL
  8829. OPCODE(0x23F9)
  8830. {
  8831. u32 adr, res;
  8832. u32 src, dst;
  8833. FETCH_LONG(adr);
  8834. PRE_IO
  8835. READ_LONG_F(adr, res)
  8836. flag_C = 0;
  8837. flag_V = 0;
  8838. flag_NotZ = res;
  8839. flag_N = res >> 24;
  8840. FETCH_LONG(adr);
  8841. WRITE_LONG_F(adr, res)
  8842. POST_IO
  8843. RET(36)
  8844. }
  8845. // MOVEL
  8846. OPCODE(0x2EF9)
  8847. {
  8848. u32 adr, res;
  8849. u32 src, dst;
  8850. FETCH_LONG(adr);
  8851. PRE_IO
  8852. READ_LONG_F(adr, res)
  8853. flag_C = 0;
  8854. flag_V = 0;
  8855. flag_NotZ = res;
  8856. flag_N = res >> 24;
  8857. adr = AREG(7);
  8858. AREG(7) += 4;
  8859. WRITE_LONG_F(adr, res)
  8860. POST_IO
  8861. RET(28)
  8862. }
  8863. // MOVEL
  8864. OPCODE(0x2F39)
  8865. {
  8866. u32 adr, res;
  8867. u32 src, dst;
  8868. FETCH_LONG(adr);
  8869. PRE_IO
  8870. READ_LONG_F(adr, res)
  8871. flag_C = 0;
  8872. flag_V = 0;
  8873. flag_NotZ = res;
  8874. flag_N = res >> 24;
  8875. adr = AREG(7) - 4;
  8876. AREG(7) = adr;
  8877. WRITE_LONG_DEC_F(adr, res)
  8878. POST_IO
  8879. RET(28)
  8880. }
  8881. // MOVEL
  8882. OPCODE(0x203A)
  8883. {
  8884. u32 adr, res;
  8885. u32 src, dst;
  8886. adr = GET_SWORD + GET_PC;
  8887. PC++;
  8888. PRE_IO
  8889. READ_LONG_F(adr, res)
  8890. flag_C = 0;
  8891. flag_V = 0;
  8892. flag_NotZ = res;
  8893. flag_N = res >> 24;
  8894. DREGu32((Opcode >> 9) & 7) = res;
  8895. POST_IO
  8896. RET(16)
  8897. }
  8898. // MOVEL
  8899. OPCODE(0x20BA)
  8900. {
  8901. u32 adr, res;
  8902. u32 src, dst;
  8903. adr = GET_SWORD + GET_PC;
  8904. PC++;
  8905. PRE_IO
  8906. READ_LONG_F(adr, res)
  8907. flag_C = 0;
  8908. flag_V = 0;
  8909. flag_NotZ = res;
  8910. flag_N = res >> 24;
  8911. adr = AREG((Opcode >> 9) & 7);
  8912. WRITE_LONG_F(adr, res)
  8913. POST_IO
  8914. RET(24)
  8915. }
  8916. // MOVEL
  8917. OPCODE(0x20FA)
  8918. {
  8919. u32 adr, res;
  8920. u32 src, dst;
  8921. adr = GET_SWORD + GET_PC;
  8922. PC++;
  8923. PRE_IO
  8924. READ_LONG_F(adr, res)
  8925. flag_C = 0;
  8926. flag_V = 0;
  8927. flag_NotZ = res;
  8928. flag_N = res >> 24;
  8929. adr = AREG((Opcode >> 9) & 7);
  8930. AREG((Opcode >> 9) & 7) += 4;
  8931. WRITE_LONG_F(adr, res)
  8932. POST_IO
  8933. RET(24)
  8934. }
  8935. // MOVEL
  8936. OPCODE(0x213A)
  8937. {
  8938. u32 adr, res;
  8939. u32 src, dst;
  8940. adr = GET_SWORD + GET_PC;
  8941. PC++;
  8942. PRE_IO
  8943. READ_LONG_F(adr, res)
  8944. flag_C = 0;
  8945. flag_V = 0;
  8946. flag_NotZ = res;
  8947. flag_N = res >> 24;
  8948. adr = AREG((Opcode >> 9) & 7) - 4;
  8949. AREG((Opcode >> 9) & 7) = adr;
  8950. WRITE_LONG_DEC_F(adr, res)
  8951. POST_IO
  8952. RET(24)
  8953. }
  8954. // MOVEL
  8955. OPCODE(0x217A)
  8956. {
  8957. u32 adr, res;
  8958. u32 src, dst;
  8959. adr = GET_SWORD + GET_PC;
  8960. PC++;
  8961. PRE_IO
  8962. READ_LONG_F(adr, res)
  8963. flag_C = 0;
  8964. flag_V = 0;
  8965. flag_NotZ = res;
  8966. flag_N = res >> 24;
  8967. FETCH_SWORD(adr);
  8968. adr += AREG((Opcode >> 9) & 7);
  8969. WRITE_LONG_F(adr, res)
  8970. POST_IO
  8971. RET(28)
  8972. }
  8973. // MOVEL
  8974. OPCODE(0x21BA)
  8975. {
  8976. u32 adr, res;
  8977. u32 src, dst;
  8978. adr = GET_SWORD + GET_PC;
  8979. PC++;
  8980. PRE_IO
  8981. READ_LONG_F(adr, res)
  8982. flag_C = 0;
  8983. flag_V = 0;
  8984. flag_NotZ = res;
  8985. flag_N = res >> 24;
  8986. adr = AREG((Opcode >> 9) & 7);
  8987. DECODE_EXT_WORD
  8988. WRITE_LONG_F(adr, res)
  8989. POST_IO
  8990. RET(30)
  8991. }
  8992. // MOVEL
  8993. OPCODE(0x21FA)
  8994. {
  8995. u32 adr, res;
  8996. u32 src, dst;
  8997. adr = GET_SWORD + GET_PC;
  8998. PC++;
  8999. PRE_IO
  9000. READ_LONG_F(adr, res)
  9001. flag_C = 0;
  9002. flag_V = 0;
  9003. flag_NotZ = res;
  9004. flag_N = res >> 24;
  9005. FETCH_SWORD(adr);
  9006. WRITE_LONG_F(adr, res)
  9007. POST_IO
  9008. RET(28)
  9009. }
  9010. // MOVEL
  9011. OPCODE(0x23FA)
  9012. {
  9013. u32 adr, res;
  9014. u32 src, dst;
  9015. adr = GET_SWORD + GET_PC;
  9016. PC++;
  9017. PRE_IO
  9018. READ_LONG_F(adr, res)
  9019. flag_C = 0;
  9020. flag_V = 0;
  9021. flag_NotZ = res;
  9022. flag_N = res >> 24;
  9023. FETCH_LONG(adr);
  9024. WRITE_LONG_F(adr, res)
  9025. POST_IO
  9026. RET(32)
  9027. }
  9028. // MOVEL
  9029. OPCODE(0x2EFA)
  9030. {
  9031. u32 adr, res;
  9032. u32 src, dst;
  9033. adr = GET_SWORD + GET_PC;
  9034. PC++;
  9035. PRE_IO
  9036. READ_LONG_F(adr, res)
  9037. flag_C = 0;
  9038. flag_V = 0;
  9039. flag_NotZ = res;
  9040. flag_N = res >> 24;
  9041. adr = AREG(7);
  9042. AREG(7) += 4;
  9043. WRITE_LONG_F(adr, res)
  9044. POST_IO
  9045. RET(24)
  9046. }
  9047. // MOVEL
  9048. OPCODE(0x2F3A)
  9049. {
  9050. u32 adr, res;
  9051. u32 src, dst;
  9052. adr = GET_SWORD + GET_PC;
  9053. PC++;
  9054. PRE_IO
  9055. READ_LONG_F(adr, res)
  9056. flag_C = 0;
  9057. flag_V = 0;
  9058. flag_NotZ = res;
  9059. flag_N = res >> 24;
  9060. adr = AREG(7) - 4;
  9061. AREG(7) = adr;
  9062. WRITE_LONG_DEC_F(adr, res)
  9063. POST_IO
  9064. RET(24)
  9065. }
  9066. // MOVEL
  9067. OPCODE(0x203B)
  9068. {
  9069. u32 adr, res;
  9070. u32 src, dst;
  9071. adr = GET_PC;
  9072. DECODE_EXT_WORD
  9073. PRE_IO
  9074. READ_LONG_F(adr, res)
  9075. flag_C = 0;
  9076. flag_V = 0;
  9077. flag_NotZ = res;
  9078. flag_N = res >> 24;
  9079. DREGu32((Opcode >> 9) & 7) = res;
  9080. POST_IO
  9081. RET(18)
  9082. }
  9083. // MOVEL
  9084. OPCODE(0x20BB)
  9085. {
  9086. u32 adr, res;
  9087. u32 src, dst;
  9088. adr = GET_PC;
  9089. DECODE_EXT_WORD
  9090. PRE_IO
  9091. READ_LONG_F(adr, res)
  9092. flag_C = 0;
  9093. flag_V = 0;
  9094. flag_NotZ = res;
  9095. flag_N = res >> 24;
  9096. adr = AREG((Opcode >> 9) & 7);
  9097. WRITE_LONG_F(adr, res)
  9098. POST_IO
  9099. RET(26)
  9100. }
  9101. // MOVEL
  9102. OPCODE(0x20FB)
  9103. {
  9104. u32 adr, res;
  9105. u32 src, dst;
  9106. adr = GET_PC;
  9107. DECODE_EXT_WORD
  9108. PRE_IO
  9109. READ_LONG_F(adr, res)
  9110. flag_C = 0;
  9111. flag_V = 0;
  9112. flag_NotZ = res;
  9113. flag_N = res >> 24;
  9114. adr = AREG((Opcode >> 9) & 7);
  9115. AREG((Opcode >> 9) & 7) += 4;
  9116. WRITE_LONG_F(adr, res)
  9117. POST_IO
  9118. RET(26)
  9119. }
  9120. // MOVEL
  9121. OPCODE(0x213B)
  9122. {
  9123. u32 adr, res;
  9124. u32 src, dst;
  9125. adr = GET_PC;
  9126. DECODE_EXT_WORD
  9127. PRE_IO
  9128. READ_LONG_F(adr, res)
  9129. flag_C = 0;
  9130. flag_V = 0;
  9131. flag_NotZ = res;
  9132. flag_N = res >> 24;
  9133. adr = AREG((Opcode >> 9) & 7) - 4;
  9134. AREG((Opcode >> 9) & 7) = adr;
  9135. WRITE_LONG_DEC_F(adr, res)
  9136. POST_IO
  9137. RET(26)
  9138. }
  9139. // MOVEL
  9140. OPCODE(0x217B)
  9141. {
  9142. u32 adr, res;
  9143. u32 src, dst;
  9144. adr = GET_PC;
  9145. DECODE_EXT_WORD
  9146. PRE_IO
  9147. READ_LONG_F(adr, res)
  9148. flag_C = 0;
  9149. flag_V = 0;
  9150. flag_NotZ = res;
  9151. flag_N = res >> 24;
  9152. FETCH_SWORD(adr);
  9153. adr += AREG((Opcode >> 9) & 7);
  9154. WRITE_LONG_F(adr, res)
  9155. POST_IO
  9156. RET(30)
  9157. }
  9158. // MOVEL
  9159. OPCODE(0x21BB)
  9160. {
  9161. u32 adr, res;
  9162. u32 src, dst;
  9163. adr = GET_PC;
  9164. DECODE_EXT_WORD
  9165. PRE_IO
  9166. READ_LONG_F(adr, res)
  9167. flag_C = 0;
  9168. flag_V = 0;
  9169. flag_NotZ = res;
  9170. flag_N = res >> 24;
  9171. adr = AREG((Opcode >> 9) & 7);
  9172. DECODE_EXT_WORD
  9173. WRITE_LONG_F(adr, res)
  9174. POST_IO
  9175. RET(32)
  9176. }
  9177. // MOVEL
  9178. OPCODE(0x21FB)
  9179. {
  9180. u32 adr, res;
  9181. u32 src, dst;
  9182. adr = GET_PC;
  9183. DECODE_EXT_WORD
  9184. PRE_IO
  9185. READ_LONG_F(adr, res)
  9186. flag_C = 0;
  9187. flag_V = 0;
  9188. flag_NotZ = res;
  9189. flag_N = res >> 24;
  9190. FETCH_SWORD(adr);
  9191. WRITE_LONG_F(adr, res)
  9192. POST_IO
  9193. RET(30)
  9194. }
  9195. // MOVEL
  9196. OPCODE(0x23FB)
  9197. {
  9198. u32 adr, res;
  9199. u32 src, dst;
  9200. adr = GET_PC;
  9201. DECODE_EXT_WORD
  9202. PRE_IO
  9203. READ_LONG_F(adr, res)
  9204. flag_C = 0;
  9205. flag_V = 0;
  9206. flag_NotZ = res;
  9207. flag_N = res >> 24;
  9208. FETCH_LONG(adr);
  9209. WRITE_LONG_F(adr, res)
  9210. POST_IO
  9211. RET(34)
  9212. }
  9213. // MOVEL
  9214. OPCODE(0x2EFB)
  9215. {
  9216. u32 adr, res;
  9217. u32 src, dst;
  9218. adr = GET_PC;
  9219. DECODE_EXT_WORD
  9220. PRE_IO
  9221. READ_LONG_F(adr, res)
  9222. flag_C = 0;
  9223. flag_V = 0;
  9224. flag_NotZ = res;
  9225. flag_N = res >> 24;
  9226. adr = AREG(7);
  9227. AREG(7) += 4;
  9228. WRITE_LONG_F(adr, res)
  9229. POST_IO
  9230. RET(26)
  9231. }
  9232. // MOVEL
  9233. OPCODE(0x2F3B)
  9234. {
  9235. u32 adr, res;
  9236. u32 src, dst;
  9237. adr = GET_PC;
  9238. DECODE_EXT_WORD
  9239. PRE_IO
  9240. READ_LONG_F(adr, res)
  9241. flag_C = 0;
  9242. flag_V = 0;
  9243. flag_NotZ = res;
  9244. flag_N = res >> 24;
  9245. adr = AREG(7) - 4;
  9246. AREG(7) = adr;
  9247. WRITE_LONG_DEC_F(adr, res)
  9248. POST_IO
  9249. RET(26)
  9250. }
  9251. // MOVEL
  9252. OPCODE(0x203C)
  9253. {
  9254. u32 adr, res;
  9255. u32 src, dst;
  9256. FETCH_LONG(res);
  9257. flag_C = 0;
  9258. flag_V = 0;
  9259. flag_NotZ = res;
  9260. flag_N = res >> 24;
  9261. DREGu32((Opcode >> 9) & 7) = res;
  9262. RET(12)
  9263. }
  9264. // MOVEL
  9265. OPCODE(0x20BC)
  9266. {
  9267. u32 adr, res;
  9268. u32 src, dst;
  9269. FETCH_LONG(res);
  9270. flag_C = 0;
  9271. flag_V = 0;
  9272. flag_NotZ = res;
  9273. flag_N = res >> 24;
  9274. adr = AREG((Opcode >> 9) & 7);
  9275. PRE_IO
  9276. WRITE_LONG_F(adr, res)
  9277. POST_IO
  9278. RET(20)
  9279. }
  9280. // MOVEL
  9281. OPCODE(0x20FC)
  9282. {
  9283. u32 adr, res;
  9284. u32 src, dst;
  9285. FETCH_LONG(res);
  9286. flag_C = 0;
  9287. flag_V = 0;
  9288. flag_NotZ = res;
  9289. flag_N = res >> 24;
  9290. adr = AREG((Opcode >> 9) & 7);
  9291. AREG((Opcode >> 9) & 7) += 4;
  9292. PRE_IO
  9293. WRITE_LONG_F(adr, res)
  9294. POST_IO
  9295. RET(20)
  9296. }
  9297. // MOVEL
  9298. OPCODE(0x213C)
  9299. {
  9300. u32 adr, res;
  9301. u32 src, dst;
  9302. FETCH_LONG(res);
  9303. flag_C = 0;
  9304. flag_V = 0;
  9305. flag_NotZ = res;
  9306. flag_N = res >> 24;
  9307. adr = AREG((Opcode >> 9) & 7) - 4;
  9308. AREG((Opcode >> 9) & 7) = adr;
  9309. PRE_IO
  9310. WRITE_LONG_DEC_F(adr, res)
  9311. POST_IO
  9312. RET(20)
  9313. }
  9314. // MOVEL
  9315. OPCODE(0x217C)
  9316. {
  9317. u32 adr, res;
  9318. u32 src, dst;
  9319. FETCH_LONG(res);
  9320. flag_C = 0;
  9321. flag_V = 0;
  9322. flag_NotZ = res;
  9323. flag_N = res >> 24;
  9324. FETCH_SWORD(adr);
  9325. adr += AREG((Opcode >> 9) & 7);
  9326. PRE_IO
  9327. WRITE_LONG_F(adr, res)
  9328. POST_IO
  9329. RET(24)
  9330. }
  9331. // MOVEL
  9332. OPCODE(0x21BC)
  9333. {
  9334. u32 adr, res;
  9335. u32 src, dst;
  9336. FETCH_LONG(res);
  9337. flag_C = 0;
  9338. flag_V = 0;
  9339. flag_NotZ = res;
  9340. flag_N = res >> 24;
  9341. adr = AREG((Opcode >> 9) & 7);
  9342. DECODE_EXT_WORD
  9343. PRE_IO
  9344. WRITE_LONG_F(adr, res)
  9345. POST_IO
  9346. RET(26)
  9347. }
  9348. // MOVEL
  9349. OPCODE(0x21FC)
  9350. {
  9351. u32 adr, res;
  9352. u32 src, dst;
  9353. FETCH_LONG(res);
  9354. flag_C = 0;
  9355. flag_V = 0;
  9356. flag_NotZ = res;
  9357. flag_N = res >> 24;
  9358. FETCH_SWORD(adr);
  9359. PRE_IO
  9360. WRITE_LONG_F(adr, res)
  9361. POST_IO
  9362. RET(24)
  9363. }
  9364. // MOVEL
  9365. OPCODE(0x23FC)
  9366. {
  9367. u32 adr, res;
  9368. u32 src, dst;
  9369. FETCH_LONG(res);
  9370. flag_C = 0;
  9371. flag_V = 0;
  9372. flag_NotZ = res;
  9373. flag_N = res >> 24;
  9374. FETCH_LONG(adr);
  9375. PRE_IO
  9376. WRITE_LONG_F(adr, res)
  9377. POST_IO
  9378. RET(28)
  9379. }
  9380. // MOVEL
  9381. OPCODE(0x2EFC)
  9382. {
  9383. u32 adr, res;
  9384. u32 src, dst;
  9385. FETCH_LONG(res);
  9386. flag_C = 0;
  9387. flag_V = 0;
  9388. flag_NotZ = res;
  9389. flag_N = res >> 24;
  9390. adr = AREG(7);
  9391. AREG(7) += 4;
  9392. PRE_IO
  9393. WRITE_LONG_F(adr, res)
  9394. POST_IO
  9395. RET(20)
  9396. }
  9397. // MOVEL
  9398. OPCODE(0x2F3C)
  9399. {
  9400. u32 adr, res;
  9401. u32 src, dst;
  9402. FETCH_LONG(res);
  9403. flag_C = 0;
  9404. flag_V = 0;
  9405. flag_NotZ = res;
  9406. flag_N = res >> 24;
  9407. adr = AREG(7) - 4;
  9408. AREG(7) = adr;
  9409. PRE_IO
  9410. WRITE_LONG_DEC_F(adr, res)
  9411. POST_IO
  9412. RET(20)
  9413. }
  9414. // MOVEL
  9415. OPCODE(0x201F)
  9416. {
  9417. u32 adr, res;
  9418. u32 src, dst;
  9419. adr = AREG(7);
  9420. AREG(7) += 4;
  9421. PRE_IO
  9422. READ_LONG_F(adr, res)
  9423. flag_C = 0;
  9424. flag_V = 0;
  9425. flag_NotZ = res;
  9426. flag_N = res >> 24;
  9427. DREGu32((Opcode >> 9) & 7) = res;
  9428. POST_IO
  9429. RET(12)
  9430. }
  9431. // MOVEL
  9432. OPCODE(0x209F)
  9433. {
  9434. u32 adr, res;
  9435. u32 src, dst;
  9436. adr = AREG(7);
  9437. AREG(7) += 4;
  9438. PRE_IO
  9439. READ_LONG_F(adr, res)
  9440. flag_C = 0;
  9441. flag_V = 0;
  9442. flag_NotZ = res;
  9443. flag_N = res >> 24;
  9444. adr = AREG((Opcode >> 9) & 7);
  9445. WRITE_LONG_F(adr, res)
  9446. POST_IO
  9447. RET(20)
  9448. }
  9449. // MOVEL
  9450. OPCODE(0x20DF)
  9451. {
  9452. u32 adr, res;
  9453. u32 src, dst;
  9454. adr = AREG(7);
  9455. AREG(7) += 4;
  9456. PRE_IO
  9457. READ_LONG_F(adr, res)
  9458. flag_C = 0;
  9459. flag_V = 0;
  9460. flag_NotZ = res;
  9461. flag_N = res >> 24;
  9462. adr = AREG((Opcode >> 9) & 7);
  9463. AREG((Opcode >> 9) & 7) += 4;
  9464. WRITE_LONG_F(adr, res)
  9465. POST_IO
  9466. RET(20)
  9467. }
  9468. // MOVEL
  9469. OPCODE(0x211F)
  9470. {
  9471. u32 adr, res;
  9472. u32 src, dst;
  9473. adr = AREG(7);
  9474. AREG(7) += 4;
  9475. PRE_IO
  9476. READ_LONG_F(adr, res)
  9477. flag_C = 0;
  9478. flag_V = 0;
  9479. flag_NotZ = res;
  9480. flag_N = res >> 24;
  9481. adr = AREG((Opcode >> 9) & 7) - 4;
  9482. AREG((Opcode >> 9) & 7) = adr;
  9483. WRITE_LONG_DEC_F(adr, res)
  9484. POST_IO
  9485. RET(20)
  9486. }
  9487. // MOVEL
  9488. OPCODE(0x215F)
  9489. {
  9490. u32 adr, res;
  9491. u32 src, dst;
  9492. adr = AREG(7);
  9493. AREG(7) += 4;
  9494. PRE_IO
  9495. READ_LONG_F(adr, res)
  9496. flag_C = 0;
  9497. flag_V = 0;
  9498. flag_NotZ = res;
  9499. flag_N = res >> 24;
  9500. FETCH_SWORD(adr);
  9501. adr += AREG((Opcode >> 9) & 7);
  9502. WRITE_LONG_F(adr, res)
  9503. POST_IO
  9504. RET(24)
  9505. }
  9506. // MOVEL
  9507. OPCODE(0x219F)
  9508. {
  9509. u32 adr, res;
  9510. u32 src, dst;
  9511. adr = AREG(7);
  9512. AREG(7) += 4;
  9513. PRE_IO
  9514. READ_LONG_F(adr, res)
  9515. flag_C = 0;
  9516. flag_V = 0;
  9517. flag_NotZ = res;
  9518. flag_N = res >> 24;
  9519. adr = AREG((Opcode >> 9) & 7);
  9520. DECODE_EXT_WORD
  9521. WRITE_LONG_F(adr, res)
  9522. POST_IO
  9523. RET(26)
  9524. }
  9525. // MOVEL
  9526. OPCODE(0x21DF)
  9527. {
  9528. u32 adr, res;
  9529. u32 src, dst;
  9530. adr = AREG(7);
  9531. AREG(7) += 4;
  9532. PRE_IO
  9533. READ_LONG_F(adr, res)
  9534. flag_C = 0;
  9535. flag_V = 0;
  9536. flag_NotZ = res;
  9537. flag_N = res >> 24;
  9538. FETCH_SWORD(adr);
  9539. WRITE_LONG_F(adr, res)
  9540. POST_IO
  9541. RET(24)
  9542. }
  9543. // MOVEL
  9544. OPCODE(0x23DF)
  9545. {
  9546. u32 adr, res;
  9547. u32 src, dst;
  9548. adr = AREG(7);
  9549. AREG(7) += 4;
  9550. PRE_IO
  9551. READ_LONG_F(adr, res)
  9552. flag_C = 0;
  9553. flag_V = 0;
  9554. flag_NotZ = res;
  9555. flag_N = res >> 24;
  9556. FETCH_LONG(adr);
  9557. WRITE_LONG_F(adr, res)
  9558. POST_IO
  9559. RET(28)
  9560. }
  9561. // MOVEL
  9562. OPCODE(0x2EDF)
  9563. {
  9564. u32 adr, res;
  9565. u32 src, dst;
  9566. adr = AREG(7);
  9567. AREG(7) += 4;
  9568. PRE_IO
  9569. READ_LONG_F(adr, res)
  9570. flag_C = 0;
  9571. flag_V = 0;
  9572. flag_NotZ = res;
  9573. flag_N = res >> 24;
  9574. adr = AREG(7);
  9575. AREG(7) += 4;
  9576. WRITE_LONG_F(adr, res)
  9577. POST_IO
  9578. RET(20)
  9579. }
  9580. // MOVEL
  9581. OPCODE(0x2F1F)
  9582. {
  9583. u32 adr, res;
  9584. u32 src, dst;
  9585. adr = AREG(7);
  9586. AREG(7) += 4;
  9587. PRE_IO
  9588. READ_LONG_F(adr, res)
  9589. flag_C = 0;
  9590. flag_V = 0;
  9591. flag_NotZ = res;
  9592. flag_N = res >> 24;
  9593. adr = AREG(7) - 4;
  9594. AREG(7) = adr;
  9595. WRITE_LONG_DEC_F(adr, res)
  9596. POST_IO
  9597. RET(20)
  9598. }
  9599. // MOVEL
  9600. OPCODE(0x2027)
  9601. {
  9602. u32 adr, res;
  9603. u32 src, dst;
  9604. adr = AREG(7) - 4;
  9605. AREG(7) = adr;
  9606. PRE_IO
  9607. READ_LONG_F(adr, res)
  9608. flag_C = 0;
  9609. flag_V = 0;
  9610. flag_NotZ = res;
  9611. flag_N = res >> 24;
  9612. DREGu32((Opcode >> 9) & 7) = res;
  9613. POST_IO
  9614. RET(14)
  9615. }
  9616. // MOVEL
  9617. OPCODE(0x20A7)
  9618. {
  9619. u32 adr, res;
  9620. u32 src, dst;
  9621. adr = AREG(7) - 4;
  9622. AREG(7) = adr;
  9623. PRE_IO
  9624. READ_LONG_F(adr, res)
  9625. flag_C = 0;
  9626. flag_V = 0;
  9627. flag_NotZ = res;
  9628. flag_N = res >> 24;
  9629. adr = AREG((Opcode >> 9) & 7);
  9630. WRITE_LONG_F(adr, res)
  9631. POST_IO
  9632. RET(22)
  9633. }
  9634. // MOVEL
  9635. OPCODE(0x20E7)
  9636. {
  9637. u32 adr, res;
  9638. u32 src, dst;
  9639. adr = AREG(7) - 4;
  9640. AREG(7) = adr;
  9641. PRE_IO
  9642. READ_LONG_F(adr, res)
  9643. flag_C = 0;
  9644. flag_V = 0;
  9645. flag_NotZ = res;
  9646. flag_N = res >> 24;
  9647. adr = AREG((Opcode >> 9) & 7);
  9648. AREG((Opcode >> 9) & 7) += 4;
  9649. WRITE_LONG_F(adr, res)
  9650. POST_IO
  9651. RET(22)
  9652. }
  9653. // MOVEL
  9654. OPCODE(0x2127)
  9655. {
  9656. u32 adr, res;
  9657. u32 src, dst;
  9658. adr = AREG(7) - 4;
  9659. AREG(7) = adr;
  9660. PRE_IO
  9661. READ_LONG_F(adr, res)
  9662. flag_C = 0;
  9663. flag_V = 0;
  9664. flag_NotZ = res;
  9665. flag_N = res >> 24;
  9666. adr = AREG((Opcode >> 9) & 7) - 4;
  9667. AREG((Opcode >> 9) & 7) = adr;
  9668. WRITE_LONG_DEC_F(adr, res)
  9669. POST_IO
  9670. RET(22)
  9671. }
  9672. // MOVEL
  9673. OPCODE(0x2167)
  9674. {
  9675. u32 adr, res;
  9676. u32 src, dst;
  9677. adr = AREG(7) - 4;
  9678. AREG(7) = adr;
  9679. PRE_IO
  9680. READ_LONG_F(adr, res)
  9681. flag_C = 0;
  9682. flag_V = 0;
  9683. flag_NotZ = res;
  9684. flag_N = res >> 24;
  9685. FETCH_SWORD(adr);
  9686. adr += AREG((Opcode >> 9) & 7);
  9687. WRITE_LONG_F(adr, res)
  9688. POST_IO
  9689. RET(26)
  9690. }
  9691. // MOVEL
  9692. OPCODE(0x21A7)
  9693. {
  9694. u32 adr, res;
  9695. u32 src, dst;
  9696. adr = AREG(7) - 4;
  9697. AREG(7) = adr;
  9698. PRE_IO
  9699. READ_LONG_F(adr, res)
  9700. flag_C = 0;
  9701. flag_V = 0;
  9702. flag_NotZ = res;
  9703. flag_N = res >> 24;
  9704. adr = AREG((Opcode >> 9) & 7);
  9705. DECODE_EXT_WORD
  9706. WRITE_LONG_F(adr, res)
  9707. POST_IO
  9708. RET(28)
  9709. }
  9710. // MOVEL
  9711. OPCODE(0x21E7)
  9712. {
  9713. u32 adr, res;
  9714. u32 src, dst;
  9715. adr = AREG(7) - 4;
  9716. AREG(7) = adr;
  9717. PRE_IO
  9718. READ_LONG_F(adr, res)
  9719. flag_C = 0;
  9720. flag_V = 0;
  9721. flag_NotZ = res;
  9722. flag_N = res >> 24;
  9723. FETCH_SWORD(adr);
  9724. WRITE_LONG_F(adr, res)
  9725. POST_IO
  9726. RET(26)
  9727. }
  9728. // MOVEL
  9729. OPCODE(0x23E7)
  9730. {
  9731. u32 adr, res;
  9732. u32 src, dst;
  9733. adr = AREG(7) - 4;
  9734. AREG(7) = adr;
  9735. PRE_IO
  9736. READ_LONG_F(adr, res)
  9737. flag_C = 0;
  9738. flag_V = 0;
  9739. flag_NotZ = res;
  9740. flag_N = res >> 24;
  9741. FETCH_LONG(adr);
  9742. WRITE_LONG_F(adr, res)
  9743. POST_IO
  9744. RET(30)
  9745. }
  9746. // MOVEL
  9747. OPCODE(0x2EE7)
  9748. {
  9749. u32 adr, res;
  9750. u32 src, dst;
  9751. adr = AREG(7) - 4;
  9752. AREG(7) = adr;
  9753. PRE_IO
  9754. READ_LONG_F(adr, res)
  9755. flag_C = 0;
  9756. flag_V = 0;
  9757. flag_NotZ = res;
  9758. flag_N = res >> 24;
  9759. adr = AREG(7);
  9760. AREG(7) += 4;
  9761. WRITE_LONG_F(adr, res)
  9762. POST_IO
  9763. RET(22)
  9764. }
  9765. // MOVEL
  9766. OPCODE(0x2F27)
  9767. {
  9768. u32 adr, res;
  9769. u32 src, dst;
  9770. adr = AREG(7) - 4;
  9771. AREG(7) = adr;
  9772. PRE_IO
  9773. READ_LONG_F(adr, res)
  9774. flag_C = 0;
  9775. flag_V = 0;
  9776. flag_NotZ = res;
  9777. flag_N = res >> 24;
  9778. adr = AREG(7) - 4;
  9779. AREG(7) = adr;
  9780. WRITE_LONG_DEC_F(adr, res)
  9781. POST_IO
  9782. RET(22)
  9783. }
  9784. // MOVEAL
  9785. OPCODE(0x2040)
  9786. {
  9787. u32 adr, res;
  9788. u32 src, dst;
  9789. res = (s32)DREGs32((Opcode >> 0) & 7);
  9790. AREG((Opcode >> 9) & 7) = res;
  9791. RET(4)
  9792. }
  9793. // MOVEAL
  9794. OPCODE(0x2048)
  9795. {
  9796. u32 adr, res;
  9797. u32 src, dst;
  9798. res = (s32)AREGs32((Opcode >> 0) & 7);
  9799. AREG((Opcode >> 9) & 7) = res;
  9800. RET(4)
  9801. }
  9802. // MOVEAL
  9803. OPCODE(0x2050)
  9804. {
  9805. u32 adr, res;
  9806. u32 src, dst;
  9807. adr = AREG((Opcode >> 0) & 7);
  9808. PRE_IO
  9809. READSX_LONG_F(adr, res)
  9810. AREG((Opcode >> 9) & 7) = res;
  9811. POST_IO
  9812. RET(12)
  9813. }
  9814. // MOVEAL
  9815. OPCODE(0x2058)
  9816. {
  9817. u32 adr, res;
  9818. u32 src, dst;
  9819. adr = AREG((Opcode >> 0) & 7);
  9820. AREG((Opcode >> 0) & 7) += 4;
  9821. PRE_IO
  9822. READSX_LONG_F(adr, res)
  9823. AREG((Opcode >> 9) & 7) = res;
  9824. POST_IO
  9825. RET(12)
  9826. }
  9827. // MOVEAL
  9828. OPCODE(0x2060)
  9829. {
  9830. u32 adr, res;
  9831. u32 src, dst;
  9832. adr = AREG((Opcode >> 0) & 7) - 4;
  9833. AREG((Opcode >> 0) & 7) = adr;
  9834. PRE_IO
  9835. READSX_LONG_F(adr, res)
  9836. AREG((Opcode >> 9) & 7) = res;
  9837. POST_IO
  9838. RET(14)
  9839. }
  9840. // MOVEAL
  9841. OPCODE(0x2068)
  9842. {
  9843. u32 adr, res;
  9844. u32 src, dst;
  9845. FETCH_SWORD(adr);
  9846. adr += AREG((Opcode >> 0) & 7);
  9847. PRE_IO
  9848. READSX_LONG_F(adr, res)
  9849. AREG((Opcode >> 9) & 7) = res;
  9850. POST_IO
  9851. RET(16)
  9852. }
  9853. // MOVEAL
  9854. OPCODE(0x2070)
  9855. {
  9856. u32 adr, res;
  9857. u32 src, dst;
  9858. adr = AREG((Opcode >> 0) & 7);
  9859. DECODE_EXT_WORD
  9860. PRE_IO
  9861. READSX_LONG_F(adr, res)
  9862. AREG((Opcode >> 9) & 7) = res;
  9863. POST_IO
  9864. RET(18)
  9865. }
  9866. // MOVEAL
  9867. OPCODE(0x2078)
  9868. {
  9869. u32 adr, res;
  9870. u32 src, dst;
  9871. FETCH_SWORD(adr);
  9872. PRE_IO
  9873. READSX_LONG_F(adr, res)
  9874. AREG((Opcode >> 9) & 7) = res;
  9875. POST_IO
  9876. RET(16)
  9877. }
  9878. // MOVEAL
  9879. OPCODE(0x2079)
  9880. {
  9881. u32 adr, res;
  9882. u32 src, dst;
  9883. FETCH_LONG(adr);
  9884. PRE_IO
  9885. READSX_LONG_F(adr, res)
  9886. AREG((Opcode >> 9) & 7) = res;
  9887. POST_IO
  9888. RET(20)
  9889. }
  9890. // MOVEAL
  9891. OPCODE(0x207A)
  9892. {
  9893. u32 adr, res;
  9894. u32 src, dst;
  9895. adr = GET_SWORD + GET_PC;
  9896. PC++;
  9897. PRE_IO
  9898. READSX_LONG_F(adr, res)
  9899. AREG((Opcode >> 9) & 7) = res;
  9900. POST_IO
  9901. RET(16)
  9902. }
  9903. // MOVEAL
  9904. OPCODE(0x207B)
  9905. {
  9906. u32 adr, res;
  9907. u32 src, dst;
  9908. adr = GET_PC;
  9909. DECODE_EXT_WORD
  9910. PRE_IO
  9911. READSX_LONG_F(adr, res)
  9912. AREG((Opcode >> 9) & 7) = res;
  9913. POST_IO
  9914. RET(18)
  9915. }
  9916. // MOVEAL
  9917. OPCODE(0x207C)
  9918. {
  9919. u32 adr, res;
  9920. u32 src, dst;
  9921. FETCH_LONG(res);
  9922. AREG((Opcode >> 9) & 7) = res;
  9923. RET(12)
  9924. }
  9925. // MOVEAL
  9926. OPCODE(0x205F)
  9927. {
  9928. u32 adr, res;
  9929. u32 src, dst;
  9930. adr = AREG(7);
  9931. AREG(7) += 4;
  9932. PRE_IO
  9933. READSX_LONG_F(adr, res)
  9934. AREG((Opcode >> 9) & 7) = res;
  9935. POST_IO
  9936. RET(12)
  9937. }
  9938. // MOVEAL
  9939. OPCODE(0x2067)
  9940. {
  9941. u32 adr, res;
  9942. u32 src, dst;
  9943. adr = AREG(7) - 4;
  9944. AREG(7) = adr;
  9945. PRE_IO
  9946. READSX_LONG_F(adr, res)
  9947. AREG((Opcode >> 9) & 7) = res;
  9948. POST_IO
  9949. RET(14)
  9950. }
  9951. // MOVEW
  9952. OPCODE(0x3000)
  9953. {
  9954. u32 adr, res;
  9955. u32 src, dst;
  9956. res = DREGu16((Opcode >> 0) & 7);
  9957. flag_C = 0;
  9958. flag_V = 0;
  9959. flag_NotZ = res;
  9960. flag_N = res >> 8;
  9961. DREGu16((Opcode >> 9) & 7) = res;
  9962. RET(4)
  9963. }
  9964. // MOVEW
  9965. OPCODE(0x3080)
  9966. {
  9967. u32 adr, res;
  9968. u32 src, dst;
  9969. res = DREGu16((Opcode >> 0) & 7);
  9970. flag_C = 0;
  9971. flag_V = 0;
  9972. flag_NotZ = res;
  9973. flag_N = res >> 8;
  9974. adr = AREG((Opcode >> 9) & 7);
  9975. PRE_IO
  9976. WRITE_WORD_F(adr, res)
  9977. POST_IO
  9978. RET(8)
  9979. }
  9980. // MOVEW
  9981. OPCODE(0x30C0)
  9982. {
  9983. u32 adr, res;
  9984. u32 src, dst;
  9985. res = DREGu16((Opcode >> 0) & 7);
  9986. flag_C = 0;
  9987. flag_V = 0;
  9988. flag_NotZ = res;
  9989. flag_N = res >> 8;
  9990. adr = AREG((Opcode >> 9) & 7);
  9991. AREG((Opcode >> 9) & 7) += 2;
  9992. PRE_IO
  9993. WRITE_WORD_F(adr, res)
  9994. POST_IO
  9995. RET(8)
  9996. }
  9997. // MOVEW
  9998. OPCODE(0x3100)
  9999. {
  10000. u32 adr, res;
  10001. u32 src, dst;
  10002. res = DREGu16((Opcode >> 0) & 7);
  10003. flag_C = 0;
  10004. flag_V = 0;
  10005. flag_NotZ = res;
  10006. flag_N = res >> 8;
  10007. adr = AREG((Opcode >> 9) & 7) - 2;
  10008. AREG((Opcode >> 9) & 7) = adr;
  10009. PRE_IO
  10010. WRITE_WORD_F(adr, res)
  10011. POST_IO
  10012. RET(8)
  10013. }
  10014. // MOVEW
  10015. OPCODE(0x3140)
  10016. {
  10017. u32 adr, res;
  10018. u32 src, dst;
  10019. res = DREGu16((Opcode >> 0) & 7);
  10020. flag_C = 0;
  10021. flag_V = 0;
  10022. flag_NotZ = res;
  10023. flag_N = res >> 8;
  10024. FETCH_SWORD(adr);
  10025. adr += AREG((Opcode >> 9) & 7);
  10026. PRE_IO
  10027. WRITE_WORD_F(adr, res)
  10028. POST_IO
  10029. RET(12)
  10030. }
  10031. // MOVEW
  10032. OPCODE(0x3180)
  10033. {
  10034. u32 adr, res;
  10035. u32 src, dst;
  10036. res = DREGu16((Opcode >> 0) & 7);
  10037. flag_C = 0;
  10038. flag_V = 0;
  10039. flag_NotZ = res;
  10040. flag_N = res >> 8;
  10041. adr = AREG((Opcode >> 9) & 7);
  10042. DECODE_EXT_WORD
  10043. PRE_IO
  10044. WRITE_WORD_F(adr, res)
  10045. POST_IO
  10046. RET(14)
  10047. }
  10048. // MOVEW
  10049. OPCODE(0x31C0)
  10050. {
  10051. u32 adr, res;
  10052. u32 src, dst;
  10053. res = DREGu16((Opcode >> 0) & 7);
  10054. flag_C = 0;
  10055. flag_V = 0;
  10056. flag_NotZ = res;
  10057. flag_N = res >> 8;
  10058. FETCH_SWORD(adr);
  10059. PRE_IO
  10060. WRITE_WORD_F(adr, res)
  10061. POST_IO
  10062. RET(12)
  10063. }
  10064. // MOVEW
  10065. OPCODE(0x33C0)
  10066. {
  10067. u32 adr, res;
  10068. u32 src, dst;
  10069. res = DREGu16((Opcode >> 0) & 7);
  10070. flag_C = 0;
  10071. flag_V = 0;
  10072. flag_NotZ = res;
  10073. flag_N = res >> 8;
  10074. FETCH_LONG(adr);
  10075. PRE_IO
  10076. WRITE_WORD_F(adr, res)
  10077. POST_IO
  10078. RET(16)
  10079. }
  10080. // MOVEW
  10081. OPCODE(0x3EC0)
  10082. {
  10083. u32 adr, res;
  10084. u32 src, dst;
  10085. res = DREGu16((Opcode >> 0) & 7);
  10086. flag_C = 0;
  10087. flag_V = 0;
  10088. flag_NotZ = res;
  10089. flag_N = res >> 8;
  10090. adr = AREG(7);
  10091. AREG(7) += 2;
  10092. PRE_IO
  10093. WRITE_WORD_F(adr, res)
  10094. POST_IO
  10095. RET(8)
  10096. }
  10097. // MOVEW
  10098. OPCODE(0x3F00)
  10099. {
  10100. u32 adr, res;
  10101. u32 src, dst;
  10102. res = DREGu16((Opcode >> 0) & 7);
  10103. flag_C = 0;
  10104. flag_V = 0;
  10105. flag_NotZ = res;
  10106. flag_N = res >> 8;
  10107. adr = AREG(7) - 2;
  10108. AREG(7) = adr;
  10109. PRE_IO
  10110. WRITE_WORD_F(adr, res)
  10111. POST_IO
  10112. RET(8)
  10113. }
  10114. // MOVEW
  10115. OPCODE(0x3008)
  10116. {
  10117. u32 adr, res;
  10118. u32 src, dst;
  10119. res = AREGu16((Opcode >> 0) & 7);
  10120. flag_C = 0;
  10121. flag_V = 0;
  10122. flag_NotZ = res;
  10123. flag_N = res >> 8;
  10124. DREGu16((Opcode >> 9) & 7) = res;
  10125. RET(4)
  10126. }
  10127. // MOVEW
  10128. OPCODE(0x3088)
  10129. {
  10130. u32 adr, res;
  10131. u32 src, dst;
  10132. res = AREGu16((Opcode >> 0) & 7);
  10133. flag_C = 0;
  10134. flag_V = 0;
  10135. flag_NotZ = res;
  10136. flag_N = res >> 8;
  10137. adr = AREG((Opcode >> 9) & 7);
  10138. PRE_IO
  10139. WRITE_WORD_F(adr, res)
  10140. POST_IO
  10141. RET(8)
  10142. }
  10143. // MOVEW
  10144. OPCODE(0x30C8)
  10145. {
  10146. u32 adr, res;
  10147. u32 src, dst;
  10148. res = AREGu16((Opcode >> 0) & 7);
  10149. flag_C = 0;
  10150. flag_V = 0;
  10151. flag_NotZ = res;
  10152. flag_N = res >> 8;
  10153. adr = AREG((Opcode >> 9) & 7);
  10154. AREG((Opcode >> 9) & 7) += 2;
  10155. PRE_IO
  10156. WRITE_WORD_F(adr, res)
  10157. POST_IO
  10158. RET(8)
  10159. }
  10160. // MOVEW
  10161. OPCODE(0x3108)
  10162. {
  10163. u32 adr, res;
  10164. u32 src, dst;
  10165. res = AREGu16((Opcode >> 0) & 7);
  10166. flag_C = 0;
  10167. flag_V = 0;
  10168. flag_NotZ = res;
  10169. flag_N = res >> 8;
  10170. adr = AREG((Opcode >> 9) & 7) - 2;
  10171. AREG((Opcode >> 9) & 7) = adr;
  10172. PRE_IO
  10173. WRITE_WORD_F(adr, res)
  10174. POST_IO
  10175. RET(8)
  10176. }
  10177. // MOVEW
  10178. OPCODE(0x3148)
  10179. {
  10180. u32 adr, res;
  10181. u32 src, dst;
  10182. res = AREGu16((Opcode >> 0) & 7);
  10183. flag_C = 0;
  10184. flag_V = 0;
  10185. flag_NotZ = res;
  10186. flag_N = res >> 8;
  10187. FETCH_SWORD(adr);
  10188. adr += AREG((Opcode >> 9) & 7);
  10189. PRE_IO
  10190. WRITE_WORD_F(adr, res)
  10191. POST_IO
  10192. RET(12)
  10193. }
  10194. // MOVEW
  10195. OPCODE(0x3188)
  10196. {
  10197. u32 adr, res;
  10198. u32 src, dst;
  10199. res = AREGu16((Opcode >> 0) & 7);
  10200. flag_C = 0;
  10201. flag_V = 0;
  10202. flag_NotZ = res;
  10203. flag_N = res >> 8;
  10204. adr = AREG((Opcode >> 9) & 7);
  10205. DECODE_EXT_WORD
  10206. PRE_IO
  10207. WRITE_WORD_F(adr, res)
  10208. POST_IO
  10209. RET(14)
  10210. }
  10211. // MOVEW
  10212. OPCODE(0x31C8)
  10213. {
  10214. u32 adr, res;
  10215. u32 src, dst;
  10216. res = AREGu16((Opcode >> 0) & 7);
  10217. flag_C = 0;
  10218. flag_V = 0;
  10219. flag_NotZ = res;
  10220. flag_N = res >> 8;
  10221. FETCH_SWORD(adr);
  10222. PRE_IO
  10223. WRITE_WORD_F(adr, res)
  10224. POST_IO
  10225. RET(12)
  10226. }
  10227. // MOVEW
  10228. OPCODE(0x33C8)
  10229. {
  10230. u32 adr, res;
  10231. u32 src, dst;
  10232. res = AREGu16((Opcode >> 0) & 7);
  10233. flag_C = 0;
  10234. flag_V = 0;
  10235. flag_NotZ = res;
  10236. flag_N = res >> 8;
  10237. FETCH_LONG(adr);
  10238. PRE_IO
  10239. WRITE_WORD_F(adr, res)
  10240. POST_IO
  10241. RET(16)
  10242. }
  10243. // MOVEW
  10244. OPCODE(0x3EC8)
  10245. {
  10246. u32 adr, res;
  10247. u32 src, dst;
  10248. res = AREGu16((Opcode >> 0) & 7);
  10249. flag_C = 0;
  10250. flag_V = 0;
  10251. flag_NotZ = res;
  10252. flag_N = res >> 8;
  10253. adr = AREG(7);
  10254. AREG(7) += 2;
  10255. PRE_IO
  10256. WRITE_WORD_F(adr, res)
  10257. POST_IO
  10258. RET(8)
  10259. }
  10260. // MOVEW
  10261. OPCODE(0x3F08)
  10262. {
  10263. u32 adr, res;
  10264. u32 src, dst;
  10265. res = AREGu16((Opcode >> 0) & 7);
  10266. flag_C = 0;
  10267. flag_V = 0;
  10268. flag_NotZ = res;
  10269. flag_N = res >> 8;
  10270. adr = AREG(7) - 2;
  10271. AREG(7) = adr;
  10272. PRE_IO
  10273. WRITE_WORD_F(adr, res)
  10274. POST_IO
  10275. RET(8)
  10276. }
  10277. // MOVEW
  10278. OPCODE(0x3010)
  10279. {
  10280. u32 adr, res;
  10281. u32 src, dst;
  10282. adr = AREG((Opcode >> 0) & 7);
  10283. PRE_IO
  10284. READ_WORD_F(adr, res)
  10285. flag_C = 0;
  10286. flag_V = 0;
  10287. flag_NotZ = res;
  10288. flag_N = res >> 8;
  10289. DREGu16((Opcode >> 9) & 7) = res;
  10290. POST_IO
  10291. RET(8)
  10292. }
  10293. // MOVEW
  10294. OPCODE(0x3090)
  10295. {
  10296. u32 adr, res;
  10297. u32 src, dst;
  10298. adr = AREG((Opcode >> 0) & 7);
  10299. PRE_IO
  10300. READ_WORD_F(adr, res)
  10301. flag_C = 0;
  10302. flag_V = 0;
  10303. flag_NotZ = res;
  10304. flag_N = res >> 8;
  10305. adr = AREG((Opcode >> 9) & 7);
  10306. WRITE_WORD_F(adr, res)
  10307. POST_IO
  10308. RET(12)
  10309. }
  10310. // MOVEW
  10311. OPCODE(0x30D0)
  10312. {
  10313. u32 adr, res;
  10314. u32 src, dst;
  10315. adr = AREG((Opcode >> 0) & 7);
  10316. PRE_IO
  10317. READ_WORD_F(adr, res)
  10318. flag_C = 0;
  10319. flag_V = 0;
  10320. flag_NotZ = res;
  10321. flag_N = res >> 8;
  10322. adr = AREG((Opcode >> 9) & 7);
  10323. AREG((Opcode >> 9) & 7) += 2;
  10324. WRITE_WORD_F(adr, res)
  10325. POST_IO
  10326. RET(12)
  10327. }
  10328. // MOVEW
  10329. OPCODE(0x3110)
  10330. {
  10331. u32 adr, res;
  10332. u32 src, dst;
  10333. adr = AREG((Opcode >> 0) & 7);
  10334. PRE_IO
  10335. READ_WORD_F(adr, res)
  10336. flag_C = 0;
  10337. flag_V = 0;
  10338. flag_NotZ = res;
  10339. flag_N = res >> 8;
  10340. adr = AREG((Opcode >> 9) & 7) - 2;
  10341. AREG((Opcode >> 9) & 7) = adr;
  10342. WRITE_WORD_F(adr, res)
  10343. POST_IO
  10344. RET(12)
  10345. }
  10346. // MOVEW
  10347. OPCODE(0x3150)
  10348. {
  10349. u32 adr, res;
  10350. u32 src, dst;
  10351. adr = AREG((Opcode >> 0) & 7);
  10352. PRE_IO
  10353. READ_WORD_F(adr, res)
  10354. flag_C = 0;
  10355. flag_V = 0;
  10356. flag_NotZ = res;
  10357. flag_N = res >> 8;
  10358. FETCH_SWORD(adr);
  10359. adr += AREG((Opcode >> 9) & 7);
  10360. WRITE_WORD_F(adr, res)
  10361. POST_IO
  10362. RET(16)
  10363. }
  10364. // MOVEW
  10365. OPCODE(0x3190)
  10366. {
  10367. u32 adr, res;
  10368. u32 src, dst;
  10369. adr = AREG((Opcode >> 0) & 7);
  10370. PRE_IO
  10371. READ_WORD_F(adr, res)
  10372. flag_C = 0;
  10373. flag_V = 0;
  10374. flag_NotZ = res;
  10375. flag_N = res >> 8;
  10376. adr = AREG((Opcode >> 9) & 7);
  10377. DECODE_EXT_WORD
  10378. WRITE_WORD_F(adr, res)
  10379. POST_IO
  10380. RET(18)
  10381. }
  10382. // MOVEW
  10383. OPCODE(0x31D0)
  10384. {
  10385. u32 adr, res;
  10386. u32 src, dst;
  10387. adr = AREG((Opcode >> 0) & 7);
  10388. PRE_IO
  10389. READ_WORD_F(adr, res)
  10390. flag_C = 0;
  10391. flag_V = 0;
  10392. flag_NotZ = res;
  10393. flag_N = res >> 8;
  10394. FETCH_SWORD(adr);
  10395. WRITE_WORD_F(adr, res)
  10396. POST_IO
  10397. RET(16)
  10398. }
  10399. // MOVEW
  10400. OPCODE(0x33D0)
  10401. {
  10402. u32 adr, res;
  10403. u32 src, dst;
  10404. adr = AREG((Opcode >> 0) & 7);
  10405. PRE_IO
  10406. READ_WORD_F(adr, res)
  10407. flag_C = 0;
  10408. flag_V = 0;
  10409. flag_NotZ = res;
  10410. flag_N = res >> 8;
  10411. FETCH_LONG(adr);
  10412. WRITE_WORD_F(adr, res)
  10413. POST_IO
  10414. RET(20)
  10415. }
  10416. // MOVEW
  10417. OPCODE(0x3ED0)
  10418. {
  10419. u32 adr, res;
  10420. u32 src, dst;
  10421. adr = AREG((Opcode >> 0) & 7);
  10422. PRE_IO
  10423. READ_WORD_F(adr, res)
  10424. flag_C = 0;
  10425. flag_V = 0;
  10426. flag_NotZ = res;
  10427. flag_N = res >> 8;
  10428. adr = AREG(7);
  10429. AREG(7) += 2;
  10430. WRITE_WORD_F(adr, res)
  10431. POST_IO
  10432. RET(12)
  10433. }
  10434. // MOVEW
  10435. OPCODE(0x3F10)
  10436. {
  10437. u32 adr, res;
  10438. u32 src, dst;
  10439. adr = AREG((Opcode >> 0) & 7);
  10440. PRE_IO
  10441. READ_WORD_F(adr, res)
  10442. flag_C = 0;
  10443. flag_V = 0;
  10444. flag_NotZ = res;
  10445. flag_N = res >> 8;
  10446. adr = AREG(7) - 2;
  10447. AREG(7) = adr;
  10448. WRITE_WORD_F(adr, res)
  10449. POST_IO
  10450. RET(12)
  10451. }
  10452. // MOVEW
  10453. OPCODE(0x3018)
  10454. {
  10455. u32 adr, res;
  10456. u32 src, dst;
  10457. adr = AREG((Opcode >> 0) & 7);
  10458. AREG((Opcode >> 0) & 7) += 2;
  10459. PRE_IO
  10460. READ_WORD_F(adr, res)
  10461. flag_C = 0;
  10462. flag_V = 0;
  10463. flag_NotZ = res;
  10464. flag_N = res >> 8;
  10465. DREGu16((Opcode >> 9) & 7) = res;
  10466. POST_IO
  10467. RET(8)
  10468. }
  10469. // MOVEW
  10470. OPCODE(0x3098)
  10471. {
  10472. u32 adr, res;
  10473. u32 src, dst;
  10474. adr = AREG((Opcode >> 0) & 7);
  10475. AREG((Opcode >> 0) & 7) += 2;
  10476. PRE_IO
  10477. READ_WORD_F(adr, res)
  10478. flag_C = 0;
  10479. flag_V = 0;
  10480. flag_NotZ = res;
  10481. flag_N = res >> 8;
  10482. adr = AREG((Opcode >> 9) & 7);
  10483. WRITE_WORD_F(adr, res)
  10484. POST_IO
  10485. RET(12)
  10486. }
  10487. // MOVEW
  10488. OPCODE(0x30D8)
  10489. {
  10490. u32 adr, res;
  10491. u32 src, dst;
  10492. adr = AREG((Opcode >> 0) & 7);
  10493. AREG((Opcode >> 0) & 7) += 2;
  10494. PRE_IO
  10495. READ_WORD_F(adr, res)
  10496. flag_C = 0;
  10497. flag_V = 0;
  10498. flag_NotZ = res;
  10499. flag_N = res >> 8;
  10500. adr = AREG((Opcode >> 9) & 7);
  10501. AREG((Opcode >> 9) & 7) += 2;
  10502. WRITE_WORD_F(adr, res)
  10503. POST_IO
  10504. RET(12)
  10505. }
  10506. // MOVEW
  10507. OPCODE(0x3118)
  10508. {
  10509. u32 adr, res;
  10510. u32 src, dst;
  10511. adr = AREG((Opcode >> 0) & 7);
  10512. AREG((Opcode >> 0) & 7) += 2;
  10513. PRE_IO
  10514. READ_WORD_F(adr, res)
  10515. flag_C = 0;
  10516. flag_V = 0;
  10517. flag_NotZ = res;
  10518. flag_N = res >> 8;
  10519. adr = AREG((Opcode >> 9) & 7) - 2;
  10520. AREG((Opcode >> 9) & 7) = adr;
  10521. WRITE_WORD_F(adr, res)
  10522. POST_IO
  10523. RET(12)
  10524. }
  10525. // MOVEW
  10526. OPCODE(0x3158)
  10527. {
  10528. u32 adr, res;
  10529. u32 src, dst;
  10530. adr = AREG((Opcode >> 0) & 7);
  10531. AREG((Opcode >> 0) & 7) += 2;
  10532. PRE_IO
  10533. READ_WORD_F(adr, res)
  10534. flag_C = 0;
  10535. flag_V = 0;
  10536. flag_NotZ = res;
  10537. flag_N = res >> 8;
  10538. FETCH_SWORD(adr);
  10539. adr += AREG((Opcode >> 9) & 7);
  10540. WRITE_WORD_F(adr, res)
  10541. POST_IO
  10542. RET(16)
  10543. }
  10544. // MOVEW
  10545. OPCODE(0x3198)
  10546. {
  10547. u32 adr, res;
  10548. u32 src, dst;
  10549. adr = AREG((Opcode >> 0) & 7);
  10550. AREG((Opcode >> 0) & 7) += 2;
  10551. PRE_IO
  10552. READ_WORD_F(adr, res)
  10553. flag_C = 0;
  10554. flag_V = 0;
  10555. flag_NotZ = res;
  10556. flag_N = res >> 8;
  10557. adr = AREG((Opcode >> 9) & 7);
  10558. DECODE_EXT_WORD
  10559. WRITE_WORD_F(adr, res)
  10560. POST_IO
  10561. RET(18)
  10562. }
  10563. // MOVEW
  10564. OPCODE(0x31D8)
  10565. {
  10566. u32 adr, res;
  10567. u32 src, dst;
  10568. adr = AREG((Opcode >> 0) & 7);
  10569. AREG((Opcode >> 0) & 7) += 2;
  10570. PRE_IO
  10571. READ_WORD_F(adr, res)
  10572. flag_C = 0;
  10573. flag_V = 0;
  10574. flag_NotZ = res;
  10575. flag_N = res >> 8;
  10576. FETCH_SWORD(adr);
  10577. WRITE_WORD_F(adr, res)
  10578. POST_IO
  10579. RET(16)
  10580. }
  10581. // MOVEW
  10582. OPCODE(0x33D8)
  10583. {
  10584. u32 adr, res;
  10585. u32 src, dst;
  10586. adr = AREG((Opcode >> 0) & 7);
  10587. AREG((Opcode >> 0) & 7) += 2;
  10588. PRE_IO
  10589. READ_WORD_F(adr, res)
  10590. flag_C = 0;
  10591. flag_V = 0;
  10592. flag_NotZ = res;
  10593. flag_N = res >> 8;
  10594. FETCH_LONG(adr);
  10595. WRITE_WORD_F(adr, res)
  10596. POST_IO
  10597. RET(20)
  10598. }
  10599. // MOVEW
  10600. OPCODE(0x3ED8)
  10601. {
  10602. u32 adr, res;
  10603. u32 src, dst;
  10604. adr = AREG((Opcode >> 0) & 7);
  10605. AREG((Opcode >> 0) & 7) += 2;
  10606. PRE_IO
  10607. READ_WORD_F(adr, res)
  10608. flag_C = 0;
  10609. flag_V = 0;
  10610. flag_NotZ = res;
  10611. flag_N = res >> 8;
  10612. adr = AREG(7);
  10613. AREG(7) += 2;
  10614. WRITE_WORD_F(adr, res)
  10615. POST_IO
  10616. RET(12)
  10617. }
  10618. // MOVEW
  10619. OPCODE(0x3F18)
  10620. {
  10621. u32 adr, res;
  10622. u32 src, dst;
  10623. adr = AREG((Opcode >> 0) & 7);
  10624. AREG((Opcode >> 0) & 7) += 2;
  10625. PRE_IO
  10626. READ_WORD_F(adr, res)
  10627. flag_C = 0;
  10628. flag_V = 0;
  10629. flag_NotZ = res;
  10630. flag_N = res >> 8;
  10631. adr = AREG(7) - 2;
  10632. AREG(7) = adr;
  10633. WRITE_WORD_F(adr, res)
  10634. POST_IO
  10635. RET(12)
  10636. }
  10637. // MOVEW
  10638. OPCODE(0x3020)
  10639. {
  10640. u32 adr, res;
  10641. u32 src, dst;
  10642. adr = AREG((Opcode >> 0) & 7) - 2;
  10643. AREG((Opcode >> 0) & 7) = adr;
  10644. PRE_IO
  10645. READ_WORD_F(adr, res)
  10646. flag_C = 0;
  10647. flag_V = 0;
  10648. flag_NotZ = res;
  10649. flag_N = res >> 8;
  10650. DREGu16((Opcode >> 9) & 7) = res;
  10651. POST_IO
  10652. RET(10)
  10653. }
  10654. // MOVEW
  10655. OPCODE(0x30A0)
  10656. {
  10657. u32 adr, res;
  10658. u32 src, dst;
  10659. adr = AREG((Opcode >> 0) & 7) - 2;
  10660. AREG((Opcode >> 0) & 7) = adr;
  10661. PRE_IO
  10662. READ_WORD_F(adr, res)
  10663. flag_C = 0;
  10664. flag_V = 0;
  10665. flag_NotZ = res;
  10666. flag_N = res >> 8;
  10667. adr = AREG((Opcode >> 9) & 7);
  10668. WRITE_WORD_F(adr, res)
  10669. POST_IO
  10670. RET(14)
  10671. }
  10672. // MOVEW
  10673. OPCODE(0x30E0)
  10674. {
  10675. u32 adr, res;
  10676. u32 src, dst;
  10677. adr = AREG((Opcode >> 0) & 7) - 2;
  10678. AREG((Opcode >> 0) & 7) = adr;
  10679. PRE_IO
  10680. READ_WORD_F(adr, res)
  10681. flag_C = 0;
  10682. flag_V = 0;
  10683. flag_NotZ = res;
  10684. flag_N = res >> 8;
  10685. adr = AREG((Opcode >> 9) & 7);
  10686. AREG((Opcode >> 9) & 7) += 2;
  10687. WRITE_WORD_F(adr, res)
  10688. POST_IO
  10689. RET(14)
  10690. }
  10691. // MOVEW
  10692. OPCODE(0x3120)
  10693. {
  10694. u32 adr, res;
  10695. u32 src, dst;
  10696. adr = AREG((Opcode >> 0) & 7) - 2;
  10697. AREG((Opcode >> 0) & 7) = adr;
  10698. PRE_IO
  10699. READ_WORD_F(adr, res)
  10700. flag_C = 0;
  10701. flag_V = 0;
  10702. flag_NotZ = res;
  10703. flag_N = res >> 8;
  10704. adr = AREG((Opcode >> 9) & 7) - 2;
  10705. AREG((Opcode >> 9) & 7) = adr;
  10706. WRITE_WORD_F(adr, res)
  10707. POST_IO
  10708. RET(14)
  10709. }
  10710. // MOVEW
  10711. OPCODE(0x3160)
  10712. {
  10713. u32 adr, res;
  10714. u32 src, dst;
  10715. adr = AREG((Opcode >> 0) & 7) - 2;
  10716. AREG((Opcode >> 0) & 7) = adr;
  10717. PRE_IO
  10718. READ_WORD_F(adr, res)
  10719. flag_C = 0;
  10720. flag_V = 0;
  10721. flag_NotZ = res;
  10722. flag_N = res >> 8;
  10723. FETCH_SWORD(adr);
  10724. adr += AREG((Opcode >> 9) & 7);
  10725. WRITE_WORD_F(adr, res)
  10726. POST_IO
  10727. RET(18)
  10728. }
  10729. // MOVEW
  10730. OPCODE(0x31A0)
  10731. {
  10732. u32 adr, res;
  10733. u32 src, dst;
  10734. adr = AREG((Opcode >> 0) & 7) - 2;
  10735. AREG((Opcode >> 0) & 7) = adr;
  10736. PRE_IO
  10737. READ_WORD_F(adr, res)
  10738. flag_C = 0;
  10739. flag_V = 0;
  10740. flag_NotZ = res;
  10741. flag_N = res >> 8;
  10742. adr = AREG((Opcode >> 9) & 7);
  10743. DECODE_EXT_WORD
  10744. WRITE_WORD_F(adr, res)
  10745. POST_IO
  10746. RET(20)
  10747. }
  10748. // MOVEW
  10749. OPCODE(0x31E0)
  10750. {
  10751. u32 adr, res;
  10752. u32 src, dst;
  10753. adr = AREG((Opcode >> 0) & 7) - 2;
  10754. AREG((Opcode >> 0) & 7) = adr;
  10755. PRE_IO
  10756. READ_WORD_F(adr, res)
  10757. flag_C = 0;
  10758. flag_V = 0;
  10759. flag_NotZ = res;
  10760. flag_N = res >> 8;
  10761. FETCH_SWORD(adr);
  10762. WRITE_WORD_F(adr, res)
  10763. POST_IO
  10764. RET(18)
  10765. }
  10766. // MOVEW
  10767. OPCODE(0x33E0)
  10768. {
  10769. u32 adr, res;
  10770. u32 src, dst;
  10771. adr = AREG((Opcode >> 0) & 7) - 2;
  10772. AREG((Opcode >> 0) & 7) = adr;
  10773. PRE_IO
  10774. READ_WORD_F(adr, res)
  10775. flag_C = 0;
  10776. flag_V = 0;
  10777. flag_NotZ = res;
  10778. flag_N = res >> 8;
  10779. FETCH_LONG(adr);
  10780. WRITE_WORD_F(adr, res)
  10781. POST_IO
  10782. RET(22)
  10783. }
  10784. // MOVEW
  10785. OPCODE(0x3EE0)
  10786. {
  10787. u32 adr, res;
  10788. u32 src, dst;
  10789. adr = AREG((Opcode >> 0) & 7) - 2;
  10790. AREG((Opcode >> 0) & 7) = adr;
  10791. PRE_IO
  10792. READ_WORD_F(adr, res)
  10793. flag_C = 0;
  10794. flag_V = 0;
  10795. flag_NotZ = res;
  10796. flag_N = res >> 8;
  10797. adr = AREG(7);
  10798. AREG(7) += 2;
  10799. WRITE_WORD_F(adr, res)
  10800. POST_IO
  10801. RET(14)
  10802. }
  10803. // MOVEW
  10804. OPCODE(0x3F20)
  10805. {
  10806. u32 adr, res;
  10807. u32 src, dst;
  10808. adr = AREG((Opcode >> 0) & 7) - 2;
  10809. AREG((Opcode >> 0) & 7) = adr;
  10810. PRE_IO
  10811. READ_WORD_F(adr, res)
  10812. flag_C = 0;
  10813. flag_V = 0;
  10814. flag_NotZ = res;
  10815. flag_N = res >> 8;
  10816. adr = AREG(7) - 2;
  10817. AREG(7) = adr;
  10818. WRITE_WORD_F(adr, res)
  10819. POST_IO
  10820. RET(14)
  10821. }
  10822. // MOVEW
  10823. OPCODE(0x3028)
  10824. {
  10825. u32 adr, res;
  10826. u32 src, dst;
  10827. FETCH_SWORD(adr);
  10828. adr += AREG((Opcode >> 0) & 7);
  10829. PRE_IO
  10830. READ_WORD_F(adr, res)
  10831. flag_C = 0;
  10832. flag_V = 0;
  10833. flag_NotZ = res;
  10834. flag_N = res >> 8;
  10835. DREGu16((Opcode >> 9) & 7) = res;
  10836. POST_IO
  10837. RET(12)
  10838. }
  10839. // MOVEW
  10840. OPCODE(0x30A8)
  10841. {
  10842. u32 adr, res;
  10843. u32 src, dst;
  10844. FETCH_SWORD(adr);
  10845. adr += AREG((Opcode >> 0) & 7);
  10846. PRE_IO
  10847. READ_WORD_F(adr, res)
  10848. flag_C = 0;
  10849. flag_V = 0;
  10850. flag_NotZ = res;
  10851. flag_N = res >> 8;
  10852. adr = AREG((Opcode >> 9) & 7);
  10853. WRITE_WORD_F(adr, res)
  10854. POST_IO
  10855. RET(16)
  10856. }
  10857. // MOVEW
  10858. OPCODE(0x30E8)
  10859. {
  10860. u32 adr, res;
  10861. u32 src, dst;
  10862. FETCH_SWORD(adr);
  10863. adr += AREG((Opcode >> 0) & 7);
  10864. PRE_IO
  10865. READ_WORD_F(adr, res)
  10866. flag_C = 0;
  10867. flag_V = 0;
  10868. flag_NotZ = res;
  10869. flag_N = res >> 8;
  10870. adr = AREG((Opcode >> 9) & 7);
  10871. AREG((Opcode >> 9) & 7) += 2;
  10872. WRITE_WORD_F(adr, res)
  10873. POST_IO
  10874. RET(16)
  10875. }
  10876. // MOVEW
  10877. OPCODE(0x3128)
  10878. {
  10879. u32 adr, res;
  10880. u32 src, dst;
  10881. FETCH_SWORD(adr);
  10882. adr += AREG((Opcode >> 0) & 7);
  10883. PRE_IO
  10884. READ_WORD_F(adr, res)
  10885. flag_C = 0;
  10886. flag_V = 0;
  10887. flag_NotZ = res;
  10888. flag_N = res >> 8;
  10889. adr = AREG((Opcode >> 9) & 7) - 2;
  10890. AREG((Opcode >> 9) & 7) = adr;
  10891. WRITE_WORD_F(adr, res)
  10892. POST_IO
  10893. RET(16)
  10894. }
  10895. // MOVEW
  10896. OPCODE(0x3168)
  10897. {
  10898. u32 adr, res;
  10899. u32 src, dst;
  10900. FETCH_SWORD(adr);
  10901. adr += AREG((Opcode >> 0) & 7);
  10902. PRE_IO
  10903. READ_WORD_F(adr, res)
  10904. flag_C = 0;
  10905. flag_V = 0;
  10906. flag_NotZ = res;
  10907. flag_N = res >> 8;
  10908. FETCH_SWORD(adr);
  10909. adr += AREG((Opcode >> 9) & 7);
  10910. WRITE_WORD_F(adr, res)
  10911. POST_IO
  10912. RET(20)
  10913. }
  10914. // MOVEW
  10915. OPCODE(0x31A8)
  10916. {
  10917. u32 adr, res;
  10918. u32 src, dst;
  10919. FETCH_SWORD(adr);
  10920. adr += AREG((Opcode >> 0) & 7);
  10921. PRE_IO
  10922. READ_WORD_F(adr, res)
  10923. flag_C = 0;
  10924. flag_V = 0;
  10925. flag_NotZ = res;
  10926. flag_N = res >> 8;
  10927. adr = AREG((Opcode >> 9) & 7);
  10928. DECODE_EXT_WORD
  10929. WRITE_WORD_F(adr, res)
  10930. POST_IO
  10931. RET(22)
  10932. }
  10933. // MOVEW
  10934. OPCODE(0x31E8)
  10935. {
  10936. u32 adr, res;
  10937. u32 src, dst;
  10938. FETCH_SWORD(adr);
  10939. adr += AREG((Opcode >> 0) & 7);
  10940. PRE_IO
  10941. READ_WORD_F(adr, res)
  10942. flag_C = 0;
  10943. flag_V = 0;
  10944. flag_NotZ = res;
  10945. flag_N = res >> 8;
  10946. FETCH_SWORD(adr);
  10947. WRITE_WORD_F(adr, res)
  10948. POST_IO
  10949. RET(20)
  10950. }
  10951. // MOVEW
  10952. OPCODE(0x33E8)
  10953. {
  10954. u32 adr, res;
  10955. u32 src, dst;
  10956. FETCH_SWORD(adr);
  10957. adr += AREG((Opcode >> 0) & 7);
  10958. PRE_IO
  10959. READ_WORD_F(adr, res)
  10960. flag_C = 0;
  10961. flag_V = 0;
  10962. flag_NotZ = res;
  10963. flag_N = res >> 8;
  10964. FETCH_LONG(adr);
  10965. WRITE_WORD_F(adr, res)
  10966. POST_IO
  10967. RET(24)
  10968. }
  10969. // MOVEW
  10970. OPCODE(0x3EE8)
  10971. {
  10972. u32 adr, res;
  10973. u32 src, dst;
  10974. FETCH_SWORD(adr);
  10975. adr += AREG((Opcode >> 0) & 7);
  10976. PRE_IO
  10977. READ_WORD_F(adr, res)
  10978. flag_C = 0;
  10979. flag_V = 0;
  10980. flag_NotZ = res;
  10981. flag_N = res >> 8;
  10982. adr = AREG(7);
  10983. AREG(7) += 2;
  10984. WRITE_WORD_F(adr, res)
  10985. POST_IO
  10986. RET(16)
  10987. }
  10988. // MOVEW
  10989. OPCODE(0x3F28)
  10990. {
  10991. u32 adr, res;
  10992. u32 src, dst;
  10993. FETCH_SWORD(adr);
  10994. adr += AREG((Opcode >> 0) & 7);
  10995. PRE_IO
  10996. READ_WORD_F(adr, res)
  10997. flag_C = 0;
  10998. flag_V = 0;
  10999. flag_NotZ = res;
  11000. flag_N = res >> 8;
  11001. adr = AREG(7) - 2;
  11002. AREG(7) = adr;
  11003. WRITE_WORD_F(adr, res)
  11004. POST_IO
  11005. RET(16)
  11006. }
  11007. // MOVEW
  11008. OPCODE(0x3030)
  11009. {
  11010. u32 adr, res;
  11011. u32 src, dst;
  11012. adr = AREG((Opcode >> 0) & 7);
  11013. DECODE_EXT_WORD
  11014. PRE_IO
  11015. READ_WORD_F(adr, res)
  11016. flag_C = 0;
  11017. flag_V = 0;
  11018. flag_NotZ = res;
  11019. flag_N = res >> 8;
  11020. DREGu16((Opcode >> 9) & 7) = res;
  11021. POST_IO
  11022. RET(14)
  11023. }
  11024. // MOVEW
  11025. OPCODE(0x30B0)
  11026. {
  11027. u32 adr, res;
  11028. u32 src, dst;
  11029. adr = AREG((Opcode >> 0) & 7);
  11030. DECODE_EXT_WORD
  11031. PRE_IO
  11032. READ_WORD_F(adr, res)
  11033. flag_C = 0;
  11034. flag_V = 0;
  11035. flag_NotZ = res;
  11036. flag_N = res >> 8;
  11037. adr = AREG((Opcode >> 9) & 7);
  11038. WRITE_WORD_F(adr, res)
  11039. POST_IO
  11040. RET(18)
  11041. }
  11042. // MOVEW
  11043. OPCODE(0x30F0)
  11044. {
  11045. u32 adr, res;
  11046. u32 src, dst;
  11047. adr = AREG((Opcode >> 0) & 7);
  11048. DECODE_EXT_WORD
  11049. PRE_IO
  11050. READ_WORD_F(adr, res)
  11051. flag_C = 0;
  11052. flag_V = 0;
  11053. flag_NotZ = res;
  11054. flag_N = res >> 8;
  11055. adr = AREG((Opcode >> 9) & 7);
  11056. AREG((Opcode >> 9) & 7) += 2;
  11057. WRITE_WORD_F(adr, res)
  11058. POST_IO
  11059. RET(18)
  11060. }
  11061. // MOVEW
  11062. OPCODE(0x3130)
  11063. {
  11064. u32 adr, res;
  11065. u32 src, dst;
  11066. adr = AREG((Opcode >> 0) & 7);
  11067. DECODE_EXT_WORD
  11068. PRE_IO
  11069. READ_WORD_F(adr, res)
  11070. flag_C = 0;
  11071. flag_V = 0;
  11072. flag_NotZ = res;
  11073. flag_N = res >> 8;
  11074. adr = AREG((Opcode >> 9) & 7) - 2;
  11075. AREG((Opcode >> 9) & 7) = adr;
  11076. WRITE_WORD_F(adr, res)
  11077. POST_IO
  11078. RET(18)
  11079. }
  11080. // MOVEW
  11081. OPCODE(0x3170)
  11082. {
  11083. u32 adr, res;
  11084. u32 src, dst;
  11085. adr = AREG((Opcode >> 0) & 7);
  11086. DECODE_EXT_WORD
  11087. PRE_IO
  11088. READ_WORD_F(adr, res)
  11089. flag_C = 0;
  11090. flag_V = 0;
  11091. flag_NotZ = res;
  11092. flag_N = res >> 8;
  11093. FETCH_SWORD(adr);
  11094. adr += AREG((Opcode >> 9) & 7);
  11095. WRITE_WORD_F(adr, res)
  11096. POST_IO
  11097. RET(22)
  11098. }
  11099. // MOVEW
  11100. OPCODE(0x31B0)
  11101. {
  11102. u32 adr, res;
  11103. u32 src, dst;
  11104. adr = AREG((Opcode >> 0) & 7);
  11105. DECODE_EXT_WORD
  11106. PRE_IO
  11107. READ_WORD_F(adr, res)
  11108. flag_C = 0;
  11109. flag_V = 0;
  11110. flag_NotZ = res;
  11111. flag_N = res >> 8;
  11112. adr = AREG((Opcode >> 9) & 7);
  11113. DECODE_EXT_WORD
  11114. WRITE_WORD_F(adr, res)
  11115. POST_IO
  11116. RET(24)
  11117. }
  11118. // MOVEW
  11119. OPCODE(0x31F0)
  11120. {
  11121. u32 adr, res;
  11122. u32 src, dst;
  11123. adr = AREG((Opcode >> 0) & 7);
  11124. DECODE_EXT_WORD
  11125. PRE_IO
  11126. READ_WORD_F(adr, res)
  11127. flag_C = 0;
  11128. flag_V = 0;
  11129. flag_NotZ = res;
  11130. flag_N = res >> 8;
  11131. FETCH_SWORD(adr);
  11132. WRITE_WORD_F(adr, res)
  11133. POST_IO
  11134. RET(22)
  11135. }
  11136. // MOVEW
  11137. OPCODE(0x33F0)
  11138. {
  11139. u32 adr, res;
  11140. u32 src, dst;
  11141. adr = AREG((Opcode >> 0) & 7);
  11142. DECODE_EXT_WORD
  11143. PRE_IO
  11144. READ_WORD_F(adr, res)
  11145. flag_C = 0;
  11146. flag_V = 0;
  11147. flag_NotZ = res;
  11148. flag_N = res >> 8;
  11149. FETCH_LONG(adr);
  11150. WRITE_WORD_F(adr, res)
  11151. POST_IO
  11152. RET(26)
  11153. }
  11154. // MOVEW
  11155. OPCODE(0x3EF0)
  11156. {
  11157. u32 adr, res;
  11158. u32 src, dst;
  11159. adr = AREG((Opcode >> 0) & 7);
  11160. DECODE_EXT_WORD
  11161. PRE_IO
  11162. READ_WORD_F(adr, res)
  11163. flag_C = 0;
  11164. flag_V = 0;
  11165. flag_NotZ = res;
  11166. flag_N = res >> 8;
  11167. adr = AREG(7);
  11168. AREG(7) += 2;
  11169. WRITE_WORD_F(adr, res)
  11170. POST_IO
  11171. RET(18)
  11172. }
  11173. // MOVEW
  11174. OPCODE(0x3F30)
  11175. {
  11176. u32 adr, res;
  11177. u32 src, dst;
  11178. adr = AREG((Opcode >> 0) & 7);
  11179. DECODE_EXT_WORD
  11180. PRE_IO
  11181. READ_WORD_F(adr, res)
  11182. flag_C = 0;
  11183. flag_V = 0;
  11184. flag_NotZ = res;
  11185. flag_N = res >> 8;
  11186. adr = AREG(7) - 2;
  11187. AREG(7) = adr;
  11188. WRITE_WORD_F(adr, res)
  11189. POST_IO
  11190. RET(18)
  11191. }
  11192. // MOVEW
  11193. OPCODE(0x3038)
  11194. {
  11195. u32 adr, res;
  11196. u32 src, dst;
  11197. FETCH_SWORD(adr);
  11198. PRE_IO
  11199. READ_WORD_F(adr, res)
  11200. flag_C = 0;
  11201. flag_V = 0;
  11202. flag_NotZ = res;
  11203. flag_N = res >> 8;
  11204. DREGu16((Opcode >> 9) & 7) = res;
  11205. POST_IO
  11206. RET(12)
  11207. }
  11208. // MOVEW
  11209. OPCODE(0x30B8)
  11210. {
  11211. u32 adr, res;
  11212. u32 src, dst;
  11213. FETCH_SWORD(adr);
  11214. PRE_IO
  11215. READ_WORD_F(adr, res)
  11216. flag_C = 0;
  11217. flag_V = 0;
  11218. flag_NotZ = res;
  11219. flag_N = res >> 8;
  11220. adr = AREG((Opcode >> 9) & 7);
  11221. WRITE_WORD_F(adr, res)
  11222. POST_IO
  11223. RET(16)
  11224. }
  11225. // MOVEW
  11226. OPCODE(0x30F8)
  11227. {
  11228. u32 adr, res;
  11229. u32 src, dst;
  11230. FETCH_SWORD(adr);
  11231. PRE_IO
  11232. READ_WORD_F(adr, res)
  11233. flag_C = 0;
  11234. flag_V = 0;
  11235. flag_NotZ = res;
  11236. flag_N = res >> 8;
  11237. adr = AREG((Opcode >> 9) & 7);
  11238. AREG((Opcode >> 9) & 7) += 2;
  11239. WRITE_WORD_F(adr, res)
  11240. POST_IO
  11241. RET(16)
  11242. }
  11243. // MOVEW
  11244. OPCODE(0x3138)
  11245. {
  11246. u32 adr, res;
  11247. u32 src, dst;
  11248. FETCH_SWORD(adr);
  11249. PRE_IO
  11250. READ_WORD_F(adr, res)
  11251. flag_C = 0;
  11252. flag_V = 0;
  11253. flag_NotZ = res;
  11254. flag_N = res >> 8;
  11255. adr = AREG((Opcode >> 9) & 7) - 2;
  11256. AREG((Opcode >> 9) & 7) = adr;
  11257. WRITE_WORD_F(adr, res)
  11258. POST_IO
  11259. RET(16)
  11260. }
  11261. // MOVEW
  11262. OPCODE(0x3178)
  11263. {
  11264. u32 adr, res;
  11265. u32 src, dst;
  11266. FETCH_SWORD(adr);
  11267. PRE_IO
  11268. READ_WORD_F(adr, res)
  11269. flag_C = 0;
  11270. flag_V = 0;
  11271. flag_NotZ = res;
  11272. flag_N = res >> 8;
  11273. FETCH_SWORD(adr);
  11274. adr += AREG((Opcode >> 9) & 7);
  11275. WRITE_WORD_F(adr, res)
  11276. POST_IO
  11277. RET(20)
  11278. }
  11279. // MOVEW
  11280. OPCODE(0x31B8)
  11281. {
  11282. u32 adr, res;
  11283. u32 src, dst;
  11284. FETCH_SWORD(adr);
  11285. PRE_IO
  11286. READ_WORD_F(adr, res)
  11287. flag_C = 0;
  11288. flag_V = 0;
  11289. flag_NotZ = res;
  11290. flag_N = res >> 8;
  11291. adr = AREG((Opcode >> 9) & 7);
  11292. DECODE_EXT_WORD
  11293. WRITE_WORD_F(adr, res)
  11294. POST_IO
  11295. RET(22)
  11296. }
  11297. // MOVEW
  11298. OPCODE(0x31F8)
  11299. {
  11300. u32 adr, res;
  11301. u32 src, dst;
  11302. FETCH_SWORD(adr);
  11303. PRE_IO
  11304. READ_WORD_F(adr, res)
  11305. flag_C = 0;
  11306. flag_V = 0;
  11307. flag_NotZ = res;
  11308. flag_N = res >> 8;
  11309. FETCH_SWORD(adr);
  11310. WRITE_WORD_F(adr, res)
  11311. POST_IO
  11312. RET(20)
  11313. }
  11314. // MOVEW
  11315. OPCODE(0x33F8)
  11316. {
  11317. u32 adr, res;
  11318. u32 src, dst;
  11319. FETCH_SWORD(adr);
  11320. PRE_IO
  11321. READ_WORD_F(adr, res)
  11322. flag_C = 0;
  11323. flag_V = 0;
  11324. flag_NotZ = res;
  11325. flag_N = res >> 8;
  11326. FETCH_LONG(adr);
  11327. WRITE_WORD_F(adr, res)
  11328. POST_IO
  11329. RET(24)
  11330. }
  11331. // MOVEW
  11332. OPCODE(0x3EF8)
  11333. {
  11334. u32 adr, res;
  11335. u32 src, dst;
  11336. FETCH_SWORD(adr);
  11337. PRE_IO
  11338. READ_WORD_F(adr, res)
  11339. flag_C = 0;
  11340. flag_V = 0;
  11341. flag_NotZ = res;
  11342. flag_N = res >> 8;
  11343. adr = AREG(7);
  11344. AREG(7) += 2;
  11345. WRITE_WORD_F(adr, res)
  11346. POST_IO
  11347. RET(16)
  11348. }
  11349. // MOVEW
  11350. OPCODE(0x3F38)
  11351. {
  11352. u32 adr, res;
  11353. u32 src, dst;
  11354. FETCH_SWORD(adr);
  11355. PRE_IO
  11356. READ_WORD_F(adr, res)
  11357. flag_C = 0;
  11358. flag_V = 0;
  11359. flag_NotZ = res;
  11360. flag_N = res >> 8;
  11361. adr = AREG(7) - 2;
  11362. AREG(7) = adr;
  11363. WRITE_WORD_F(adr, res)
  11364. POST_IO
  11365. RET(16)
  11366. }
  11367. // MOVEW
  11368. OPCODE(0x3039)
  11369. {
  11370. u32 adr, res;
  11371. u32 src, dst;
  11372. FETCH_LONG(adr);
  11373. PRE_IO
  11374. READ_WORD_F(adr, res)
  11375. flag_C = 0;
  11376. flag_V = 0;
  11377. flag_NotZ = res;
  11378. flag_N = res >> 8;
  11379. DREGu16((Opcode >> 9) & 7) = res;
  11380. POST_IO
  11381. RET(16)
  11382. }
  11383. // MOVEW
  11384. OPCODE(0x30B9)
  11385. {
  11386. u32 adr, res;
  11387. u32 src, dst;
  11388. FETCH_LONG(adr);
  11389. PRE_IO
  11390. READ_WORD_F(adr, res)
  11391. flag_C = 0;
  11392. flag_V = 0;
  11393. flag_NotZ = res;
  11394. flag_N = res >> 8;
  11395. adr = AREG((Opcode >> 9) & 7);
  11396. WRITE_WORD_F(adr, res)
  11397. POST_IO
  11398. RET(20)
  11399. }
  11400. // MOVEW
  11401. OPCODE(0x30F9)
  11402. {
  11403. u32 adr, res;
  11404. u32 src, dst;
  11405. FETCH_LONG(adr);
  11406. PRE_IO
  11407. READ_WORD_F(adr, res)
  11408. flag_C = 0;
  11409. flag_V = 0;
  11410. flag_NotZ = res;
  11411. flag_N = res >> 8;
  11412. adr = AREG((Opcode >> 9) & 7);
  11413. AREG((Opcode >> 9) & 7) += 2;
  11414. WRITE_WORD_F(adr, res)
  11415. POST_IO
  11416. RET(20)
  11417. }
  11418. // MOVEW
  11419. OPCODE(0x3139)
  11420. {
  11421. u32 adr, res;
  11422. u32 src, dst;
  11423. FETCH_LONG(adr);
  11424. PRE_IO
  11425. READ_WORD_F(adr, res)
  11426. flag_C = 0;
  11427. flag_V = 0;
  11428. flag_NotZ = res;
  11429. flag_N = res >> 8;
  11430. adr = AREG((Opcode >> 9) & 7) - 2;
  11431. AREG((Opcode >> 9) & 7) = adr;
  11432. WRITE_WORD_F(adr, res)
  11433. POST_IO
  11434. RET(20)
  11435. }
  11436. // MOVEW
  11437. OPCODE(0x3179)
  11438. {
  11439. u32 adr, res;
  11440. u32 src, dst;
  11441. FETCH_LONG(adr);
  11442. PRE_IO
  11443. READ_WORD_F(adr, res)
  11444. flag_C = 0;
  11445. flag_V = 0;
  11446. flag_NotZ = res;
  11447. flag_N = res >> 8;
  11448. FETCH_SWORD(adr);
  11449. adr += AREG((Opcode >> 9) & 7);
  11450. WRITE_WORD_F(adr, res)
  11451. POST_IO
  11452. RET(24)
  11453. }
  11454. // MOVEW
  11455. OPCODE(0x31B9)
  11456. {
  11457. u32 adr, res;
  11458. u32 src, dst;
  11459. FETCH_LONG(adr);
  11460. PRE_IO
  11461. READ_WORD_F(adr, res)
  11462. flag_C = 0;
  11463. flag_V = 0;
  11464. flag_NotZ = res;
  11465. flag_N = res >> 8;
  11466. adr = AREG((Opcode >> 9) & 7);
  11467. DECODE_EXT_WORD
  11468. WRITE_WORD_F(adr, res)
  11469. POST_IO
  11470. RET(26)
  11471. }
  11472. // MOVEW
  11473. OPCODE(0x31F9)
  11474. {
  11475. u32 adr, res;
  11476. u32 src, dst;
  11477. FETCH_LONG(adr);
  11478. PRE_IO
  11479. READ_WORD_F(adr, res)
  11480. flag_C = 0;
  11481. flag_V = 0;
  11482. flag_NotZ = res;
  11483. flag_N = res >> 8;
  11484. FETCH_SWORD(adr);
  11485. WRITE_WORD_F(adr, res)
  11486. POST_IO
  11487. RET(24)
  11488. }
  11489. // MOVEW
  11490. OPCODE(0x33F9)
  11491. {
  11492. u32 adr, res;
  11493. u32 src, dst;
  11494. FETCH_LONG(adr);
  11495. PRE_IO
  11496. READ_WORD_F(adr, res)
  11497. flag_C = 0;
  11498. flag_V = 0;
  11499. flag_NotZ = res;
  11500. flag_N = res >> 8;
  11501. FETCH_LONG(adr);
  11502. WRITE_WORD_F(adr, res)
  11503. POST_IO
  11504. RET(28)
  11505. }
  11506. // MOVEW
  11507. OPCODE(0x3EF9)
  11508. {
  11509. u32 adr, res;
  11510. u32 src, dst;
  11511. FETCH_LONG(adr);
  11512. PRE_IO
  11513. READ_WORD_F(adr, res)
  11514. flag_C = 0;
  11515. flag_V = 0;
  11516. flag_NotZ = res;
  11517. flag_N = res >> 8;
  11518. adr = AREG(7);
  11519. AREG(7) += 2;
  11520. WRITE_WORD_F(adr, res)
  11521. POST_IO
  11522. RET(20)
  11523. }
  11524. // MOVEW
  11525. OPCODE(0x3F39)
  11526. {
  11527. u32 adr, res;
  11528. u32 src, dst;
  11529. FETCH_LONG(adr);
  11530. PRE_IO
  11531. READ_WORD_F(adr, res)
  11532. flag_C = 0;
  11533. flag_V = 0;
  11534. flag_NotZ = res;
  11535. flag_N = res >> 8;
  11536. adr = AREG(7) - 2;
  11537. AREG(7) = adr;
  11538. WRITE_WORD_F(adr, res)
  11539. POST_IO
  11540. RET(20)
  11541. }
  11542. // MOVEW
  11543. OPCODE(0x303A)
  11544. {
  11545. u32 adr, res;
  11546. u32 src, dst;
  11547. adr = GET_SWORD + GET_PC;
  11548. PC++;
  11549. PRE_IO
  11550. READ_WORD_F(adr, res)
  11551. flag_C = 0;
  11552. flag_V = 0;
  11553. flag_NotZ = res;
  11554. flag_N = res >> 8;
  11555. DREGu16((Opcode >> 9) & 7) = res;
  11556. POST_IO
  11557. RET(12)
  11558. }
  11559. // MOVEW
  11560. OPCODE(0x30BA)
  11561. {
  11562. u32 adr, res;
  11563. u32 src, dst;
  11564. adr = GET_SWORD + GET_PC;
  11565. PC++;
  11566. PRE_IO
  11567. READ_WORD_F(adr, res)
  11568. flag_C = 0;
  11569. flag_V = 0;
  11570. flag_NotZ = res;
  11571. flag_N = res >> 8;
  11572. adr = AREG((Opcode >> 9) & 7);
  11573. WRITE_WORD_F(adr, res)
  11574. POST_IO
  11575. RET(16)
  11576. }
  11577. // MOVEW
  11578. OPCODE(0x30FA)
  11579. {
  11580. u32 adr, res;
  11581. u32 src, dst;
  11582. adr = GET_SWORD + GET_PC;
  11583. PC++;
  11584. PRE_IO
  11585. READ_WORD_F(adr, res)
  11586. flag_C = 0;
  11587. flag_V = 0;
  11588. flag_NotZ = res;
  11589. flag_N = res >> 8;
  11590. adr = AREG((Opcode >> 9) & 7);
  11591. AREG((Opcode >> 9) & 7) += 2;
  11592. WRITE_WORD_F(adr, res)
  11593. POST_IO
  11594. RET(16)
  11595. }
  11596. // MOVEW
  11597. OPCODE(0x313A)
  11598. {
  11599. u32 adr, res;
  11600. u32 src, dst;
  11601. adr = GET_SWORD + GET_PC;
  11602. PC++;
  11603. PRE_IO
  11604. READ_WORD_F(adr, res)
  11605. flag_C = 0;
  11606. flag_V = 0;
  11607. flag_NotZ = res;
  11608. flag_N = res >> 8;
  11609. adr = AREG((Opcode >> 9) & 7) - 2;
  11610. AREG((Opcode >> 9) & 7) = adr;
  11611. WRITE_WORD_F(adr, res)
  11612. POST_IO
  11613. RET(16)
  11614. }
  11615. // MOVEW
  11616. OPCODE(0x317A)
  11617. {
  11618. u32 adr, res;
  11619. u32 src, dst;
  11620. adr = GET_SWORD + GET_PC;
  11621. PC++;
  11622. PRE_IO
  11623. READ_WORD_F(adr, res)
  11624. flag_C = 0;
  11625. flag_V = 0;
  11626. flag_NotZ = res;
  11627. flag_N = res >> 8;
  11628. FETCH_SWORD(adr);
  11629. adr += AREG((Opcode >> 9) & 7);
  11630. WRITE_WORD_F(adr, res)
  11631. POST_IO
  11632. RET(20)
  11633. }
  11634. // MOVEW
  11635. OPCODE(0x31BA)
  11636. {
  11637. u32 adr, res;
  11638. u32 src, dst;
  11639. adr = GET_SWORD + GET_PC;
  11640. PC++;
  11641. PRE_IO
  11642. READ_WORD_F(adr, res)
  11643. flag_C = 0;
  11644. flag_V = 0;
  11645. flag_NotZ = res;
  11646. flag_N = res >> 8;
  11647. adr = AREG((Opcode >> 9) & 7);
  11648. DECODE_EXT_WORD
  11649. WRITE_WORD_F(adr, res)
  11650. POST_IO
  11651. RET(22)
  11652. }
  11653. // MOVEW
  11654. OPCODE(0x31FA)
  11655. {
  11656. u32 adr, res;
  11657. u32 src, dst;
  11658. adr = GET_SWORD + GET_PC;
  11659. PC++;
  11660. PRE_IO
  11661. READ_WORD_F(adr, res)
  11662. flag_C = 0;
  11663. flag_V = 0;
  11664. flag_NotZ = res;
  11665. flag_N = res >> 8;
  11666. FETCH_SWORD(adr);
  11667. WRITE_WORD_F(adr, res)
  11668. POST_IO
  11669. RET(20)
  11670. }
  11671. // MOVEW
  11672. OPCODE(0x33FA)
  11673. {
  11674. u32 adr, res;
  11675. u32 src, dst;
  11676. adr = GET_SWORD + GET_PC;
  11677. PC++;
  11678. PRE_IO
  11679. READ_WORD_F(adr, res)
  11680. flag_C = 0;
  11681. flag_V = 0;
  11682. flag_NotZ = res;
  11683. flag_N = res >> 8;
  11684. FETCH_LONG(adr);
  11685. WRITE_WORD_F(adr, res)
  11686. POST_IO
  11687. RET(24)
  11688. }
  11689. // MOVEW
  11690. OPCODE(0x3EFA)
  11691. {
  11692. u32 adr, res;
  11693. u32 src, dst;
  11694. adr = GET_SWORD + GET_PC;
  11695. PC++;
  11696. PRE_IO
  11697. READ_WORD_F(adr, res)
  11698. flag_C = 0;
  11699. flag_V = 0;
  11700. flag_NotZ = res;
  11701. flag_N = res >> 8;
  11702. adr = AREG(7);
  11703. AREG(7) += 2;
  11704. WRITE_WORD_F(adr, res)
  11705. POST_IO
  11706. RET(16)
  11707. }
  11708. // MOVEW
  11709. OPCODE(0x3F3A)
  11710. {
  11711. u32 adr, res;
  11712. u32 src, dst;
  11713. adr = GET_SWORD + GET_PC;
  11714. PC++;
  11715. PRE_IO
  11716. READ_WORD_F(adr, res)
  11717. flag_C = 0;
  11718. flag_V = 0;
  11719. flag_NotZ = res;
  11720. flag_N = res >> 8;
  11721. adr = AREG(7) - 2;
  11722. AREG(7) = adr;
  11723. WRITE_WORD_F(adr, res)
  11724. POST_IO
  11725. RET(16)
  11726. }
  11727. // MOVEW
  11728. OPCODE(0x303B)
  11729. {
  11730. u32 adr, res;
  11731. u32 src, dst;
  11732. adr = GET_PC;
  11733. DECODE_EXT_WORD
  11734. PRE_IO
  11735. READ_WORD_F(adr, res)
  11736. flag_C = 0;
  11737. flag_V = 0;
  11738. flag_NotZ = res;
  11739. flag_N = res >> 8;
  11740. DREGu16((Opcode >> 9) & 7) = res;
  11741. POST_IO
  11742. RET(14)
  11743. }
  11744. // MOVEW
  11745. OPCODE(0x30BB)
  11746. {
  11747. u32 adr, res;
  11748. u32 src, dst;
  11749. adr = GET_PC;
  11750. DECODE_EXT_WORD
  11751. PRE_IO
  11752. READ_WORD_F(adr, res)
  11753. flag_C = 0;
  11754. flag_V = 0;
  11755. flag_NotZ = res;
  11756. flag_N = res >> 8;
  11757. adr = AREG((Opcode >> 9) & 7);
  11758. WRITE_WORD_F(adr, res)
  11759. POST_IO
  11760. RET(18)
  11761. }
  11762. // MOVEW
  11763. OPCODE(0x30FB)
  11764. {
  11765. u32 adr, res;
  11766. u32 src, dst;
  11767. adr = GET_PC;
  11768. DECODE_EXT_WORD
  11769. PRE_IO
  11770. READ_WORD_F(adr, res)
  11771. flag_C = 0;
  11772. flag_V = 0;
  11773. flag_NotZ = res;
  11774. flag_N = res >> 8;
  11775. adr = AREG((Opcode >> 9) & 7);
  11776. AREG((Opcode >> 9) & 7) += 2;
  11777. WRITE_WORD_F(adr, res)
  11778. POST_IO
  11779. RET(18)
  11780. }
  11781. // MOVEW
  11782. OPCODE(0x313B)
  11783. {
  11784. u32 adr, res;
  11785. u32 src, dst;
  11786. adr = GET_PC;
  11787. DECODE_EXT_WORD
  11788. PRE_IO
  11789. READ_WORD_F(adr, res)
  11790. flag_C = 0;
  11791. flag_V = 0;
  11792. flag_NotZ = res;
  11793. flag_N = res >> 8;
  11794. adr = AREG((Opcode >> 9) & 7) - 2;
  11795. AREG((Opcode >> 9) & 7) = adr;
  11796. WRITE_WORD_F(adr, res)
  11797. POST_IO
  11798. RET(18)
  11799. }
  11800. // MOVEW
  11801. OPCODE(0x317B)
  11802. {
  11803. u32 adr, res;
  11804. u32 src, dst;
  11805. adr = GET_PC;
  11806. DECODE_EXT_WORD
  11807. PRE_IO
  11808. READ_WORD_F(adr, res)
  11809. flag_C = 0;
  11810. flag_V = 0;
  11811. flag_NotZ = res;
  11812. flag_N = res >> 8;
  11813. FETCH_SWORD(adr);
  11814. adr += AREG((Opcode >> 9) & 7);
  11815. WRITE_WORD_F(adr, res)
  11816. POST_IO
  11817. RET(22)
  11818. }
  11819. // MOVEW
  11820. OPCODE(0x31BB)
  11821. {
  11822. u32 adr, res;
  11823. u32 src, dst;
  11824. adr = GET_PC;
  11825. DECODE_EXT_WORD
  11826. PRE_IO
  11827. READ_WORD_F(adr, res)
  11828. flag_C = 0;
  11829. flag_V = 0;
  11830. flag_NotZ = res;
  11831. flag_N = res >> 8;
  11832. adr = AREG((Opcode >> 9) & 7);
  11833. DECODE_EXT_WORD
  11834. WRITE_WORD_F(adr, res)
  11835. POST_IO
  11836. RET(24)
  11837. }
  11838. // MOVEW
  11839. OPCODE(0x31FB)
  11840. {
  11841. u32 adr, res;
  11842. u32 src, dst;
  11843. adr = GET_PC;
  11844. DECODE_EXT_WORD
  11845. PRE_IO
  11846. READ_WORD_F(adr, res)
  11847. flag_C = 0;
  11848. flag_V = 0;
  11849. flag_NotZ = res;
  11850. flag_N = res >> 8;
  11851. FETCH_SWORD(adr);
  11852. WRITE_WORD_F(adr, res)
  11853. POST_IO
  11854. RET(22)
  11855. }
  11856. // MOVEW
  11857. OPCODE(0x33FB)
  11858. {
  11859. u32 adr, res;
  11860. u32 src, dst;
  11861. adr = GET_PC;
  11862. DECODE_EXT_WORD
  11863. PRE_IO
  11864. READ_WORD_F(adr, res)
  11865. flag_C = 0;
  11866. flag_V = 0;
  11867. flag_NotZ = res;
  11868. flag_N = res >> 8;
  11869. FETCH_LONG(adr);
  11870. WRITE_WORD_F(adr, res)
  11871. POST_IO
  11872. RET(26)
  11873. }
  11874. // MOVEW
  11875. OPCODE(0x3EFB)
  11876. {
  11877. u32 adr, res;
  11878. u32 src, dst;
  11879. adr = GET_PC;
  11880. DECODE_EXT_WORD
  11881. PRE_IO
  11882. READ_WORD_F(adr, res)
  11883. flag_C = 0;
  11884. flag_V = 0;
  11885. flag_NotZ = res;
  11886. flag_N = res >> 8;
  11887. adr = AREG(7);
  11888. AREG(7) += 2;
  11889. WRITE_WORD_F(adr, res)
  11890. POST_IO
  11891. RET(18)
  11892. }
  11893. // MOVEW
  11894. OPCODE(0x3F3B)
  11895. {
  11896. u32 adr, res;
  11897. u32 src, dst;
  11898. adr = GET_PC;
  11899. DECODE_EXT_WORD
  11900. PRE_IO
  11901. READ_WORD_F(adr, res)
  11902. flag_C = 0;
  11903. flag_V = 0;
  11904. flag_NotZ = res;
  11905. flag_N = res >> 8;
  11906. adr = AREG(7) - 2;
  11907. AREG(7) = adr;
  11908. WRITE_WORD_F(adr, res)
  11909. POST_IO
  11910. RET(18)
  11911. }
  11912. // MOVEW
  11913. OPCODE(0x303C)
  11914. {
  11915. u32 adr, res;
  11916. u32 src, dst;
  11917. FETCH_WORD(res);
  11918. flag_C = 0;
  11919. flag_V = 0;
  11920. flag_NotZ = res;
  11921. flag_N = res >> 8;
  11922. DREGu16((Opcode >> 9) & 7) = res;
  11923. RET(8)
  11924. }
  11925. // MOVEW
  11926. OPCODE(0x30BC)
  11927. {
  11928. u32 adr, res;
  11929. u32 src, dst;
  11930. FETCH_WORD(res);
  11931. flag_C = 0;
  11932. flag_V = 0;
  11933. flag_NotZ = res;
  11934. flag_N = res >> 8;
  11935. adr = AREG((Opcode >> 9) & 7);
  11936. PRE_IO
  11937. WRITE_WORD_F(adr, res)
  11938. POST_IO
  11939. RET(12)
  11940. }
  11941. // MOVEW
  11942. OPCODE(0x30FC)
  11943. {
  11944. u32 adr, res;
  11945. u32 src, dst;
  11946. FETCH_WORD(res);
  11947. flag_C = 0;
  11948. flag_V = 0;
  11949. flag_NotZ = res;
  11950. flag_N = res >> 8;
  11951. adr = AREG((Opcode >> 9) & 7);
  11952. AREG((Opcode >> 9) & 7) += 2;
  11953. PRE_IO
  11954. WRITE_WORD_F(adr, res)
  11955. POST_IO
  11956. RET(12)
  11957. }
  11958. // MOVEW
  11959. OPCODE(0x313C)
  11960. {
  11961. u32 adr, res;
  11962. u32 src, dst;
  11963. FETCH_WORD(res);
  11964. flag_C = 0;
  11965. flag_V = 0;
  11966. flag_NotZ = res;
  11967. flag_N = res >> 8;
  11968. adr = AREG((Opcode >> 9) & 7) - 2;
  11969. AREG((Opcode >> 9) & 7) = adr;
  11970. PRE_IO
  11971. WRITE_WORD_F(adr, res)
  11972. POST_IO
  11973. RET(12)
  11974. }
  11975. // MOVEW
  11976. OPCODE(0x317C)
  11977. {
  11978. u32 adr, res;
  11979. u32 src, dst;
  11980. FETCH_WORD(res);
  11981. flag_C = 0;
  11982. flag_V = 0;
  11983. flag_NotZ = res;
  11984. flag_N = res >> 8;
  11985. FETCH_SWORD(adr);
  11986. adr += AREG((Opcode >> 9) & 7);
  11987. PRE_IO
  11988. WRITE_WORD_F(adr, res)
  11989. POST_IO
  11990. RET(16)
  11991. }
  11992. // MOVEW
  11993. OPCODE(0x31BC)
  11994. {
  11995. u32 adr, res;
  11996. u32 src, dst;
  11997. FETCH_WORD(res);
  11998. flag_C = 0;
  11999. flag_V = 0;
  12000. flag_NotZ = res;
  12001. flag_N = res >> 8;
  12002. adr = AREG((Opcode >> 9) & 7);
  12003. DECODE_EXT_WORD
  12004. PRE_IO
  12005. WRITE_WORD_F(adr, res)
  12006. POST_IO
  12007. RET(18)
  12008. }
  12009. // MOVEW
  12010. OPCODE(0x31FC)
  12011. {
  12012. u32 adr, res;
  12013. u32 src, dst;
  12014. FETCH_WORD(res);
  12015. flag_C = 0;
  12016. flag_V = 0;
  12017. flag_NotZ = res;
  12018. flag_N = res >> 8;
  12019. FETCH_SWORD(adr);
  12020. PRE_IO
  12021. WRITE_WORD_F(adr, res)
  12022. POST_IO
  12023. RET(16)
  12024. }
  12025. // MOVEW
  12026. OPCODE(0x33FC)
  12027. {
  12028. u32 adr, res;
  12029. u32 src, dst;
  12030. FETCH_WORD(res);
  12031. flag_C = 0;
  12032. flag_V = 0;
  12033. flag_NotZ = res;
  12034. flag_N = res >> 8;
  12035. FETCH_LONG(adr);
  12036. PRE_IO
  12037. WRITE_WORD_F(adr, res)
  12038. POST_IO
  12039. RET(20)
  12040. }
  12041. // MOVEW
  12042. OPCODE(0x3EFC)
  12043. {
  12044. u32 adr, res;
  12045. u32 src, dst;
  12046. FETCH_WORD(res);
  12047. flag_C = 0;
  12048. flag_V = 0;
  12049. flag_NotZ = res;
  12050. flag_N = res >> 8;
  12051. adr = AREG(7);
  12052. AREG(7) += 2;
  12053. PRE_IO
  12054. WRITE_WORD_F(adr, res)
  12055. POST_IO
  12056. RET(12)
  12057. }
  12058. // MOVEW
  12059. OPCODE(0x3F3C)
  12060. {
  12061. u32 adr, res;
  12062. u32 src, dst;
  12063. FETCH_WORD(res);
  12064. flag_C = 0;
  12065. flag_V = 0;
  12066. flag_NotZ = res;
  12067. flag_N = res >> 8;
  12068. adr = AREG(7) - 2;
  12069. AREG(7) = adr;
  12070. PRE_IO
  12071. WRITE_WORD_F(adr, res)
  12072. POST_IO
  12073. RET(12)
  12074. }
  12075. // MOVEW
  12076. OPCODE(0x301F)
  12077. {
  12078. u32 adr, res;
  12079. u32 src, dst;
  12080. adr = AREG(7);
  12081. AREG(7) += 2;
  12082. PRE_IO
  12083. READ_WORD_F(adr, res)
  12084. flag_C = 0;
  12085. flag_V = 0;
  12086. flag_NotZ = res;
  12087. flag_N = res >> 8;
  12088. DREGu16((Opcode >> 9) & 7) = res;
  12089. POST_IO
  12090. RET(8)
  12091. }
  12092. // MOVEW
  12093. OPCODE(0x309F)
  12094. {
  12095. u32 adr, res;
  12096. u32 src, dst;
  12097. adr = AREG(7);
  12098. AREG(7) += 2;
  12099. PRE_IO
  12100. READ_WORD_F(adr, res)
  12101. flag_C = 0;
  12102. flag_V = 0;
  12103. flag_NotZ = res;
  12104. flag_N = res >> 8;
  12105. adr = AREG((Opcode >> 9) & 7);
  12106. WRITE_WORD_F(adr, res)
  12107. POST_IO
  12108. RET(12)
  12109. }
  12110. // MOVEW
  12111. OPCODE(0x30DF)
  12112. {
  12113. u32 adr, res;
  12114. u32 src, dst;
  12115. adr = AREG(7);
  12116. AREG(7) += 2;
  12117. PRE_IO
  12118. READ_WORD_F(adr, res)
  12119. flag_C = 0;
  12120. flag_V = 0;
  12121. flag_NotZ = res;
  12122. flag_N = res >> 8;
  12123. adr = AREG((Opcode >> 9) & 7);
  12124. AREG((Opcode >> 9) & 7) += 2;
  12125. WRITE_WORD_F(adr, res)
  12126. POST_IO
  12127. RET(12)
  12128. }
  12129. // MOVEW
  12130. OPCODE(0x311F)
  12131. {
  12132. u32 adr, res;
  12133. u32 src, dst;
  12134. adr = AREG(7);
  12135. AREG(7) += 2;
  12136. PRE_IO
  12137. READ_WORD_F(adr, res)
  12138. flag_C = 0;
  12139. flag_V = 0;
  12140. flag_NotZ = res;
  12141. flag_N = res >> 8;
  12142. adr = AREG((Opcode >> 9) & 7) - 2;
  12143. AREG((Opcode >> 9) & 7) = adr;
  12144. WRITE_WORD_F(adr, res)
  12145. POST_IO
  12146. RET(12)
  12147. }
  12148. // MOVEW
  12149. OPCODE(0x315F)
  12150. {
  12151. u32 adr, res;
  12152. u32 src, dst;
  12153. adr = AREG(7);
  12154. AREG(7) += 2;
  12155. PRE_IO
  12156. READ_WORD_F(adr, res)
  12157. flag_C = 0;
  12158. flag_V = 0;
  12159. flag_NotZ = res;
  12160. flag_N = res >> 8;
  12161. FETCH_SWORD(adr);
  12162. adr += AREG((Opcode >> 9) & 7);
  12163. WRITE_WORD_F(adr, res)
  12164. POST_IO
  12165. RET(16)
  12166. }
  12167. // MOVEW
  12168. OPCODE(0x319F)
  12169. {
  12170. u32 adr, res;
  12171. u32 src, dst;
  12172. adr = AREG(7);
  12173. AREG(7) += 2;
  12174. PRE_IO
  12175. READ_WORD_F(adr, res)
  12176. flag_C = 0;
  12177. flag_V = 0;
  12178. flag_NotZ = res;
  12179. flag_N = res >> 8;
  12180. adr = AREG((Opcode >> 9) & 7);
  12181. DECODE_EXT_WORD
  12182. WRITE_WORD_F(adr, res)
  12183. POST_IO
  12184. RET(18)
  12185. }
  12186. // MOVEW
  12187. OPCODE(0x31DF)
  12188. {
  12189. u32 adr, res;
  12190. u32 src, dst;
  12191. adr = AREG(7);
  12192. AREG(7) += 2;
  12193. PRE_IO
  12194. READ_WORD_F(adr, res)
  12195. flag_C = 0;
  12196. flag_V = 0;
  12197. flag_NotZ = res;
  12198. flag_N = res >> 8;
  12199. FETCH_SWORD(adr);
  12200. WRITE_WORD_F(adr, res)
  12201. POST_IO
  12202. RET(16)
  12203. }
  12204. // MOVEW
  12205. OPCODE(0x33DF)
  12206. {
  12207. u32 adr, res;
  12208. u32 src, dst;
  12209. adr = AREG(7);
  12210. AREG(7) += 2;
  12211. PRE_IO
  12212. READ_WORD_F(adr, res)
  12213. flag_C = 0;
  12214. flag_V = 0;
  12215. flag_NotZ = res;
  12216. flag_N = res >> 8;
  12217. FETCH_LONG(adr);
  12218. WRITE_WORD_F(adr, res)
  12219. POST_IO
  12220. RET(20)
  12221. }
  12222. // MOVEW
  12223. OPCODE(0x3EDF)
  12224. {
  12225. u32 adr, res;
  12226. u32 src, dst;
  12227. adr = AREG(7);
  12228. AREG(7) += 2;
  12229. PRE_IO
  12230. READ_WORD_F(adr, res)
  12231. flag_C = 0;
  12232. flag_V = 0;
  12233. flag_NotZ = res;
  12234. flag_N = res >> 8;
  12235. adr = AREG(7);
  12236. AREG(7) += 2;
  12237. WRITE_WORD_F(adr, res)
  12238. POST_IO
  12239. RET(12)
  12240. }
  12241. // MOVEW
  12242. OPCODE(0x3F1F)
  12243. {
  12244. u32 adr, res;
  12245. u32 src, dst;
  12246. adr = AREG(7);
  12247. AREG(7) += 2;
  12248. PRE_IO
  12249. READ_WORD_F(adr, res)
  12250. flag_C = 0;
  12251. flag_V = 0;
  12252. flag_NotZ = res;
  12253. flag_N = res >> 8;
  12254. adr = AREG(7) - 2;
  12255. AREG(7) = adr;
  12256. WRITE_WORD_F(adr, res)
  12257. POST_IO
  12258. RET(12)
  12259. }
  12260. // MOVEW
  12261. OPCODE(0x3027)
  12262. {
  12263. u32 adr, res;
  12264. u32 src, dst;
  12265. adr = AREG(7) - 2;
  12266. AREG(7) = adr;
  12267. PRE_IO
  12268. READ_WORD_F(adr, res)
  12269. flag_C = 0;
  12270. flag_V = 0;
  12271. flag_NotZ = res;
  12272. flag_N = res >> 8;
  12273. DREGu16((Opcode >> 9) & 7) = res;
  12274. POST_IO
  12275. RET(10)
  12276. }
  12277. // MOVEW
  12278. OPCODE(0x30A7)
  12279. {
  12280. u32 adr, res;
  12281. u32 src, dst;
  12282. adr = AREG(7) - 2;
  12283. AREG(7) = adr;
  12284. PRE_IO
  12285. READ_WORD_F(adr, res)
  12286. flag_C = 0;
  12287. flag_V = 0;
  12288. flag_NotZ = res;
  12289. flag_N = res >> 8;
  12290. adr = AREG((Opcode >> 9) & 7);
  12291. WRITE_WORD_F(adr, res)
  12292. POST_IO
  12293. RET(14)
  12294. }
  12295. // MOVEW
  12296. OPCODE(0x30E7)
  12297. {
  12298. u32 adr, res;
  12299. u32 src, dst;
  12300. adr = AREG(7) - 2;
  12301. AREG(7) = adr;
  12302. PRE_IO
  12303. READ_WORD_F(adr, res)
  12304. flag_C = 0;
  12305. flag_V = 0;
  12306. flag_NotZ = res;
  12307. flag_N = res >> 8;
  12308. adr = AREG((Opcode >> 9) & 7);
  12309. AREG((Opcode >> 9) & 7) += 2;
  12310. WRITE_WORD_F(adr, res)
  12311. POST_IO
  12312. RET(14)
  12313. }
  12314. // MOVEW
  12315. OPCODE(0x3127)
  12316. {
  12317. u32 adr, res;
  12318. u32 src, dst;
  12319. adr = AREG(7) - 2;
  12320. AREG(7) = adr;
  12321. PRE_IO
  12322. READ_WORD_F(adr, res)
  12323. flag_C = 0;
  12324. flag_V = 0;
  12325. flag_NotZ = res;
  12326. flag_N = res >> 8;
  12327. adr = AREG((Opcode >> 9) & 7) - 2;
  12328. AREG((Opcode >> 9) & 7) = adr;
  12329. WRITE_WORD_F(adr, res)
  12330. POST_IO
  12331. RET(14)
  12332. }
  12333. // MOVEW
  12334. OPCODE(0x3167)
  12335. {
  12336. u32 adr, res;
  12337. u32 src, dst;
  12338. adr = AREG(7) - 2;
  12339. AREG(7) = adr;
  12340. PRE_IO
  12341. READ_WORD_F(adr, res)
  12342. flag_C = 0;
  12343. flag_V = 0;
  12344. flag_NotZ = res;
  12345. flag_N = res >> 8;
  12346. FETCH_SWORD(adr);
  12347. adr += AREG((Opcode >> 9) & 7);
  12348. WRITE_WORD_F(adr, res)
  12349. POST_IO
  12350. RET(18)
  12351. }
  12352. // MOVEW
  12353. OPCODE(0x31A7)
  12354. {
  12355. u32 adr, res;
  12356. u32 src, dst;
  12357. adr = AREG(7) - 2;
  12358. AREG(7) = adr;
  12359. PRE_IO
  12360. READ_WORD_F(adr, res)
  12361. flag_C = 0;
  12362. flag_V = 0;
  12363. flag_NotZ = res;
  12364. flag_N = res >> 8;
  12365. adr = AREG((Opcode >> 9) & 7);
  12366. DECODE_EXT_WORD
  12367. WRITE_WORD_F(adr, res)
  12368. POST_IO
  12369. RET(20)
  12370. }
  12371. // MOVEW
  12372. OPCODE(0x31E7)
  12373. {
  12374. u32 adr, res;
  12375. u32 src, dst;
  12376. adr = AREG(7) - 2;
  12377. AREG(7) = adr;
  12378. PRE_IO
  12379. READ_WORD_F(adr, res)
  12380. flag_C = 0;
  12381. flag_V = 0;
  12382. flag_NotZ = res;
  12383. flag_N = res >> 8;
  12384. FETCH_SWORD(adr);
  12385. WRITE_WORD_F(adr, res)
  12386. POST_IO
  12387. RET(18)
  12388. }
  12389. // MOVEW
  12390. OPCODE(0x33E7)
  12391. {
  12392. u32 adr, res;
  12393. u32 src, dst;
  12394. adr = AREG(7) - 2;
  12395. AREG(7) = adr;
  12396. PRE_IO
  12397. READ_WORD_F(adr, res)
  12398. flag_C = 0;
  12399. flag_V = 0;
  12400. flag_NotZ = res;
  12401. flag_N = res >> 8;
  12402. FETCH_LONG(adr);
  12403. WRITE_WORD_F(adr, res)
  12404. POST_IO
  12405. RET(22)
  12406. }
  12407. // MOVEW
  12408. OPCODE(0x3EE7)
  12409. {
  12410. u32 adr, res;
  12411. u32 src, dst;
  12412. adr = AREG(7) - 2;
  12413. AREG(7) = adr;
  12414. PRE_IO
  12415. READ_WORD_F(adr, res)
  12416. flag_C = 0;
  12417. flag_V = 0;
  12418. flag_NotZ = res;
  12419. flag_N = res >> 8;
  12420. adr = AREG(7);
  12421. AREG(7) += 2;
  12422. WRITE_WORD_F(adr, res)
  12423. POST_IO
  12424. RET(14)
  12425. }
  12426. // MOVEW
  12427. OPCODE(0x3F27)
  12428. {
  12429. u32 adr, res;
  12430. u32 src, dst;
  12431. adr = AREG(7) - 2;
  12432. AREG(7) = adr;
  12433. PRE_IO
  12434. READ_WORD_F(adr, res)
  12435. flag_C = 0;
  12436. flag_V = 0;
  12437. flag_NotZ = res;
  12438. flag_N = res >> 8;
  12439. adr = AREG(7) - 2;
  12440. AREG(7) = adr;
  12441. WRITE_WORD_F(adr, res)
  12442. POST_IO
  12443. RET(14)
  12444. }
  12445. // MOVEAW
  12446. OPCODE(0x3040)
  12447. {
  12448. u32 adr, res;
  12449. u32 src, dst;
  12450. res = (s32)DREGs16((Opcode >> 0) & 7);
  12451. AREG((Opcode >> 9) & 7) = res;
  12452. RET(4)
  12453. }
  12454. // MOVEAW
  12455. OPCODE(0x3048)
  12456. {
  12457. u32 adr, res;
  12458. u32 src, dst;
  12459. res = (s32)AREGs16((Opcode >> 0) & 7);
  12460. AREG((Opcode >> 9) & 7) = res;
  12461. RET(4)
  12462. }
  12463. // MOVEAW
  12464. OPCODE(0x3050)
  12465. {
  12466. u32 adr, res;
  12467. u32 src, dst;
  12468. adr = AREG((Opcode >> 0) & 7);
  12469. PRE_IO
  12470. READSX_WORD_F(adr, res)
  12471. AREG((Opcode >> 9) & 7) = res;
  12472. POST_IO
  12473. RET(8)
  12474. }
  12475. // MOVEAW
  12476. OPCODE(0x3058)
  12477. {
  12478. u32 adr, res;
  12479. u32 src, dst;
  12480. adr = AREG((Opcode >> 0) & 7);
  12481. AREG((Opcode >> 0) & 7) += 2;
  12482. PRE_IO
  12483. READSX_WORD_F(adr, res)
  12484. AREG((Opcode >> 9) & 7) = res;
  12485. POST_IO
  12486. RET(8)
  12487. }
  12488. // MOVEAW
  12489. OPCODE(0x3060)
  12490. {
  12491. u32 adr, res;
  12492. u32 src, dst;
  12493. adr = AREG((Opcode >> 0) & 7) - 2;
  12494. AREG((Opcode >> 0) & 7) = adr;
  12495. PRE_IO
  12496. READSX_WORD_F(adr, res)
  12497. AREG((Opcode >> 9) & 7) = res;
  12498. POST_IO
  12499. RET(10)
  12500. }
  12501. // MOVEAW
  12502. OPCODE(0x3068)
  12503. {
  12504. u32 adr, res;
  12505. u32 src, dst;
  12506. FETCH_SWORD(adr);
  12507. adr += AREG((Opcode >> 0) & 7);
  12508. PRE_IO
  12509. READSX_WORD_F(adr, res)
  12510. AREG((Opcode >> 9) & 7) = res;
  12511. POST_IO
  12512. RET(12)
  12513. }
  12514. // MOVEAW
  12515. OPCODE(0x3070)
  12516. {
  12517. u32 adr, res;
  12518. u32 src, dst;
  12519. adr = AREG((Opcode >> 0) & 7);
  12520. DECODE_EXT_WORD
  12521. PRE_IO
  12522. READSX_WORD_F(adr, res)
  12523. AREG((Opcode >> 9) & 7) = res;
  12524. POST_IO
  12525. RET(14)
  12526. }
  12527. // MOVEAW
  12528. OPCODE(0x3078)
  12529. {
  12530. u32 adr, res;
  12531. u32 src, dst;
  12532. FETCH_SWORD(adr);
  12533. PRE_IO
  12534. READSX_WORD_F(adr, res)
  12535. AREG((Opcode >> 9) & 7) = res;
  12536. POST_IO
  12537. RET(12)
  12538. }
  12539. // MOVEAW
  12540. OPCODE(0x3079)
  12541. {
  12542. u32 adr, res;
  12543. u32 src, dst;
  12544. FETCH_LONG(adr);
  12545. PRE_IO
  12546. READSX_WORD_F(adr, res)
  12547. AREG((Opcode >> 9) & 7) = res;
  12548. POST_IO
  12549. RET(16)
  12550. }
  12551. // MOVEAW
  12552. OPCODE(0x307A)
  12553. {
  12554. u32 adr, res;
  12555. u32 src, dst;
  12556. adr = GET_SWORD + GET_PC;
  12557. PC++;
  12558. PRE_IO
  12559. READSX_WORD_F(adr, res)
  12560. AREG((Opcode >> 9) & 7) = res;
  12561. POST_IO
  12562. RET(12)
  12563. }
  12564. // MOVEAW
  12565. OPCODE(0x307B)
  12566. {
  12567. u32 adr, res;
  12568. u32 src, dst;
  12569. adr = GET_PC;
  12570. DECODE_EXT_WORD
  12571. PRE_IO
  12572. READSX_WORD_F(adr, res)
  12573. AREG((Opcode >> 9) & 7) = res;
  12574. POST_IO
  12575. RET(14)
  12576. }
  12577. // MOVEAW
  12578. OPCODE(0x307C)
  12579. {
  12580. u32 adr, res;
  12581. u32 src, dst;
  12582. FETCH_SWORD(res);
  12583. AREG((Opcode >> 9) & 7) = res;
  12584. RET(8)
  12585. }
  12586. // MOVEAW
  12587. OPCODE(0x305F)
  12588. {
  12589. u32 adr, res;
  12590. u32 src, dst;
  12591. adr = AREG(7);
  12592. AREG(7) += 2;
  12593. PRE_IO
  12594. READSX_WORD_F(adr, res)
  12595. AREG((Opcode >> 9) & 7) = res;
  12596. POST_IO
  12597. RET(8)
  12598. }
  12599. // MOVEAW
  12600. OPCODE(0x3067)
  12601. {
  12602. u32 adr, res;
  12603. u32 src, dst;
  12604. adr = AREG(7) - 2;
  12605. AREG(7) = adr;
  12606. PRE_IO
  12607. READSX_WORD_F(adr, res)
  12608. AREG((Opcode >> 9) & 7) = res;
  12609. POST_IO
  12610. RET(10)
  12611. }
  12612. // NEGX
  12613. OPCODE(0x4000)
  12614. {
  12615. u32 adr, res;
  12616. u32 src, dst;
  12617. src = DREGu8((Opcode >> 0) & 7);
  12618. res = -src - ((flag_X >> 8) & 1);
  12619. flag_V = res & src;
  12620. flag_N = flag_X = flag_C = res;
  12621. flag_NotZ |= res & 0xFF;
  12622. DREGu8((Opcode >> 0) & 7) = res;
  12623. RET(4)
  12624. }
  12625. // NEGX
  12626. OPCODE(0x4010)
  12627. {
  12628. u32 adr, res;
  12629. u32 src, dst;
  12630. adr = AREG((Opcode >> 0) & 7);
  12631. PRE_IO
  12632. READ_BYTE_F(adr, src)
  12633. res = -src - ((flag_X >> 8) & 1);
  12634. flag_V = res & src;
  12635. flag_N = flag_X = flag_C = res;
  12636. flag_NotZ |= res & 0xFF;
  12637. WRITE_BYTE_F(adr, res)
  12638. POST_IO
  12639. RET(12)
  12640. }
  12641. // NEGX
  12642. OPCODE(0x4018)
  12643. {
  12644. u32 adr, res;
  12645. u32 src, dst;
  12646. adr = AREG((Opcode >> 0) & 7);
  12647. AREG((Opcode >> 0) & 7) += 1;
  12648. PRE_IO
  12649. READ_BYTE_F(adr, src)
  12650. res = -src - ((flag_X >> 8) & 1);
  12651. flag_V = res & src;
  12652. flag_N = flag_X = flag_C = res;
  12653. flag_NotZ |= res & 0xFF;
  12654. WRITE_BYTE_F(adr, res)
  12655. POST_IO
  12656. RET(12)
  12657. }
  12658. // NEGX
  12659. OPCODE(0x4020)
  12660. {
  12661. u32 adr, res;
  12662. u32 src, dst;
  12663. adr = AREG((Opcode >> 0) & 7) - 1;
  12664. AREG((Opcode >> 0) & 7) = adr;
  12665. PRE_IO
  12666. READ_BYTE_F(adr, src)
  12667. res = -src - ((flag_X >> 8) & 1);
  12668. flag_V = res & src;
  12669. flag_N = flag_X = flag_C = res;
  12670. flag_NotZ |= res & 0xFF;
  12671. WRITE_BYTE_F(adr, res)
  12672. POST_IO
  12673. RET(14)
  12674. }
  12675. // NEGX
  12676. OPCODE(0x4028)
  12677. {
  12678. u32 adr, res;
  12679. u32 src, dst;
  12680. FETCH_SWORD(adr);
  12681. adr += AREG((Opcode >> 0) & 7);
  12682. PRE_IO
  12683. READ_BYTE_F(adr, src)
  12684. res = -src - ((flag_X >> 8) & 1);
  12685. flag_V = res & src;
  12686. flag_N = flag_X = flag_C = res;
  12687. flag_NotZ |= res & 0xFF;
  12688. WRITE_BYTE_F(adr, res)
  12689. POST_IO
  12690. RET(16)
  12691. }
  12692. // NEGX
  12693. OPCODE(0x4030)
  12694. {
  12695. u32 adr, res;
  12696. u32 src, dst;
  12697. adr = AREG((Opcode >> 0) & 7);
  12698. DECODE_EXT_WORD
  12699. PRE_IO
  12700. READ_BYTE_F(adr, src)
  12701. res = -src - ((flag_X >> 8) & 1);
  12702. flag_V = res & src;
  12703. flag_N = flag_X = flag_C = res;
  12704. flag_NotZ |= res & 0xFF;
  12705. WRITE_BYTE_F(adr, res)
  12706. POST_IO
  12707. RET(18)
  12708. }
  12709. // NEGX
  12710. OPCODE(0x4038)
  12711. {
  12712. u32 adr, res;
  12713. u32 src, dst;
  12714. FETCH_SWORD(adr);
  12715. PRE_IO
  12716. READ_BYTE_F(adr, src)
  12717. res = -src - ((flag_X >> 8) & 1);
  12718. flag_V = res & src;
  12719. flag_N = flag_X = flag_C = res;
  12720. flag_NotZ |= res & 0xFF;
  12721. WRITE_BYTE_F(adr, res)
  12722. POST_IO
  12723. RET(16)
  12724. }
  12725. // NEGX
  12726. OPCODE(0x4039)
  12727. {
  12728. u32 adr, res;
  12729. u32 src, dst;
  12730. FETCH_LONG(adr);
  12731. PRE_IO
  12732. READ_BYTE_F(adr, src)
  12733. res = -src - ((flag_X >> 8) & 1);
  12734. flag_V = res & src;
  12735. flag_N = flag_X = flag_C = res;
  12736. flag_NotZ |= res & 0xFF;
  12737. WRITE_BYTE_F(adr, res)
  12738. POST_IO
  12739. RET(20)
  12740. }
  12741. // NEGX
  12742. OPCODE(0x401F)
  12743. {
  12744. u32 adr, res;
  12745. u32 src, dst;
  12746. adr = AREG(7);
  12747. AREG(7) += 2;
  12748. PRE_IO
  12749. READ_BYTE_F(adr, src)
  12750. res = -src - ((flag_X >> 8) & 1);
  12751. flag_V = res & src;
  12752. flag_N = flag_X = flag_C = res;
  12753. flag_NotZ |= res & 0xFF;
  12754. WRITE_BYTE_F(adr, res)
  12755. POST_IO
  12756. RET(12)
  12757. }
  12758. // NEGX
  12759. OPCODE(0x4027)
  12760. {
  12761. u32 adr, res;
  12762. u32 src, dst;
  12763. adr = AREG(7) - 2;
  12764. AREG(7) = adr;
  12765. PRE_IO
  12766. READ_BYTE_F(adr, src)
  12767. res = -src - ((flag_X >> 8) & 1);
  12768. flag_V = res & src;
  12769. flag_N = flag_X = flag_C = res;
  12770. flag_NotZ |= res & 0xFF;
  12771. WRITE_BYTE_F(adr, res)
  12772. POST_IO
  12773. RET(14)
  12774. }
  12775. // NEGX
  12776. OPCODE(0x4040)
  12777. {
  12778. u32 adr, res;
  12779. u32 src, dst;
  12780. src = DREGu16((Opcode >> 0) & 7);
  12781. res = -src - ((flag_X >> 8) & 1);
  12782. flag_V = (res & src) >> 8;
  12783. flag_N = flag_X = flag_C = res >> 8;
  12784. flag_NotZ |= res & 0xFFFF;
  12785. DREGu16((Opcode >> 0) & 7) = res;
  12786. RET(4)
  12787. }
  12788. // NEGX
  12789. OPCODE(0x4050)
  12790. {
  12791. u32 adr, res;
  12792. u32 src, dst;
  12793. adr = AREG((Opcode >> 0) & 7);
  12794. PRE_IO
  12795. READ_WORD_F(adr, src)
  12796. res = -src - ((flag_X >> 8) & 1);
  12797. flag_V = (res & src) >> 8;
  12798. flag_N = flag_X = flag_C = res >> 8;
  12799. flag_NotZ |= res & 0xFFFF;
  12800. WRITE_WORD_F(adr, res)
  12801. POST_IO
  12802. RET(12)
  12803. }
  12804. // NEGX
  12805. OPCODE(0x4058)
  12806. {
  12807. u32 adr, res;
  12808. u32 src, dst;
  12809. adr = AREG((Opcode >> 0) & 7);
  12810. AREG((Opcode >> 0) & 7) += 2;
  12811. PRE_IO
  12812. READ_WORD_F(adr, src)
  12813. res = -src - ((flag_X >> 8) & 1);
  12814. flag_V = (res & src) >> 8;
  12815. flag_N = flag_X = flag_C = res >> 8;
  12816. flag_NotZ |= res & 0xFFFF;
  12817. WRITE_WORD_F(adr, res)
  12818. POST_IO
  12819. RET(12)
  12820. }
  12821. // NEGX
  12822. OPCODE(0x4060)
  12823. {
  12824. u32 adr, res;
  12825. u32 src, dst;
  12826. adr = AREG((Opcode >> 0) & 7) - 2;
  12827. AREG((Opcode >> 0) & 7) = adr;
  12828. PRE_IO
  12829. READ_WORD_F(adr, src)
  12830. res = -src - ((flag_X >> 8) & 1);
  12831. flag_V = (res & src) >> 8;
  12832. flag_N = flag_X = flag_C = res >> 8;
  12833. flag_NotZ |= res & 0xFFFF;
  12834. WRITE_WORD_F(adr, res)
  12835. POST_IO
  12836. RET(14)
  12837. }
  12838. // NEGX
  12839. OPCODE(0x4068)
  12840. {
  12841. u32 adr, res;
  12842. u32 src, dst;
  12843. FETCH_SWORD(adr);
  12844. adr += AREG((Opcode >> 0) & 7);
  12845. PRE_IO
  12846. READ_WORD_F(adr, src)
  12847. res = -src - ((flag_X >> 8) & 1);
  12848. flag_V = (res & src) >> 8;
  12849. flag_N = flag_X = flag_C = res >> 8;
  12850. flag_NotZ |= res & 0xFFFF;
  12851. WRITE_WORD_F(adr, res)
  12852. POST_IO
  12853. RET(16)
  12854. }
  12855. // NEGX
  12856. OPCODE(0x4070)
  12857. {
  12858. u32 adr, res;
  12859. u32 src, dst;
  12860. adr = AREG((Opcode >> 0) & 7);
  12861. DECODE_EXT_WORD
  12862. PRE_IO
  12863. READ_WORD_F(adr, src)
  12864. res = -src - ((flag_X >> 8) & 1);
  12865. flag_V = (res & src) >> 8;
  12866. flag_N = flag_X = flag_C = res >> 8;
  12867. flag_NotZ |= res & 0xFFFF;
  12868. WRITE_WORD_F(adr, res)
  12869. POST_IO
  12870. RET(18)
  12871. }
  12872. // NEGX
  12873. OPCODE(0x4078)
  12874. {
  12875. u32 adr, res;
  12876. u32 src, dst;
  12877. FETCH_SWORD(adr);
  12878. PRE_IO
  12879. READ_WORD_F(adr, src)
  12880. res = -src - ((flag_X >> 8) & 1);
  12881. flag_V = (res & src) >> 8;
  12882. flag_N = flag_X = flag_C = res >> 8;
  12883. flag_NotZ |= res & 0xFFFF;
  12884. WRITE_WORD_F(adr, res)
  12885. POST_IO
  12886. RET(16)
  12887. }
  12888. // NEGX
  12889. OPCODE(0x4079)
  12890. {
  12891. u32 adr, res;
  12892. u32 src, dst;
  12893. FETCH_LONG(adr);
  12894. PRE_IO
  12895. READ_WORD_F(adr, src)
  12896. res = -src - ((flag_X >> 8) & 1);
  12897. flag_V = (res & src) >> 8;
  12898. flag_N = flag_X = flag_C = res >> 8;
  12899. flag_NotZ |= res & 0xFFFF;
  12900. WRITE_WORD_F(adr, res)
  12901. POST_IO
  12902. RET(20)
  12903. }
  12904. // NEGX
  12905. OPCODE(0x405F)
  12906. {
  12907. u32 adr, res;
  12908. u32 src, dst;
  12909. adr = AREG(7);
  12910. AREG(7) += 2;
  12911. PRE_IO
  12912. READ_WORD_F(adr, src)
  12913. res = -src - ((flag_X >> 8) & 1);
  12914. flag_V = (res & src) >> 8;
  12915. flag_N = flag_X = flag_C = res >> 8;
  12916. flag_NotZ |= res & 0xFFFF;
  12917. WRITE_WORD_F(adr, res)
  12918. POST_IO
  12919. RET(12)
  12920. }
  12921. // NEGX
  12922. OPCODE(0x4067)
  12923. {
  12924. u32 adr, res;
  12925. u32 src, dst;
  12926. adr = AREG(7) - 2;
  12927. AREG(7) = adr;
  12928. PRE_IO
  12929. READ_WORD_F(adr, src)
  12930. res = -src - ((flag_X >> 8) & 1);
  12931. flag_V = (res & src) >> 8;
  12932. flag_N = flag_X = flag_C = res >> 8;
  12933. flag_NotZ |= res & 0xFFFF;
  12934. WRITE_WORD_F(adr, res)
  12935. POST_IO
  12936. RET(14)
  12937. }
  12938. // NEGX
  12939. OPCODE(0x4080)
  12940. {
  12941. u32 adr, res;
  12942. u32 src, dst;
  12943. src = DREGu32((Opcode >> 0) & 7);
  12944. res = -src - ((flag_X >> 8) & 1);
  12945. flag_NotZ |= res;
  12946. flag_V = (res & src) >> 24;
  12947. flag_X = flag_C = (res?1:0)<<8;
  12948. // flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  12949. flag_N = res >> 24;
  12950. DREGu32((Opcode >> 0) & 7) = res;
  12951. RET(6)
  12952. }
  12953. // NEGX
  12954. OPCODE(0x4090)
  12955. {
  12956. u32 adr, res;
  12957. u32 src, dst;
  12958. adr = AREG((Opcode >> 0) & 7);
  12959. PRE_IO
  12960. READ_LONG_F(adr, src)
  12961. res = -src - ((flag_X >> 8) & 1);
  12962. flag_NotZ |= res;
  12963. flag_V = (res & src) >> 24;
  12964. flag_X = flag_C = (res?1:0)<<8;
  12965. // flag_X = flag_C = ((src & res & 1) | (src >> 1) | (res >> 1)) >> 23;
  12966. flag_N = res >> 24;
  12967. WRITE_LONG_F(adr, res)
  12968. POST_IO
  12969. RET(20)
  12970. }
  12971. // NEGX
  12972. OPCODE(0x4098)
  12973. {
  12974. u32 adr, res;
  12975. u32 src, dst;
  12976. adr = AREG((Opcode >> 0) & 7);
  12977. AREG((Opcode >> 0) & 7) += 4;
  12978. PRE_IO
  12979. READ_LONG_F(adr, src)
  12980. res = -src - ((flag_X >> 8) & 1);
  12981. flag_NotZ |= res;
  12982. flag_V = (res & src) >> 24;
  12983. flag_X = flag_C = (res?1:0)<<8;
  12984. // flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  12985. flag_N = res >> 24;
  12986. WRITE_LONG_F(adr, res)
  12987. POST_IO
  12988. RET(20)
  12989. }
  12990. // NEGX
  12991. OPCODE(0x40A0)
  12992. {
  12993. u32 adr, res;
  12994. u32 src, dst;
  12995. adr = AREG((Opcode >> 0) & 7) - 4;
  12996. AREG((Opcode >> 0) & 7) = adr;
  12997. PRE_IO
  12998. READ_LONG_F(adr, src)
  12999. res = -src - ((flag_X >> 8) & 1);
  13000. flag_NotZ |= res;
  13001. flag_V = (res & src) >> 24;
  13002. flag_X = flag_C = (res?1:0)<<8;
  13003. // flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  13004. flag_N = res >> 24;
  13005. WRITE_LONG_F(adr, res)
  13006. POST_IO
  13007. RET(22)
  13008. }
  13009. // NEGX
  13010. OPCODE(0x40A8)
  13011. {
  13012. u32 adr, res;
  13013. u32 src, dst;
  13014. FETCH_SWORD(adr);
  13015. adr += AREG((Opcode >> 0) & 7);
  13016. PRE_IO
  13017. READ_LONG_F(adr, src)
  13018. res = -src - ((flag_X >> 8) & 1);
  13019. flag_NotZ |= res;
  13020. flag_V = (res & src) >> 24;
  13021. flag_X = flag_C = (res?1:0)<<8;
  13022. // flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  13023. flag_N = res >> 24;
  13024. WRITE_LONG_F(adr, res)
  13025. POST_IO
  13026. RET(24)
  13027. }
  13028. // NEGX
  13029. OPCODE(0x40B0)
  13030. {
  13031. u32 adr, res;
  13032. u32 src, dst;
  13033. adr = AREG((Opcode >> 0) & 7);
  13034. DECODE_EXT_WORD
  13035. PRE_IO
  13036. READ_LONG_F(adr, src)
  13037. res = -src - ((flag_X >> 8) & 1);
  13038. flag_NotZ |= res;
  13039. flag_V = (res & src) >> 24;
  13040. flag_X = flag_C = (res?1:0)<<8;
  13041. // flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  13042. flag_N = res >> 24;
  13043. WRITE_LONG_F(adr, res)
  13044. POST_IO
  13045. RET(26)
  13046. }
  13047. // NEGX
  13048. OPCODE(0x40B8)
  13049. {
  13050. u32 adr, res;
  13051. u32 src, dst;
  13052. FETCH_SWORD(adr);
  13053. PRE_IO
  13054. READ_LONG_F(adr, src)
  13055. res = -src - ((flag_X >> 8) & 1);
  13056. flag_NotZ |= res;
  13057. flag_V = (res & src) >> 24;
  13058. flag_X = flag_C = (res?1:0)<<8;
  13059. // flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  13060. flag_N = res >> 24;
  13061. WRITE_LONG_F(adr, res)
  13062. POST_IO
  13063. RET(24)
  13064. }
  13065. // NEGX
  13066. OPCODE(0x40B9)
  13067. {
  13068. u32 adr, res;
  13069. u32 src, dst;
  13070. FETCH_LONG(adr);
  13071. PRE_IO
  13072. READ_LONG_F(adr, src)
  13073. res = -src - ((flag_X >> 8) & 1);
  13074. flag_NotZ |= res;
  13075. flag_V = (res & src) >> 24;
  13076. flag_X = flag_C = (res?1:0)<<8;
  13077. // flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  13078. flag_N = res >> 24;
  13079. WRITE_LONG_F(adr, res)
  13080. POST_IO
  13081. RET(28)
  13082. }
  13083. // NEGX
  13084. OPCODE(0x409F)
  13085. {
  13086. u32 adr, res;
  13087. u32 src, dst;
  13088. adr = AREG(7);
  13089. AREG(7) += 4;
  13090. PRE_IO
  13091. READ_LONG_F(adr, src)
  13092. res = -src - ((flag_X >> 8) & 1);
  13093. flag_NotZ |= res;
  13094. flag_V = (res & src) >> 24;
  13095. flag_X = flag_C = (res?1:0)<<8;
  13096. // flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  13097. flag_N = res >> 24;
  13098. WRITE_LONG_F(adr, res)
  13099. POST_IO
  13100. RET(20)
  13101. }
  13102. // NEGX
  13103. OPCODE(0x40A7)
  13104. {
  13105. u32 adr, res;
  13106. u32 src, dst;
  13107. adr = AREG(7) - 4;
  13108. AREG(7) = adr;
  13109. PRE_IO
  13110. READ_LONG_F(adr, src)
  13111. res = -src - ((flag_X >> 8) & 1);
  13112. flag_NotZ |= res;
  13113. flag_V = (res & src) >> 24;
  13114. flag_X = flag_C = (res?1:0)<<8;
  13115. // flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  13116. flag_N = res >> 24;
  13117. WRITE_LONG_F(adr, res)
  13118. POST_IO
  13119. RET(22)
  13120. }
  13121. // CLR
  13122. OPCODE(0x4200)
  13123. {
  13124. u32 adr, res;
  13125. u32 src, dst;
  13126. res = 0;
  13127. flag_N = flag_NotZ = flag_V = flag_C = 0;
  13128. DREGu8((Opcode >> 0) & 7) = res;
  13129. RET(4)
  13130. }
  13131. // CLR
  13132. OPCODE(0x4210)
  13133. {
  13134. u32 adr, res;
  13135. u32 src, dst;
  13136. adr = AREG((Opcode >> 0) & 7);
  13137. res = 0;
  13138. flag_N = flag_NotZ = flag_V = flag_C = 0;
  13139. PRE_IO
  13140. WRITE_BYTE_F(adr, res)
  13141. POST_IO
  13142. RET(12)
  13143. }
  13144. // CLR
  13145. OPCODE(0x4218)
  13146. {
  13147. u32 adr, res;
  13148. u32 src, dst;
  13149. adr = AREG((Opcode >> 0) & 7);
  13150. AREG((Opcode >> 0) & 7) += 1;
  13151. res = 0;
  13152. flag_N = flag_NotZ = flag_V = flag_C = 0;
  13153. PRE_IO
  13154. WRITE_BYTE_F(adr, res)
  13155. POST_IO
  13156. RET(12)
  13157. }
  13158. // CLR
  13159. OPCODE(0x4220)
  13160. {
  13161. u32 adr, res;
  13162. u32 src, dst;
  13163. adr = AREG((Opcode >> 0) & 7) - 1;
  13164. AREG((Opcode >> 0) & 7) = adr;
  13165. res = 0;
  13166. flag_N = flag_NotZ = flag_V = flag_C = 0;
  13167. PRE_IO
  13168. WRITE_BYTE_F(adr, res)
  13169. POST_IO
  13170. RET(14)
  13171. }
  13172. // CLR
  13173. OPCODE(0x4228)
  13174. {
  13175. u32 adr, res;
  13176. u32 src, dst;
  13177. FETCH_SWORD(adr);
  13178. adr += AREG((Opcode >> 0) & 7);
  13179. res = 0;
  13180. flag_N = flag_NotZ = flag_V = flag_C = 0;
  13181. PRE_IO
  13182. WRITE_BYTE_F(adr, res)
  13183. POST_IO
  13184. RET(16)
  13185. }
  13186. // CLR
  13187. OPCODE(0x4230)
  13188. {
  13189. u32 adr, res;
  13190. u32 src, dst;
  13191. adr = AREG((Opcode >> 0) & 7);
  13192. DECODE_EXT_WORD
  13193. res = 0;
  13194. flag_N = flag_NotZ = flag_V = flag_C = 0;
  13195. PRE_IO
  13196. WRITE_BYTE_F(adr, res)
  13197. POST_IO
  13198. RET(18)
  13199. }
  13200. // CLR
  13201. OPCODE(0x4238)
  13202. {
  13203. u32 adr, res;
  13204. u32 src, dst;
  13205. FETCH_SWORD(adr);
  13206. res = 0;
  13207. flag_N = flag_NotZ = flag_V = flag_C = 0;
  13208. PRE_IO
  13209. WRITE_BYTE_F(adr, res)
  13210. POST_IO
  13211. RET(16)
  13212. }
  13213. // CLR
  13214. OPCODE(0x4239)
  13215. {
  13216. u32 adr, res;
  13217. u32 src, dst;
  13218. FETCH_LONG(adr);
  13219. res = 0;
  13220. flag_N = flag_NotZ = flag_V = flag_C = 0;
  13221. PRE_IO
  13222. WRITE_BYTE_F(adr, res)
  13223. POST_IO
  13224. RET(20)
  13225. }
  13226. // CLR
  13227. OPCODE(0x421F)
  13228. {
  13229. u32 adr, res;
  13230. u32 src, dst;
  13231. adr = AREG(7);
  13232. AREG(7) += 2;
  13233. res = 0;
  13234. flag_N = flag_NotZ = flag_V = flag_C = 0;
  13235. PRE_IO
  13236. WRITE_BYTE_F(adr, res)
  13237. POST_IO
  13238. RET(12)
  13239. }
  13240. // CLR
  13241. OPCODE(0x4227)
  13242. {
  13243. u32 adr, res;
  13244. u32 src, dst;
  13245. adr = AREG(7) - 2;
  13246. AREG(7) = adr;
  13247. res = 0;
  13248. flag_N = flag_NotZ = flag_V = flag_C = 0;
  13249. PRE_IO
  13250. WRITE_BYTE_F(adr, res)
  13251. POST_IO
  13252. RET(14)
  13253. }
  13254. // CLR
  13255. OPCODE(0x4240)
  13256. {
  13257. u32 adr, res;
  13258. u32 src, dst;
  13259. res = 0;
  13260. flag_N = flag_NotZ = flag_V = flag_C = 0;
  13261. DREGu16((Opcode >> 0) & 7) = res;
  13262. RET(4)
  13263. }
  13264. // CLR
  13265. OPCODE(0x4250)
  13266. {
  13267. u32 adr, res;
  13268. u32 src, dst;
  13269. adr = AREG((Opcode >> 0) & 7);
  13270. res = 0;
  13271. flag_N = flag_NotZ = flag_V = flag_C = 0;
  13272. PRE_IO
  13273. WRITE_WORD_F(adr, res)
  13274. POST_IO
  13275. RET(12)
  13276. }
  13277. // CLR
  13278. OPCODE(0x4258)
  13279. {
  13280. u32 adr, res;
  13281. u32 src, dst;
  13282. adr = AREG((Opcode >> 0) & 7);
  13283. AREG((Opcode >> 0) & 7) += 2;
  13284. res = 0;
  13285. flag_N = flag_NotZ = flag_V = flag_C = 0;
  13286. PRE_IO
  13287. WRITE_WORD_F(adr, res)
  13288. POST_IO
  13289. RET(12)
  13290. }
  13291. // CLR
  13292. OPCODE(0x4260)
  13293. {
  13294. u32 adr, res;
  13295. u32 src, dst;
  13296. adr = AREG((Opcode >> 0) & 7) - 2;
  13297. AREG((Opcode >> 0) & 7) = adr;
  13298. res = 0;
  13299. flag_N = flag_NotZ = flag_V = flag_C = 0;
  13300. PRE_IO
  13301. WRITE_WORD_F(adr, res)
  13302. POST_IO
  13303. RET(14)
  13304. }
  13305. // CLR
  13306. OPCODE(0x4268)
  13307. {
  13308. u32 adr, res;
  13309. u32 src, dst;
  13310. FETCH_SWORD(adr);
  13311. adr += AREG((Opcode >> 0) & 7);
  13312. res = 0;
  13313. flag_N = flag_NotZ = flag_V = flag_C = 0;
  13314. PRE_IO
  13315. WRITE_WORD_F(adr, res)
  13316. POST_IO
  13317. RET(16)
  13318. }
  13319. // CLR
  13320. OPCODE(0x4270)
  13321. {
  13322. u32 adr, res;
  13323. u32 src, dst;
  13324. adr = AREG((Opcode >> 0) & 7);
  13325. DECODE_EXT_WORD
  13326. res = 0;
  13327. flag_N = flag_NotZ = flag_V = flag_C = 0;
  13328. PRE_IO
  13329. WRITE_WORD_F(adr, res)
  13330. POST_IO
  13331. RET(18)
  13332. }
  13333. // CLR
  13334. OPCODE(0x4278)
  13335. {
  13336. u32 adr, res;
  13337. u32 src, dst;
  13338. FETCH_SWORD(adr);
  13339. res = 0;
  13340. flag_N = flag_NotZ = flag_V = flag_C = 0;
  13341. PRE_IO
  13342. WRITE_WORD_F(adr, res)
  13343. POST_IO
  13344. RET(16)
  13345. }
  13346. // CLR
  13347. OPCODE(0x4279)
  13348. {
  13349. u32 adr, res;
  13350. u32 src, dst;
  13351. FETCH_LONG(adr);
  13352. res = 0;
  13353. flag_N = flag_NotZ = flag_V = flag_C = 0;
  13354. PRE_IO
  13355. WRITE_WORD_F(adr, res)
  13356. POST_IO
  13357. RET(20)
  13358. }
  13359. // CLR
  13360. OPCODE(0x425F)
  13361. {
  13362. u32 adr, res;
  13363. u32 src, dst;
  13364. adr = AREG(7);
  13365. AREG(7) += 2;
  13366. res = 0;
  13367. flag_N = flag_NotZ = flag_V = flag_C = 0;
  13368. PRE_IO
  13369. WRITE_WORD_F(adr, res)
  13370. POST_IO
  13371. RET(12)
  13372. }
  13373. // CLR
  13374. OPCODE(0x4267)
  13375. {
  13376. u32 adr, res;
  13377. u32 src, dst;
  13378. adr = AREG(7) - 2;
  13379. AREG(7) = adr;
  13380. res = 0;
  13381. flag_N = flag_NotZ = flag_V = flag_C = 0;
  13382. PRE_IO
  13383. WRITE_WORD_F(adr, res)
  13384. POST_IO
  13385. RET(14)
  13386. }
  13387. // CLR
  13388. OPCODE(0x4280)
  13389. {
  13390. u32 adr, res;
  13391. u32 src, dst;
  13392. res = 0;
  13393. flag_N = flag_NotZ = flag_V = flag_C = 0;
  13394. DREGu32((Opcode >> 0) & 7) = res;
  13395. RET(6)
  13396. }
  13397. // CLR
  13398. OPCODE(0x4290)
  13399. {
  13400. u32 adr, res;
  13401. u32 src, dst;
  13402. adr = AREG((Opcode >> 0) & 7);
  13403. res = 0;
  13404. flag_N = flag_NotZ = flag_V = flag_C = 0;
  13405. PRE_IO
  13406. WRITE_LONG_F(adr, res)
  13407. POST_IO
  13408. RET(20)
  13409. }
  13410. // CLR
  13411. OPCODE(0x4298)
  13412. {
  13413. u32 adr, res;
  13414. u32 src, dst;
  13415. adr = AREG((Opcode >> 0) & 7);
  13416. AREG((Opcode >> 0) & 7) += 4;
  13417. res = 0;
  13418. flag_N = flag_NotZ = flag_V = flag_C = 0;
  13419. PRE_IO
  13420. WRITE_LONG_F(adr, res)
  13421. POST_IO
  13422. RET(20)
  13423. }
  13424. // CLR
  13425. OPCODE(0x42A0)
  13426. {
  13427. u32 adr, res;
  13428. u32 src, dst;
  13429. adr = AREG((Opcode >> 0) & 7) - 4;
  13430. AREG((Opcode >> 0) & 7) = adr;
  13431. res = 0;
  13432. flag_N = flag_NotZ = flag_V = flag_C = 0;
  13433. PRE_IO
  13434. WRITE_LONG_F(adr, res)
  13435. POST_IO
  13436. RET(22)
  13437. }
  13438. // CLR
  13439. OPCODE(0x42A8)
  13440. {
  13441. u32 adr, res;
  13442. u32 src, dst;
  13443. FETCH_SWORD(adr);
  13444. adr += AREG((Opcode >> 0) & 7);
  13445. res = 0;
  13446. flag_N = flag_NotZ = flag_V = flag_C = 0;
  13447. PRE_IO
  13448. WRITE_LONG_F(adr, res)
  13449. POST_IO
  13450. RET(24)
  13451. }
  13452. // CLR
  13453. OPCODE(0x42B0)
  13454. {
  13455. u32 adr, res;
  13456. u32 src, dst;
  13457. adr = AREG((Opcode >> 0) & 7);
  13458. DECODE_EXT_WORD
  13459. res = 0;
  13460. flag_N = flag_NotZ = flag_V = flag_C = 0;
  13461. PRE_IO
  13462. WRITE_LONG_F(adr, res)
  13463. POST_IO
  13464. RET(26)
  13465. }
  13466. // CLR
  13467. OPCODE(0x42B8)
  13468. {
  13469. u32 adr, res;
  13470. u32 src, dst;
  13471. FETCH_SWORD(adr);
  13472. res = 0;
  13473. flag_N = flag_NotZ = flag_V = flag_C = 0;
  13474. PRE_IO
  13475. WRITE_LONG_F(adr, res)
  13476. POST_IO
  13477. RET(24)
  13478. }
  13479. // CLR
  13480. OPCODE(0x42B9)
  13481. {
  13482. u32 adr, res;
  13483. u32 src, dst;
  13484. FETCH_LONG(adr);
  13485. res = 0;
  13486. flag_N = flag_NotZ = flag_V = flag_C = 0;
  13487. PRE_IO
  13488. WRITE_LONG_F(adr, res)
  13489. POST_IO
  13490. RET(28)
  13491. }
  13492. // CLR
  13493. OPCODE(0x429F)
  13494. {
  13495. u32 adr, res;
  13496. u32 src, dst;
  13497. adr = AREG(7);
  13498. AREG(7) += 4;
  13499. res = 0;
  13500. flag_N = flag_NotZ = flag_V = flag_C = 0;
  13501. PRE_IO
  13502. WRITE_LONG_F(adr, res)
  13503. POST_IO
  13504. RET(20)
  13505. }
  13506. // CLR
  13507. OPCODE(0x42A7)
  13508. {
  13509. u32 adr, res;
  13510. u32 src, dst;
  13511. adr = AREG(7) - 4;
  13512. AREG(7) = adr;
  13513. res = 0;
  13514. flag_N = flag_NotZ = flag_V = flag_C = 0;
  13515. PRE_IO
  13516. WRITE_LONG_F(adr, res)
  13517. POST_IO
  13518. RET(22)
  13519. }
  13520. // NEG
  13521. OPCODE(0x4400)
  13522. {
  13523. u32 adr, res;
  13524. u32 src, dst;
  13525. src = DREGu8((Opcode >> 0) & 7);
  13526. res = -src;
  13527. flag_V = res & src;
  13528. flag_N = flag_X = flag_C = res;
  13529. flag_NotZ = res & 0xFF;
  13530. DREGu8((Opcode >> 0) & 7) = res;
  13531. RET(4)
  13532. }
  13533. // NEG
  13534. OPCODE(0x4410)
  13535. {
  13536. u32 adr, res;
  13537. u32 src, dst;
  13538. adr = AREG((Opcode >> 0) & 7);
  13539. PRE_IO
  13540. READ_BYTE_F(adr, src)
  13541. res = -src;
  13542. flag_V = res & src;
  13543. flag_N = flag_X = flag_C = res;
  13544. flag_NotZ = res & 0xFF;
  13545. WRITE_BYTE_F(adr, res)
  13546. POST_IO
  13547. RET(12)
  13548. }
  13549. // NEG
  13550. OPCODE(0x4418)
  13551. {
  13552. u32 adr, res;
  13553. u32 src, dst;
  13554. adr = AREG((Opcode >> 0) & 7);
  13555. AREG((Opcode >> 0) & 7) += 1;
  13556. PRE_IO
  13557. READ_BYTE_F(adr, src)
  13558. res = -src;
  13559. flag_V = res & src;
  13560. flag_N = flag_X = flag_C = res;
  13561. flag_NotZ = res & 0xFF;
  13562. WRITE_BYTE_F(adr, res)
  13563. POST_IO
  13564. RET(12)
  13565. }
  13566. // NEG
  13567. OPCODE(0x4420)
  13568. {
  13569. u32 adr, res;
  13570. u32 src, dst;
  13571. adr = AREG((Opcode >> 0) & 7) - 1;
  13572. AREG((Opcode >> 0) & 7) = adr;
  13573. PRE_IO
  13574. READ_BYTE_F(adr, src)
  13575. res = -src;
  13576. flag_V = res & src;
  13577. flag_N = flag_X = flag_C = res;
  13578. flag_NotZ = res & 0xFF;
  13579. WRITE_BYTE_F(adr, res)
  13580. POST_IO
  13581. RET(14)
  13582. }
  13583. // NEG
  13584. OPCODE(0x4428)
  13585. {
  13586. u32 adr, res;
  13587. u32 src, dst;
  13588. FETCH_SWORD(adr);
  13589. adr += AREG((Opcode >> 0) & 7);
  13590. PRE_IO
  13591. READ_BYTE_F(adr, src)
  13592. res = -src;
  13593. flag_V = res & src;
  13594. flag_N = flag_X = flag_C = res;
  13595. flag_NotZ = res & 0xFF;
  13596. WRITE_BYTE_F(adr, res)
  13597. POST_IO
  13598. RET(16)
  13599. }
  13600. // NEG
  13601. OPCODE(0x4430)
  13602. {
  13603. u32 adr, res;
  13604. u32 src, dst;
  13605. adr = AREG((Opcode >> 0) & 7);
  13606. DECODE_EXT_WORD
  13607. PRE_IO
  13608. READ_BYTE_F(adr, src)
  13609. res = -src;
  13610. flag_V = res & src;
  13611. flag_N = flag_X = flag_C = res;
  13612. flag_NotZ = res & 0xFF;
  13613. WRITE_BYTE_F(adr, res)
  13614. POST_IO
  13615. RET(18)
  13616. }
  13617. // NEG
  13618. OPCODE(0x4438)
  13619. {
  13620. u32 adr, res;
  13621. u32 src, dst;
  13622. FETCH_SWORD(adr);
  13623. PRE_IO
  13624. READ_BYTE_F(adr, src)
  13625. res = -src;
  13626. flag_V = res & src;
  13627. flag_N = flag_X = flag_C = res;
  13628. flag_NotZ = res & 0xFF;
  13629. WRITE_BYTE_F(adr, res)
  13630. POST_IO
  13631. RET(16)
  13632. }
  13633. // NEG
  13634. OPCODE(0x4439)
  13635. {
  13636. u32 adr, res;
  13637. u32 src, dst;
  13638. FETCH_LONG(adr);
  13639. PRE_IO
  13640. READ_BYTE_F(adr, src)
  13641. res = -src;
  13642. flag_V = res & src;
  13643. flag_N = flag_X = flag_C = res;
  13644. flag_NotZ = res & 0xFF;
  13645. WRITE_BYTE_F(adr, res)
  13646. POST_IO
  13647. RET(20)
  13648. }
  13649. // NEG
  13650. OPCODE(0x441F)
  13651. {
  13652. u32 adr, res;
  13653. u32 src, dst;
  13654. adr = AREG(7);
  13655. AREG(7) += 2;
  13656. PRE_IO
  13657. READ_BYTE_F(adr, src)
  13658. res = -src;
  13659. flag_V = res & src;
  13660. flag_N = flag_X = flag_C = res;
  13661. flag_NotZ = res & 0xFF;
  13662. WRITE_BYTE_F(adr, res)
  13663. POST_IO
  13664. RET(12)
  13665. }
  13666. // NEG
  13667. OPCODE(0x4427)
  13668. {
  13669. u32 adr, res;
  13670. u32 src, dst;
  13671. adr = AREG(7) - 2;
  13672. AREG(7) = adr;
  13673. PRE_IO
  13674. READ_BYTE_F(adr, src)
  13675. res = -src;
  13676. flag_V = res & src;
  13677. flag_N = flag_X = flag_C = res;
  13678. flag_NotZ = res & 0xFF;
  13679. WRITE_BYTE_F(adr, res)
  13680. POST_IO
  13681. RET(14)
  13682. }
  13683. // NEG
  13684. OPCODE(0x4440)
  13685. {
  13686. u32 adr, res;
  13687. u32 src, dst;
  13688. src = DREGu16((Opcode >> 0) & 7);
  13689. res = -src;
  13690. flag_V = (res & src) >> 8;
  13691. flag_N = flag_X = flag_C = res >> 8;
  13692. flag_NotZ = res & 0xFFFF;
  13693. DREGu16((Opcode >> 0) & 7) = res;
  13694. RET(4)
  13695. }
  13696. // NEG
  13697. OPCODE(0x4450)
  13698. {
  13699. u32 adr, res;
  13700. u32 src, dst;
  13701. adr = AREG((Opcode >> 0) & 7);
  13702. PRE_IO
  13703. READ_WORD_F(adr, src)
  13704. res = -src;
  13705. flag_V = (res & src) >> 8;
  13706. flag_N = flag_X = flag_C = res >> 8;
  13707. flag_NotZ = res & 0xFFFF;
  13708. WRITE_WORD_F(adr, res)
  13709. POST_IO
  13710. RET(12)
  13711. }
  13712. // NEG
  13713. OPCODE(0x4458)
  13714. {
  13715. u32 adr, res;
  13716. u32 src, dst;
  13717. adr = AREG((Opcode >> 0) & 7);
  13718. AREG((Opcode >> 0) & 7) += 2;
  13719. PRE_IO
  13720. READ_WORD_F(adr, src)
  13721. res = -src;
  13722. flag_V = (res & src) >> 8;
  13723. flag_N = flag_X = flag_C = res >> 8;
  13724. flag_NotZ = res & 0xFFFF;
  13725. WRITE_WORD_F(adr, res)
  13726. POST_IO
  13727. RET(12)
  13728. }
  13729. // NEG
  13730. OPCODE(0x4460)
  13731. {
  13732. u32 adr, res;
  13733. u32 src, dst;
  13734. adr = AREG((Opcode >> 0) & 7) - 2;
  13735. AREG((Opcode >> 0) & 7) = adr;
  13736. PRE_IO
  13737. READ_WORD_F(adr, src)
  13738. res = -src;
  13739. flag_V = (res & src) >> 8;
  13740. flag_N = flag_X = flag_C = res >> 8;
  13741. flag_NotZ = res & 0xFFFF;
  13742. WRITE_WORD_F(adr, res)
  13743. POST_IO
  13744. RET(14)
  13745. }
  13746. // NEG
  13747. OPCODE(0x4468)
  13748. {
  13749. u32 adr, res;
  13750. u32 src, dst;
  13751. FETCH_SWORD(adr);
  13752. adr += AREG((Opcode >> 0) & 7);
  13753. PRE_IO
  13754. READ_WORD_F(adr, src)
  13755. res = -src;
  13756. flag_V = (res & src) >> 8;
  13757. flag_N = flag_X = flag_C = res >> 8;
  13758. flag_NotZ = res & 0xFFFF;
  13759. WRITE_WORD_F(adr, res)
  13760. POST_IO
  13761. RET(16)
  13762. }
  13763. // NEG
  13764. OPCODE(0x4470)
  13765. {
  13766. u32 adr, res;
  13767. u32 src, dst;
  13768. adr = AREG((Opcode >> 0) & 7);
  13769. DECODE_EXT_WORD
  13770. PRE_IO
  13771. READ_WORD_F(adr, src)
  13772. res = -src;
  13773. flag_V = (res & src) >> 8;
  13774. flag_N = flag_X = flag_C = res >> 8;
  13775. flag_NotZ = res & 0xFFFF;
  13776. WRITE_WORD_F(adr, res)
  13777. POST_IO
  13778. RET(18)
  13779. }
  13780. // NEG
  13781. OPCODE(0x4478)
  13782. {
  13783. u32 adr, res;
  13784. u32 src, dst;
  13785. FETCH_SWORD(adr);
  13786. PRE_IO
  13787. READ_WORD_F(adr, src)
  13788. res = -src;
  13789. flag_V = (res & src) >> 8;
  13790. flag_N = flag_X = flag_C = res >> 8;
  13791. flag_NotZ = res & 0xFFFF;
  13792. WRITE_WORD_F(adr, res)
  13793. POST_IO
  13794. RET(16)
  13795. }
  13796. // NEG
  13797. OPCODE(0x4479)
  13798. {
  13799. u32 adr, res;
  13800. u32 src, dst;
  13801. FETCH_LONG(adr);
  13802. PRE_IO
  13803. READ_WORD_F(adr, src)
  13804. res = -src;
  13805. flag_V = (res & src) >> 8;
  13806. flag_N = flag_X = flag_C = res >> 8;
  13807. flag_NotZ = res & 0xFFFF;
  13808. WRITE_WORD_F(adr, res)
  13809. POST_IO
  13810. RET(20)
  13811. }
  13812. // NEG
  13813. OPCODE(0x445F)
  13814. {
  13815. u32 adr, res;
  13816. u32 src, dst;
  13817. adr = AREG(7);
  13818. AREG(7) += 2;
  13819. PRE_IO
  13820. READ_WORD_F(adr, src)
  13821. res = -src;
  13822. flag_V = (res & src) >> 8;
  13823. flag_N = flag_X = flag_C = res >> 8;
  13824. flag_NotZ = res & 0xFFFF;
  13825. WRITE_WORD_F(adr, res)
  13826. POST_IO
  13827. RET(12)
  13828. }
  13829. // NEG
  13830. OPCODE(0x4467)
  13831. {
  13832. u32 adr, res;
  13833. u32 src, dst;
  13834. adr = AREG(7) - 2;
  13835. AREG(7) = adr;
  13836. PRE_IO
  13837. READ_WORD_F(adr, src)
  13838. res = -src;
  13839. flag_V = (res & src) >> 8;
  13840. flag_N = flag_X = flag_C = res >> 8;
  13841. flag_NotZ = res & 0xFFFF;
  13842. WRITE_WORD_F(adr, res)
  13843. POST_IO
  13844. RET(14)
  13845. }
  13846. // NEG
  13847. OPCODE(0x4480)
  13848. {
  13849. u32 adr, res;
  13850. u32 src, dst;
  13851. src = DREGu32((Opcode >> 0) & 7);
  13852. res = -src;
  13853. flag_NotZ = res;
  13854. flag_V = (res & src) >> 24;
  13855. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  13856. flag_N = res >> 24;
  13857. DREGu32((Opcode >> 0) & 7) = res;
  13858. RET(6)
  13859. }
  13860. // NEG
  13861. OPCODE(0x4490)
  13862. {
  13863. u32 adr, res;
  13864. u32 src, dst;
  13865. adr = AREG((Opcode >> 0) & 7);
  13866. PRE_IO
  13867. READ_LONG_F(adr, src)
  13868. res = -src;
  13869. flag_NotZ = res;
  13870. flag_V = (res & src) >> 24;
  13871. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  13872. flag_N = res >> 24;
  13873. WRITE_LONG_F(adr, res)
  13874. POST_IO
  13875. RET(20)
  13876. }
  13877. // NEG
  13878. OPCODE(0x4498)
  13879. {
  13880. u32 adr, res;
  13881. u32 src, dst;
  13882. adr = AREG((Opcode >> 0) & 7);
  13883. AREG((Opcode >> 0) & 7) += 4;
  13884. PRE_IO
  13885. READ_LONG_F(adr, src)
  13886. res = -src;
  13887. flag_NotZ = res;
  13888. flag_V = (res & src) >> 24;
  13889. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  13890. flag_N = res >> 24;
  13891. WRITE_LONG_F(adr, res)
  13892. POST_IO
  13893. RET(20)
  13894. }
  13895. // NEG
  13896. OPCODE(0x44A0)
  13897. {
  13898. u32 adr, res;
  13899. u32 src, dst;
  13900. adr = AREG((Opcode >> 0) & 7) - 4;
  13901. AREG((Opcode >> 0) & 7) = adr;
  13902. PRE_IO
  13903. READ_LONG_F(adr, src)
  13904. res = -src;
  13905. flag_NotZ = res;
  13906. flag_V = (res & src) >> 24;
  13907. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  13908. flag_N = res >> 24;
  13909. WRITE_LONG_F(adr, res)
  13910. POST_IO
  13911. RET(22)
  13912. }
  13913. // NEG
  13914. OPCODE(0x44A8)
  13915. {
  13916. u32 adr, res;
  13917. u32 src, dst;
  13918. FETCH_SWORD(adr);
  13919. adr += AREG((Opcode >> 0) & 7);
  13920. PRE_IO
  13921. READ_LONG_F(adr, src)
  13922. res = -src;
  13923. flag_NotZ = res;
  13924. flag_V = (res & src) >> 24;
  13925. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  13926. flag_N = res >> 24;
  13927. WRITE_LONG_F(adr, res)
  13928. POST_IO
  13929. RET(24)
  13930. }
  13931. // NEG
  13932. OPCODE(0x44B0)
  13933. {
  13934. u32 adr, res;
  13935. u32 src, dst;
  13936. adr = AREG((Opcode >> 0) & 7);
  13937. DECODE_EXT_WORD
  13938. PRE_IO
  13939. READ_LONG_F(adr, src)
  13940. res = -src;
  13941. flag_NotZ = res;
  13942. flag_V = (res & src) >> 24;
  13943. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  13944. flag_N = res >> 24;
  13945. WRITE_LONG_F(adr, res)
  13946. POST_IO
  13947. RET(26)
  13948. }
  13949. // NEG
  13950. OPCODE(0x44B8)
  13951. {
  13952. u32 adr, res;
  13953. u32 src, dst;
  13954. FETCH_SWORD(adr);
  13955. PRE_IO
  13956. READ_LONG_F(adr, src)
  13957. res = -src;
  13958. flag_NotZ = res;
  13959. flag_V = (res & src) >> 24;
  13960. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  13961. flag_N = res >> 24;
  13962. WRITE_LONG_F(adr, res)
  13963. POST_IO
  13964. RET(24)
  13965. }
  13966. // NEG
  13967. OPCODE(0x44B9)
  13968. {
  13969. u32 adr, res;
  13970. u32 src, dst;
  13971. FETCH_LONG(adr);
  13972. PRE_IO
  13973. READ_LONG_F(adr, src)
  13974. res = -src;
  13975. flag_NotZ = res;
  13976. flag_V = (res & src) >> 24;
  13977. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  13978. flag_N = res >> 24;
  13979. WRITE_LONG_F(adr, res)
  13980. POST_IO
  13981. RET(28)
  13982. }
  13983. // NEG
  13984. OPCODE(0x449F)
  13985. {
  13986. u32 adr, res;
  13987. u32 src, dst;
  13988. adr = AREG(7);
  13989. AREG(7) += 4;
  13990. PRE_IO
  13991. READ_LONG_F(adr, src)
  13992. res = -src;
  13993. flag_NotZ = res;
  13994. flag_V = (res & src) >> 24;
  13995. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  13996. flag_N = res >> 24;
  13997. WRITE_LONG_F(adr, res)
  13998. POST_IO
  13999. RET(20)
  14000. }
  14001. // NEG
  14002. OPCODE(0x44A7)
  14003. {
  14004. u32 adr, res;
  14005. u32 src, dst;
  14006. adr = AREG(7) - 4;
  14007. AREG(7) = adr;
  14008. PRE_IO
  14009. READ_LONG_F(adr, src)
  14010. res = -src;
  14011. flag_NotZ = res;
  14012. flag_V = (res & src) >> 24;
  14013. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  14014. flag_N = res >> 24;
  14015. WRITE_LONG_F(adr, res)
  14016. POST_IO
  14017. RET(22)
  14018. }
  14019. // NOT
  14020. OPCODE(0x4600)
  14021. {
  14022. u32 adr, res;
  14023. u32 src, dst;
  14024. src = DREGu8((Opcode >> 0) & 7);
  14025. res = ~src;
  14026. flag_C = 0;
  14027. flag_V = 0;
  14028. flag_N = res;
  14029. flag_NotZ = res & 0xFF;
  14030. DREGu8((Opcode >> 0) & 7) = res;
  14031. RET(4)
  14032. }
  14033. // NOT
  14034. OPCODE(0x4610)
  14035. {
  14036. u32 adr, res;
  14037. u32 src, dst;
  14038. adr = AREG((Opcode >> 0) & 7);
  14039. PRE_IO
  14040. READ_BYTE_F(adr, src)
  14041. res = ~src;
  14042. flag_C = 0;
  14043. flag_V = 0;
  14044. flag_N = res;
  14045. flag_NotZ = res & 0xFF;
  14046. WRITE_BYTE_F(adr, res)
  14047. POST_IO
  14048. RET(12)
  14049. }
  14050. // NOT
  14051. OPCODE(0x4618)
  14052. {
  14053. u32 adr, res;
  14054. u32 src, dst;
  14055. adr = AREG((Opcode >> 0) & 7);
  14056. AREG((Opcode >> 0) & 7) += 1;
  14057. PRE_IO
  14058. READ_BYTE_F(adr, src)
  14059. res = ~src;
  14060. flag_C = 0;
  14061. flag_V = 0;
  14062. flag_N = res;
  14063. flag_NotZ = res & 0xFF;
  14064. WRITE_BYTE_F(adr, res)
  14065. POST_IO
  14066. RET(12)
  14067. }
  14068. // NOT
  14069. OPCODE(0x4620)
  14070. {
  14071. u32 adr, res;
  14072. u32 src, dst;
  14073. adr = AREG((Opcode >> 0) & 7) - 1;
  14074. AREG((Opcode >> 0) & 7) = adr;
  14075. PRE_IO
  14076. READ_BYTE_F(adr, src)
  14077. res = ~src;
  14078. flag_C = 0;
  14079. flag_V = 0;
  14080. flag_N = res;
  14081. flag_NotZ = res & 0xFF;
  14082. WRITE_BYTE_F(adr, res)
  14083. POST_IO
  14084. RET(14)
  14085. }
  14086. // NOT
  14087. OPCODE(0x4628)
  14088. {
  14089. u32 adr, res;
  14090. u32 src, dst;
  14091. FETCH_SWORD(adr);
  14092. adr += AREG((Opcode >> 0) & 7);
  14093. PRE_IO
  14094. READ_BYTE_F(adr, src)
  14095. res = ~src;
  14096. flag_C = 0;
  14097. flag_V = 0;
  14098. flag_N = res;
  14099. flag_NotZ = res & 0xFF;
  14100. WRITE_BYTE_F(adr, res)
  14101. POST_IO
  14102. RET(16)
  14103. }
  14104. // NOT
  14105. OPCODE(0x4630)
  14106. {
  14107. u32 adr, res;
  14108. u32 src, dst;
  14109. adr = AREG((Opcode >> 0) & 7);
  14110. DECODE_EXT_WORD
  14111. PRE_IO
  14112. READ_BYTE_F(adr, src)
  14113. res = ~src;
  14114. flag_C = 0;
  14115. flag_V = 0;
  14116. flag_N = res;
  14117. flag_NotZ = res & 0xFF;
  14118. WRITE_BYTE_F(adr, res)
  14119. POST_IO
  14120. RET(18)
  14121. }
  14122. // NOT
  14123. OPCODE(0x4638)
  14124. {
  14125. u32 adr, res;
  14126. u32 src, dst;
  14127. FETCH_SWORD(adr);
  14128. PRE_IO
  14129. READ_BYTE_F(adr, src)
  14130. res = ~src;
  14131. flag_C = 0;
  14132. flag_V = 0;
  14133. flag_N = res;
  14134. flag_NotZ = res & 0xFF;
  14135. WRITE_BYTE_F(adr, res)
  14136. POST_IO
  14137. RET(16)
  14138. }
  14139. // NOT
  14140. OPCODE(0x4639)
  14141. {
  14142. u32 adr, res;
  14143. u32 src, dst;
  14144. FETCH_LONG(adr);
  14145. PRE_IO
  14146. READ_BYTE_F(adr, src)
  14147. res = ~src;
  14148. flag_C = 0;
  14149. flag_V = 0;
  14150. flag_N = res;
  14151. flag_NotZ = res & 0xFF;
  14152. WRITE_BYTE_F(adr, res)
  14153. POST_IO
  14154. RET(20)
  14155. }
  14156. // NOT
  14157. OPCODE(0x461F)
  14158. {
  14159. u32 adr, res;
  14160. u32 src, dst;
  14161. adr = AREG(7);
  14162. AREG(7) += 2;
  14163. PRE_IO
  14164. READ_BYTE_F(adr, src)
  14165. res = ~src;
  14166. flag_C = 0;
  14167. flag_V = 0;
  14168. flag_N = res;
  14169. flag_NotZ = res & 0xFF;
  14170. WRITE_BYTE_F(adr, res)
  14171. POST_IO
  14172. RET(12)
  14173. }
  14174. // NOT
  14175. OPCODE(0x4627)
  14176. {
  14177. u32 adr, res;
  14178. u32 src, dst;
  14179. adr = AREG(7) - 2;
  14180. AREG(7) = adr;
  14181. PRE_IO
  14182. READ_BYTE_F(adr, src)
  14183. res = ~src;
  14184. flag_C = 0;
  14185. flag_V = 0;
  14186. flag_N = res;
  14187. flag_NotZ = res & 0xFF;
  14188. WRITE_BYTE_F(adr, res)
  14189. POST_IO
  14190. RET(14)
  14191. }
  14192. // NOT
  14193. OPCODE(0x4640)
  14194. {
  14195. u32 adr, res;
  14196. u32 src, dst;
  14197. src = DREGu16((Opcode >> 0) & 7);
  14198. res = ~src;
  14199. flag_C = 0;
  14200. flag_V = 0;
  14201. flag_NotZ = res & 0xFFFF;
  14202. flag_N = res >> 8;
  14203. DREGu16((Opcode >> 0) & 7) = res;
  14204. RET(4)
  14205. }
  14206. // NOT
  14207. OPCODE(0x4650)
  14208. {
  14209. u32 adr, res;
  14210. u32 src, dst;
  14211. adr = AREG((Opcode >> 0) & 7);
  14212. PRE_IO
  14213. READ_WORD_F(adr, src)
  14214. res = ~src;
  14215. flag_C = 0;
  14216. flag_V = 0;
  14217. flag_NotZ = res & 0xFFFF;
  14218. flag_N = res >> 8;
  14219. WRITE_WORD_F(adr, res)
  14220. POST_IO
  14221. RET(12)
  14222. }
  14223. // NOT
  14224. OPCODE(0x4658)
  14225. {
  14226. u32 adr, res;
  14227. u32 src, dst;
  14228. adr = AREG((Opcode >> 0) & 7);
  14229. AREG((Opcode >> 0) & 7) += 2;
  14230. PRE_IO
  14231. READ_WORD_F(adr, src)
  14232. res = ~src;
  14233. flag_C = 0;
  14234. flag_V = 0;
  14235. flag_NotZ = res & 0xFFFF;
  14236. flag_N = res >> 8;
  14237. WRITE_WORD_F(adr, res)
  14238. POST_IO
  14239. RET(12)
  14240. }
  14241. // NOT
  14242. OPCODE(0x4660)
  14243. {
  14244. u32 adr, res;
  14245. u32 src, dst;
  14246. adr = AREG((Opcode >> 0) & 7) - 2;
  14247. AREG((Opcode >> 0) & 7) = adr;
  14248. PRE_IO
  14249. READ_WORD_F(adr, src)
  14250. res = ~src;
  14251. flag_C = 0;
  14252. flag_V = 0;
  14253. flag_NotZ = res & 0xFFFF;
  14254. flag_N = res >> 8;
  14255. WRITE_WORD_F(adr, res)
  14256. POST_IO
  14257. RET(14)
  14258. }
  14259. // NOT
  14260. OPCODE(0x4668)
  14261. {
  14262. u32 adr, res;
  14263. u32 src, dst;
  14264. FETCH_SWORD(adr);
  14265. adr += AREG((Opcode >> 0) & 7);
  14266. PRE_IO
  14267. READ_WORD_F(adr, src)
  14268. res = ~src;
  14269. flag_C = 0;
  14270. flag_V = 0;
  14271. flag_NotZ = res & 0xFFFF;
  14272. flag_N = res >> 8;
  14273. WRITE_WORD_F(adr, res)
  14274. POST_IO
  14275. RET(16)
  14276. }
  14277. // NOT
  14278. OPCODE(0x4670)
  14279. {
  14280. u32 adr, res;
  14281. u32 src, dst;
  14282. adr = AREG((Opcode >> 0) & 7);
  14283. DECODE_EXT_WORD
  14284. PRE_IO
  14285. READ_WORD_F(adr, src)
  14286. res = ~src;
  14287. flag_C = 0;
  14288. flag_V = 0;
  14289. flag_NotZ = res & 0xFFFF;
  14290. flag_N = res >> 8;
  14291. WRITE_WORD_F(adr, res)
  14292. POST_IO
  14293. RET(18)
  14294. }
  14295. // NOT
  14296. OPCODE(0x4678)
  14297. {
  14298. u32 adr, res;
  14299. u32 src, dst;
  14300. FETCH_SWORD(adr);
  14301. PRE_IO
  14302. READ_WORD_F(adr, src)
  14303. res = ~src;
  14304. flag_C = 0;
  14305. flag_V = 0;
  14306. flag_NotZ = res & 0xFFFF;
  14307. flag_N = res >> 8;
  14308. WRITE_WORD_F(adr, res)
  14309. POST_IO
  14310. RET(16)
  14311. }
  14312. // NOT
  14313. OPCODE(0x4679)
  14314. {
  14315. u32 adr, res;
  14316. u32 src, dst;
  14317. FETCH_LONG(adr);
  14318. PRE_IO
  14319. READ_WORD_F(adr, src)
  14320. res = ~src;
  14321. flag_C = 0;
  14322. flag_V = 0;
  14323. flag_NotZ = res & 0xFFFF;
  14324. flag_N = res >> 8;
  14325. WRITE_WORD_F(adr, res)
  14326. POST_IO
  14327. RET(20)
  14328. }
  14329. // NOT
  14330. OPCODE(0x465F)
  14331. {
  14332. u32 adr, res;
  14333. u32 src, dst;
  14334. adr = AREG(7);
  14335. AREG(7) += 2;
  14336. PRE_IO
  14337. READ_WORD_F(adr, src)
  14338. res = ~src;
  14339. flag_C = 0;
  14340. flag_V = 0;
  14341. flag_NotZ = res & 0xFFFF;
  14342. flag_N = res >> 8;
  14343. WRITE_WORD_F(adr, res)
  14344. POST_IO
  14345. RET(12)
  14346. }
  14347. // NOT
  14348. OPCODE(0x4667)
  14349. {
  14350. u32 adr, res;
  14351. u32 src, dst;
  14352. adr = AREG(7) - 2;
  14353. AREG(7) = adr;
  14354. PRE_IO
  14355. READ_WORD_F(adr, src)
  14356. res = ~src;
  14357. flag_C = 0;
  14358. flag_V = 0;
  14359. flag_NotZ = res & 0xFFFF;
  14360. flag_N = res >> 8;
  14361. WRITE_WORD_F(adr, res)
  14362. POST_IO
  14363. RET(14)
  14364. }
  14365. // NOT
  14366. OPCODE(0x4680)
  14367. {
  14368. u32 adr, res;
  14369. u32 src, dst;
  14370. src = DREGu32((Opcode >> 0) & 7);
  14371. res = ~src;
  14372. flag_C = 0;
  14373. flag_V = 0;
  14374. flag_NotZ = res;
  14375. flag_N = res >> 24;
  14376. DREGu32((Opcode >> 0) & 7) = res;
  14377. RET(6)
  14378. }
  14379. // NOT
  14380. OPCODE(0x4690)
  14381. {
  14382. u32 adr, res;
  14383. u32 src, dst;
  14384. adr = AREG((Opcode >> 0) & 7);
  14385. PRE_IO
  14386. READ_LONG_F(adr, src)
  14387. res = ~src;
  14388. flag_C = 0;
  14389. flag_V = 0;
  14390. flag_NotZ = res;
  14391. flag_N = res >> 24;
  14392. WRITE_LONG_F(adr, res)
  14393. POST_IO
  14394. RET(20)
  14395. }
  14396. // NOT
  14397. OPCODE(0x4698)
  14398. {
  14399. u32 adr, res;
  14400. u32 src, dst;
  14401. adr = AREG((Opcode >> 0) & 7);
  14402. AREG((Opcode >> 0) & 7) += 4;
  14403. PRE_IO
  14404. READ_LONG_F(adr, src)
  14405. res = ~src;
  14406. flag_C = 0;
  14407. flag_V = 0;
  14408. flag_NotZ = res;
  14409. flag_N = res >> 24;
  14410. WRITE_LONG_F(adr, res)
  14411. POST_IO
  14412. RET(20)
  14413. }
  14414. // NOT
  14415. OPCODE(0x46A0)
  14416. {
  14417. u32 adr, res;
  14418. u32 src, dst;
  14419. adr = AREG((Opcode >> 0) & 7) - 4;
  14420. AREG((Opcode >> 0) & 7) = adr;
  14421. PRE_IO
  14422. READ_LONG_F(adr, src)
  14423. res = ~src;
  14424. flag_C = 0;
  14425. flag_V = 0;
  14426. flag_NotZ = res;
  14427. flag_N = res >> 24;
  14428. WRITE_LONG_F(adr, res)
  14429. POST_IO
  14430. RET(22)
  14431. }
  14432. // NOT
  14433. OPCODE(0x46A8)
  14434. {
  14435. u32 adr, res;
  14436. u32 src, dst;
  14437. FETCH_SWORD(adr);
  14438. adr += AREG((Opcode >> 0) & 7);
  14439. PRE_IO
  14440. READ_LONG_F(adr, src)
  14441. res = ~src;
  14442. flag_C = 0;
  14443. flag_V = 0;
  14444. flag_NotZ = res;
  14445. flag_N = res >> 24;
  14446. WRITE_LONG_F(adr, res)
  14447. POST_IO
  14448. RET(24)
  14449. }
  14450. // NOT
  14451. OPCODE(0x46B0)
  14452. {
  14453. u32 adr, res;
  14454. u32 src, dst;
  14455. adr = AREG((Opcode >> 0) & 7);
  14456. DECODE_EXT_WORD
  14457. PRE_IO
  14458. READ_LONG_F(adr, src)
  14459. res = ~src;
  14460. flag_C = 0;
  14461. flag_V = 0;
  14462. flag_NotZ = res;
  14463. flag_N = res >> 24;
  14464. WRITE_LONG_F(adr, res)
  14465. POST_IO
  14466. RET(26)
  14467. }
  14468. // NOT
  14469. OPCODE(0x46B8)
  14470. {
  14471. u32 adr, res;
  14472. u32 src, dst;
  14473. FETCH_SWORD(adr);
  14474. PRE_IO
  14475. READ_LONG_F(adr, src)
  14476. res = ~src;
  14477. flag_C = 0;
  14478. flag_V = 0;
  14479. flag_NotZ = res;
  14480. flag_N = res >> 24;
  14481. WRITE_LONG_F(adr, res)
  14482. POST_IO
  14483. RET(24)
  14484. }
  14485. // NOT
  14486. OPCODE(0x46B9)
  14487. {
  14488. u32 adr, res;
  14489. u32 src, dst;
  14490. FETCH_LONG(adr);
  14491. PRE_IO
  14492. READ_LONG_F(adr, src)
  14493. res = ~src;
  14494. flag_C = 0;
  14495. flag_V = 0;
  14496. flag_NotZ = res;
  14497. flag_N = res >> 24;
  14498. WRITE_LONG_F(adr, res)
  14499. POST_IO
  14500. RET(28)
  14501. }
  14502. // NOT
  14503. OPCODE(0x469F)
  14504. {
  14505. u32 adr, res;
  14506. u32 src, dst;
  14507. adr = AREG(7);
  14508. AREG(7) += 4;
  14509. PRE_IO
  14510. READ_LONG_F(adr, src)
  14511. res = ~src;
  14512. flag_C = 0;
  14513. flag_V = 0;
  14514. flag_NotZ = res;
  14515. flag_N = res >> 24;
  14516. WRITE_LONG_F(adr, res)
  14517. POST_IO
  14518. RET(20)
  14519. }
  14520. // NOT
  14521. OPCODE(0x46A7)
  14522. {
  14523. u32 adr, res;
  14524. u32 src, dst;
  14525. adr = AREG(7) - 4;
  14526. AREG(7) = adr;
  14527. PRE_IO
  14528. READ_LONG_F(adr, src)
  14529. res = ~src;
  14530. flag_C = 0;
  14531. flag_V = 0;
  14532. flag_NotZ = res;
  14533. flag_N = res >> 24;
  14534. WRITE_LONG_F(adr, res)
  14535. POST_IO
  14536. RET(22)
  14537. }
  14538. // MOVESRa
  14539. OPCODE(0x40C0)
  14540. {
  14541. u32 adr, res;
  14542. u32 src, dst;
  14543. res = GET_SR;
  14544. DREGu16((Opcode >> 0) & 7) = res;
  14545. RET(6)
  14546. }
  14547. // MOVESRa
  14548. OPCODE(0x40D0)
  14549. {
  14550. u32 adr, res;
  14551. u32 src, dst;
  14552. res = GET_SR;
  14553. adr = AREG((Opcode >> 0) & 7);
  14554. PRE_IO
  14555. WRITE_WORD_F(adr, res)
  14556. POST_IO
  14557. RET(12)
  14558. }
  14559. // MOVESRa
  14560. OPCODE(0x40D8)
  14561. {
  14562. u32 adr, res;
  14563. u32 src, dst;
  14564. res = GET_SR;
  14565. adr = AREG((Opcode >> 0) & 7);
  14566. AREG((Opcode >> 0) & 7) += 2;
  14567. PRE_IO
  14568. WRITE_WORD_F(adr, res)
  14569. POST_IO
  14570. RET(12)
  14571. }
  14572. // MOVESRa
  14573. OPCODE(0x40E0)
  14574. {
  14575. u32 adr, res;
  14576. u32 src, dst;
  14577. res = GET_SR;
  14578. adr = AREG((Opcode >> 0) & 7) - 2;
  14579. AREG((Opcode >> 0) & 7) = adr;
  14580. PRE_IO
  14581. WRITE_WORD_F(adr, res)
  14582. POST_IO
  14583. RET(14)
  14584. }
  14585. // MOVESRa
  14586. OPCODE(0x40E8)
  14587. {
  14588. u32 adr, res;
  14589. u32 src, dst;
  14590. res = GET_SR;
  14591. FETCH_SWORD(adr);
  14592. adr += AREG((Opcode >> 0) & 7);
  14593. PRE_IO
  14594. WRITE_WORD_F(adr, res)
  14595. POST_IO
  14596. RET(16)
  14597. }
  14598. // MOVESRa
  14599. OPCODE(0x40F0)
  14600. {
  14601. u32 adr, res;
  14602. u32 src, dst;
  14603. res = GET_SR;
  14604. adr = AREG((Opcode >> 0) & 7);
  14605. DECODE_EXT_WORD
  14606. PRE_IO
  14607. WRITE_WORD_F(adr, res)
  14608. POST_IO
  14609. RET(18)
  14610. }
  14611. // MOVESRa
  14612. OPCODE(0x40F8)
  14613. {
  14614. u32 adr, res;
  14615. u32 src, dst;
  14616. res = GET_SR;
  14617. FETCH_SWORD(adr);
  14618. PRE_IO
  14619. WRITE_WORD_F(adr, res)
  14620. POST_IO
  14621. RET(16)
  14622. }
  14623. // MOVESRa
  14624. OPCODE(0x40F9)
  14625. {
  14626. u32 adr, res;
  14627. u32 src, dst;
  14628. res = GET_SR;
  14629. FETCH_LONG(adr);
  14630. PRE_IO
  14631. WRITE_WORD_F(adr, res)
  14632. POST_IO
  14633. RET(20)
  14634. }
  14635. // MOVESRa
  14636. OPCODE(0x40DF)
  14637. {
  14638. u32 adr, res;
  14639. u32 src, dst;
  14640. res = GET_SR;
  14641. adr = AREG(7);
  14642. AREG(7) += 2;
  14643. PRE_IO
  14644. WRITE_WORD_F(adr, res)
  14645. POST_IO
  14646. RET(12)
  14647. }
  14648. // MOVESRa
  14649. OPCODE(0x40E7)
  14650. {
  14651. u32 adr, res;
  14652. u32 src, dst;
  14653. res = GET_SR;
  14654. adr = AREG(7) - 2;
  14655. AREG(7) = adr;
  14656. PRE_IO
  14657. WRITE_WORD_F(adr, res)
  14658. POST_IO
  14659. RET(14)
  14660. }
  14661. // MOVEaCCR
  14662. OPCODE(0x44C0)
  14663. {
  14664. u32 adr, res;
  14665. u32 src, dst;
  14666. res = DREGu16((Opcode >> 0) & 7);
  14667. SET_CCR(res)
  14668. RET(12)
  14669. }
  14670. // MOVEaCCR
  14671. OPCODE(0x44D0)
  14672. {
  14673. u32 adr, res;
  14674. u32 src, dst;
  14675. adr = AREG((Opcode >> 0) & 7);
  14676. PRE_IO
  14677. READ_WORD_F(adr, res)
  14678. SET_CCR(res)
  14679. POST_IO
  14680. RET(16)
  14681. }
  14682. // MOVEaCCR
  14683. OPCODE(0x44D8)
  14684. {
  14685. u32 adr, res;
  14686. u32 src, dst;
  14687. adr = AREG((Opcode >> 0) & 7);
  14688. AREG((Opcode >> 0) & 7) += 2;
  14689. PRE_IO
  14690. READ_WORD_F(adr, res)
  14691. SET_CCR(res)
  14692. POST_IO
  14693. RET(16)
  14694. }
  14695. // MOVEaCCR
  14696. OPCODE(0x44E0)
  14697. {
  14698. u32 adr, res;
  14699. u32 src, dst;
  14700. adr = AREG((Opcode >> 0) & 7) - 2;
  14701. AREG((Opcode >> 0) & 7) = adr;
  14702. PRE_IO
  14703. READ_WORD_F(adr, res)
  14704. SET_CCR(res)
  14705. POST_IO
  14706. RET(18)
  14707. }
  14708. // MOVEaCCR
  14709. OPCODE(0x44E8)
  14710. {
  14711. u32 adr, res;
  14712. u32 src, dst;
  14713. FETCH_SWORD(adr);
  14714. adr += AREG((Opcode >> 0) & 7);
  14715. PRE_IO
  14716. READ_WORD_F(adr, res)
  14717. SET_CCR(res)
  14718. POST_IO
  14719. RET(20)
  14720. }
  14721. // MOVEaCCR
  14722. OPCODE(0x44F0)
  14723. {
  14724. u32 adr, res;
  14725. u32 src, dst;
  14726. adr = AREG((Opcode >> 0) & 7);
  14727. DECODE_EXT_WORD
  14728. PRE_IO
  14729. READ_WORD_F(adr, res)
  14730. SET_CCR(res)
  14731. POST_IO
  14732. RET(22)
  14733. }
  14734. // MOVEaCCR
  14735. OPCODE(0x44F8)
  14736. {
  14737. u32 adr, res;
  14738. u32 src, dst;
  14739. FETCH_SWORD(adr);
  14740. PRE_IO
  14741. READ_WORD_F(adr, res)
  14742. SET_CCR(res)
  14743. POST_IO
  14744. RET(20)
  14745. }
  14746. // MOVEaCCR
  14747. OPCODE(0x44F9)
  14748. {
  14749. u32 adr, res;
  14750. u32 src, dst;
  14751. FETCH_LONG(adr);
  14752. PRE_IO
  14753. READ_WORD_F(adr, res)
  14754. SET_CCR(res)
  14755. POST_IO
  14756. RET(24)
  14757. }
  14758. // MOVEaCCR
  14759. OPCODE(0x44FA)
  14760. {
  14761. u32 adr, res;
  14762. u32 src, dst;
  14763. adr = GET_SWORD + GET_PC;
  14764. PC++;
  14765. PRE_IO
  14766. READ_WORD_F(adr, res)
  14767. SET_CCR(res)
  14768. POST_IO
  14769. RET(20)
  14770. }
  14771. // MOVEaCCR
  14772. OPCODE(0x44FB)
  14773. {
  14774. u32 adr, res;
  14775. u32 src, dst;
  14776. adr = GET_PC;
  14777. DECODE_EXT_WORD
  14778. PRE_IO
  14779. READ_WORD_F(adr, res)
  14780. SET_CCR(res)
  14781. POST_IO
  14782. RET(22)
  14783. }
  14784. // MOVEaCCR
  14785. OPCODE(0x44FC)
  14786. {
  14787. u32 adr, res;
  14788. u32 src, dst;
  14789. FETCH_WORD(res);
  14790. SET_CCR(res)
  14791. RET(16)
  14792. }
  14793. // MOVEaCCR
  14794. OPCODE(0x44DF)
  14795. {
  14796. u32 adr, res;
  14797. u32 src, dst;
  14798. adr = AREG(7);
  14799. AREG(7) += 2;
  14800. PRE_IO
  14801. READ_WORD_F(adr, res)
  14802. SET_CCR(res)
  14803. POST_IO
  14804. RET(16)
  14805. }
  14806. // MOVEaCCR
  14807. OPCODE(0x44E7)
  14808. {
  14809. u32 adr, res;
  14810. u32 src, dst;
  14811. adr = AREG(7) - 2;
  14812. AREG(7) = adr;
  14813. PRE_IO
  14814. READ_WORD_F(adr, res)
  14815. SET_CCR(res)
  14816. POST_IO
  14817. RET(18)
  14818. }
  14819. // MOVEaSR
  14820. OPCODE(0x46C0)
  14821. {
  14822. u32 adr, res;
  14823. u32 src, dst;
  14824. if (flag_S)
  14825. {
  14826. res = DREGu16((Opcode >> 0) & 7);
  14827. SET_SR(res)
  14828. if (!flag_S)
  14829. {
  14830. res = AREG(7);
  14831. AREG(7) = ASP;
  14832. ASP = res;
  14833. }
  14834. CHECK_INT_TO_JUMP(12)
  14835. }
  14836. else
  14837. {
  14838. SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
  14839. RET(4)
  14840. }
  14841. RET(12)
  14842. }
  14843. // MOVEaSR
  14844. OPCODE(0x46D0)
  14845. {
  14846. u32 adr, res;
  14847. u32 src, dst;
  14848. if (flag_S)
  14849. {
  14850. adr = AREG((Opcode >> 0) & 7);
  14851. PRE_IO
  14852. READ_WORD_F(adr, res)
  14853. SET_SR(res)
  14854. if (!flag_S)
  14855. {
  14856. res = AREG(7);
  14857. AREG(7) = ASP;
  14858. ASP = res;
  14859. }
  14860. POST_IO
  14861. CHECK_INT_TO_JUMP(16)
  14862. }
  14863. else
  14864. {
  14865. SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
  14866. RET(4)
  14867. }
  14868. RET(16)
  14869. }
  14870. // MOVEaSR
  14871. OPCODE(0x46D8)
  14872. {
  14873. u32 adr, res;
  14874. u32 src, dst;
  14875. if (flag_S)
  14876. {
  14877. adr = AREG((Opcode >> 0) & 7);
  14878. AREG((Opcode >> 0) & 7) += 2;
  14879. PRE_IO
  14880. READ_WORD_F(adr, res)
  14881. SET_SR(res)
  14882. if (!flag_S)
  14883. {
  14884. res = AREG(7);
  14885. AREG(7) = ASP;
  14886. ASP = res;
  14887. }
  14888. POST_IO
  14889. CHECK_INT_TO_JUMP(16)
  14890. }
  14891. else
  14892. {
  14893. SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
  14894. RET(4)
  14895. }
  14896. RET(16)
  14897. }
  14898. // MOVEaSR
  14899. OPCODE(0x46E0)
  14900. {
  14901. u32 adr, res;
  14902. u32 src, dst;
  14903. if (flag_S)
  14904. {
  14905. adr = AREG((Opcode >> 0) & 7) - 2;
  14906. AREG((Opcode >> 0) & 7) = adr;
  14907. PRE_IO
  14908. READ_WORD_F(adr, res)
  14909. SET_SR(res)
  14910. if (!flag_S)
  14911. {
  14912. res = AREG(7);
  14913. AREG(7) = ASP;
  14914. ASP = res;
  14915. }
  14916. POST_IO
  14917. CHECK_INT_TO_JUMP(18)
  14918. }
  14919. else
  14920. {
  14921. SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
  14922. RET(4)
  14923. }
  14924. RET(18)
  14925. }
  14926. // MOVEaSR
  14927. OPCODE(0x46E8)
  14928. {
  14929. u32 adr, res;
  14930. u32 src, dst;
  14931. if (flag_S)
  14932. {
  14933. FETCH_SWORD(adr);
  14934. adr += AREG((Opcode >> 0) & 7);
  14935. PRE_IO
  14936. READ_WORD_F(adr, res)
  14937. SET_SR(res)
  14938. if (!flag_S)
  14939. {
  14940. res = AREG(7);
  14941. AREG(7) = ASP;
  14942. ASP = res;
  14943. }
  14944. POST_IO
  14945. CHECK_INT_TO_JUMP(20)
  14946. }
  14947. else
  14948. {
  14949. SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
  14950. RET(4)
  14951. }
  14952. RET(20)
  14953. }
  14954. // MOVEaSR
  14955. OPCODE(0x46F0)
  14956. {
  14957. u32 adr, res;
  14958. u32 src, dst;
  14959. if (flag_S)
  14960. {
  14961. adr = AREG((Opcode >> 0) & 7);
  14962. DECODE_EXT_WORD
  14963. PRE_IO
  14964. READ_WORD_F(adr, res)
  14965. SET_SR(res)
  14966. if (!flag_S)
  14967. {
  14968. res = AREG(7);
  14969. AREG(7) = ASP;
  14970. ASP = res;
  14971. }
  14972. POST_IO
  14973. CHECK_INT_TO_JUMP(22)
  14974. }
  14975. else
  14976. {
  14977. SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
  14978. RET(4)
  14979. }
  14980. RET(22)
  14981. }
  14982. // MOVEaSR
  14983. OPCODE(0x46F8)
  14984. {
  14985. u32 adr, res;
  14986. u32 src, dst;
  14987. if (flag_S)
  14988. {
  14989. FETCH_SWORD(adr);
  14990. PRE_IO
  14991. READ_WORD_F(adr, res)
  14992. SET_SR(res)
  14993. if (!flag_S)
  14994. {
  14995. res = AREG(7);
  14996. AREG(7) = ASP;
  14997. ASP = res;
  14998. }
  14999. POST_IO
  15000. CHECK_INT_TO_JUMP(20)
  15001. }
  15002. else
  15003. {
  15004. SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
  15005. RET(4)
  15006. }
  15007. RET(20)
  15008. }
  15009. // MOVEaSR
  15010. OPCODE(0x46F9)
  15011. {
  15012. u32 adr, res;
  15013. u32 src, dst;
  15014. if (flag_S)
  15015. {
  15016. FETCH_LONG(adr);
  15017. PRE_IO
  15018. READ_WORD_F(adr, res)
  15019. SET_SR(res)
  15020. if (!flag_S)
  15021. {
  15022. res = AREG(7);
  15023. AREG(7) = ASP;
  15024. ASP = res;
  15025. }
  15026. POST_IO
  15027. CHECK_INT_TO_JUMP(24)
  15028. }
  15029. else
  15030. {
  15031. SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
  15032. RET(4)
  15033. }
  15034. RET(24)
  15035. }
  15036. // MOVEaSR
  15037. OPCODE(0x46FA)
  15038. {
  15039. u32 adr, res;
  15040. u32 src, dst;
  15041. if (flag_S)
  15042. {
  15043. adr = GET_SWORD + GET_PC;
  15044. PC++;
  15045. PRE_IO
  15046. READ_WORD_F(adr, res)
  15047. SET_SR(res)
  15048. if (!flag_S)
  15049. {
  15050. res = AREG(7);
  15051. AREG(7) = ASP;
  15052. ASP = res;
  15053. }
  15054. POST_IO
  15055. CHECK_INT_TO_JUMP(20)
  15056. }
  15057. else
  15058. {
  15059. SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
  15060. RET(4)
  15061. }
  15062. RET(20)
  15063. }
  15064. // MOVEaSR
  15065. OPCODE(0x46FB)
  15066. {
  15067. u32 adr, res;
  15068. u32 src, dst;
  15069. if (flag_S)
  15070. {
  15071. adr = GET_PC;
  15072. DECODE_EXT_WORD
  15073. PRE_IO
  15074. READ_WORD_F(adr, res)
  15075. SET_SR(res)
  15076. if (!flag_S)
  15077. {
  15078. res = AREG(7);
  15079. AREG(7) = ASP;
  15080. ASP = res;
  15081. }
  15082. POST_IO
  15083. CHECK_INT_TO_JUMP(22)
  15084. }
  15085. else
  15086. {
  15087. SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
  15088. RET(4)
  15089. }
  15090. RET(22)
  15091. }
  15092. // MOVEaSR
  15093. OPCODE(0x46FC)
  15094. {
  15095. u32 adr, res;
  15096. u32 src, dst;
  15097. if (flag_S)
  15098. {
  15099. FETCH_WORD(res);
  15100. SET_SR(res)
  15101. if (!flag_S)
  15102. {
  15103. res = AREG(7);
  15104. AREG(7) = ASP;
  15105. ASP = res;
  15106. }
  15107. CHECK_INT_TO_JUMP(16)
  15108. }
  15109. else
  15110. {
  15111. SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
  15112. RET(4)
  15113. }
  15114. RET(16)
  15115. }
  15116. // MOVEaSR
  15117. OPCODE(0x46DF)
  15118. {
  15119. u32 adr, res;
  15120. u32 src, dst;
  15121. if (flag_S)
  15122. {
  15123. adr = AREG(7);
  15124. AREG(7) += 2;
  15125. PRE_IO
  15126. READ_WORD_F(adr, res)
  15127. SET_SR(res)
  15128. if (!flag_S)
  15129. {
  15130. res = AREG(7);
  15131. AREG(7) = ASP;
  15132. ASP = res;
  15133. }
  15134. POST_IO
  15135. CHECK_INT_TO_JUMP(16)
  15136. }
  15137. else
  15138. {
  15139. SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
  15140. RET(4)
  15141. }
  15142. RET(16)
  15143. }
  15144. // MOVEaSR
  15145. OPCODE(0x46E7)
  15146. {
  15147. u32 adr, res;
  15148. u32 src, dst;
  15149. if (flag_S)
  15150. {
  15151. adr = AREG(7) - 2;
  15152. AREG(7) = adr;
  15153. PRE_IO
  15154. READ_WORD_F(adr, res)
  15155. SET_SR(res)
  15156. if (!flag_S)
  15157. {
  15158. res = AREG(7);
  15159. AREG(7) = ASP;
  15160. ASP = res;
  15161. }
  15162. POST_IO
  15163. CHECK_INT_TO_JUMP(18)
  15164. }
  15165. else
  15166. {
  15167. SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
  15168. RET(4)
  15169. }
  15170. RET(18)
  15171. }
  15172. // NBCD
  15173. OPCODE(0x4800)
  15174. {
  15175. u32 adr, res;
  15176. u32 src, dst;
  15177. dst = DREGu8((Opcode >> 0) & 7);
  15178. res = -dst - ((flag_X >> M68K_SR_X_SFT) & 1);
  15179. if (res != 0)
  15180. {
  15181. flag_V = res;
  15182. if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6;
  15183. res = (res + 0x9a) & 0xFF;
  15184. DREGu8((Opcode >> 0) & 7) = res;
  15185. flag_V &= ~res;
  15186. flag_NotZ |= res;
  15187. flag_X = flag_C = M68K_SR_C;
  15188. }
  15189. else flag_V = flag_X = flag_C = 0;
  15190. flag_N = res;
  15191. RET(6)
  15192. }
  15193. // NBCD
  15194. OPCODE(0x4810)
  15195. {
  15196. u32 adr, res;
  15197. u32 src, dst;
  15198. adr = AREG((Opcode >> 0) & 7);
  15199. PRE_IO
  15200. READ_BYTE_F(adr, dst)
  15201. res = -dst - ((flag_X >> M68K_SR_X_SFT) & 1);
  15202. if (res != 0)
  15203. {
  15204. flag_V = res;
  15205. if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6;
  15206. res = (res + 0x9a) & 0xFF;
  15207. WRITE_BYTE_F(adr, res)
  15208. flag_V &= ~res;
  15209. flag_NotZ |= res;
  15210. flag_X = flag_C = M68K_SR_C;
  15211. }
  15212. else flag_V = flag_X = flag_C = 0;
  15213. flag_N = res;
  15214. POST_IO
  15215. RET(12)
  15216. }
  15217. // NBCD
  15218. OPCODE(0x4818)
  15219. {
  15220. u32 adr, res;
  15221. u32 src, dst;
  15222. adr = AREG((Opcode >> 0) & 7);
  15223. AREG((Opcode >> 0) & 7) += 1;
  15224. PRE_IO
  15225. READ_BYTE_F(adr, dst)
  15226. res = -dst - ((flag_X >> M68K_SR_X_SFT) & 1);
  15227. if (res != 0)
  15228. {
  15229. flag_V = res;
  15230. if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6;
  15231. res = (res + 0x9a) & 0xFF;
  15232. WRITE_BYTE_F(adr, res)
  15233. flag_V &= ~res;
  15234. flag_NotZ |= res;
  15235. flag_X = flag_C = M68K_SR_C;
  15236. }
  15237. else flag_V = flag_X = flag_C = 0;
  15238. flag_N = res;
  15239. POST_IO
  15240. RET(12)
  15241. }
  15242. // NBCD
  15243. OPCODE(0x4820)
  15244. {
  15245. u32 adr, res;
  15246. u32 src, dst;
  15247. adr = AREG((Opcode >> 0) & 7) - 1;
  15248. AREG((Opcode >> 0) & 7) = adr;
  15249. PRE_IO
  15250. READ_BYTE_F(adr, dst)
  15251. res = -dst - ((flag_X >> M68K_SR_X_SFT) & 1);
  15252. if (res != 0)
  15253. {
  15254. flag_V = res;
  15255. if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6;
  15256. res = (res + 0x9a) & 0xFF;
  15257. WRITE_BYTE_F(adr, res)
  15258. flag_V &= ~res;
  15259. flag_NotZ |= res;
  15260. flag_X = flag_C = M68K_SR_C;
  15261. }
  15262. else flag_V = flag_X = flag_C = 0;
  15263. flag_N = res;
  15264. POST_IO
  15265. RET(14)
  15266. }
  15267. // NBCD
  15268. OPCODE(0x4828)
  15269. {
  15270. u32 adr, res;
  15271. u32 src, dst;
  15272. FETCH_SWORD(adr);
  15273. adr += AREG((Opcode >> 0) & 7);
  15274. PRE_IO
  15275. READ_BYTE_F(adr, dst)
  15276. res = -dst - ((flag_X >> M68K_SR_X_SFT) & 1);
  15277. if (res != 0)
  15278. {
  15279. flag_V = res;
  15280. if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6;
  15281. res = (res + 0x9a) & 0xFF;
  15282. WRITE_BYTE_F(adr, res)
  15283. flag_V &= ~res;
  15284. flag_NotZ |= res;
  15285. flag_X = flag_C = M68K_SR_C;
  15286. }
  15287. else flag_V = flag_X = flag_C = 0;
  15288. flag_N = res;
  15289. POST_IO
  15290. RET(16)
  15291. }
  15292. // NBCD
  15293. OPCODE(0x4830)
  15294. {
  15295. u32 adr, res;
  15296. u32 src, dst;
  15297. adr = AREG((Opcode >> 0) & 7);
  15298. DECODE_EXT_WORD
  15299. PRE_IO
  15300. READ_BYTE_F(adr, dst)
  15301. res = -dst - ((flag_X >> M68K_SR_X_SFT) & 1);
  15302. if (res != 0)
  15303. {
  15304. flag_V = res;
  15305. if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6;
  15306. res = (res + 0x9a) & 0xFF;
  15307. WRITE_BYTE_F(adr, res)
  15308. flag_V &= ~res;
  15309. flag_NotZ |= res;
  15310. flag_X = flag_C = M68K_SR_C;
  15311. }
  15312. else flag_V = flag_X = flag_C = 0;
  15313. flag_N = res;
  15314. POST_IO
  15315. RET(18)
  15316. }
  15317. // NBCD
  15318. OPCODE(0x4838)
  15319. {
  15320. u32 adr, res;
  15321. u32 src, dst;
  15322. FETCH_SWORD(adr);
  15323. PRE_IO
  15324. READ_BYTE_F(adr, dst)
  15325. res = -dst - ((flag_X >> M68K_SR_X_SFT) & 1);
  15326. if (res != 0)
  15327. {
  15328. flag_V = res;
  15329. if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6;
  15330. res = (res + 0x9a) & 0xFF;
  15331. WRITE_BYTE_F(adr, res)
  15332. flag_V &= ~res;
  15333. flag_NotZ |= res;
  15334. flag_X = flag_C = M68K_SR_C;
  15335. }
  15336. else flag_V = flag_X = flag_C = 0;
  15337. flag_N = res;
  15338. POST_IO
  15339. RET(16)
  15340. }
  15341. // NBCD
  15342. OPCODE(0x4839)
  15343. {
  15344. u32 adr, res;
  15345. u32 src, dst;
  15346. FETCH_LONG(adr);
  15347. PRE_IO
  15348. READ_BYTE_F(adr, dst)
  15349. res = -dst - ((flag_X >> M68K_SR_X_SFT) & 1);
  15350. if (res != 0)
  15351. {
  15352. flag_V = res;
  15353. if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6;
  15354. res = (res + 0x9a) & 0xFF;
  15355. WRITE_BYTE_F(adr, res)
  15356. flag_V &= ~res;
  15357. flag_NotZ |= res;
  15358. flag_X = flag_C = M68K_SR_C;
  15359. }
  15360. else flag_V = flag_X = flag_C = 0;
  15361. flag_N = res;
  15362. POST_IO
  15363. RET(20)
  15364. }
  15365. // NBCD
  15366. OPCODE(0x481F)
  15367. {
  15368. u32 adr, res;
  15369. u32 src, dst;
  15370. adr = AREG(7);
  15371. AREG(7) += 2;
  15372. PRE_IO
  15373. READ_BYTE_F(adr, dst)
  15374. res = -dst - ((flag_X >> M68K_SR_X_SFT) & 1);
  15375. if (res != 0)
  15376. {
  15377. flag_V = res;
  15378. if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6;
  15379. res = (res + 0x9a) & 0xFF;
  15380. WRITE_BYTE_F(adr, res)
  15381. flag_V &= ~res;
  15382. flag_NotZ |= res;
  15383. flag_X = flag_C = M68K_SR_C;
  15384. }
  15385. else flag_V = flag_X = flag_C = 0;
  15386. flag_N = res;
  15387. POST_IO
  15388. RET(12)
  15389. }
  15390. // NBCD
  15391. OPCODE(0x4827)
  15392. {
  15393. u32 adr, res;
  15394. u32 src, dst;
  15395. adr = AREG(7) - 2;
  15396. AREG(7) = adr;
  15397. PRE_IO
  15398. READ_BYTE_F(adr, dst)
  15399. res = -dst - ((flag_X >> M68K_SR_X_SFT) & 1);
  15400. if (res != 0)
  15401. {
  15402. flag_V = res;
  15403. if (((res|dst) & 0x0f) == 0) res = (res & 0xf0) + 6;
  15404. res = (res + 0x9a) & 0xFF;
  15405. WRITE_BYTE_F(adr, res)
  15406. flag_V &= ~res;
  15407. flag_NotZ |= res;
  15408. flag_X = flag_C = M68K_SR_C;
  15409. }
  15410. else flag_V = flag_X = flag_C = 0;
  15411. flag_N = res;
  15412. POST_IO
  15413. RET(14)
  15414. }
  15415. // PEA
  15416. OPCODE(0x4850)
  15417. {
  15418. u32 adr, res;
  15419. u32 src, dst;
  15420. adr = AREG((Opcode >> 0) & 7);
  15421. PRE_IO
  15422. PUSH_32_F(adr)
  15423. POST_IO
  15424. RET(12)
  15425. }
  15426. // PEA
  15427. OPCODE(0x4868)
  15428. {
  15429. u32 adr, res;
  15430. u32 src, dst;
  15431. FETCH_SWORD(adr);
  15432. adr += AREG((Opcode >> 0) & 7);
  15433. PRE_IO
  15434. PUSH_32_F(adr)
  15435. POST_IO
  15436. RET(16)
  15437. }
  15438. // PEA
  15439. OPCODE(0x4870)
  15440. {
  15441. u32 adr, res;
  15442. u32 src, dst;
  15443. adr = AREG((Opcode >> 0) & 7);
  15444. DECODE_EXT_WORD
  15445. PRE_IO
  15446. PUSH_32_F(adr)
  15447. POST_IO
  15448. RET(20)
  15449. }
  15450. // PEA
  15451. OPCODE(0x4878)
  15452. {
  15453. u32 adr, res;
  15454. u32 src, dst;
  15455. FETCH_SWORD(adr);
  15456. PRE_IO
  15457. PUSH_32_F(adr)
  15458. POST_IO
  15459. RET(16)
  15460. }
  15461. // PEA
  15462. OPCODE(0x4879)
  15463. {
  15464. u32 adr, res;
  15465. u32 src, dst;
  15466. FETCH_LONG(adr);
  15467. PRE_IO
  15468. PUSH_32_F(adr)
  15469. POST_IO
  15470. RET(20)
  15471. }
  15472. // PEA
  15473. OPCODE(0x487A)
  15474. {
  15475. u32 adr, res;
  15476. u32 src, dst;
  15477. adr = GET_SWORD + GET_PC;
  15478. PC++;
  15479. PRE_IO
  15480. PUSH_32_F(adr)
  15481. POST_IO
  15482. RET(16)
  15483. }
  15484. // PEA
  15485. OPCODE(0x487B)
  15486. {
  15487. u32 adr, res;
  15488. u32 src, dst;
  15489. adr = GET_PC;
  15490. DECODE_EXT_WORD
  15491. PRE_IO
  15492. PUSH_32_F(adr)
  15493. POST_IO
  15494. RET(20)
  15495. }
  15496. // SWAP
  15497. OPCODE(0x4840)
  15498. {
  15499. u32 adr, res;
  15500. u32 src, dst;
  15501. res = DREGu32((Opcode >> 0) & 7);
  15502. res = (res >> 16) | (res << 16);
  15503. flag_C = 0;
  15504. flag_V = 0;
  15505. flag_NotZ = res;
  15506. flag_N = res >> 24;
  15507. DREGu32((Opcode >> 0) & 7) = res;
  15508. RET(4)
  15509. }
  15510. // MOVEMRa
  15511. OPCODE(0x4890)
  15512. {
  15513. u32 adr, res;
  15514. u32 src, dst;
  15515. u32 *psrc;
  15516. FETCH_WORD(res);
  15517. adr = AREG((Opcode >> 0) & 7);
  15518. psrc = &DREGu32(0);
  15519. dst = adr;
  15520. PRE_IO
  15521. do
  15522. {
  15523. if (res & 1)
  15524. {
  15525. WRITE_WORD_F(adr, *psrc)
  15526. adr += 2;
  15527. }
  15528. psrc++;
  15529. } while (res >>= 1);
  15530. POST_IO
  15531. ctx->io_cycle_counter -= (adr - dst) * 2;
  15532. #ifdef USE_CYCLONE_TIMING
  15533. RET(8)
  15534. #else
  15535. RET(12)
  15536. #endif
  15537. }
  15538. // MOVEMRa
  15539. OPCODE(0x48A0)
  15540. {
  15541. u32 adr, res;
  15542. u32 src, dst;
  15543. u32 *psrc;
  15544. FETCH_WORD(res);
  15545. adr = AREG((Opcode >> 0) & 7);
  15546. psrc = &AREGu32(7);
  15547. dst = adr;
  15548. PRE_IO
  15549. do
  15550. {
  15551. if (res & 1)
  15552. {
  15553. adr -= 2;
  15554. WRITE_WORD_F(adr, *psrc)
  15555. }
  15556. psrc--;
  15557. } while (res >>= 1);
  15558. AREG((Opcode >> 0) & 7) = adr;
  15559. POST_IO
  15560. ctx->io_cycle_counter -= (dst - adr) * 2;
  15561. RET(8)
  15562. }
  15563. // MOVEMRa
  15564. OPCODE(0x48A8)
  15565. {
  15566. u32 adr, res;
  15567. u32 src, dst;
  15568. u32 *psrc;
  15569. FETCH_WORD(res);
  15570. FETCH_SWORD(adr);
  15571. adr += AREG((Opcode >> 0) & 7);
  15572. psrc = &DREGu32(0);
  15573. dst = adr;
  15574. PRE_IO
  15575. do
  15576. {
  15577. if (res & 1)
  15578. {
  15579. WRITE_WORD_F(adr, *psrc)
  15580. adr += 2;
  15581. }
  15582. psrc++;
  15583. } while (res >>= 1);
  15584. POST_IO
  15585. ctx->io_cycle_counter -= (adr - dst) * 2;
  15586. #ifdef USE_CYCLONE_TIMING
  15587. RET(12)
  15588. #else
  15589. RET(20)
  15590. #endif
  15591. }
  15592. // MOVEMRa
  15593. OPCODE(0x48B0)
  15594. {
  15595. u32 adr, res;
  15596. u32 src, dst;
  15597. u32 *psrc;
  15598. FETCH_WORD(res);
  15599. adr = AREG((Opcode >> 0) & 7);
  15600. DECODE_EXT_WORD
  15601. psrc = &DREGu32(0);
  15602. dst = adr;
  15603. PRE_IO
  15604. do
  15605. {
  15606. if (res & 1)
  15607. {
  15608. WRITE_WORD_F(adr, *psrc)
  15609. adr += 2;
  15610. }
  15611. psrc++;
  15612. } while (res >>= 1);
  15613. POST_IO
  15614. ctx->io_cycle_counter -= (adr - dst) * 2;
  15615. #ifdef USE_CYCLONE_TIMING
  15616. RET(14)
  15617. #else
  15618. RET(24)
  15619. #endif
  15620. }
  15621. // MOVEMRa
  15622. OPCODE(0x48B8)
  15623. {
  15624. u32 adr, res;
  15625. u32 src, dst;
  15626. u32 *psrc;
  15627. FETCH_WORD(res);
  15628. FETCH_SWORD(adr);
  15629. psrc = &DREGu32(0);
  15630. dst = adr;
  15631. PRE_IO
  15632. do
  15633. {
  15634. if (res & 1)
  15635. {
  15636. WRITE_WORD_F(adr, *psrc)
  15637. adr += 2;
  15638. }
  15639. psrc++;
  15640. } while (res >>= 1);
  15641. POST_IO
  15642. ctx->io_cycle_counter -= (adr - dst) * 2;
  15643. #ifdef USE_CYCLONE_TIMING
  15644. RET(12)
  15645. #else
  15646. RET(20)
  15647. #endif
  15648. }
  15649. // MOVEMRa
  15650. OPCODE(0x48B9)
  15651. {
  15652. u32 adr, res;
  15653. u32 src, dst;
  15654. u32 *psrc;
  15655. FETCH_WORD(res);
  15656. FETCH_LONG(adr);
  15657. psrc = &DREGu32(0);
  15658. dst = adr;
  15659. PRE_IO
  15660. do
  15661. {
  15662. if (res & 1)
  15663. {
  15664. WRITE_WORD_F(adr, *psrc)
  15665. adr += 2;
  15666. }
  15667. psrc++;
  15668. } while (res >>= 1);
  15669. POST_IO
  15670. ctx->io_cycle_counter -= (adr - dst) * 2;
  15671. #ifdef USE_CYCLONE_TIMING
  15672. RET(16)
  15673. #else
  15674. RET(28)
  15675. #endif
  15676. }
  15677. // MOVEMRa
  15678. OPCODE(0x48A7)
  15679. {
  15680. u32 adr, res;
  15681. u32 src, dst;
  15682. u32 *psrc;
  15683. FETCH_WORD(res);
  15684. adr = AREG(7);
  15685. psrc = &AREGu32(7);
  15686. dst = adr;
  15687. PRE_IO
  15688. do
  15689. {
  15690. if (res & 1)
  15691. {
  15692. adr -= 2;
  15693. WRITE_WORD_F(adr, *psrc)
  15694. }
  15695. psrc--;
  15696. } while (res >>= 1);
  15697. AREG(7) = adr;
  15698. POST_IO
  15699. ctx->io_cycle_counter -= (dst - adr) * 2;
  15700. RET(8)
  15701. }
  15702. // MOVEMRa
  15703. OPCODE(0x48D0)
  15704. {
  15705. u32 adr, res;
  15706. u32 src, dst;
  15707. u32 *psrc;
  15708. FETCH_WORD(res);
  15709. adr = AREG((Opcode >> 0) & 7);
  15710. psrc = &DREGu32(0);
  15711. dst = adr;
  15712. PRE_IO
  15713. do
  15714. {
  15715. if (res & 1)
  15716. {
  15717. WRITE_LONG_F(adr, *psrc)
  15718. adr += 4;
  15719. }
  15720. psrc++;
  15721. } while (res >>= 1);
  15722. POST_IO
  15723. ctx->io_cycle_counter -= (adr - dst) * 2;
  15724. #ifdef USE_CYCLONE_TIMING
  15725. RET(8)
  15726. #else
  15727. RET(16)
  15728. #endif
  15729. }
  15730. // MOVEMRa
  15731. OPCODE(0x48E0)
  15732. {
  15733. u32 adr, res;
  15734. u32 src, dst;
  15735. u32 *psrc;
  15736. FETCH_WORD(res);
  15737. adr = AREG((Opcode >> 0) & 7);
  15738. psrc = &AREGu32(7);
  15739. dst = adr;
  15740. PRE_IO
  15741. do
  15742. {
  15743. if (res & 1)
  15744. {
  15745. adr -= 4;
  15746. WRITE_LONG_DEC_F(adr, *psrc)
  15747. }
  15748. psrc--;
  15749. } while (res >>= 1);
  15750. AREG((Opcode >> 0) & 7) = adr;
  15751. POST_IO
  15752. ctx->io_cycle_counter -= (dst - adr) * 2;
  15753. RET(8)
  15754. }
  15755. // MOVEMRa
  15756. OPCODE(0x48E8)
  15757. {
  15758. u32 adr, res;
  15759. u32 src, dst;
  15760. u32 *psrc;
  15761. FETCH_WORD(res);
  15762. FETCH_SWORD(adr);
  15763. adr += AREG((Opcode >> 0) & 7);
  15764. psrc = &DREGu32(0);
  15765. dst = adr;
  15766. PRE_IO
  15767. do
  15768. {
  15769. if (res & 1)
  15770. {
  15771. WRITE_LONG_F(adr, *psrc)
  15772. adr += 4;
  15773. }
  15774. psrc++;
  15775. } while (res >>= 1);
  15776. POST_IO
  15777. ctx->io_cycle_counter -= (adr - dst) * 2;
  15778. #ifdef USE_CYCLONE_TIMING
  15779. RET(12)
  15780. #else
  15781. RET(24)
  15782. #endif
  15783. }
  15784. // MOVEMRa
  15785. OPCODE(0x48F0)
  15786. {
  15787. u32 adr, res;
  15788. u32 src, dst;
  15789. u32 *psrc;
  15790. FETCH_WORD(res);
  15791. adr = AREG((Opcode >> 0) & 7);
  15792. DECODE_EXT_WORD
  15793. psrc = &DREGu32(0);
  15794. dst = adr;
  15795. PRE_IO
  15796. do
  15797. {
  15798. if (res & 1)
  15799. {
  15800. WRITE_LONG_F(adr, *psrc)
  15801. adr += 4;
  15802. }
  15803. psrc++;
  15804. } while (res >>= 1);
  15805. POST_IO
  15806. ctx->io_cycle_counter -= (adr - dst) * 2;
  15807. #ifdef USE_CYCLONE_TIMING
  15808. RET(14)
  15809. #else
  15810. RET(28)
  15811. #endif
  15812. }
  15813. // MOVEMRa
  15814. OPCODE(0x48F8)
  15815. {
  15816. u32 adr, res;
  15817. u32 src, dst;
  15818. u32 *psrc;
  15819. FETCH_WORD(res);
  15820. FETCH_SWORD(adr);
  15821. psrc = &DREGu32(0);
  15822. dst = adr;
  15823. PRE_IO
  15824. do
  15825. {
  15826. if (res & 1)
  15827. {
  15828. WRITE_LONG_F(adr, *psrc)
  15829. adr += 4;
  15830. }
  15831. psrc++;
  15832. } while (res >>= 1);
  15833. POST_IO
  15834. ctx->io_cycle_counter -= (adr - dst) * 2;
  15835. #ifdef USE_CYCLONE_TIMING
  15836. RET(12)
  15837. #else
  15838. RET(24)
  15839. #endif
  15840. }
  15841. // MOVEMRa
  15842. OPCODE(0x48F9)
  15843. {
  15844. u32 adr, res;
  15845. u32 src, dst;
  15846. u32 *psrc;
  15847. FETCH_WORD(res);
  15848. FETCH_LONG(adr);
  15849. psrc = &DREGu32(0);
  15850. dst = adr;
  15851. PRE_IO
  15852. do
  15853. {
  15854. if (res & 1)
  15855. {
  15856. WRITE_LONG_F(adr, *psrc)
  15857. adr += 4;
  15858. }
  15859. psrc++;
  15860. } while (res >>= 1);
  15861. POST_IO
  15862. ctx->io_cycle_counter -= (adr - dst) * 2;
  15863. #ifdef USE_CYCLONE_TIMING
  15864. RET(16)
  15865. #else
  15866. RET(32)
  15867. #endif
  15868. }
  15869. // MOVEMRa
  15870. OPCODE(0x48E7)
  15871. {
  15872. u32 adr, res;
  15873. u32 src, dst;
  15874. u32 *psrc;
  15875. FETCH_WORD(res);
  15876. adr = AREG(7);
  15877. psrc = &AREGu32(7);
  15878. dst = adr;
  15879. PRE_IO
  15880. do
  15881. {
  15882. if (res & 1)
  15883. {
  15884. adr -= 4;
  15885. WRITE_LONG_DEC_F(adr, *psrc)
  15886. }
  15887. psrc--;
  15888. } while (res >>= 1);
  15889. AREG(7) = adr;
  15890. POST_IO
  15891. ctx->io_cycle_counter -= (dst - adr) * 2;
  15892. RET(8)
  15893. }
  15894. // EXT
  15895. OPCODE(0x4880)
  15896. {
  15897. u32 adr, res;
  15898. u32 src, dst;
  15899. res = (s32)DREGs8((Opcode >> 0) & 7);
  15900. flag_C = 0;
  15901. flag_V = 0;
  15902. flag_NotZ = res;
  15903. flag_N = res;
  15904. DREGu16((Opcode >> 0) & 7) = res;
  15905. RET(4)
  15906. }
  15907. // EXT
  15908. OPCODE(0x48C0)
  15909. {
  15910. u32 adr, res;
  15911. u32 src, dst;
  15912. res = (s32)DREGs16((Opcode >> 0) & 7);
  15913. flag_C = 0;
  15914. flag_V = 0;
  15915. flag_NotZ = res;
  15916. flag_N = res >> 8;
  15917. DREGu32((Opcode >> 0) & 7) = res;
  15918. RET(4)
  15919. }
  15920. // TST
  15921. OPCODE(0x4A00)
  15922. {
  15923. u32 adr, res;
  15924. u32 src, dst;
  15925. res = DREGu8((Opcode >> 0) & 7);
  15926. flag_C = 0;
  15927. flag_V = 0;
  15928. flag_NotZ = res;
  15929. flag_N = res;
  15930. RET(4)
  15931. }
  15932. // TST
  15933. OPCODE(0x4A10)
  15934. {
  15935. u32 adr, res;
  15936. u32 src, dst;
  15937. adr = AREG((Opcode >> 0) & 7);
  15938. PRE_IO
  15939. READ_BYTE_F(adr, res)
  15940. flag_C = 0;
  15941. flag_V = 0;
  15942. flag_NotZ = res;
  15943. flag_N = res;
  15944. POST_IO
  15945. RET(8)
  15946. }
  15947. // TST
  15948. OPCODE(0x4A18)
  15949. {
  15950. u32 adr, res;
  15951. u32 src, dst;
  15952. adr = AREG((Opcode >> 0) & 7);
  15953. AREG((Opcode >> 0) & 7) += 1;
  15954. PRE_IO
  15955. READ_BYTE_F(adr, res)
  15956. flag_C = 0;
  15957. flag_V = 0;
  15958. flag_NotZ = res;
  15959. flag_N = res;
  15960. POST_IO
  15961. RET(8)
  15962. }
  15963. // TST
  15964. OPCODE(0x4A20)
  15965. {
  15966. u32 adr, res;
  15967. u32 src, dst;
  15968. adr = AREG((Opcode >> 0) & 7) - 1;
  15969. AREG((Opcode >> 0) & 7) = adr;
  15970. PRE_IO
  15971. READ_BYTE_F(adr, res)
  15972. flag_C = 0;
  15973. flag_V = 0;
  15974. flag_NotZ = res;
  15975. flag_N = res;
  15976. POST_IO
  15977. RET(10)
  15978. }
  15979. // TST
  15980. OPCODE(0x4A28)
  15981. {
  15982. u32 adr, res;
  15983. u32 src, dst;
  15984. FETCH_SWORD(adr);
  15985. adr += AREG((Opcode >> 0) & 7);
  15986. PRE_IO
  15987. READ_BYTE_F(adr, res)
  15988. flag_C = 0;
  15989. flag_V = 0;
  15990. flag_NotZ = res;
  15991. flag_N = res;
  15992. POST_IO
  15993. RET(12)
  15994. }
  15995. // TST
  15996. OPCODE(0x4A30)
  15997. {
  15998. u32 adr, res;
  15999. u32 src, dst;
  16000. adr = AREG((Opcode >> 0) & 7);
  16001. DECODE_EXT_WORD
  16002. PRE_IO
  16003. READ_BYTE_F(adr, res)
  16004. flag_C = 0;
  16005. flag_V = 0;
  16006. flag_NotZ = res;
  16007. flag_N = res;
  16008. POST_IO
  16009. RET(14)
  16010. }
  16011. // TST
  16012. OPCODE(0x4A38)
  16013. {
  16014. u32 adr, res;
  16015. u32 src, dst;
  16016. FETCH_SWORD(adr);
  16017. PRE_IO
  16018. READ_BYTE_F(adr, res)
  16019. flag_C = 0;
  16020. flag_V = 0;
  16021. flag_NotZ = res;
  16022. flag_N = res;
  16023. POST_IO
  16024. RET(12)
  16025. }
  16026. // TST
  16027. OPCODE(0x4A39)
  16028. {
  16029. u32 adr, res;
  16030. u32 src, dst;
  16031. FETCH_LONG(adr);
  16032. PRE_IO
  16033. READ_BYTE_F(adr, res)
  16034. flag_C = 0;
  16035. flag_V = 0;
  16036. flag_NotZ = res;
  16037. flag_N = res;
  16038. POST_IO
  16039. RET(16)
  16040. }
  16041. // TST
  16042. OPCODE(0x4A1F)
  16043. {
  16044. u32 adr, res;
  16045. u32 src, dst;
  16046. adr = AREG(7);
  16047. AREG(7) += 2;
  16048. PRE_IO
  16049. READ_BYTE_F(adr, res)
  16050. flag_C = 0;
  16051. flag_V = 0;
  16052. flag_NotZ = res;
  16053. flag_N = res;
  16054. POST_IO
  16055. RET(8)
  16056. }
  16057. // TST
  16058. OPCODE(0x4A27)
  16059. {
  16060. u32 adr, res;
  16061. u32 src, dst;
  16062. adr = AREG(7) - 2;
  16063. AREG(7) = adr;
  16064. PRE_IO
  16065. READ_BYTE_F(adr, res)
  16066. flag_C = 0;
  16067. flag_V = 0;
  16068. flag_NotZ = res;
  16069. flag_N = res;
  16070. POST_IO
  16071. RET(10)
  16072. }
  16073. // TST
  16074. OPCODE(0x4A40)
  16075. {
  16076. u32 adr, res;
  16077. u32 src, dst;
  16078. res = DREGu16((Opcode >> 0) & 7);
  16079. flag_C = 0;
  16080. flag_V = 0;
  16081. flag_NotZ = res;
  16082. flag_N = res >> 8;
  16083. RET(4)
  16084. }
  16085. // TST
  16086. OPCODE(0x4A50)
  16087. {
  16088. u32 adr, res;
  16089. u32 src, dst;
  16090. adr = AREG((Opcode >> 0) & 7);
  16091. PRE_IO
  16092. READ_WORD_F(adr, res)
  16093. flag_C = 0;
  16094. flag_V = 0;
  16095. flag_NotZ = res;
  16096. flag_N = res >> 8;
  16097. POST_IO
  16098. RET(8)
  16099. }
  16100. // TST
  16101. OPCODE(0x4A58)
  16102. {
  16103. u32 adr, res;
  16104. u32 src, dst;
  16105. adr = AREG((Opcode >> 0) & 7);
  16106. AREG((Opcode >> 0) & 7) += 2;
  16107. PRE_IO
  16108. READ_WORD_F(adr, res)
  16109. flag_C = 0;
  16110. flag_V = 0;
  16111. flag_NotZ = res;
  16112. flag_N = res >> 8;
  16113. POST_IO
  16114. RET(8)
  16115. }
  16116. // TST
  16117. OPCODE(0x4A60)
  16118. {
  16119. u32 adr, res;
  16120. u32 src, dst;
  16121. adr = AREG((Opcode >> 0) & 7) - 2;
  16122. AREG((Opcode >> 0) & 7) = adr;
  16123. PRE_IO
  16124. READ_WORD_F(adr, res)
  16125. flag_C = 0;
  16126. flag_V = 0;
  16127. flag_NotZ = res;
  16128. flag_N = res >> 8;
  16129. POST_IO
  16130. RET(10)
  16131. }
  16132. // TST
  16133. OPCODE(0x4A68)
  16134. {
  16135. u32 adr, res;
  16136. u32 src, dst;
  16137. FETCH_SWORD(adr);
  16138. adr += AREG((Opcode >> 0) & 7);
  16139. PRE_IO
  16140. READ_WORD_F(adr, res)
  16141. flag_C = 0;
  16142. flag_V = 0;
  16143. flag_NotZ = res;
  16144. flag_N = res >> 8;
  16145. POST_IO
  16146. RET(12)
  16147. }
  16148. // TST
  16149. OPCODE(0x4A70)
  16150. {
  16151. u32 adr, res;
  16152. u32 src, dst;
  16153. adr = AREG((Opcode >> 0) & 7);
  16154. DECODE_EXT_WORD
  16155. PRE_IO
  16156. READ_WORD_F(adr, res)
  16157. flag_C = 0;
  16158. flag_V = 0;
  16159. flag_NotZ = res;
  16160. flag_N = res >> 8;
  16161. POST_IO
  16162. RET(14)
  16163. }
  16164. // TST
  16165. OPCODE(0x4A78)
  16166. {
  16167. u32 adr, res;
  16168. u32 src, dst;
  16169. FETCH_SWORD(adr);
  16170. PRE_IO
  16171. READ_WORD_F(adr, res)
  16172. flag_C = 0;
  16173. flag_V = 0;
  16174. flag_NotZ = res;
  16175. flag_N = res >> 8;
  16176. POST_IO
  16177. RET(12)
  16178. }
  16179. // TST
  16180. OPCODE(0x4A79)
  16181. {
  16182. u32 adr, res;
  16183. u32 src, dst;
  16184. FETCH_LONG(adr);
  16185. PRE_IO
  16186. READ_WORD_F(adr, res)
  16187. flag_C = 0;
  16188. flag_V = 0;
  16189. flag_NotZ = res;
  16190. flag_N = res >> 8;
  16191. POST_IO
  16192. RET(16)
  16193. }
  16194. // TST
  16195. OPCODE(0x4A5F)
  16196. {
  16197. u32 adr, res;
  16198. u32 src, dst;
  16199. adr = AREG(7);
  16200. AREG(7) += 2;
  16201. PRE_IO
  16202. READ_WORD_F(adr, res)
  16203. flag_C = 0;
  16204. flag_V = 0;
  16205. flag_NotZ = res;
  16206. flag_N = res >> 8;
  16207. POST_IO
  16208. RET(8)
  16209. }
  16210. // TST
  16211. OPCODE(0x4A67)
  16212. {
  16213. u32 adr, res;
  16214. u32 src, dst;
  16215. adr = AREG(7) - 2;
  16216. AREG(7) = adr;
  16217. PRE_IO
  16218. READ_WORD_F(adr, res)
  16219. flag_C = 0;
  16220. flag_V = 0;
  16221. flag_NotZ = res;
  16222. flag_N = res >> 8;
  16223. POST_IO
  16224. RET(10)
  16225. }
  16226. // TST
  16227. OPCODE(0x4A80)
  16228. {
  16229. u32 adr, res;
  16230. u32 src, dst;
  16231. res = DREGu32((Opcode >> 0) & 7);
  16232. flag_C = 0;
  16233. flag_V = 0;
  16234. flag_NotZ = res;
  16235. flag_N = res >> 24;
  16236. RET(4)
  16237. }
  16238. // TST
  16239. OPCODE(0x4A90)
  16240. {
  16241. u32 adr, res;
  16242. u32 src, dst;
  16243. adr = AREG((Opcode >> 0) & 7);
  16244. PRE_IO
  16245. READ_LONG_F(adr, res)
  16246. flag_C = 0;
  16247. flag_V = 0;
  16248. flag_NotZ = res;
  16249. flag_N = res >> 24;
  16250. POST_IO
  16251. RET(12)
  16252. }
  16253. // TST
  16254. OPCODE(0x4A98)
  16255. {
  16256. u32 adr, res;
  16257. u32 src, dst;
  16258. adr = AREG((Opcode >> 0) & 7);
  16259. AREG((Opcode >> 0) & 7) += 4;
  16260. PRE_IO
  16261. READ_LONG_F(adr, res)
  16262. flag_C = 0;
  16263. flag_V = 0;
  16264. flag_NotZ = res;
  16265. flag_N = res >> 24;
  16266. POST_IO
  16267. RET(12)
  16268. }
  16269. // TST
  16270. OPCODE(0x4AA0)
  16271. {
  16272. u32 adr, res;
  16273. u32 src, dst;
  16274. adr = AREG((Opcode >> 0) & 7) - 4;
  16275. AREG((Opcode >> 0) & 7) = adr;
  16276. PRE_IO
  16277. READ_LONG_F(adr, res)
  16278. flag_C = 0;
  16279. flag_V = 0;
  16280. flag_NotZ = res;
  16281. flag_N = res >> 24;
  16282. POST_IO
  16283. RET(14)
  16284. }
  16285. // TST
  16286. OPCODE(0x4AA8)
  16287. {
  16288. u32 adr, res;
  16289. u32 src, dst;
  16290. FETCH_SWORD(adr);
  16291. adr += AREG((Opcode >> 0) & 7);
  16292. PRE_IO
  16293. READ_LONG_F(adr, res)
  16294. flag_C = 0;
  16295. flag_V = 0;
  16296. flag_NotZ = res;
  16297. flag_N = res >> 24;
  16298. POST_IO
  16299. RET(16)
  16300. }
  16301. // TST
  16302. OPCODE(0x4AB0)
  16303. {
  16304. u32 adr, res;
  16305. u32 src, dst;
  16306. adr = AREG((Opcode >> 0) & 7);
  16307. DECODE_EXT_WORD
  16308. PRE_IO
  16309. READ_LONG_F(adr, res)
  16310. flag_C = 0;
  16311. flag_V = 0;
  16312. flag_NotZ = res;
  16313. flag_N = res >> 24;
  16314. POST_IO
  16315. RET(18)
  16316. }
  16317. // TST
  16318. OPCODE(0x4AB8)
  16319. {
  16320. u32 adr, res;
  16321. u32 src, dst;
  16322. FETCH_SWORD(adr);
  16323. PRE_IO
  16324. READ_LONG_F(adr, res)
  16325. flag_C = 0;
  16326. flag_V = 0;
  16327. flag_NotZ = res;
  16328. flag_N = res >> 24;
  16329. POST_IO
  16330. RET(16)
  16331. }
  16332. // TST
  16333. OPCODE(0x4AB9)
  16334. {
  16335. u32 adr, res;
  16336. u32 src, dst;
  16337. FETCH_LONG(adr);
  16338. PRE_IO
  16339. READ_LONG_F(adr, res)
  16340. flag_C = 0;
  16341. flag_V = 0;
  16342. flag_NotZ = res;
  16343. flag_N = res >> 24;
  16344. POST_IO
  16345. RET(20)
  16346. }
  16347. // TST
  16348. OPCODE(0x4A9F)
  16349. {
  16350. u32 adr, res;
  16351. u32 src, dst;
  16352. adr = AREG(7);
  16353. AREG(7) += 4;
  16354. PRE_IO
  16355. READ_LONG_F(adr, res)
  16356. flag_C = 0;
  16357. flag_V = 0;
  16358. flag_NotZ = res;
  16359. flag_N = res >> 24;
  16360. POST_IO
  16361. RET(12)
  16362. }
  16363. // TST
  16364. OPCODE(0x4AA7)
  16365. {
  16366. u32 adr, res;
  16367. u32 src, dst;
  16368. adr = AREG(7) - 4;
  16369. AREG(7) = adr;
  16370. PRE_IO
  16371. READ_LONG_F(adr, res)
  16372. flag_C = 0;
  16373. flag_V = 0;
  16374. flag_NotZ = res;
  16375. flag_N = res >> 24;
  16376. POST_IO
  16377. RET(14)
  16378. }
  16379. // TAS
  16380. OPCODE(0x4AC0)
  16381. {
  16382. u32 adr, res;
  16383. u32 src, dst;
  16384. res = DREGu8((Opcode >> 0) & 7);
  16385. flag_C = 0;
  16386. flag_V = 0;
  16387. flag_NotZ = res;
  16388. flag_N = res;
  16389. res |= 0x80;
  16390. DREGu8((Opcode >> 0) & 7) = res;
  16391. RET(4)
  16392. }
  16393. // TAS
  16394. OPCODE(0x4AD0)
  16395. {
  16396. u32 adr, res;
  16397. u32 src, dst;
  16398. adr = AREG((Opcode >> 0) & 7);
  16399. PRE_IO
  16400. READ_BYTE_F(adr, res)
  16401. flag_C = 0;
  16402. flag_V = 0;
  16403. flag_NotZ = res;
  16404. flag_N = res;
  16405. #ifdef PICODRIVE_HACK
  16406. if (ctx == &PicoCpuFS68k) {
  16407. res |= 0x80;
  16408. WRITE_BYTE_F(adr, res);
  16409. }
  16410. #endif
  16411. POST_IO
  16412. #ifdef USE_CYCLONE_TIMING
  16413. RET(18)
  16414. #else
  16415. RET(8)
  16416. #endif
  16417. }
  16418. // TAS
  16419. OPCODE(0x4AD8)
  16420. {
  16421. u32 adr, res;
  16422. u32 src, dst;
  16423. adr = AREG((Opcode >> 0) & 7);
  16424. AREG((Opcode >> 0) & 7) += 1;
  16425. PRE_IO
  16426. READ_BYTE_F(adr, res)
  16427. flag_C = 0;
  16428. flag_V = 0;
  16429. flag_NotZ = res;
  16430. flag_N = res;
  16431. #ifdef PICODRIVE_HACK
  16432. if (ctx == &PicoCpuFS68k) {
  16433. res |= 0x80;
  16434. WRITE_BYTE_F(adr, res);
  16435. }
  16436. #endif
  16437. POST_IO
  16438. #ifdef USE_CYCLONE_TIMING
  16439. RET(18)
  16440. #else
  16441. RET(8)
  16442. #endif
  16443. }
  16444. // TAS
  16445. OPCODE(0x4AE0)
  16446. {
  16447. u32 adr, res;
  16448. u32 src, dst;
  16449. adr = AREG((Opcode >> 0) & 7) - 1;
  16450. AREG((Opcode >> 0) & 7) = adr;
  16451. PRE_IO
  16452. READ_BYTE_F(adr, res)
  16453. flag_C = 0;
  16454. flag_V = 0;
  16455. flag_NotZ = res;
  16456. flag_N = res;
  16457. #ifdef PICODRIVE_HACK
  16458. if (ctx == &PicoCpuFS68k) {
  16459. res |= 0x80;
  16460. WRITE_BYTE_F(adr, res);
  16461. }
  16462. #endif
  16463. POST_IO
  16464. #ifdef USE_CYCLONE_TIMING
  16465. RET(20)
  16466. #else
  16467. RET(10)
  16468. #endif
  16469. }
  16470. // TAS
  16471. OPCODE(0x4AE8)
  16472. {
  16473. u32 adr, res;
  16474. u32 src, dst;
  16475. FETCH_SWORD(adr);
  16476. adr += AREG((Opcode >> 0) & 7);
  16477. PRE_IO
  16478. READ_BYTE_F(adr, res)
  16479. flag_C = 0;
  16480. flag_V = 0;
  16481. flag_NotZ = res;
  16482. flag_N = res;
  16483. #ifdef PICODRIVE_HACK
  16484. if (ctx == &PicoCpuFS68k) {
  16485. res |= 0x80;
  16486. WRITE_BYTE_F(adr, res);
  16487. }
  16488. #endif
  16489. POST_IO
  16490. #ifdef USE_CYCLONE_TIMING
  16491. RET(22)
  16492. #else
  16493. RET(12)
  16494. #endif
  16495. }
  16496. // TAS
  16497. OPCODE(0x4AF0)
  16498. {
  16499. u32 adr, res;
  16500. u32 src, dst;
  16501. adr = AREG((Opcode >> 0) & 7);
  16502. DECODE_EXT_WORD
  16503. PRE_IO
  16504. READ_BYTE_F(adr, res)
  16505. flag_C = 0;
  16506. flag_V = 0;
  16507. flag_NotZ = res;
  16508. flag_N = res;
  16509. #ifdef PICODRIVE_HACK
  16510. if (ctx == &PicoCpuFS68k) {
  16511. res |= 0x80;
  16512. WRITE_BYTE_F(adr, res);
  16513. }
  16514. #endif
  16515. POST_IO
  16516. #ifdef USE_CYCLONE_TIMING
  16517. RET(24)
  16518. #else
  16519. RET(14)
  16520. #endif
  16521. }
  16522. // TAS
  16523. OPCODE(0x4AF8)
  16524. {
  16525. u32 adr, res;
  16526. u32 src, dst;
  16527. FETCH_SWORD(adr);
  16528. PRE_IO
  16529. READ_BYTE_F(adr, res)
  16530. flag_C = 0;
  16531. flag_V = 0;
  16532. flag_NotZ = res;
  16533. flag_N = res;
  16534. #ifdef PICODRIVE_HACK
  16535. if (ctx == &PicoCpuFS68k) {
  16536. res |= 0x80;
  16537. WRITE_BYTE_F(adr, res);
  16538. }
  16539. #endif
  16540. POST_IO
  16541. #ifdef USE_CYCLONE_TIMING
  16542. RET(22)
  16543. #else
  16544. RET(12)
  16545. #endif
  16546. }
  16547. // TAS
  16548. OPCODE(0x4AF9)
  16549. {
  16550. u32 adr, res;
  16551. u32 src, dst;
  16552. FETCH_LONG(adr);
  16553. PRE_IO
  16554. READ_BYTE_F(adr, res)
  16555. flag_C = 0;
  16556. flag_V = 0;
  16557. flag_NotZ = res;
  16558. flag_N = res;
  16559. #ifdef PICODRIVE_HACK
  16560. if (ctx == &PicoCpuFS68k) {
  16561. res |= 0x80;
  16562. WRITE_BYTE_F(adr, res);
  16563. }
  16564. #endif
  16565. POST_IO
  16566. #ifdef USE_CYCLONE_TIMING
  16567. RET(26)
  16568. #else
  16569. RET(16)
  16570. #endif
  16571. }
  16572. // TAS
  16573. OPCODE(0x4ADF)
  16574. {
  16575. u32 adr, res;
  16576. u32 src, dst;
  16577. adr = AREG(7);
  16578. AREG(7) += 2;
  16579. PRE_IO
  16580. READ_BYTE_F(adr, res)
  16581. flag_C = 0;
  16582. flag_V = 0;
  16583. flag_NotZ = res;
  16584. flag_N = res;
  16585. #ifdef PICODRIVE_HACK
  16586. if (ctx == &PicoCpuFS68k) {
  16587. res |= 0x80;
  16588. WRITE_BYTE_F(adr, res);
  16589. }
  16590. #endif
  16591. POST_IO
  16592. #ifdef USE_CYCLONE_TIMING
  16593. RET(18)
  16594. #else
  16595. RET(8)
  16596. #endif
  16597. }
  16598. // TAS
  16599. OPCODE(0x4AE7)
  16600. {
  16601. u32 adr, res;
  16602. u32 src, dst;
  16603. adr = AREG(7) - 2;
  16604. AREG(7) = adr;
  16605. PRE_IO
  16606. READ_BYTE_F(adr, res)
  16607. flag_C = 0;
  16608. flag_V = 0;
  16609. flag_NotZ = res;
  16610. flag_N = res;
  16611. #ifdef PICODRIVE_HACK
  16612. if (ctx == &PicoCpuFS68k) {
  16613. res |= 0x80;
  16614. WRITE_BYTE_F(adr, res);
  16615. }
  16616. #endif
  16617. POST_IO
  16618. #ifdef USE_CYCLONE_TIMING
  16619. RET(20)
  16620. #else
  16621. RET(8)
  16622. #endif
  16623. }
  16624. // ILLEGAL
  16625. OPCODE(0x4AFC)
  16626. {
  16627. #ifdef PICODRIVE_HACK
  16628. extern void SekFinishIdleDet(void);
  16629. SekFinishIdleDet();
  16630. #endif
  16631. SET_PC(execute_exception(ctx, M68K_ILLEGAL_INSTRUCTION_EX, GET_PC-2, GET_SR));
  16632. RET(0)
  16633. }
  16634. // ILLEGAL A000-AFFF
  16635. OPCODE(0xA000)
  16636. {
  16637. SET_PC(execute_exception(ctx, M68K_1010_EX, GET_PC-2, GET_SR));
  16638. RET(0)
  16639. }
  16640. // ILLEGAL F000-FFFF
  16641. OPCODE(0xF000)
  16642. {
  16643. SET_PC(execute_exception(ctx, M68K_1111_EX, GET_PC-2, GET_SR));
  16644. RET(0) // 4 already taken by exc. handler
  16645. }
  16646. // MOVEMaR
  16647. OPCODE(0x4C90)
  16648. {
  16649. u32 adr, res;
  16650. u32 src, dst;
  16651. s32 *psrc;
  16652. FETCH_WORD(res);
  16653. adr = AREG((Opcode >> 0) & 7);
  16654. psrc = &DREGs32(0);
  16655. dst = adr;
  16656. PRE_IO
  16657. do
  16658. {
  16659. if (res & 1)
  16660. {
  16661. READSX_WORD_F(adr, *psrc)
  16662. adr += 2;
  16663. }
  16664. psrc++;
  16665. } while (res >>= 1);
  16666. POST_IO
  16667. ctx->io_cycle_counter -= (adr - dst) * 2;
  16668. #ifdef USE_CYCLONE_TIMING
  16669. RET(12)
  16670. #else
  16671. RET(16)
  16672. #endif
  16673. }
  16674. // MOVEMaR
  16675. OPCODE(0x4C98)
  16676. {
  16677. u32 adr, res;
  16678. u32 src, dst;
  16679. s32 *psrc;
  16680. FETCH_WORD(res);
  16681. adr = AREG((Opcode >> 0) & 7);
  16682. psrc = &DREGs32(0);
  16683. dst = adr;
  16684. PRE_IO
  16685. do
  16686. {
  16687. if (res & 1)
  16688. {
  16689. READSX_WORD_F(adr, *psrc)
  16690. adr += 2;
  16691. }
  16692. psrc++;
  16693. } while (res >>= 1);
  16694. AREG((Opcode >> 0) & 7) = adr;
  16695. POST_IO
  16696. ctx->io_cycle_counter -= (adr - dst) * 2;
  16697. RET(12)
  16698. }
  16699. // MOVEMaR
  16700. OPCODE(0x4CA8)
  16701. {
  16702. u32 adr, res;
  16703. u32 src, dst;
  16704. s32 *psrc;
  16705. FETCH_WORD(res);
  16706. FETCH_SWORD(adr);
  16707. adr += AREG((Opcode >> 0) & 7);
  16708. psrc = &DREGs32(0);
  16709. dst = adr;
  16710. PRE_IO
  16711. do
  16712. {
  16713. if (res & 1)
  16714. {
  16715. READSX_WORD_F(adr, *psrc)
  16716. adr += 2;
  16717. }
  16718. psrc++;
  16719. } while (res >>= 1);
  16720. POST_IO
  16721. ctx->io_cycle_counter -= (adr - dst) * 2;
  16722. #ifdef USE_CYCLONE_TIMING
  16723. RET(16)
  16724. #else
  16725. RET(24)
  16726. #endif
  16727. }
  16728. // MOVEMaR
  16729. OPCODE(0x4CB0)
  16730. {
  16731. u32 adr, res;
  16732. u32 src, dst;
  16733. s32 *psrc;
  16734. FETCH_WORD(res);
  16735. adr = AREG((Opcode >> 0) & 7);
  16736. DECODE_EXT_WORD
  16737. psrc = &DREGs32(0);
  16738. dst = adr;
  16739. PRE_IO
  16740. do
  16741. {
  16742. if (res & 1)
  16743. {
  16744. READSX_WORD_F(adr, *psrc)
  16745. adr += 2;
  16746. }
  16747. psrc++;
  16748. } while (res >>= 1);
  16749. POST_IO
  16750. ctx->io_cycle_counter -= (adr - dst) * 2;
  16751. #ifdef USE_CYCLONE_TIMING
  16752. RET(18)
  16753. #else
  16754. RET(28)
  16755. #endif
  16756. }
  16757. // MOVEMaR
  16758. OPCODE(0x4CB8)
  16759. {
  16760. u32 adr, res;
  16761. u32 src, dst;
  16762. s32 *psrc;
  16763. FETCH_WORD(res);
  16764. FETCH_SWORD(adr);
  16765. psrc = &DREGs32(0);
  16766. dst = adr;
  16767. PRE_IO
  16768. do
  16769. {
  16770. if (res & 1)
  16771. {
  16772. READSX_WORD_F(adr, *psrc)
  16773. adr += 2;
  16774. }
  16775. psrc++;
  16776. } while (res >>= 1);
  16777. POST_IO
  16778. ctx->io_cycle_counter -= (adr - dst) * 2;
  16779. #ifdef USE_CYCLONE_TIMING
  16780. RET(16)
  16781. #else
  16782. RET(24)
  16783. #endif
  16784. }
  16785. // MOVEMaR
  16786. OPCODE(0x4CB9)
  16787. {
  16788. u32 adr, res;
  16789. u32 src, dst;
  16790. s32 *psrc;
  16791. FETCH_WORD(res);
  16792. FETCH_LONG(adr);
  16793. psrc = &DREGs32(0);
  16794. dst = adr;
  16795. PRE_IO
  16796. do
  16797. {
  16798. if (res & 1)
  16799. {
  16800. READSX_WORD_F(adr, *psrc)
  16801. adr += 2;
  16802. }
  16803. psrc++;
  16804. } while (res >>= 1);
  16805. POST_IO
  16806. ctx->io_cycle_counter -= (adr - dst) * 2;
  16807. #ifdef USE_CYCLONE_TIMING
  16808. RET(20)
  16809. #else
  16810. RET(32)
  16811. #endif
  16812. }
  16813. // MOVEMaR
  16814. OPCODE(0x4CBA)
  16815. {
  16816. u32 adr, res;
  16817. u32 src, dst;
  16818. s32 *psrc;
  16819. FETCH_WORD(res);
  16820. adr = GET_SWORD + GET_PC;
  16821. PC++;
  16822. psrc = &DREGs32(0);
  16823. dst = adr;
  16824. PRE_IO
  16825. do
  16826. {
  16827. if (res & 1)
  16828. {
  16829. READSX_WORD_F(adr, *psrc)
  16830. adr += 2;
  16831. }
  16832. psrc++;
  16833. } while (res >>= 1);
  16834. POST_IO
  16835. ctx->io_cycle_counter -= (adr - dst) * 2;
  16836. #ifdef USE_CYCLONE_TIMING
  16837. RET(16)
  16838. #else
  16839. RET(24)
  16840. #endif
  16841. }
  16842. // MOVEMaR
  16843. OPCODE(0x4CBB)
  16844. {
  16845. u32 adr, res;
  16846. u32 src, dst;
  16847. s32 *psrc;
  16848. FETCH_WORD(res);
  16849. adr = GET_PC;
  16850. DECODE_EXT_WORD
  16851. psrc = &DREGs32(0);
  16852. dst = adr;
  16853. PRE_IO
  16854. do
  16855. {
  16856. if (res & 1)
  16857. {
  16858. READSX_WORD_F(adr, *psrc)
  16859. adr += 2;
  16860. }
  16861. psrc++;
  16862. } while (res >>= 1);
  16863. POST_IO
  16864. ctx->io_cycle_counter -= (adr - dst) * 2;
  16865. #ifdef USE_CYCLONE_TIMING
  16866. RET(18)
  16867. #else
  16868. RET(28)
  16869. #endif
  16870. }
  16871. // MOVEMaR
  16872. OPCODE(0x4C9F)
  16873. {
  16874. u32 adr, res;
  16875. u32 src, dst;
  16876. s32 *psrc;
  16877. FETCH_WORD(res);
  16878. adr = AREG(7);
  16879. psrc = &DREGs32(0);
  16880. dst = adr;
  16881. PRE_IO
  16882. do
  16883. {
  16884. if (res & 1)
  16885. {
  16886. READSX_WORD_F(adr, *psrc)
  16887. adr += 2;
  16888. }
  16889. psrc++;
  16890. } while (res >>= 1);
  16891. AREG(7) = adr;
  16892. POST_IO
  16893. ctx->io_cycle_counter -= (adr - dst) * 2;
  16894. RET(12)
  16895. }
  16896. // MOVEMaR
  16897. OPCODE(0x4CD0)
  16898. {
  16899. u32 adr, res;
  16900. u32 src, dst;
  16901. u32 *psrc;
  16902. FETCH_WORD(res);
  16903. adr = AREG((Opcode >> 0) & 7);
  16904. psrc = &DREGu32(0);
  16905. dst = adr;
  16906. PRE_IO
  16907. do
  16908. {
  16909. if (res & 1)
  16910. {
  16911. READ_LONG_F(adr, *psrc)
  16912. adr += 4;
  16913. }
  16914. psrc++;
  16915. } while (res >>= 1);
  16916. POST_IO
  16917. ctx->io_cycle_counter -= (adr - dst) * 2;
  16918. #ifdef USE_CYCLONE_TIMING
  16919. RET(12)
  16920. #else
  16921. RET(20)
  16922. #endif
  16923. }
  16924. // MOVEMaR
  16925. OPCODE(0x4CD8)
  16926. {
  16927. u32 adr, res;
  16928. u32 src, dst;
  16929. u32 *psrc;
  16930. FETCH_WORD(res);
  16931. adr = AREG((Opcode >> 0) & 7);
  16932. psrc = &DREGu32(0);
  16933. dst = adr;
  16934. PRE_IO
  16935. do
  16936. {
  16937. if (res & 1)
  16938. {
  16939. READ_LONG_F(adr, *psrc)
  16940. adr += 4;
  16941. }
  16942. psrc++;
  16943. } while (res >>= 1);
  16944. AREG((Opcode >> 0) & 7) = adr;
  16945. POST_IO
  16946. ctx->io_cycle_counter -= (adr - dst) * 2;
  16947. RET(12)
  16948. }
  16949. // MOVEMaR
  16950. OPCODE(0x4CE8)
  16951. {
  16952. u32 adr, res;
  16953. u32 src, dst;
  16954. u32 *psrc;
  16955. FETCH_WORD(res);
  16956. FETCH_SWORD(adr);
  16957. adr += AREG((Opcode >> 0) & 7);
  16958. psrc = &DREGu32(0);
  16959. dst = adr;
  16960. PRE_IO
  16961. do
  16962. {
  16963. if (res & 1)
  16964. {
  16965. READ_LONG_F(adr, *psrc)
  16966. adr += 4;
  16967. }
  16968. psrc++;
  16969. } while (res >>= 1);
  16970. POST_IO
  16971. ctx->io_cycle_counter -= (adr - dst) * 2;
  16972. #ifdef USE_CYCLONE_TIMING
  16973. RET(16)
  16974. #else
  16975. RET(28)
  16976. #endif
  16977. }
  16978. // MOVEMaR
  16979. OPCODE(0x4CF0)
  16980. {
  16981. u32 adr, res;
  16982. u32 src, dst;
  16983. u32 *psrc;
  16984. FETCH_WORD(res);
  16985. adr = AREG((Opcode >> 0) & 7);
  16986. DECODE_EXT_WORD
  16987. psrc = &DREGu32(0);
  16988. dst = adr;
  16989. PRE_IO
  16990. do
  16991. {
  16992. if (res & 1)
  16993. {
  16994. READ_LONG_F(adr, *psrc)
  16995. adr += 4;
  16996. }
  16997. psrc++;
  16998. } while (res >>= 1);
  16999. POST_IO
  17000. ctx->io_cycle_counter -= (adr - dst) * 2;
  17001. #ifdef USE_CYCLONE_TIMING
  17002. RET(18)
  17003. #else
  17004. RET(32)
  17005. #endif
  17006. }
  17007. // MOVEMaR
  17008. OPCODE(0x4CF8)
  17009. {
  17010. u32 adr, res;
  17011. u32 src, dst;
  17012. u32 *psrc;
  17013. FETCH_WORD(res);
  17014. FETCH_SWORD(adr);
  17015. psrc = &DREGu32(0);
  17016. dst = adr;
  17017. PRE_IO
  17018. do
  17019. {
  17020. if (res & 1)
  17021. {
  17022. READ_LONG_F(adr, *psrc)
  17023. adr += 4;
  17024. }
  17025. psrc++;
  17026. } while (res >>= 1);
  17027. POST_IO
  17028. ctx->io_cycle_counter -= (adr - dst) * 2;
  17029. #ifdef USE_CYCLONE_TIMING
  17030. RET(16)
  17031. #else
  17032. RET(28)
  17033. #endif
  17034. }
  17035. // MOVEMaR
  17036. OPCODE(0x4CF9)
  17037. {
  17038. u32 adr, res;
  17039. u32 src, dst;
  17040. u32 *psrc;
  17041. FETCH_WORD(res);
  17042. FETCH_LONG(adr);
  17043. psrc = &DREGu32(0);
  17044. dst = adr;
  17045. PRE_IO
  17046. do
  17047. {
  17048. if (res & 1)
  17049. {
  17050. READ_LONG_F(adr, *psrc)
  17051. adr += 4;
  17052. }
  17053. psrc++;
  17054. } while (res >>= 1);
  17055. POST_IO
  17056. ctx->io_cycle_counter -= (adr - dst) * 2;
  17057. #ifdef USE_CYCLONE_TIMING
  17058. RET(20)
  17059. #else
  17060. RET(36)
  17061. #endif
  17062. }
  17063. // MOVEMaR
  17064. OPCODE(0x4CFA)
  17065. {
  17066. u32 adr, res;
  17067. u32 src, dst;
  17068. u32 *psrc;
  17069. FETCH_WORD(res);
  17070. adr = GET_SWORD + GET_PC;
  17071. PC++;
  17072. psrc = &DREGu32(0);
  17073. dst = adr;
  17074. PRE_IO
  17075. do
  17076. {
  17077. if (res & 1)
  17078. {
  17079. READ_LONG_F(adr, *psrc)
  17080. adr += 4;
  17081. }
  17082. psrc++;
  17083. } while (res >>= 1);
  17084. POST_IO
  17085. ctx->io_cycle_counter -= (adr - dst) * 2;
  17086. #ifdef USE_CYCLONE_TIMING
  17087. RET(16)
  17088. #else
  17089. RET(28)
  17090. #endif
  17091. }
  17092. // MOVEMaR
  17093. OPCODE(0x4CFB)
  17094. {
  17095. u32 adr, res;
  17096. u32 src, dst;
  17097. u32 *psrc;
  17098. FETCH_WORD(res);
  17099. adr = GET_PC;
  17100. DECODE_EXT_WORD
  17101. psrc = &DREGu32(0);
  17102. dst = adr;
  17103. PRE_IO
  17104. do
  17105. {
  17106. if (res & 1)
  17107. {
  17108. READ_LONG_F(adr, *psrc)
  17109. adr += 4;
  17110. }
  17111. psrc++;
  17112. } while (res >>= 1);
  17113. POST_IO
  17114. ctx->io_cycle_counter -= (adr - dst) * 2;
  17115. #ifdef USE_CYCLONE_TIMING
  17116. RET(18)
  17117. #else
  17118. RET(32)
  17119. #endif
  17120. }
  17121. // MOVEMaR
  17122. OPCODE(0x4CDF)
  17123. {
  17124. u32 adr, res;
  17125. u32 src, dst;
  17126. u32 *psrc;
  17127. FETCH_WORD(res);
  17128. adr = AREG(7);
  17129. psrc = &DREGu32(0);
  17130. dst = adr;
  17131. PRE_IO
  17132. do
  17133. {
  17134. if (res & 1)
  17135. {
  17136. READ_LONG_F(adr, *psrc)
  17137. adr += 4;
  17138. }
  17139. psrc++;
  17140. } while (res >>= 1);
  17141. AREG(7) = adr;
  17142. POST_IO
  17143. ctx->io_cycle_counter -= (adr - dst) * 2;
  17144. RET(12)
  17145. }
  17146. // TRAP
  17147. OPCODE(0x4E40)
  17148. {
  17149. SET_PC(execute_exception(ctx, M68K_TRAP_BASE_EX + (Opcode & 0xF), GET_PC, GET_SR));
  17150. RET(4)
  17151. }
  17152. // LINK
  17153. OPCODE(0x4E50)
  17154. {
  17155. u32 adr, res;
  17156. u32 src, dst;
  17157. res = AREGu32((Opcode >> 0) & 7);
  17158. PRE_IO
  17159. PUSH_32_F(res)
  17160. res = AREG(7);
  17161. AREG((Opcode >> 0) & 7) = res;
  17162. FETCH_SWORD(res);
  17163. AREG(7) += res;
  17164. POST_IO
  17165. RET(16)
  17166. }
  17167. // LINKA7
  17168. OPCODE(0x4E57)
  17169. {
  17170. u32 adr, res;
  17171. u32 src, dst;
  17172. AREG(7) -= 4;
  17173. PRE_IO
  17174. WRITE_LONG_DEC_F(AREG(7), AREG(7))
  17175. FETCH_SWORD(res);
  17176. AREG(7) += res;
  17177. POST_IO
  17178. RET(16)
  17179. }
  17180. // ULNK
  17181. OPCODE(0x4E58)
  17182. {
  17183. u32 adr, res;
  17184. u32 src, dst;
  17185. src = AREGu32((Opcode >> 0) & 7);
  17186. AREG(7) = src + 4;
  17187. PRE_IO
  17188. READ_LONG_F(src, res)
  17189. AREG((Opcode >> 0) & 7) = res;
  17190. POST_IO
  17191. RET(12)
  17192. }
  17193. // ULNKA7
  17194. OPCODE(0x4E5F)
  17195. {
  17196. u32 adr, res;
  17197. u32 src, dst;
  17198. PRE_IO
  17199. READ_LONG_F(AREG(7), AREG(7))
  17200. POST_IO
  17201. RET(12)
  17202. }
  17203. // MOVEAUSP
  17204. OPCODE(0x4E60)
  17205. {
  17206. u32 adr, res;
  17207. u32 src, dst;
  17208. if (!flag_S)
  17209. {
  17210. SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
  17211. RET(4)
  17212. }
  17213. res = AREGu32((Opcode >> 0) & 7);
  17214. ASP = res;
  17215. RET(4)
  17216. }
  17217. // MOVEUSPA
  17218. OPCODE(0x4E68)
  17219. {
  17220. u32 adr, res;
  17221. u32 src, dst;
  17222. if (!flag_S)
  17223. {
  17224. SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
  17225. RET(4)
  17226. }
  17227. res = ASP;
  17228. AREG((Opcode >> 0) & 7) = res;
  17229. RET(4)
  17230. }
  17231. // RESET
  17232. OPCODE(0x4E70)
  17233. {
  17234. u32 adr, res;
  17235. u32 src, dst;
  17236. if (!flag_S)
  17237. {
  17238. SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
  17239. RET(4)
  17240. }
  17241. PRE_IO
  17242. if (ctx->reset_handler) ctx->reset_handler();
  17243. // CPU->Reset_CallBack();
  17244. POST_IO
  17245. RET(132)
  17246. }
  17247. // NOP
  17248. OPCODE(0x4E71)
  17249. {
  17250. RET(4)
  17251. }
  17252. // STOP
  17253. OPCODE(0x4E72)
  17254. {
  17255. u32 adr, res;
  17256. u32 src, dst;
  17257. if (!flag_S)
  17258. {
  17259. SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
  17260. RET(4)
  17261. }
  17262. FETCH_WORD(res);
  17263. res &= M68K_SR_MASK;
  17264. SET_SR(res)
  17265. if (!flag_S)
  17266. {
  17267. res = AREG(7);
  17268. AREG(7) = ASP;
  17269. ASP = res;
  17270. }
  17271. ctx->execinfo |= FM68K_HALTED;
  17272. RET0()
  17273. }
  17274. // RTE
  17275. OPCODE(0x4E73)
  17276. {
  17277. u32 adr, res;
  17278. u32 src, dst;
  17279. if (!flag_S)
  17280. {
  17281. SET_PC(execute_exception(ctx, M68K_PRIVILEGE_VIOLATION_EX, GET_PC-2, GET_SR));
  17282. RET(4)
  17283. }
  17284. PRE_IO
  17285. POP_16_F(res)
  17286. SET_SR(res)
  17287. POP_32_F(res)
  17288. SET_PC(res)
  17289. if (!flag_S)
  17290. {
  17291. res = AREG(7);
  17292. AREG(7) = ASP;
  17293. ASP = res;
  17294. }
  17295. CHECK_BRANCH_EXCEPTION(res)
  17296. POST_IO
  17297. ctx->execinfo &= ~(FM68K_EMULATE_GROUP_0|FM68K_EMULATE_TRACE|FM68K_DO_TRACE);
  17298. CHECK_INT_TO_JUMP(20)
  17299. RET(20)
  17300. }
  17301. // RTS
  17302. OPCODE(0x4E75)
  17303. {
  17304. u32 adr, res;
  17305. u32 src, dst;
  17306. PRE_IO
  17307. POP_32_F(res)
  17308. SET_PC(res)
  17309. CHECK_BRANCH_EXCEPTION(res)
  17310. POST_IO
  17311. RET(16)
  17312. }
  17313. // TRAPV
  17314. OPCODE(0x4E76)
  17315. {
  17316. if (flag_V & 0x80)
  17317. SET_PC(execute_exception(ctx, M68K_TRAPV_EX, GET_PC, GET_SR));
  17318. RET(4)
  17319. }
  17320. // RTR
  17321. OPCODE(0x4E77)
  17322. {
  17323. u32 adr, res;
  17324. u32 src, dst;
  17325. PRE_IO
  17326. POP_16_F(res)
  17327. SET_CCR(res)
  17328. POP_32_F(res)
  17329. SET_PC(res)
  17330. CHECK_BRANCH_EXCEPTION(res)
  17331. POST_IO
  17332. RET(20)
  17333. }
  17334. // JSR
  17335. OPCODE(0x4E90)
  17336. {
  17337. u32 adr, res;
  17338. u32 src, dst;
  17339. adr = AREG((Opcode >> 0) & 7);
  17340. {
  17341. u32 oldPC;
  17342. oldPC = GET_PC;
  17343. PRE_IO
  17344. PUSH_32_F(oldPC)
  17345. }
  17346. SET_PC(adr)
  17347. CHECK_BRANCH_EXCEPTION(adr)
  17348. POST_IO
  17349. RET(16)
  17350. }
  17351. // JSR
  17352. OPCODE(0x4EA8)
  17353. {
  17354. u32 adr, res;
  17355. u32 src, dst;
  17356. FETCH_SWORD(adr);
  17357. adr += AREG((Opcode >> 0) & 7);
  17358. {
  17359. u32 oldPC;
  17360. oldPC = GET_PC;
  17361. PRE_IO
  17362. PUSH_32_F(oldPC)
  17363. }
  17364. SET_PC(adr)
  17365. CHECK_BRANCH_EXCEPTION(adr)
  17366. POST_IO
  17367. RET(18)
  17368. }
  17369. // JSR
  17370. OPCODE(0x4EB0)
  17371. {
  17372. u32 adr, res;
  17373. u32 src, dst;
  17374. adr = AREG((Opcode >> 0) & 7);
  17375. DECODE_EXT_WORD
  17376. {
  17377. u32 oldPC;
  17378. oldPC = GET_PC;
  17379. PRE_IO
  17380. PUSH_32_F(oldPC)
  17381. }
  17382. SET_PC(adr)
  17383. CHECK_BRANCH_EXCEPTION(adr)
  17384. POST_IO
  17385. RET(22)
  17386. }
  17387. // JSR
  17388. OPCODE(0x4EB8)
  17389. {
  17390. u32 adr, res;
  17391. u32 src, dst;
  17392. FETCH_SWORD(adr);
  17393. {
  17394. u32 oldPC;
  17395. oldPC = GET_PC;
  17396. PRE_IO
  17397. PUSH_32_F(oldPC)
  17398. }
  17399. SET_PC(adr)
  17400. CHECK_BRANCH_EXCEPTION(adr)
  17401. POST_IO
  17402. RET(18)
  17403. }
  17404. // JSR
  17405. OPCODE(0x4EB9)
  17406. {
  17407. u32 adr, res;
  17408. u32 src, dst;
  17409. FETCH_LONG(adr);
  17410. {
  17411. u32 oldPC;
  17412. oldPC = GET_PC;
  17413. PRE_IO
  17414. PUSH_32_F(oldPC)
  17415. }
  17416. SET_PC(adr)
  17417. CHECK_BRANCH_EXCEPTION(adr)
  17418. POST_IO
  17419. RET(20)
  17420. }
  17421. // JSR
  17422. OPCODE(0x4EBA)
  17423. {
  17424. u32 adr, res;
  17425. u32 src, dst;
  17426. adr = GET_SWORD + GET_PC;
  17427. PC++;
  17428. {
  17429. u32 oldPC;
  17430. oldPC = GET_PC;
  17431. PRE_IO
  17432. PUSH_32_F(oldPC)
  17433. }
  17434. SET_PC(adr)
  17435. CHECK_BRANCH_EXCEPTION(adr)
  17436. POST_IO
  17437. RET(18)
  17438. }
  17439. // JSR
  17440. OPCODE(0x4EBB)
  17441. {
  17442. u32 adr, res;
  17443. u32 src, dst;
  17444. adr = GET_PC;
  17445. DECODE_EXT_WORD
  17446. {
  17447. u32 oldPC;
  17448. oldPC = GET_PC;
  17449. PRE_IO
  17450. PUSH_32_F(oldPC)
  17451. }
  17452. SET_PC(adr)
  17453. CHECK_BRANCH_EXCEPTION(adr)
  17454. POST_IO
  17455. RET(22)
  17456. }
  17457. // JMP
  17458. OPCODE(0x4ED0)
  17459. {
  17460. u32 adr, res;
  17461. u32 src, dst;
  17462. adr = AREG((Opcode >> 0) & 7);
  17463. SET_PC(adr)
  17464. CHECK_BRANCH_EXCEPTION(adr)
  17465. RET(8)
  17466. }
  17467. // JMP
  17468. OPCODE(0x4EE8)
  17469. {
  17470. u32 adr, res;
  17471. u32 src, dst;
  17472. FETCH_SWORD(adr);
  17473. adr += AREG((Opcode >> 0) & 7);
  17474. SET_PC(adr)
  17475. CHECK_BRANCH_EXCEPTION(adr)
  17476. RET(10)
  17477. }
  17478. // JMP
  17479. OPCODE(0x4EF0)
  17480. {
  17481. u32 adr, res;
  17482. u32 src, dst;
  17483. adr = AREG((Opcode >> 0) & 7);
  17484. DECODE_EXT_WORD
  17485. SET_PC(adr)
  17486. CHECK_BRANCH_EXCEPTION(adr)
  17487. RET(14)
  17488. }
  17489. // JMP
  17490. OPCODE(0x4EF8)
  17491. {
  17492. u32 adr, res;
  17493. u32 src, dst;
  17494. FETCH_SWORD(adr);
  17495. SET_PC(adr)
  17496. CHECK_BRANCH_EXCEPTION(adr)
  17497. RET(10)
  17498. }
  17499. // JMP
  17500. OPCODE(0x4EF9)
  17501. {
  17502. u32 adr, res;
  17503. u32 src, dst;
  17504. FETCH_LONG(adr);
  17505. SET_PC(adr)
  17506. CHECK_BRANCH_EXCEPTION(adr)
  17507. RET(12)
  17508. }
  17509. // JMP
  17510. OPCODE(0x4EFA)
  17511. {
  17512. u32 adr, res;
  17513. u32 src, dst;
  17514. adr = GET_SWORD + GET_PC;
  17515. PC++;
  17516. SET_PC(adr)
  17517. CHECK_BRANCH_EXCEPTION(adr)
  17518. RET(10)
  17519. }
  17520. // JMP
  17521. OPCODE(0x4EFB)
  17522. {
  17523. u32 adr, res;
  17524. u32 src, dst;
  17525. adr = GET_PC;
  17526. DECODE_EXT_WORD
  17527. SET_PC(adr)
  17528. CHECK_BRANCH_EXCEPTION(adr)
  17529. RET(14)
  17530. }
  17531. // CHK
  17532. OPCODE(0x4180)
  17533. {
  17534. s32 src, res;
  17535. src = DREGs16((Opcode >> 0) & 7);
  17536. res = DREGs16((Opcode >> 9) & 7);
  17537. if ((res < 0) || (res > src))
  17538. {
  17539. flag_N = res >> 8;
  17540. SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR));
  17541. }
  17542. RET(10)
  17543. }
  17544. // CHK
  17545. OPCODE(0x4190)
  17546. {
  17547. s32 src, res;
  17548. u32 adr;
  17549. adr = AREG((Opcode >> 0) & 7);
  17550. PRE_IO
  17551. READSX_WORD_F(adr, src)
  17552. res = DREGs16((Opcode >> 9) & 7);
  17553. if ((res < 0) || (res > src))
  17554. {
  17555. flag_N = res >> 8;
  17556. SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR));
  17557. }
  17558. POST_IO
  17559. RET(14)
  17560. }
  17561. // CHK
  17562. OPCODE(0x4198)
  17563. {
  17564. s32 src, res;
  17565. u32 adr;
  17566. adr = AREG((Opcode >> 0) & 7);
  17567. AREG((Opcode >> 0) & 7) += 2;
  17568. PRE_IO
  17569. READSX_WORD_F(adr, src)
  17570. res = DREGs16((Opcode >> 9) & 7);
  17571. if ((res < 0) || (res > src))
  17572. {
  17573. flag_N = res >> 8;
  17574. SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR));
  17575. }
  17576. POST_IO
  17577. RET(14)
  17578. }
  17579. // CHK
  17580. OPCODE(0x41A0)
  17581. {
  17582. s32 src, res;
  17583. u32 adr;
  17584. adr = AREG((Opcode >> 0) & 7) - 2;
  17585. AREG((Opcode >> 0) & 7) = adr;
  17586. PRE_IO
  17587. READSX_WORD_F(adr, src)
  17588. res = DREGs16((Opcode >> 9) & 7);
  17589. if ((res < 0) || (res > src))
  17590. {
  17591. flag_N = res >> 8;
  17592. SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR));
  17593. }
  17594. POST_IO
  17595. RET(16)
  17596. }
  17597. // CHK
  17598. OPCODE(0x41A8)
  17599. {
  17600. s32 src, res;
  17601. u32 adr;
  17602. FETCH_SWORD(adr);
  17603. adr += AREG((Opcode >> 0) & 7);
  17604. PRE_IO
  17605. READSX_WORD_F(adr, src)
  17606. res = DREGs16((Opcode >> 9) & 7);
  17607. if ((res < 0) || (res > src))
  17608. {
  17609. flag_N = res >> 8;
  17610. SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR));
  17611. }
  17612. POST_IO
  17613. RET(18)
  17614. }
  17615. // CHK
  17616. OPCODE(0x41B0)
  17617. {
  17618. s32 src, res;
  17619. u32 adr;
  17620. adr = AREG((Opcode >> 0) & 7);
  17621. DECODE_EXT_WORD
  17622. PRE_IO
  17623. READSX_WORD_F(adr, src)
  17624. res = DREGs16((Opcode >> 9) & 7);
  17625. if ((res < 0) || (res > src))
  17626. {
  17627. flag_N = res >> 8;
  17628. SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR));
  17629. }
  17630. POST_IO
  17631. RET(20)
  17632. }
  17633. // CHK
  17634. OPCODE(0x41B8)
  17635. {
  17636. s32 src, res;
  17637. u32 adr;
  17638. FETCH_SWORD(adr);
  17639. PRE_IO
  17640. READSX_WORD_F(adr, src)
  17641. res = DREGs16((Opcode >> 9) & 7);
  17642. if ((res < 0) || (res > src))
  17643. {
  17644. flag_N = res >> 8;
  17645. SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR));
  17646. }
  17647. POST_IO
  17648. RET(18)
  17649. }
  17650. // CHK
  17651. OPCODE(0x41B9)
  17652. {
  17653. s32 src, res;
  17654. u32 adr;
  17655. FETCH_LONG(adr);
  17656. PRE_IO
  17657. READSX_WORD_F(adr, src)
  17658. res = DREGs16((Opcode >> 9) & 7);
  17659. if ((res < 0) || (res > src))
  17660. {
  17661. flag_N = res >> 8;
  17662. SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR));
  17663. }
  17664. POST_IO
  17665. RET(22)
  17666. }
  17667. // CHK
  17668. OPCODE(0x41BA)
  17669. {
  17670. s32 src, res;
  17671. u32 adr;
  17672. adr = GET_SWORD + GET_PC;
  17673. PC++;
  17674. PRE_IO
  17675. READSX_WORD_F(adr, src)
  17676. res = DREGs16((Opcode >> 9) & 7);
  17677. if ((res < 0) || (res > src))
  17678. {
  17679. flag_N = res >> 8;
  17680. SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR));
  17681. }
  17682. POST_IO
  17683. RET(18)
  17684. }
  17685. // CHK
  17686. OPCODE(0x41BB)
  17687. {
  17688. s32 src, res;
  17689. u32 adr;
  17690. adr = GET_PC;
  17691. DECODE_EXT_WORD
  17692. PRE_IO
  17693. READSX_WORD_F(adr, src)
  17694. res = DREGs16((Opcode >> 9) & 7);
  17695. if ((res < 0) || (res > src))
  17696. {
  17697. flag_N = res >> 8;
  17698. SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR));
  17699. }
  17700. POST_IO
  17701. RET(20)
  17702. }
  17703. // CHK
  17704. OPCODE(0x41BC)
  17705. {
  17706. s32 src, res;
  17707. u32 adr;
  17708. FETCH_SWORD(src);
  17709. res = DREGs16((Opcode >> 9) & 7);
  17710. if ((res < 0) || (res > src))
  17711. {
  17712. flag_N = res >> 8;
  17713. SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR));
  17714. }
  17715. POST_IO
  17716. RET(14)
  17717. }
  17718. // CHK
  17719. OPCODE(0x419F)
  17720. {
  17721. s32 src, res;
  17722. u32 adr;
  17723. adr = AREG(7);
  17724. AREG(7) += 2;
  17725. PRE_IO
  17726. READSX_WORD_F(adr, src)
  17727. res = DREGs16((Opcode >> 9) & 7);
  17728. if ((res < 0) || (res > src))
  17729. {
  17730. flag_N = res >> 8;
  17731. SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR));
  17732. }
  17733. POST_IO
  17734. RET(14)
  17735. }
  17736. // CHK
  17737. OPCODE(0x41A7)
  17738. {
  17739. s32 src, res;
  17740. u32 adr;
  17741. adr = AREG(7) - 2;
  17742. AREG(7) = adr;
  17743. PRE_IO
  17744. READSX_WORD_F(adr, src)
  17745. res = DREGs16((Opcode >> 9) & 7);
  17746. if ((res < 0) || (res > src))
  17747. {
  17748. flag_N = res >> 8;
  17749. SET_PC(execute_exception(ctx, M68K_CHK_EX, GET_PC, GET_SR));
  17750. }
  17751. POST_IO
  17752. RET(16)
  17753. }
  17754. // LEA
  17755. OPCODE(0x41D0)
  17756. {
  17757. u32 adr, res;
  17758. u32 src, dst;
  17759. adr = AREG((Opcode >> 0) & 7);
  17760. res = adr;
  17761. AREG((Opcode >> 9) & 7) = res;
  17762. RET(4)
  17763. }
  17764. // LEA
  17765. OPCODE(0x41E8)
  17766. {
  17767. u32 adr, res;
  17768. u32 src, dst;
  17769. FETCH_SWORD(adr);
  17770. adr += AREG((Opcode >> 0) & 7);
  17771. res = adr;
  17772. AREG((Opcode >> 9) & 7) = res;
  17773. RET(8)
  17774. }
  17775. // LEA
  17776. OPCODE(0x41F0)
  17777. {
  17778. u32 adr, res;
  17779. u32 src, dst;
  17780. adr = AREG((Opcode >> 0) & 7);
  17781. DECODE_EXT_WORD
  17782. res = adr;
  17783. AREG((Opcode >> 9) & 7) = res;
  17784. RET(12)
  17785. }
  17786. // LEA
  17787. OPCODE(0x41F8)
  17788. {
  17789. u32 adr, res;
  17790. u32 src, dst;
  17791. FETCH_SWORD(adr);
  17792. res = adr;
  17793. AREG((Opcode >> 9) & 7) = res;
  17794. RET(8)
  17795. }
  17796. // LEA
  17797. OPCODE(0x41F9)
  17798. {
  17799. u32 adr, res;
  17800. u32 src, dst;
  17801. FETCH_LONG(adr);
  17802. res = adr;
  17803. AREG((Opcode >> 9) & 7) = res;
  17804. RET(12)
  17805. }
  17806. // LEA
  17807. OPCODE(0x41FA)
  17808. {
  17809. u32 adr, res;
  17810. u32 src, dst;
  17811. adr = GET_SWORD + GET_PC;
  17812. PC++;
  17813. res = adr;
  17814. AREG((Opcode >> 9) & 7) = res;
  17815. RET(8)
  17816. }
  17817. // LEA
  17818. OPCODE(0x41FB)
  17819. {
  17820. u32 adr, res;
  17821. u32 src, dst;
  17822. adr = GET_PC;
  17823. DECODE_EXT_WORD
  17824. res = adr;
  17825. AREG((Opcode >> 9) & 7) = res;
  17826. RET(12)
  17827. }
  17828. // STCC
  17829. OPCODE(0x50C0)
  17830. {
  17831. u32 adr, res;
  17832. u32 src, dst;
  17833. res = 0xFF;
  17834. DREGu8((Opcode >> 0) & 7) = res;
  17835. RET(6)
  17836. }
  17837. // STCC
  17838. OPCODE(0x51C0)
  17839. {
  17840. u32 adr, res;
  17841. u32 src, dst;
  17842. res = 0;
  17843. DREGu8((Opcode >> 0) & 7) = res;
  17844. RET(4)
  17845. }
  17846. // STCC
  17847. OPCODE(0x52C0)
  17848. {
  17849. u32 adr, res;
  17850. u32 src, dst;
  17851. if (flag_NotZ && (!(flag_C & 0x100)))
  17852. {
  17853. res = 0xFF;
  17854. DREGu8((Opcode >> 0) & 7) = res;
  17855. RET(6)
  17856. }
  17857. res = 0;
  17858. DREGu8((Opcode >> 0) & 7) = res;
  17859. RET(4)
  17860. }
  17861. // STCC
  17862. OPCODE(0x53C0)
  17863. {
  17864. u32 adr, res;
  17865. u32 src, dst;
  17866. if ((!flag_NotZ) || (flag_C & 0x100))
  17867. {
  17868. res = 0xFF;
  17869. DREGu8((Opcode >> 0) & 7) = res;
  17870. RET(6)
  17871. }
  17872. res = 0;
  17873. DREGu8((Opcode >> 0) & 7) = res;
  17874. RET(4)
  17875. }
  17876. // STCC
  17877. OPCODE(0x54C0)
  17878. {
  17879. u32 adr, res;
  17880. u32 src, dst;
  17881. if (!(flag_C & 0x100))
  17882. {
  17883. res = 0xFF;
  17884. DREGu8((Opcode >> 0) & 7) = res;
  17885. RET(6)
  17886. }
  17887. res = 0;
  17888. DREGu8((Opcode >> 0) & 7) = res;
  17889. RET(4)
  17890. }
  17891. // STCC
  17892. OPCODE(0x55C0)
  17893. {
  17894. u32 adr, res;
  17895. u32 src, dst;
  17896. if (flag_C & 0x100)
  17897. {
  17898. res = 0xFF;
  17899. DREGu8((Opcode >> 0) & 7) = res;
  17900. RET(6)
  17901. }
  17902. res = 0;
  17903. DREGu8((Opcode >> 0) & 7) = res;
  17904. RET(4)
  17905. }
  17906. // STCC
  17907. OPCODE(0x56C0)
  17908. {
  17909. u32 adr, res;
  17910. u32 src, dst;
  17911. if (flag_NotZ)
  17912. {
  17913. res = 0xFF;
  17914. DREGu8((Opcode >> 0) & 7) = res;
  17915. RET(6)
  17916. }
  17917. res = 0;
  17918. DREGu8((Opcode >> 0) & 7) = res;
  17919. RET(4)
  17920. }
  17921. // STCC
  17922. OPCODE(0x57C0)
  17923. {
  17924. u32 adr, res;
  17925. u32 src, dst;
  17926. if (!flag_NotZ)
  17927. {
  17928. res = 0xFF;
  17929. DREGu8((Opcode >> 0) & 7) = res;
  17930. RET(6)
  17931. }
  17932. res = 0;
  17933. DREGu8((Opcode >> 0) & 7) = res;
  17934. RET(4)
  17935. }
  17936. // STCC
  17937. OPCODE(0x58C0)
  17938. {
  17939. u32 adr, res;
  17940. u32 src, dst;
  17941. if (!(flag_V & 0x80))
  17942. {
  17943. res = 0xFF;
  17944. DREGu8((Opcode >> 0) & 7) = res;
  17945. RET(6)
  17946. }
  17947. res = 0;
  17948. DREGu8((Opcode >> 0) & 7) = res;
  17949. RET(4)
  17950. }
  17951. // STCC
  17952. OPCODE(0x59C0)
  17953. {
  17954. u32 adr, res;
  17955. u32 src, dst;
  17956. if (flag_V & 0x80)
  17957. {
  17958. res = 0xFF;
  17959. DREGu8((Opcode >> 0) & 7) = res;
  17960. RET(6)
  17961. }
  17962. res = 0;
  17963. DREGu8((Opcode >> 0) & 7) = res;
  17964. RET(4)
  17965. }
  17966. // STCC
  17967. OPCODE(0x5AC0)
  17968. {
  17969. u32 adr, res;
  17970. u32 src, dst;
  17971. if (!(flag_N & 0x80))
  17972. {
  17973. res = 0xFF;
  17974. DREGu8((Opcode >> 0) & 7) = res;
  17975. RET(6)
  17976. }
  17977. res = 0;
  17978. DREGu8((Opcode >> 0) & 7) = res;
  17979. RET(4)
  17980. }
  17981. // STCC
  17982. OPCODE(0x5BC0)
  17983. {
  17984. u32 adr, res;
  17985. u32 src, dst;
  17986. if (flag_N & 0x80)
  17987. {
  17988. res = 0xFF;
  17989. DREGu8((Opcode >> 0) & 7) = res;
  17990. RET(6)
  17991. }
  17992. res = 0;
  17993. DREGu8((Opcode >> 0) & 7) = res;
  17994. RET(4)
  17995. }
  17996. // STCC
  17997. OPCODE(0x5CC0)
  17998. {
  17999. u32 adr, res;
  18000. u32 src, dst;
  18001. if (!((flag_N ^ flag_V) & 0x80))
  18002. {
  18003. res = 0xFF;
  18004. DREGu8((Opcode >> 0) & 7) = res;
  18005. RET(6)
  18006. }
  18007. res = 0;
  18008. DREGu8((Opcode >> 0) & 7) = res;
  18009. RET(4)
  18010. }
  18011. // STCC
  18012. OPCODE(0x5DC0)
  18013. {
  18014. u32 adr, res;
  18015. u32 src, dst;
  18016. if ((flag_N ^ flag_V) & 0x80)
  18017. {
  18018. res = 0xFF;
  18019. DREGu8((Opcode >> 0) & 7) = res;
  18020. RET(6)
  18021. }
  18022. res = 0;
  18023. DREGu8((Opcode >> 0) & 7) = res;
  18024. RET(4)
  18025. }
  18026. // STCC
  18027. OPCODE(0x5EC0)
  18028. {
  18029. u32 adr, res;
  18030. u32 src, dst;
  18031. if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
  18032. {
  18033. res = 0xFF;
  18034. DREGu8((Opcode >> 0) & 7) = res;
  18035. RET(6)
  18036. }
  18037. res = 0;
  18038. DREGu8((Opcode >> 0) & 7) = res;
  18039. RET(4)
  18040. }
  18041. // STCC
  18042. OPCODE(0x5FC0)
  18043. {
  18044. u32 adr, res;
  18045. u32 src, dst;
  18046. if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
  18047. {
  18048. res = 0xFF;
  18049. DREGu8((Opcode >> 0) & 7) = res;
  18050. RET(6)
  18051. }
  18052. res = 0;
  18053. DREGu8((Opcode >> 0) & 7) = res;
  18054. RET(4)
  18055. }
  18056. // STCC
  18057. OPCODE(0x50D0)
  18058. {
  18059. u32 adr, res;
  18060. u32 src, dst;
  18061. adr = AREG((Opcode >> 0) & 7);
  18062. res = 0xFF;
  18063. PRE_IO
  18064. WRITE_BYTE_F(adr, res)
  18065. POST_IO
  18066. RET(12)
  18067. }
  18068. // STCC
  18069. OPCODE(0x51D0)
  18070. {
  18071. u32 adr, res;
  18072. u32 src, dst;
  18073. adr = AREG((Opcode >> 0) & 7);
  18074. res = 0;
  18075. PRE_IO
  18076. WRITE_BYTE_F(adr, res)
  18077. POST_IO
  18078. RET(12)
  18079. }
  18080. // STCC
  18081. OPCODE(0x52D0)
  18082. {
  18083. u32 adr, res;
  18084. u32 src, dst;
  18085. adr = AREG((Opcode >> 0) & 7);
  18086. if (flag_NotZ && (!(flag_C & 0x100)))
  18087. {
  18088. res = 0xFF;
  18089. PRE_IO
  18090. WRITE_BYTE_F(adr, res)
  18091. POST_IO
  18092. RET(12)
  18093. }
  18094. res = 0;
  18095. PRE_IO
  18096. WRITE_BYTE_F(adr, res)
  18097. POST_IO
  18098. RET(12)
  18099. }
  18100. // STCC
  18101. OPCODE(0x53D0)
  18102. {
  18103. u32 adr, res;
  18104. u32 src, dst;
  18105. adr = AREG((Opcode >> 0) & 7);
  18106. if ((!flag_NotZ) || (flag_C & 0x100))
  18107. {
  18108. res = 0xFF;
  18109. PRE_IO
  18110. WRITE_BYTE_F(adr, res)
  18111. POST_IO
  18112. RET(12)
  18113. }
  18114. res = 0;
  18115. PRE_IO
  18116. WRITE_BYTE_F(adr, res)
  18117. POST_IO
  18118. RET(12)
  18119. }
  18120. // STCC
  18121. OPCODE(0x54D0)
  18122. {
  18123. u32 adr, res;
  18124. u32 src, dst;
  18125. adr = AREG((Opcode >> 0) & 7);
  18126. if (!(flag_C & 0x100))
  18127. {
  18128. res = 0xFF;
  18129. PRE_IO
  18130. WRITE_BYTE_F(adr, res)
  18131. POST_IO
  18132. RET(12)
  18133. }
  18134. res = 0;
  18135. PRE_IO
  18136. WRITE_BYTE_F(adr, res)
  18137. POST_IO
  18138. RET(12)
  18139. }
  18140. // STCC
  18141. OPCODE(0x55D0)
  18142. {
  18143. u32 adr, res;
  18144. u32 src, dst;
  18145. adr = AREG((Opcode >> 0) & 7);
  18146. if (flag_C & 0x100)
  18147. {
  18148. res = 0xFF;
  18149. PRE_IO
  18150. WRITE_BYTE_F(adr, res)
  18151. POST_IO
  18152. RET(12)
  18153. }
  18154. res = 0;
  18155. PRE_IO
  18156. WRITE_BYTE_F(adr, res)
  18157. POST_IO
  18158. RET(12)
  18159. }
  18160. // STCC
  18161. OPCODE(0x56D0)
  18162. {
  18163. u32 adr, res;
  18164. u32 src, dst;
  18165. adr = AREG((Opcode >> 0) & 7);
  18166. if (flag_NotZ)
  18167. {
  18168. res = 0xFF;
  18169. PRE_IO
  18170. WRITE_BYTE_F(adr, res)
  18171. POST_IO
  18172. RET(12)
  18173. }
  18174. res = 0;
  18175. PRE_IO
  18176. WRITE_BYTE_F(adr, res)
  18177. POST_IO
  18178. RET(12)
  18179. }
  18180. // STCC
  18181. OPCODE(0x57D0)
  18182. {
  18183. u32 adr, res;
  18184. u32 src, dst;
  18185. adr = AREG((Opcode >> 0) & 7);
  18186. if (!flag_NotZ)
  18187. {
  18188. res = 0xFF;
  18189. PRE_IO
  18190. WRITE_BYTE_F(adr, res)
  18191. POST_IO
  18192. RET(12)
  18193. }
  18194. res = 0;
  18195. PRE_IO
  18196. WRITE_BYTE_F(adr, res)
  18197. POST_IO
  18198. RET(12)
  18199. }
  18200. // STCC
  18201. OPCODE(0x58D0)
  18202. {
  18203. u32 adr, res;
  18204. u32 src, dst;
  18205. adr = AREG((Opcode >> 0) & 7);
  18206. if (!(flag_V & 0x80))
  18207. {
  18208. res = 0xFF;
  18209. PRE_IO
  18210. WRITE_BYTE_F(adr, res)
  18211. POST_IO
  18212. RET(12)
  18213. }
  18214. res = 0;
  18215. PRE_IO
  18216. WRITE_BYTE_F(adr, res)
  18217. POST_IO
  18218. RET(12)
  18219. }
  18220. // STCC
  18221. OPCODE(0x59D0)
  18222. {
  18223. u32 adr, res;
  18224. u32 src, dst;
  18225. adr = AREG((Opcode >> 0) & 7);
  18226. if (flag_V & 0x80)
  18227. {
  18228. res = 0xFF;
  18229. PRE_IO
  18230. WRITE_BYTE_F(adr, res)
  18231. POST_IO
  18232. RET(12)
  18233. }
  18234. res = 0;
  18235. PRE_IO
  18236. WRITE_BYTE_F(adr, res)
  18237. POST_IO
  18238. RET(12)
  18239. }
  18240. // STCC
  18241. OPCODE(0x5AD0)
  18242. {
  18243. u32 adr, res;
  18244. u32 src, dst;
  18245. adr = AREG((Opcode >> 0) & 7);
  18246. if (!(flag_N & 0x80))
  18247. {
  18248. res = 0xFF;
  18249. PRE_IO
  18250. WRITE_BYTE_F(adr, res)
  18251. POST_IO
  18252. RET(12)
  18253. }
  18254. res = 0;
  18255. PRE_IO
  18256. WRITE_BYTE_F(adr, res)
  18257. POST_IO
  18258. RET(12)
  18259. }
  18260. // STCC
  18261. OPCODE(0x5BD0)
  18262. {
  18263. u32 adr, res;
  18264. u32 src, dst;
  18265. adr = AREG((Opcode >> 0) & 7);
  18266. if (flag_N & 0x80)
  18267. {
  18268. res = 0xFF;
  18269. PRE_IO
  18270. WRITE_BYTE_F(adr, res)
  18271. POST_IO
  18272. RET(12)
  18273. }
  18274. res = 0;
  18275. PRE_IO
  18276. WRITE_BYTE_F(adr, res)
  18277. POST_IO
  18278. RET(12)
  18279. }
  18280. // STCC
  18281. OPCODE(0x5CD0)
  18282. {
  18283. u32 adr, res;
  18284. u32 src, dst;
  18285. adr = AREG((Opcode >> 0) & 7);
  18286. if (!((flag_N ^ flag_V) & 0x80))
  18287. {
  18288. res = 0xFF;
  18289. PRE_IO
  18290. WRITE_BYTE_F(adr, res)
  18291. POST_IO
  18292. RET(12)
  18293. }
  18294. res = 0;
  18295. PRE_IO
  18296. WRITE_BYTE_F(adr, res)
  18297. POST_IO
  18298. RET(12)
  18299. }
  18300. // STCC
  18301. OPCODE(0x5DD0)
  18302. {
  18303. u32 adr, res;
  18304. u32 src, dst;
  18305. adr = AREG((Opcode >> 0) & 7);
  18306. if ((flag_N ^ flag_V) & 0x80)
  18307. {
  18308. res = 0xFF;
  18309. PRE_IO
  18310. WRITE_BYTE_F(adr, res)
  18311. POST_IO
  18312. RET(12)
  18313. }
  18314. res = 0;
  18315. PRE_IO
  18316. WRITE_BYTE_F(adr, res)
  18317. POST_IO
  18318. RET(12)
  18319. }
  18320. // STCC
  18321. OPCODE(0x5ED0)
  18322. {
  18323. u32 adr, res;
  18324. u32 src, dst;
  18325. adr = AREG((Opcode >> 0) & 7);
  18326. if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
  18327. {
  18328. res = 0xFF;
  18329. PRE_IO
  18330. WRITE_BYTE_F(adr, res)
  18331. POST_IO
  18332. RET(12)
  18333. }
  18334. res = 0;
  18335. PRE_IO
  18336. WRITE_BYTE_F(adr, res)
  18337. POST_IO
  18338. RET(12)
  18339. }
  18340. // STCC
  18341. OPCODE(0x5FD0)
  18342. {
  18343. u32 adr, res;
  18344. u32 src, dst;
  18345. adr = AREG((Opcode >> 0) & 7);
  18346. if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
  18347. {
  18348. res = 0xFF;
  18349. PRE_IO
  18350. WRITE_BYTE_F(adr, res)
  18351. POST_IO
  18352. RET(12)
  18353. }
  18354. res = 0;
  18355. PRE_IO
  18356. WRITE_BYTE_F(adr, res)
  18357. POST_IO
  18358. RET(12)
  18359. }
  18360. // STCC
  18361. OPCODE(0x50D8)
  18362. {
  18363. u32 adr, res;
  18364. u32 src, dst;
  18365. adr = AREG((Opcode >> 0) & 7);
  18366. AREG((Opcode >> 0) & 7) += 1;
  18367. res = 0xFF;
  18368. PRE_IO
  18369. WRITE_BYTE_F(adr, res)
  18370. POST_IO
  18371. RET(12)
  18372. }
  18373. // STCC
  18374. OPCODE(0x51D8)
  18375. {
  18376. u32 adr, res;
  18377. u32 src, dst;
  18378. adr = AREG((Opcode >> 0) & 7);
  18379. AREG((Opcode >> 0) & 7) += 1;
  18380. res = 0;
  18381. PRE_IO
  18382. WRITE_BYTE_F(adr, res)
  18383. POST_IO
  18384. RET(12)
  18385. }
  18386. // STCC
  18387. OPCODE(0x52D8)
  18388. {
  18389. u32 adr, res;
  18390. u32 src, dst;
  18391. adr = AREG((Opcode >> 0) & 7);
  18392. AREG((Opcode >> 0) & 7) += 1;
  18393. if (flag_NotZ && (!(flag_C & 0x100)))
  18394. {
  18395. res = 0xFF;
  18396. PRE_IO
  18397. WRITE_BYTE_F(adr, res)
  18398. POST_IO
  18399. RET(12)
  18400. }
  18401. res = 0;
  18402. PRE_IO
  18403. WRITE_BYTE_F(adr, res)
  18404. POST_IO
  18405. RET(12)
  18406. }
  18407. // STCC
  18408. OPCODE(0x53D8)
  18409. {
  18410. u32 adr, res;
  18411. u32 src, dst;
  18412. adr = AREG((Opcode >> 0) & 7);
  18413. AREG((Opcode >> 0) & 7) += 1;
  18414. if ((!flag_NotZ) || (flag_C & 0x100))
  18415. {
  18416. res = 0xFF;
  18417. PRE_IO
  18418. WRITE_BYTE_F(adr, res)
  18419. POST_IO
  18420. RET(12)
  18421. }
  18422. res = 0;
  18423. PRE_IO
  18424. WRITE_BYTE_F(adr, res)
  18425. POST_IO
  18426. RET(12)
  18427. }
  18428. // STCC
  18429. OPCODE(0x54D8)
  18430. {
  18431. u32 adr, res;
  18432. u32 src, dst;
  18433. adr = AREG((Opcode >> 0) & 7);
  18434. AREG((Opcode >> 0) & 7) += 1;
  18435. if (!(flag_C & 0x100))
  18436. {
  18437. res = 0xFF;
  18438. PRE_IO
  18439. WRITE_BYTE_F(adr, res)
  18440. POST_IO
  18441. RET(12)
  18442. }
  18443. res = 0;
  18444. PRE_IO
  18445. WRITE_BYTE_F(adr, res)
  18446. POST_IO
  18447. RET(12)
  18448. }
  18449. // STCC
  18450. OPCODE(0x55D8)
  18451. {
  18452. u32 adr, res;
  18453. u32 src, dst;
  18454. adr = AREG((Opcode >> 0) & 7);
  18455. AREG((Opcode >> 0) & 7) += 1;
  18456. if (flag_C & 0x100)
  18457. {
  18458. res = 0xFF;
  18459. PRE_IO
  18460. WRITE_BYTE_F(adr, res)
  18461. POST_IO
  18462. RET(12)
  18463. }
  18464. res = 0;
  18465. PRE_IO
  18466. WRITE_BYTE_F(adr, res)
  18467. POST_IO
  18468. RET(12)
  18469. }
  18470. // STCC
  18471. OPCODE(0x56D8)
  18472. {
  18473. u32 adr, res;
  18474. u32 src, dst;
  18475. adr = AREG((Opcode >> 0) & 7);
  18476. AREG((Opcode >> 0) & 7) += 1;
  18477. if (flag_NotZ)
  18478. {
  18479. res = 0xFF;
  18480. PRE_IO
  18481. WRITE_BYTE_F(adr, res)
  18482. POST_IO
  18483. RET(12)
  18484. }
  18485. res = 0;
  18486. PRE_IO
  18487. WRITE_BYTE_F(adr, res)
  18488. POST_IO
  18489. RET(12)
  18490. }
  18491. // STCC
  18492. OPCODE(0x57D8)
  18493. {
  18494. u32 adr, res;
  18495. u32 src, dst;
  18496. adr = AREG((Opcode >> 0) & 7);
  18497. AREG((Opcode >> 0) & 7) += 1;
  18498. if (!flag_NotZ)
  18499. {
  18500. res = 0xFF;
  18501. PRE_IO
  18502. WRITE_BYTE_F(adr, res)
  18503. POST_IO
  18504. RET(12)
  18505. }
  18506. res = 0;
  18507. PRE_IO
  18508. WRITE_BYTE_F(adr, res)
  18509. POST_IO
  18510. RET(12)
  18511. }
  18512. // STCC
  18513. OPCODE(0x58D8)
  18514. {
  18515. u32 adr, res;
  18516. u32 src, dst;
  18517. adr = AREG((Opcode >> 0) & 7);
  18518. AREG((Opcode >> 0) & 7) += 1;
  18519. if (!(flag_V & 0x80))
  18520. {
  18521. res = 0xFF;
  18522. PRE_IO
  18523. WRITE_BYTE_F(adr, res)
  18524. POST_IO
  18525. RET(12)
  18526. }
  18527. res = 0;
  18528. PRE_IO
  18529. WRITE_BYTE_F(adr, res)
  18530. POST_IO
  18531. RET(12)
  18532. }
  18533. // STCC
  18534. OPCODE(0x59D8)
  18535. {
  18536. u32 adr, res;
  18537. u32 src, dst;
  18538. adr = AREG((Opcode >> 0) & 7);
  18539. AREG((Opcode >> 0) & 7) += 1;
  18540. if (flag_V & 0x80)
  18541. {
  18542. res = 0xFF;
  18543. PRE_IO
  18544. WRITE_BYTE_F(adr, res)
  18545. POST_IO
  18546. RET(12)
  18547. }
  18548. res = 0;
  18549. PRE_IO
  18550. WRITE_BYTE_F(adr, res)
  18551. POST_IO
  18552. RET(12)
  18553. }
  18554. // STCC
  18555. OPCODE(0x5AD8)
  18556. {
  18557. u32 adr, res;
  18558. u32 src, dst;
  18559. adr = AREG((Opcode >> 0) & 7);
  18560. AREG((Opcode >> 0) & 7) += 1;
  18561. if (!(flag_N & 0x80))
  18562. {
  18563. res = 0xFF;
  18564. PRE_IO
  18565. WRITE_BYTE_F(adr, res)
  18566. POST_IO
  18567. RET(12)
  18568. }
  18569. res = 0;
  18570. PRE_IO
  18571. WRITE_BYTE_F(adr, res)
  18572. POST_IO
  18573. RET(12)
  18574. }
  18575. // STCC
  18576. OPCODE(0x5BD8)
  18577. {
  18578. u32 adr, res;
  18579. u32 src, dst;
  18580. adr = AREG((Opcode >> 0) & 7);
  18581. AREG((Opcode >> 0) & 7) += 1;
  18582. if (flag_N & 0x80)
  18583. {
  18584. res = 0xFF;
  18585. PRE_IO
  18586. WRITE_BYTE_F(adr, res)
  18587. POST_IO
  18588. RET(12)
  18589. }
  18590. res = 0;
  18591. PRE_IO
  18592. WRITE_BYTE_F(adr, res)
  18593. POST_IO
  18594. RET(12)
  18595. }
  18596. // STCC
  18597. OPCODE(0x5CD8)
  18598. {
  18599. u32 adr, res;
  18600. u32 src, dst;
  18601. adr = AREG((Opcode >> 0) & 7);
  18602. AREG((Opcode >> 0) & 7) += 1;
  18603. if (!((flag_N ^ flag_V) & 0x80))
  18604. {
  18605. res = 0xFF;
  18606. PRE_IO
  18607. WRITE_BYTE_F(adr, res)
  18608. POST_IO
  18609. RET(12)
  18610. }
  18611. res = 0;
  18612. PRE_IO
  18613. WRITE_BYTE_F(adr, res)
  18614. POST_IO
  18615. RET(12)
  18616. }
  18617. // STCC
  18618. OPCODE(0x5DD8)
  18619. {
  18620. u32 adr, res;
  18621. u32 src, dst;
  18622. adr = AREG((Opcode >> 0) & 7);
  18623. AREG((Opcode >> 0) & 7) += 1;
  18624. if ((flag_N ^ flag_V) & 0x80)
  18625. {
  18626. res = 0xFF;
  18627. PRE_IO
  18628. WRITE_BYTE_F(adr, res)
  18629. POST_IO
  18630. RET(12)
  18631. }
  18632. res = 0;
  18633. PRE_IO
  18634. WRITE_BYTE_F(adr, res)
  18635. POST_IO
  18636. RET(12)
  18637. }
  18638. // STCC
  18639. OPCODE(0x5ED8)
  18640. {
  18641. u32 adr, res;
  18642. u32 src, dst;
  18643. adr = AREG((Opcode >> 0) & 7);
  18644. AREG((Opcode >> 0) & 7) += 1;
  18645. if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
  18646. {
  18647. res = 0xFF;
  18648. PRE_IO
  18649. WRITE_BYTE_F(adr, res)
  18650. POST_IO
  18651. RET(12)
  18652. }
  18653. res = 0;
  18654. PRE_IO
  18655. WRITE_BYTE_F(adr, res)
  18656. POST_IO
  18657. RET(12)
  18658. }
  18659. // STCC
  18660. OPCODE(0x5FD8)
  18661. {
  18662. u32 adr, res;
  18663. u32 src, dst;
  18664. adr = AREG((Opcode >> 0) & 7);
  18665. AREG((Opcode >> 0) & 7) += 1;
  18666. if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
  18667. {
  18668. res = 0xFF;
  18669. PRE_IO
  18670. WRITE_BYTE_F(adr, res)
  18671. POST_IO
  18672. RET(12)
  18673. }
  18674. res = 0;
  18675. PRE_IO
  18676. WRITE_BYTE_F(adr, res)
  18677. POST_IO
  18678. RET(12)
  18679. }
  18680. // STCC
  18681. OPCODE(0x50E0)
  18682. {
  18683. u32 adr, res;
  18684. u32 src, dst;
  18685. adr = AREG((Opcode >> 0) & 7) - 1;
  18686. AREG((Opcode >> 0) & 7) = adr;
  18687. res = 0xFF;
  18688. PRE_IO
  18689. WRITE_BYTE_F(adr, res)
  18690. POST_IO
  18691. RET(14)
  18692. }
  18693. // STCC
  18694. OPCODE(0x51E0)
  18695. {
  18696. u32 adr, res;
  18697. u32 src, dst;
  18698. adr = AREG((Opcode >> 0) & 7) - 1;
  18699. AREG((Opcode >> 0) & 7) = adr;
  18700. res = 0;
  18701. PRE_IO
  18702. WRITE_BYTE_F(adr, res)
  18703. POST_IO
  18704. RET(14)
  18705. }
  18706. // STCC
  18707. OPCODE(0x52E0)
  18708. {
  18709. u32 adr, res;
  18710. u32 src, dst;
  18711. adr = AREG((Opcode >> 0) & 7) - 1;
  18712. AREG((Opcode >> 0) & 7) = adr;
  18713. if (flag_NotZ && (!(flag_C & 0x100)))
  18714. {
  18715. res = 0xFF;
  18716. PRE_IO
  18717. WRITE_BYTE_F(adr, res)
  18718. POST_IO
  18719. RET(14)
  18720. }
  18721. res = 0;
  18722. PRE_IO
  18723. WRITE_BYTE_F(adr, res)
  18724. POST_IO
  18725. RET(14)
  18726. }
  18727. // STCC
  18728. OPCODE(0x53E0)
  18729. {
  18730. u32 adr, res;
  18731. u32 src, dst;
  18732. adr = AREG((Opcode >> 0) & 7) - 1;
  18733. AREG((Opcode >> 0) & 7) = adr;
  18734. if ((!flag_NotZ) || (flag_C & 0x100))
  18735. {
  18736. res = 0xFF;
  18737. PRE_IO
  18738. WRITE_BYTE_F(adr, res)
  18739. POST_IO
  18740. RET(14)
  18741. }
  18742. res = 0;
  18743. PRE_IO
  18744. WRITE_BYTE_F(adr, res)
  18745. POST_IO
  18746. RET(14)
  18747. }
  18748. // STCC
  18749. OPCODE(0x54E0)
  18750. {
  18751. u32 adr, res;
  18752. u32 src, dst;
  18753. adr = AREG((Opcode >> 0) & 7) - 1;
  18754. AREG((Opcode >> 0) & 7) = adr;
  18755. if (!(flag_C & 0x100))
  18756. {
  18757. res = 0xFF;
  18758. PRE_IO
  18759. WRITE_BYTE_F(adr, res)
  18760. POST_IO
  18761. RET(14)
  18762. }
  18763. res = 0;
  18764. PRE_IO
  18765. WRITE_BYTE_F(adr, res)
  18766. POST_IO
  18767. RET(14)
  18768. }
  18769. // STCC
  18770. OPCODE(0x55E0)
  18771. {
  18772. u32 adr, res;
  18773. u32 src, dst;
  18774. adr = AREG((Opcode >> 0) & 7) - 1;
  18775. AREG((Opcode >> 0) & 7) = adr;
  18776. if (flag_C & 0x100)
  18777. {
  18778. res = 0xFF;
  18779. PRE_IO
  18780. WRITE_BYTE_F(adr, res)
  18781. POST_IO
  18782. RET(14)
  18783. }
  18784. res = 0;
  18785. PRE_IO
  18786. WRITE_BYTE_F(adr, res)
  18787. POST_IO
  18788. RET(14)
  18789. }
  18790. // STCC
  18791. OPCODE(0x56E0)
  18792. {
  18793. u32 adr, res;
  18794. u32 src, dst;
  18795. adr = AREG((Opcode >> 0) & 7) - 1;
  18796. AREG((Opcode >> 0) & 7) = adr;
  18797. if (flag_NotZ)
  18798. {
  18799. res = 0xFF;
  18800. PRE_IO
  18801. WRITE_BYTE_F(adr, res)
  18802. POST_IO
  18803. RET(14)
  18804. }
  18805. res = 0;
  18806. PRE_IO
  18807. WRITE_BYTE_F(adr, res)
  18808. POST_IO
  18809. RET(14)
  18810. }
  18811. // STCC
  18812. OPCODE(0x57E0)
  18813. {
  18814. u32 adr, res;
  18815. u32 src, dst;
  18816. adr = AREG((Opcode >> 0) & 7) - 1;
  18817. AREG((Opcode >> 0) & 7) = adr;
  18818. if (!flag_NotZ)
  18819. {
  18820. res = 0xFF;
  18821. PRE_IO
  18822. WRITE_BYTE_F(adr, res)
  18823. POST_IO
  18824. RET(14)
  18825. }
  18826. res = 0;
  18827. PRE_IO
  18828. WRITE_BYTE_F(adr, res)
  18829. POST_IO
  18830. RET(14)
  18831. }
  18832. // STCC
  18833. OPCODE(0x58E0)
  18834. {
  18835. u32 adr, res;
  18836. u32 src, dst;
  18837. adr = AREG((Opcode >> 0) & 7) - 1;
  18838. AREG((Opcode >> 0) & 7) = adr;
  18839. if (!(flag_V & 0x80))
  18840. {
  18841. res = 0xFF;
  18842. PRE_IO
  18843. WRITE_BYTE_F(adr, res)
  18844. POST_IO
  18845. RET(14)
  18846. }
  18847. res = 0;
  18848. PRE_IO
  18849. WRITE_BYTE_F(adr, res)
  18850. POST_IO
  18851. RET(14)
  18852. }
  18853. // STCC
  18854. OPCODE(0x59E0)
  18855. {
  18856. u32 adr, res;
  18857. u32 src, dst;
  18858. adr = AREG((Opcode >> 0) & 7) - 1;
  18859. AREG((Opcode >> 0) & 7) = adr;
  18860. if (flag_V & 0x80)
  18861. {
  18862. res = 0xFF;
  18863. PRE_IO
  18864. WRITE_BYTE_F(adr, res)
  18865. POST_IO
  18866. RET(14)
  18867. }
  18868. res = 0;
  18869. PRE_IO
  18870. WRITE_BYTE_F(adr, res)
  18871. POST_IO
  18872. RET(14)
  18873. }
  18874. // STCC
  18875. OPCODE(0x5AE0)
  18876. {
  18877. u32 adr, res;
  18878. u32 src, dst;
  18879. adr = AREG((Opcode >> 0) & 7) - 1;
  18880. AREG((Opcode >> 0) & 7) = adr;
  18881. if (!(flag_N & 0x80))
  18882. {
  18883. res = 0xFF;
  18884. PRE_IO
  18885. WRITE_BYTE_F(adr, res)
  18886. POST_IO
  18887. RET(14)
  18888. }
  18889. res = 0;
  18890. PRE_IO
  18891. WRITE_BYTE_F(adr, res)
  18892. POST_IO
  18893. RET(14)
  18894. }
  18895. // STCC
  18896. OPCODE(0x5BE0)
  18897. {
  18898. u32 adr, res;
  18899. u32 src, dst;
  18900. adr = AREG((Opcode >> 0) & 7) - 1;
  18901. AREG((Opcode >> 0) & 7) = adr;
  18902. if (flag_N & 0x80)
  18903. {
  18904. res = 0xFF;
  18905. PRE_IO
  18906. WRITE_BYTE_F(adr, res)
  18907. POST_IO
  18908. RET(14)
  18909. }
  18910. res = 0;
  18911. PRE_IO
  18912. WRITE_BYTE_F(adr, res)
  18913. POST_IO
  18914. RET(14)
  18915. }
  18916. // STCC
  18917. OPCODE(0x5CE0)
  18918. {
  18919. u32 adr, res;
  18920. u32 src, dst;
  18921. adr = AREG((Opcode >> 0) & 7) - 1;
  18922. AREG((Opcode >> 0) & 7) = adr;
  18923. if (!((flag_N ^ flag_V) & 0x80))
  18924. {
  18925. res = 0xFF;
  18926. PRE_IO
  18927. WRITE_BYTE_F(adr, res)
  18928. POST_IO
  18929. RET(14)
  18930. }
  18931. res = 0;
  18932. PRE_IO
  18933. WRITE_BYTE_F(adr, res)
  18934. POST_IO
  18935. RET(14)
  18936. }
  18937. // STCC
  18938. OPCODE(0x5DE0)
  18939. {
  18940. u32 adr, res;
  18941. u32 src, dst;
  18942. adr = AREG((Opcode >> 0) & 7) - 1;
  18943. AREG((Opcode >> 0) & 7) = adr;
  18944. if ((flag_N ^ flag_V) & 0x80)
  18945. {
  18946. res = 0xFF;
  18947. PRE_IO
  18948. WRITE_BYTE_F(adr, res)
  18949. POST_IO
  18950. RET(14)
  18951. }
  18952. res = 0;
  18953. PRE_IO
  18954. WRITE_BYTE_F(adr, res)
  18955. POST_IO
  18956. RET(14)
  18957. }
  18958. // STCC
  18959. OPCODE(0x5EE0)
  18960. {
  18961. u32 adr, res;
  18962. u32 src, dst;
  18963. adr = AREG((Opcode >> 0) & 7) - 1;
  18964. AREG((Opcode >> 0) & 7) = adr;
  18965. if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
  18966. {
  18967. res = 0xFF;
  18968. PRE_IO
  18969. WRITE_BYTE_F(adr, res)
  18970. POST_IO
  18971. RET(14)
  18972. }
  18973. res = 0;
  18974. PRE_IO
  18975. WRITE_BYTE_F(adr, res)
  18976. POST_IO
  18977. RET(14)
  18978. }
  18979. // STCC
  18980. OPCODE(0x5FE0)
  18981. {
  18982. u32 adr, res;
  18983. u32 src, dst;
  18984. adr = AREG((Opcode >> 0) & 7) - 1;
  18985. AREG((Opcode >> 0) & 7) = adr;
  18986. if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
  18987. {
  18988. res = 0xFF;
  18989. PRE_IO
  18990. WRITE_BYTE_F(adr, res)
  18991. POST_IO
  18992. RET(14)
  18993. }
  18994. res = 0;
  18995. PRE_IO
  18996. WRITE_BYTE_F(adr, res)
  18997. POST_IO
  18998. RET(14)
  18999. }
  19000. // STCC
  19001. OPCODE(0x50E8)
  19002. {
  19003. u32 adr, res;
  19004. u32 src, dst;
  19005. FETCH_SWORD(adr);
  19006. adr += AREG((Opcode >> 0) & 7);
  19007. res = 0xFF;
  19008. PRE_IO
  19009. WRITE_BYTE_F(adr, res)
  19010. POST_IO
  19011. RET(16)
  19012. }
  19013. // STCC
  19014. OPCODE(0x51E8)
  19015. {
  19016. u32 adr, res;
  19017. u32 src, dst;
  19018. FETCH_SWORD(adr);
  19019. adr += AREG((Opcode >> 0) & 7);
  19020. res = 0;
  19021. PRE_IO
  19022. WRITE_BYTE_F(adr, res)
  19023. POST_IO
  19024. RET(16)
  19025. }
  19026. // STCC
  19027. OPCODE(0x52E8)
  19028. {
  19029. u32 adr, res;
  19030. u32 src, dst;
  19031. FETCH_SWORD(adr);
  19032. adr += AREG((Opcode >> 0) & 7);
  19033. if (flag_NotZ && (!(flag_C & 0x100)))
  19034. {
  19035. res = 0xFF;
  19036. PRE_IO
  19037. WRITE_BYTE_F(adr, res)
  19038. POST_IO
  19039. RET(16)
  19040. }
  19041. res = 0;
  19042. PRE_IO
  19043. WRITE_BYTE_F(adr, res)
  19044. POST_IO
  19045. RET(16)
  19046. }
  19047. // STCC
  19048. OPCODE(0x53E8)
  19049. {
  19050. u32 adr, res;
  19051. u32 src, dst;
  19052. FETCH_SWORD(adr);
  19053. adr += AREG((Opcode >> 0) & 7);
  19054. if ((!flag_NotZ) || (flag_C & 0x100))
  19055. {
  19056. res = 0xFF;
  19057. PRE_IO
  19058. WRITE_BYTE_F(adr, res)
  19059. POST_IO
  19060. RET(16)
  19061. }
  19062. res = 0;
  19063. PRE_IO
  19064. WRITE_BYTE_F(adr, res)
  19065. POST_IO
  19066. RET(16)
  19067. }
  19068. // STCC
  19069. OPCODE(0x54E8)
  19070. {
  19071. u32 adr, res;
  19072. u32 src, dst;
  19073. FETCH_SWORD(adr);
  19074. adr += AREG((Opcode >> 0) & 7);
  19075. if (!(flag_C & 0x100))
  19076. {
  19077. res = 0xFF;
  19078. PRE_IO
  19079. WRITE_BYTE_F(adr, res)
  19080. POST_IO
  19081. RET(16)
  19082. }
  19083. res = 0;
  19084. PRE_IO
  19085. WRITE_BYTE_F(adr, res)
  19086. POST_IO
  19087. RET(16)
  19088. }
  19089. // STCC
  19090. OPCODE(0x55E8)
  19091. {
  19092. u32 adr, res;
  19093. u32 src, dst;
  19094. FETCH_SWORD(adr);
  19095. adr += AREG((Opcode >> 0) & 7);
  19096. if (flag_C & 0x100)
  19097. {
  19098. res = 0xFF;
  19099. PRE_IO
  19100. WRITE_BYTE_F(adr, res)
  19101. POST_IO
  19102. RET(16)
  19103. }
  19104. res = 0;
  19105. PRE_IO
  19106. WRITE_BYTE_F(adr, res)
  19107. POST_IO
  19108. RET(16)
  19109. }
  19110. // STCC
  19111. OPCODE(0x56E8)
  19112. {
  19113. u32 adr, res;
  19114. u32 src, dst;
  19115. FETCH_SWORD(adr);
  19116. adr += AREG((Opcode >> 0) & 7);
  19117. if (flag_NotZ)
  19118. {
  19119. res = 0xFF;
  19120. PRE_IO
  19121. WRITE_BYTE_F(adr, res)
  19122. POST_IO
  19123. RET(16)
  19124. }
  19125. res = 0;
  19126. PRE_IO
  19127. WRITE_BYTE_F(adr, res)
  19128. POST_IO
  19129. RET(16)
  19130. }
  19131. // STCC
  19132. OPCODE(0x57E8)
  19133. {
  19134. u32 adr, res;
  19135. u32 src, dst;
  19136. FETCH_SWORD(adr);
  19137. adr += AREG((Opcode >> 0) & 7);
  19138. if (!flag_NotZ)
  19139. {
  19140. res = 0xFF;
  19141. PRE_IO
  19142. WRITE_BYTE_F(adr, res)
  19143. POST_IO
  19144. RET(16)
  19145. }
  19146. res = 0;
  19147. PRE_IO
  19148. WRITE_BYTE_F(adr, res)
  19149. POST_IO
  19150. RET(16)
  19151. }
  19152. // STCC
  19153. OPCODE(0x58E8)
  19154. {
  19155. u32 adr, res;
  19156. u32 src, dst;
  19157. FETCH_SWORD(adr);
  19158. adr += AREG((Opcode >> 0) & 7);
  19159. if (!(flag_V & 0x80))
  19160. {
  19161. res = 0xFF;
  19162. PRE_IO
  19163. WRITE_BYTE_F(adr, res)
  19164. POST_IO
  19165. RET(16)
  19166. }
  19167. res = 0;
  19168. PRE_IO
  19169. WRITE_BYTE_F(adr, res)
  19170. POST_IO
  19171. RET(16)
  19172. }
  19173. // STCC
  19174. OPCODE(0x59E8)
  19175. {
  19176. u32 adr, res;
  19177. u32 src, dst;
  19178. FETCH_SWORD(adr);
  19179. adr += AREG((Opcode >> 0) & 7);
  19180. if (flag_V & 0x80)
  19181. {
  19182. res = 0xFF;
  19183. PRE_IO
  19184. WRITE_BYTE_F(adr, res)
  19185. POST_IO
  19186. RET(16)
  19187. }
  19188. res = 0;
  19189. PRE_IO
  19190. WRITE_BYTE_F(adr, res)
  19191. POST_IO
  19192. RET(16)
  19193. }
  19194. // STCC
  19195. OPCODE(0x5AE8)
  19196. {
  19197. u32 adr, res;
  19198. u32 src, dst;
  19199. FETCH_SWORD(adr);
  19200. adr += AREG((Opcode >> 0) & 7);
  19201. if (!(flag_N & 0x80))
  19202. {
  19203. res = 0xFF;
  19204. PRE_IO
  19205. WRITE_BYTE_F(adr, res)
  19206. POST_IO
  19207. RET(16)
  19208. }
  19209. res = 0;
  19210. PRE_IO
  19211. WRITE_BYTE_F(adr, res)
  19212. POST_IO
  19213. RET(16)
  19214. }
  19215. // STCC
  19216. OPCODE(0x5BE8)
  19217. {
  19218. u32 adr, res;
  19219. u32 src, dst;
  19220. FETCH_SWORD(adr);
  19221. adr += AREG((Opcode >> 0) & 7);
  19222. if (flag_N & 0x80)
  19223. {
  19224. res = 0xFF;
  19225. PRE_IO
  19226. WRITE_BYTE_F(adr, res)
  19227. POST_IO
  19228. RET(16)
  19229. }
  19230. res = 0;
  19231. PRE_IO
  19232. WRITE_BYTE_F(adr, res)
  19233. POST_IO
  19234. RET(16)
  19235. }
  19236. // STCC
  19237. OPCODE(0x5CE8)
  19238. {
  19239. u32 adr, res;
  19240. u32 src, dst;
  19241. FETCH_SWORD(adr);
  19242. adr += AREG((Opcode >> 0) & 7);
  19243. if (!((flag_N ^ flag_V) & 0x80))
  19244. {
  19245. res = 0xFF;
  19246. PRE_IO
  19247. WRITE_BYTE_F(adr, res)
  19248. POST_IO
  19249. RET(16)
  19250. }
  19251. res = 0;
  19252. PRE_IO
  19253. WRITE_BYTE_F(adr, res)
  19254. POST_IO
  19255. RET(16)
  19256. }
  19257. // STCC
  19258. OPCODE(0x5DE8)
  19259. {
  19260. u32 adr, res;
  19261. u32 src, dst;
  19262. FETCH_SWORD(adr);
  19263. adr += AREG((Opcode >> 0) & 7);
  19264. if ((flag_N ^ flag_V) & 0x80)
  19265. {
  19266. res = 0xFF;
  19267. PRE_IO
  19268. WRITE_BYTE_F(adr, res)
  19269. POST_IO
  19270. RET(16)
  19271. }
  19272. res = 0;
  19273. PRE_IO
  19274. WRITE_BYTE_F(adr, res)
  19275. POST_IO
  19276. RET(16)
  19277. }
  19278. // STCC
  19279. OPCODE(0x5EE8)
  19280. {
  19281. u32 adr, res;
  19282. u32 src, dst;
  19283. FETCH_SWORD(adr);
  19284. adr += AREG((Opcode >> 0) & 7);
  19285. if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
  19286. {
  19287. res = 0xFF;
  19288. PRE_IO
  19289. WRITE_BYTE_F(adr, res)
  19290. POST_IO
  19291. RET(16)
  19292. }
  19293. res = 0;
  19294. PRE_IO
  19295. WRITE_BYTE_F(adr, res)
  19296. POST_IO
  19297. RET(16)
  19298. }
  19299. // STCC
  19300. OPCODE(0x5FE8)
  19301. {
  19302. u32 adr, res;
  19303. u32 src, dst;
  19304. FETCH_SWORD(adr);
  19305. adr += AREG((Opcode >> 0) & 7);
  19306. if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
  19307. {
  19308. res = 0xFF;
  19309. PRE_IO
  19310. WRITE_BYTE_F(adr, res)
  19311. POST_IO
  19312. RET(16)
  19313. }
  19314. res = 0;
  19315. PRE_IO
  19316. WRITE_BYTE_F(adr, res)
  19317. POST_IO
  19318. RET(16)
  19319. }
  19320. // STCC
  19321. OPCODE(0x50F0)
  19322. {
  19323. u32 adr, res;
  19324. u32 src, dst;
  19325. adr = AREG((Opcode >> 0) & 7);
  19326. DECODE_EXT_WORD
  19327. res = 0xFF;
  19328. PRE_IO
  19329. WRITE_BYTE_F(adr, res)
  19330. POST_IO
  19331. RET(18)
  19332. }
  19333. // STCC
  19334. OPCODE(0x51F0)
  19335. {
  19336. u32 adr, res;
  19337. u32 src, dst;
  19338. adr = AREG((Opcode >> 0) & 7);
  19339. DECODE_EXT_WORD
  19340. res = 0;
  19341. PRE_IO
  19342. WRITE_BYTE_F(adr, res)
  19343. POST_IO
  19344. RET(18)
  19345. }
  19346. // STCC
  19347. OPCODE(0x52F0)
  19348. {
  19349. u32 adr, res;
  19350. u32 src, dst;
  19351. adr = AREG((Opcode >> 0) & 7);
  19352. DECODE_EXT_WORD
  19353. if (flag_NotZ && (!(flag_C & 0x100)))
  19354. {
  19355. res = 0xFF;
  19356. PRE_IO
  19357. WRITE_BYTE_F(adr, res)
  19358. POST_IO
  19359. RET(18)
  19360. }
  19361. res = 0;
  19362. PRE_IO
  19363. WRITE_BYTE_F(adr, res)
  19364. POST_IO
  19365. RET(18)
  19366. }
  19367. // STCC
  19368. OPCODE(0x53F0)
  19369. {
  19370. u32 adr, res;
  19371. u32 src, dst;
  19372. adr = AREG((Opcode >> 0) & 7);
  19373. DECODE_EXT_WORD
  19374. if ((!flag_NotZ) || (flag_C & 0x100))
  19375. {
  19376. res = 0xFF;
  19377. PRE_IO
  19378. WRITE_BYTE_F(adr, res)
  19379. POST_IO
  19380. RET(18)
  19381. }
  19382. res = 0;
  19383. PRE_IO
  19384. WRITE_BYTE_F(adr, res)
  19385. POST_IO
  19386. RET(18)
  19387. }
  19388. // STCC
  19389. OPCODE(0x54F0)
  19390. {
  19391. u32 adr, res;
  19392. u32 src, dst;
  19393. adr = AREG((Opcode >> 0) & 7);
  19394. DECODE_EXT_WORD
  19395. if (!(flag_C & 0x100))
  19396. {
  19397. res = 0xFF;
  19398. PRE_IO
  19399. WRITE_BYTE_F(adr, res)
  19400. POST_IO
  19401. RET(18)
  19402. }
  19403. res = 0;
  19404. PRE_IO
  19405. WRITE_BYTE_F(adr, res)
  19406. POST_IO
  19407. RET(18)
  19408. }
  19409. // STCC
  19410. OPCODE(0x55F0)
  19411. {
  19412. u32 adr, res;
  19413. u32 src, dst;
  19414. adr = AREG((Opcode >> 0) & 7);
  19415. DECODE_EXT_WORD
  19416. if (flag_C & 0x100)
  19417. {
  19418. res = 0xFF;
  19419. PRE_IO
  19420. WRITE_BYTE_F(adr, res)
  19421. POST_IO
  19422. RET(18)
  19423. }
  19424. res = 0;
  19425. PRE_IO
  19426. WRITE_BYTE_F(adr, res)
  19427. POST_IO
  19428. RET(18)
  19429. }
  19430. // STCC
  19431. OPCODE(0x56F0)
  19432. {
  19433. u32 adr, res;
  19434. u32 src, dst;
  19435. adr = AREG((Opcode >> 0) & 7);
  19436. DECODE_EXT_WORD
  19437. if (flag_NotZ)
  19438. {
  19439. res = 0xFF;
  19440. PRE_IO
  19441. WRITE_BYTE_F(adr, res)
  19442. POST_IO
  19443. RET(18)
  19444. }
  19445. res = 0;
  19446. PRE_IO
  19447. WRITE_BYTE_F(adr, res)
  19448. POST_IO
  19449. RET(18)
  19450. }
  19451. // STCC
  19452. OPCODE(0x57F0)
  19453. {
  19454. u32 adr, res;
  19455. u32 src, dst;
  19456. adr = AREG((Opcode >> 0) & 7);
  19457. DECODE_EXT_WORD
  19458. if (!flag_NotZ)
  19459. {
  19460. res = 0xFF;
  19461. PRE_IO
  19462. WRITE_BYTE_F(adr, res)
  19463. POST_IO
  19464. RET(18)
  19465. }
  19466. res = 0;
  19467. PRE_IO
  19468. WRITE_BYTE_F(adr, res)
  19469. POST_IO
  19470. RET(18)
  19471. }
  19472. // STCC
  19473. OPCODE(0x58F0)
  19474. {
  19475. u32 adr, res;
  19476. u32 src, dst;
  19477. adr = AREG((Opcode >> 0) & 7);
  19478. DECODE_EXT_WORD
  19479. if (!(flag_V & 0x80))
  19480. {
  19481. res = 0xFF;
  19482. PRE_IO
  19483. WRITE_BYTE_F(adr, res)
  19484. POST_IO
  19485. RET(18)
  19486. }
  19487. res = 0;
  19488. PRE_IO
  19489. WRITE_BYTE_F(adr, res)
  19490. POST_IO
  19491. RET(18)
  19492. }
  19493. // STCC
  19494. OPCODE(0x59F0)
  19495. {
  19496. u32 adr, res;
  19497. u32 src, dst;
  19498. adr = AREG((Opcode >> 0) & 7);
  19499. DECODE_EXT_WORD
  19500. if (flag_V & 0x80)
  19501. {
  19502. res = 0xFF;
  19503. PRE_IO
  19504. WRITE_BYTE_F(adr, res)
  19505. POST_IO
  19506. RET(18)
  19507. }
  19508. res = 0;
  19509. PRE_IO
  19510. WRITE_BYTE_F(adr, res)
  19511. POST_IO
  19512. RET(18)
  19513. }
  19514. // STCC
  19515. OPCODE(0x5AF0)
  19516. {
  19517. u32 adr, res;
  19518. u32 src, dst;
  19519. adr = AREG((Opcode >> 0) & 7);
  19520. DECODE_EXT_WORD
  19521. if (!(flag_N & 0x80))
  19522. {
  19523. res = 0xFF;
  19524. PRE_IO
  19525. WRITE_BYTE_F(adr, res)
  19526. POST_IO
  19527. RET(18)
  19528. }
  19529. res = 0;
  19530. PRE_IO
  19531. WRITE_BYTE_F(adr, res)
  19532. POST_IO
  19533. RET(18)
  19534. }
  19535. // STCC
  19536. OPCODE(0x5BF0)
  19537. {
  19538. u32 adr, res;
  19539. u32 src, dst;
  19540. adr = AREG((Opcode >> 0) & 7);
  19541. DECODE_EXT_WORD
  19542. if (flag_N & 0x80)
  19543. {
  19544. res = 0xFF;
  19545. PRE_IO
  19546. WRITE_BYTE_F(adr, res)
  19547. POST_IO
  19548. RET(18)
  19549. }
  19550. res = 0;
  19551. PRE_IO
  19552. WRITE_BYTE_F(adr, res)
  19553. POST_IO
  19554. RET(18)
  19555. }
  19556. // STCC
  19557. OPCODE(0x5CF0)
  19558. {
  19559. u32 adr, res;
  19560. u32 src, dst;
  19561. adr = AREG((Opcode >> 0) & 7);
  19562. DECODE_EXT_WORD
  19563. if (!((flag_N ^ flag_V) & 0x80))
  19564. {
  19565. res = 0xFF;
  19566. PRE_IO
  19567. WRITE_BYTE_F(adr, res)
  19568. POST_IO
  19569. RET(18)
  19570. }
  19571. res = 0;
  19572. PRE_IO
  19573. WRITE_BYTE_F(adr, res)
  19574. POST_IO
  19575. RET(18)
  19576. }
  19577. // STCC
  19578. OPCODE(0x5DF0)
  19579. {
  19580. u32 adr, res;
  19581. u32 src, dst;
  19582. adr = AREG((Opcode >> 0) & 7);
  19583. DECODE_EXT_WORD
  19584. if ((flag_N ^ flag_V) & 0x80)
  19585. {
  19586. res = 0xFF;
  19587. PRE_IO
  19588. WRITE_BYTE_F(adr, res)
  19589. POST_IO
  19590. RET(18)
  19591. }
  19592. res = 0;
  19593. PRE_IO
  19594. WRITE_BYTE_F(adr, res)
  19595. POST_IO
  19596. RET(18)
  19597. }
  19598. // STCC
  19599. OPCODE(0x5EF0)
  19600. {
  19601. u32 adr, res;
  19602. u32 src, dst;
  19603. adr = AREG((Opcode >> 0) & 7);
  19604. DECODE_EXT_WORD
  19605. if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
  19606. {
  19607. res = 0xFF;
  19608. PRE_IO
  19609. WRITE_BYTE_F(adr, res)
  19610. POST_IO
  19611. RET(18)
  19612. }
  19613. res = 0;
  19614. PRE_IO
  19615. WRITE_BYTE_F(adr, res)
  19616. POST_IO
  19617. RET(18)
  19618. }
  19619. // STCC
  19620. OPCODE(0x5FF0)
  19621. {
  19622. u32 adr, res;
  19623. u32 src, dst;
  19624. adr = AREG((Opcode >> 0) & 7);
  19625. DECODE_EXT_WORD
  19626. if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
  19627. {
  19628. res = 0xFF;
  19629. PRE_IO
  19630. WRITE_BYTE_F(adr, res)
  19631. POST_IO
  19632. RET(18)
  19633. }
  19634. res = 0;
  19635. PRE_IO
  19636. WRITE_BYTE_F(adr, res)
  19637. POST_IO
  19638. RET(18)
  19639. }
  19640. // STCC
  19641. OPCODE(0x50F8)
  19642. {
  19643. u32 adr, res;
  19644. u32 src, dst;
  19645. FETCH_SWORD(adr);
  19646. res = 0xFF;
  19647. PRE_IO
  19648. WRITE_BYTE_F(adr, res)
  19649. POST_IO
  19650. RET(16)
  19651. }
  19652. // STCC
  19653. OPCODE(0x51F8)
  19654. {
  19655. u32 adr, res;
  19656. u32 src, dst;
  19657. FETCH_SWORD(adr);
  19658. res = 0;
  19659. PRE_IO
  19660. WRITE_BYTE_F(adr, res)
  19661. POST_IO
  19662. RET(16)
  19663. }
  19664. // STCC
  19665. OPCODE(0x52F8)
  19666. {
  19667. u32 adr, res;
  19668. u32 src, dst;
  19669. FETCH_SWORD(adr);
  19670. if (flag_NotZ && (!(flag_C & 0x100)))
  19671. {
  19672. res = 0xFF;
  19673. PRE_IO
  19674. WRITE_BYTE_F(adr, res)
  19675. POST_IO
  19676. RET(16)
  19677. }
  19678. res = 0;
  19679. PRE_IO
  19680. WRITE_BYTE_F(adr, res)
  19681. POST_IO
  19682. RET(16)
  19683. }
  19684. // STCC
  19685. OPCODE(0x53F8)
  19686. {
  19687. u32 adr, res;
  19688. u32 src, dst;
  19689. FETCH_SWORD(adr);
  19690. if ((!flag_NotZ) || (flag_C & 0x100))
  19691. {
  19692. res = 0xFF;
  19693. PRE_IO
  19694. WRITE_BYTE_F(adr, res)
  19695. POST_IO
  19696. RET(16)
  19697. }
  19698. res = 0;
  19699. PRE_IO
  19700. WRITE_BYTE_F(adr, res)
  19701. POST_IO
  19702. RET(16)
  19703. }
  19704. // STCC
  19705. OPCODE(0x54F8)
  19706. {
  19707. u32 adr, res;
  19708. u32 src, dst;
  19709. FETCH_SWORD(adr);
  19710. if (!(flag_C & 0x100))
  19711. {
  19712. res = 0xFF;
  19713. PRE_IO
  19714. WRITE_BYTE_F(adr, res)
  19715. POST_IO
  19716. RET(16)
  19717. }
  19718. res = 0;
  19719. PRE_IO
  19720. WRITE_BYTE_F(adr, res)
  19721. POST_IO
  19722. RET(16)
  19723. }
  19724. // STCC
  19725. OPCODE(0x55F8)
  19726. {
  19727. u32 adr, res;
  19728. u32 src, dst;
  19729. FETCH_SWORD(adr);
  19730. if (flag_C & 0x100)
  19731. {
  19732. res = 0xFF;
  19733. PRE_IO
  19734. WRITE_BYTE_F(adr, res)
  19735. POST_IO
  19736. RET(16)
  19737. }
  19738. res = 0;
  19739. PRE_IO
  19740. WRITE_BYTE_F(adr, res)
  19741. POST_IO
  19742. RET(16)
  19743. }
  19744. // STCC
  19745. OPCODE(0x56F8)
  19746. {
  19747. u32 adr, res;
  19748. u32 src, dst;
  19749. FETCH_SWORD(adr);
  19750. if (flag_NotZ)
  19751. {
  19752. res = 0xFF;
  19753. PRE_IO
  19754. WRITE_BYTE_F(adr, res)
  19755. POST_IO
  19756. RET(16)
  19757. }
  19758. res = 0;
  19759. PRE_IO
  19760. WRITE_BYTE_F(adr, res)
  19761. POST_IO
  19762. RET(16)
  19763. }
  19764. // STCC
  19765. OPCODE(0x57F8)
  19766. {
  19767. u32 adr, res;
  19768. u32 src, dst;
  19769. FETCH_SWORD(adr);
  19770. if (!flag_NotZ)
  19771. {
  19772. res = 0xFF;
  19773. PRE_IO
  19774. WRITE_BYTE_F(adr, res)
  19775. POST_IO
  19776. RET(16)
  19777. }
  19778. res = 0;
  19779. PRE_IO
  19780. WRITE_BYTE_F(adr, res)
  19781. POST_IO
  19782. RET(16)
  19783. }
  19784. // STCC
  19785. OPCODE(0x58F8)
  19786. {
  19787. u32 adr, res;
  19788. u32 src, dst;
  19789. FETCH_SWORD(adr);
  19790. if (!(flag_V & 0x80))
  19791. {
  19792. res = 0xFF;
  19793. PRE_IO
  19794. WRITE_BYTE_F(adr, res)
  19795. POST_IO
  19796. RET(16)
  19797. }
  19798. res = 0;
  19799. PRE_IO
  19800. WRITE_BYTE_F(adr, res)
  19801. POST_IO
  19802. RET(16)
  19803. }
  19804. // STCC
  19805. OPCODE(0x59F8)
  19806. {
  19807. u32 adr, res;
  19808. u32 src, dst;
  19809. FETCH_SWORD(adr);
  19810. if (flag_V & 0x80)
  19811. {
  19812. res = 0xFF;
  19813. PRE_IO
  19814. WRITE_BYTE_F(adr, res)
  19815. POST_IO
  19816. RET(16)
  19817. }
  19818. res = 0;
  19819. PRE_IO
  19820. WRITE_BYTE_F(adr, res)
  19821. POST_IO
  19822. RET(16)
  19823. }
  19824. // STCC
  19825. OPCODE(0x5AF8)
  19826. {
  19827. u32 adr, res;
  19828. u32 src, dst;
  19829. FETCH_SWORD(adr);
  19830. if (!(flag_N & 0x80))
  19831. {
  19832. res = 0xFF;
  19833. PRE_IO
  19834. WRITE_BYTE_F(adr, res)
  19835. POST_IO
  19836. RET(16)
  19837. }
  19838. res = 0;
  19839. PRE_IO
  19840. WRITE_BYTE_F(adr, res)
  19841. POST_IO
  19842. RET(16)
  19843. }
  19844. // STCC
  19845. OPCODE(0x5BF8)
  19846. {
  19847. u32 adr, res;
  19848. u32 src, dst;
  19849. FETCH_SWORD(adr);
  19850. if (flag_N & 0x80)
  19851. {
  19852. res = 0xFF;
  19853. PRE_IO
  19854. WRITE_BYTE_F(adr, res)
  19855. POST_IO
  19856. RET(16)
  19857. }
  19858. res = 0;
  19859. PRE_IO
  19860. WRITE_BYTE_F(adr, res)
  19861. POST_IO
  19862. RET(16)
  19863. }
  19864. // STCC
  19865. OPCODE(0x5CF8)
  19866. {
  19867. u32 adr, res;
  19868. u32 src, dst;
  19869. FETCH_SWORD(adr);
  19870. if (!((flag_N ^ flag_V) & 0x80))
  19871. {
  19872. res = 0xFF;
  19873. PRE_IO
  19874. WRITE_BYTE_F(adr, res)
  19875. POST_IO
  19876. RET(16)
  19877. }
  19878. res = 0;
  19879. PRE_IO
  19880. WRITE_BYTE_F(adr, res)
  19881. POST_IO
  19882. RET(16)
  19883. }
  19884. // STCC
  19885. OPCODE(0x5DF8)
  19886. {
  19887. u32 adr, res;
  19888. u32 src, dst;
  19889. FETCH_SWORD(adr);
  19890. if ((flag_N ^ flag_V) & 0x80)
  19891. {
  19892. res = 0xFF;
  19893. PRE_IO
  19894. WRITE_BYTE_F(adr, res)
  19895. POST_IO
  19896. RET(16)
  19897. }
  19898. res = 0;
  19899. PRE_IO
  19900. WRITE_BYTE_F(adr, res)
  19901. POST_IO
  19902. RET(16)
  19903. }
  19904. // STCC
  19905. OPCODE(0x5EF8)
  19906. {
  19907. u32 adr, res;
  19908. u32 src, dst;
  19909. FETCH_SWORD(adr);
  19910. if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
  19911. {
  19912. res = 0xFF;
  19913. PRE_IO
  19914. WRITE_BYTE_F(adr, res)
  19915. POST_IO
  19916. RET(16)
  19917. }
  19918. res = 0;
  19919. PRE_IO
  19920. WRITE_BYTE_F(adr, res)
  19921. POST_IO
  19922. RET(16)
  19923. }
  19924. // STCC
  19925. OPCODE(0x5FF8)
  19926. {
  19927. u32 adr, res;
  19928. u32 src, dst;
  19929. FETCH_SWORD(adr);
  19930. if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
  19931. {
  19932. res = 0xFF;
  19933. PRE_IO
  19934. WRITE_BYTE_F(adr, res)
  19935. POST_IO
  19936. RET(16)
  19937. }
  19938. res = 0;
  19939. PRE_IO
  19940. WRITE_BYTE_F(adr, res)
  19941. POST_IO
  19942. RET(16)
  19943. }
  19944. // STCC
  19945. OPCODE(0x50F9)
  19946. {
  19947. u32 adr, res;
  19948. u32 src, dst;
  19949. FETCH_LONG(adr);
  19950. res = 0xFF;
  19951. PRE_IO
  19952. WRITE_BYTE_F(adr, res)
  19953. POST_IO
  19954. RET(20)
  19955. }
  19956. // STCC
  19957. OPCODE(0x51F9)
  19958. {
  19959. u32 adr, res;
  19960. u32 src, dst;
  19961. FETCH_LONG(adr);
  19962. res = 0;
  19963. PRE_IO
  19964. WRITE_BYTE_F(adr, res)
  19965. POST_IO
  19966. RET(20)
  19967. }
  19968. // STCC
  19969. OPCODE(0x52F9)
  19970. {
  19971. u32 adr, res;
  19972. u32 src, dst;
  19973. FETCH_LONG(adr);
  19974. if (flag_NotZ && (!(flag_C & 0x100)))
  19975. {
  19976. res = 0xFF;
  19977. PRE_IO
  19978. WRITE_BYTE_F(adr, res)
  19979. POST_IO
  19980. RET(20)
  19981. }
  19982. res = 0;
  19983. PRE_IO
  19984. WRITE_BYTE_F(adr, res)
  19985. POST_IO
  19986. RET(20)
  19987. }
  19988. // STCC
  19989. OPCODE(0x53F9)
  19990. {
  19991. u32 adr, res;
  19992. u32 src, dst;
  19993. FETCH_LONG(adr);
  19994. if ((!flag_NotZ) || (flag_C & 0x100))
  19995. {
  19996. res = 0xFF;
  19997. PRE_IO
  19998. WRITE_BYTE_F(adr, res)
  19999. POST_IO
  20000. RET(20)
  20001. }
  20002. res = 0;
  20003. PRE_IO
  20004. WRITE_BYTE_F(adr, res)
  20005. POST_IO
  20006. RET(20)
  20007. }
  20008. // STCC
  20009. OPCODE(0x54F9)
  20010. {
  20011. u32 adr, res;
  20012. u32 src, dst;
  20013. FETCH_LONG(adr);
  20014. if (!(flag_C & 0x100))
  20015. {
  20016. res = 0xFF;
  20017. PRE_IO
  20018. WRITE_BYTE_F(adr, res)
  20019. POST_IO
  20020. RET(20)
  20021. }
  20022. res = 0;
  20023. PRE_IO
  20024. WRITE_BYTE_F(adr, res)
  20025. POST_IO
  20026. RET(20)
  20027. }
  20028. // STCC
  20029. OPCODE(0x55F9)
  20030. {
  20031. u32 adr, res;
  20032. u32 src, dst;
  20033. FETCH_LONG(adr);
  20034. if (flag_C & 0x100)
  20035. {
  20036. res = 0xFF;
  20037. PRE_IO
  20038. WRITE_BYTE_F(adr, res)
  20039. POST_IO
  20040. RET(20)
  20041. }
  20042. res = 0;
  20043. PRE_IO
  20044. WRITE_BYTE_F(adr, res)
  20045. POST_IO
  20046. RET(20)
  20047. }
  20048. // STCC
  20049. OPCODE(0x56F9)
  20050. {
  20051. u32 adr, res;
  20052. u32 src, dst;
  20053. FETCH_LONG(adr);
  20054. if (flag_NotZ)
  20055. {
  20056. res = 0xFF;
  20057. PRE_IO
  20058. WRITE_BYTE_F(adr, res)
  20059. POST_IO
  20060. RET(20)
  20061. }
  20062. res = 0;
  20063. PRE_IO
  20064. WRITE_BYTE_F(adr, res)
  20065. POST_IO
  20066. RET(20)
  20067. }
  20068. // STCC
  20069. OPCODE(0x57F9)
  20070. {
  20071. u32 adr, res;
  20072. u32 src, dst;
  20073. FETCH_LONG(adr);
  20074. if (!flag_NotZ)
  20075. {
  20076. res = 0xFF;
  20077. PRE_IO
  20078. WRITE_BYTE_F(adr, res)
  20079. POST_IO
  20080. RET(20)
  20081. }
  20082. res = 0;
  20083. PRE_IO
  20084. WRITE_BYTE_F(adr, res)
  20085. POST_IO
  20086. RET(20)
  20087. }
  20088. // STCC
  20089. OPCODE(0x58F9)
  20090. {
  20091. u32 adr, res;
  20092. u32 src, dst;
  20093. FETCH_LONG(adr);
  20094. if (!(flag_V & 0x80))
  20095. {
  20096. res = 0xFF;
  20097. PRE_IO
  20098. WRITE_BYTE_F(adr, res)
  20099. POST_IO
  20100. RET(20)
  20101. }
  20102. res = 0;
  20103. PRE_IO
  20104. WRITE_BYTE_F(adr, res)
  20105. POST_IO
  20106. RET(20)
  20107. }
  20108. // STCC
  20109. OPCODE(0x59F9)
  20110. {
  20111. u32 adr, res;
  20112. u32 src, dst;
  20113. FETCH_LONG(adr);
  20114. if (flag_V & 0x80)
  20115. {
  20116. res = 0xFF;
  20117. PRE_IO
  20118. WRITE_BYTE_F(adr, res)
  20119. POST_IO
  20120. RET(20)
  20121. }
  20122. res = 0;
  20123. PRE_IO
  20124. WRITE_BYTE_F(adr, res)
  20125. POST_IO
  20126. RET(20)
  20127. }
  20128. // STCC
  20129. OPCODE(0x5AF9)
  20130. {
  20131. u32 adr, res;
  20132. u32 src, dst;
  20133. FETCH_LONG(adr);
  20134. if (!(flag_N & 0x80))
  20135. {
  20136. res = 0xFF;
  20137. PRE_IO
  20138. WRITE_BYTE_F(adr, res)
  20139. POST_IO
  20140. RET(20)
  20141. }
  20142. res = 0;
  20143. PRE_IO
  20144. WRITE_BYTE_F(adr, res)
  20145. POST_IO
  20146. RET(20)
  20147. }
  20148. // STCC
  20149. OPCODE(0x5BF9)
  20150. {
  20151. u32 adr, res;
  20152. u32 src, dst;
  20153. FETCH_LONG(adr);
  20154. if (flag_N & 0x80)
  20155. {
  20156. res = 0xFF;
  20157. PRE_IO
  20158. WRITE_BYTE_F(adr, res)
  20159. POST_IO
  20160. RET(20)
  20161. }
  20162. res = 0;
  20163. PRE_IO
  20164. WRITE_BYTE_F(adr, res)
  20165. POST_IO
  20166. RET(20)
  20167. }
  20168. // STCC
  20169. OPCODE(0x5CF9)
  20170. {
  20171. u32 adr, res;
  20172. u32 src, dst;
  20173. FETCH_LONG(adr);
  20174. if (!((flag_N ^ flag_V) & 0x80))
  20175. {
  20176. res = 0xFF;
  20177. PRE_IO
  20178. WRITE_BYTE_F(adr, res)
  20179. POST_IO
  20180. RET(20)
  20181. }
  20182. res = 0;
  20183. PRE_IO
  20184. WRITE_BYTE_F(adr, res)
  20185. POST_IO
  20186. RET(20)
  20187. }
  20188. // STCC
  20189. OPCODE(0x5DF9)
  20190. {
  20191. u32 adr, res;
  20192. u32 src, dst;
  20193. FETCH_LONG(adr);
  20194. if ((flag_N ^ flag_V) & 0x80)
  20195. {
  20196. res = 0xFF;
  20197. PRE_IO
  20198. WRITE_BYTE_F(adr, res)
  20199. POST_IO
  20200. RET(20)
  20201. }
  20202. res = 0;
  20203. PRE_IO
  20204. WRITE_BYTE_F(adr, res)
  20205. POST_IO
  20206. RET(20)
  20207. }
  20208. // STCC
  20209. OPCODE(0x5EF9)
  20210. {
  20211. u32 adr, res;
  20212. u32 src, dst;
  20213. FETCH_LONG(adr);
  20214. if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
  20215. {
  20216. res = 0xFF;
  20217. PRE_IO
  20218. WRITE_BYTE_F(adr, res)
  20219. POST_IO
  20220. RET(20)
  20221. }
  20222. res = 0;
  20223. PRE_IO
  20224. WRITE_BYTE_F(adr, res)
  20225. POST_IO
  20226. RET(20)
  20227. }
  20228. // STCC
  20229. OPCODE(0x5FF9)
  20230. {
  20231. u32 adr, res;
  20232. u32 src, dst;
  20233. FETCH_LONG(adr);
  20234. if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
  20235. {
  20236. res = 0xFF;
  20237. PRE_IO
  20238. WRITE_BYTE_F(adr, res)
  20239. POST_IO
  20240. RET(20)
  20241. }
  20242. res = 0;
  20243. PRE_IO
  20244. WRITE_BYTE_F(adr, res)
  20245. POST_IO
  20246. RET(20)
  20247. }
  20248. // STCC
  20249. OPCODE(0x50DF)
  20250. {
  20251. u32 adr, res;
  20252. u32 src, dst;
  20253. adr = AREG(7);
  20254. AREG(7) += 2;
  20255. res = 0xFF;
  20256. PRE_IO
  20257. WRITE_BYTE_F(adr, res)
  20258. POST_IO
  20259. RET(12)
  20260. }
  20261. // STCC
  20262. OPCODE(0x51DF)
  20263. {
  20264. u32 adr, res;
  20265. u32 src, dst;
  20266. adr = AREG(7);
  20267. AREG(7) += 2;
  20268. res = 0;
  20269. PRE_IO
  20270. WRITE_BYTE_F(adr, res)
  20271. POST_IO
  20272. RET(12)
  20273. }
  20274. // STCC
  20275. OPCODE(0x52DF)
  20276. {
  20277. u32 adr, res;
  20278. u32 src, dst;
  20279. adr = AREG(7);
  20280. AREG(7) += 2;
  20281. if (flag_NotZ && (!(flag_C & 0x100)))
  20282. {
  20283. res = 0xFF;
  20284. PRE_IO
  20285. WRITE_BYTE_F(adr, res)
  20286. POST_IO
  20287. RET(12)
  20288. }
  20289. res = 0;
  20290. PRE_IO
  20291. WRITE_BYTE_F(adr, res)
  20292. POST_IO
  20293. RET(12)
  20294. }
  20295. // STCC
  20296. OPCODE(0x53DF)
  20297. {
  20298. u32 adr, res;
  20299. u32 src, dst;
  20300. adr = AREG(7);
  20301. AREG(7) += 2;
  20302. if ((!flag_NotZ) || (flag_C & 0x100))
  20303. {
  20304. res = 0xFF;
  20305. PRE_IO
  20306. WRITE_BYTE_F(adr, res)
  20307. POST_IO
  20308. RET(12)
  20309. }
  20310. res = 0;
  20311. PRE_IO
  20312. WRITE_BYTE_F(adr, res)
  20313. POST_IO
  20314. RET(12)
  20315. }
  20316. // STCC
  20317. OPCODE(0x54DF)
  20318. {
  20319. u32 adr, res;
  20320. u32 src, dst;
  20321. adr = AREG(7);
  20322. AREG(7) += 2;
  20323. if (!(flag_C & 0x100))
  20324. {
  20325. res = 0xFF;
  20326. PRE_IO
  20327. WRITE_BYTE_F(adr, res)
  20328. POST_IO
  20329. RET(12)
  20330. }
  20331. res = 0;
  20332. PRE_IO
  20333. WRITE_BYTE_F(adr, res)
  20334. POST_IO
  20335. RET(12)
  20336. }
  20337. // STCC
  20338. OPCODE(0x55DF)
  20339. {
  20340. u32 adr, res;
  20341. u32 src, dst;
  20342. adr = AREG(7);
  20343. AREG(7) += 2;
  20344. if (flag_C & 0x100)
  20345. {
  20346. res = 0xFF;
  20347. PRE_IO
  20348. WRITE_BYTE_F(adr, res)
  20349. POST_IO
  20350. RET(12)
  20351. }
  20352. res = 0;
  20353. PRE_IO
  20354. WRITE_BYTE_F(adr, res)
  20355. POST_IO
  20356. RET(12)
  20357. }
  20358. // STCC
  20359. OPCODE(0x56DF)
  20360. {
  20361. u32 adr, res;
  20362. u32 src, dst;
  20363. adr = AREG(7);
  20364. AREG(7) += 2;
  20365. if (flag_NotZ)
  20366. {
  20367. res = 0xFF;
  20368. PRE_IO
  20369. WRITE_BYTE_F(adr, res)
  20370. POST_IO
  20371. RET(12)
  20372. }
  20373. res = 0;
  20374. PRE_IO
  20375. WRITE_BYTE_F(adr, res)
  20376. POST_IO
  20377. RET(12)
  20378. }
  20379. // STCC
  20380. OPCODE(0x57DF)
  20381. {
  20382. u32 adr, res;
  20383. u32 src, dst;
  20384. adr = AREG(7);
  20385. AREG(7) += 2;
  20386. if (!flag_NotZ)
  20387. {
  20388. res = 0xFF;
  20389. PRE_IO
  20390. WRITE_BYTE_F(adr, res)
  20391. POST_IO
  20392. RET(12)
  20393. }
  20394. res = 0;
  20395. PRE_IO
  20396. WRITE_BYTE_F(adr, res)
  20397. POST_IO
  20398. RET(12)
  20399. }
  20400. // STCC
  20401. OPCODE(0x58DF)
  20402. {
  20403. u32 adr, res;
  20404. u32 src, dst;
  20405. adr = AREG(7);
  20406. AREG(7) += 2;
  20407. if (!(flag_V & 0x80))
  20408. {
  20409. res = 0xFF;
  20410. PRE_IO
  20411. WRITE_BYTE_F(adr, res)
  20412. POST_IO
  20413. RET(12)
  20414. }
  20415. res = 0;
  20416. PRE_IO
  20417. WRITE_BYTE_F(adr, res)
  20418. POST_IO
  20419. RET(12)
  20420. }
  20421. // STCC
  20422. OPCODE(0x59DF)
  20423. {
  20424. u32 adr, res;
  20425. u32 src, dst;
  20426. adr = AREG(7);
  20427. AREG(7) += 2;
  20428. if (flag_V & 0x80)
  20429. {
  20430. res = 0xFF;
  20431. PRE_IO
  20432. WRITE_BYTE_F(adr, res)
  20433. POST_IO
  20434. RET(12)
  20435. }
  20436. res = 0;
  20437. PRE_IO
  20438. WRITE_BYTE_F(adr, res)
  20439. POST_IO
  20440. RET(12)
  20441. }
  20442. // STCC
  20443. OPCODE(0x5ADF)
  20444. {
  20445. u32 adr, res;
  20446. u32 src, dst;
  20447. adr = AREG(7);
  20448. AREG(7) += 2;
  20449. if (!(flag_N & 0x80))
  20450. {
  20451. res = 0xFF;
  20452. PRE_IO
  20453. WRITE_BYTE_F(adr, res)
  20454. POST_IO
  20455. RET(12)
  20456. }
  20457. res = 0;
  20458. PRE_IO
  20459. WRITE_BYTE_F(adr, res)
  20460. POST_IO
  20461. RET(12)
  20462. }
  20463. // STCC
  20464. OPCODE(0x5BDF)
  20465. {
  20466. u32 adr, res;
  20467. u32 src, dst;
  20468. adr = AREG(7);
  20469. AREG(7) += 2;
  20470. if (flag_N & 0x80)
  20471. {
  20472. res = 0xFF;
  20473. PRE_IO
  20474. WRITE_BYTE_F(adr, res)
  20475. POST_IO
  20476. RET(12)
  20477. }
  20478. res = 0;
  20479. PRE_IO
  20480. WRITE_BYTE_F(adr, res)
  20481. POST_IO
  20482. RET(12)
  20483. }
  20484. // STCC
  20485. OPCODE(0x5CDF)
  20486. {
  20487. u32 adr, res;
  20488. u32 src, dst;
  20489. adr = AREG(7);
  20490. AREG(7) += 2;
  20491. if (!((flag_N ^ flag_V) & 0x80))
  20492. {
  20493. res = 0xFF;
  20494. PRE_IO
  20495. WRITE_BYTE_F(adr, res)
  20496. POST_IO
  20497. RET(12)
  20498. }
  20499. res = 0;
  20500. PRE_IO
  20501. WRITE_BYTE_F(adr, res)
  20502. POST_IO
  20503. RET(12)
  20504. }
  20505. // STCC
  20506. OPCODE(0x5DDF)
  20507. {
  20508. u32 adr, res;
  20509. u32 src, dst;
  20510. adr = AREG(7);
  20511. AREG(7) += 2;
  20512. if ((flag_N ^ flag_V) & 0x80)
  20513. {
  20514. res = 0xFF;
  20515. PRE_IO
  20516. WRITE_BYTE_F(adr, res)
  20517. POST_IO
  20518. RET(12)
  20519. }
  20520. res = 0;
  20521. PRE_IO
  20522. WRITE_BYTE_F(adr, res)
  20523. POST_IO
  20524. RET(12)
  20525. }
  20526. // STCC
  20527. OPCODE(0x5EDF)
  20528. {
  20529. u32 adr, res;
  20530. u32 src, dst;
  20531. adr = AREG(7);
  20532. AREG(7) += 2;
  20533. if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
  20534. {
  20535. res = 0xFF;
  20536. PRE_IO
  20537. WRITE_BYTE_F(adr, res)
  20538. POST_IO
  20539. RET(12)
  20540. }
  20541. res = 0;
  20542. PRE_IO
  20543. WRITE_BYTE_F(adr, res)
  20544. POST_IO
  20545. RET(12)
  20546. }
  20547. // STCC
  20548. OPCODE(0x5FDF)
  20549. {
  20550. u32 adr, res;
  20551. u32 src, dst;
  20552. adr = AREG(7);
  20553. AREG(7) += 2;
  20554. if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
  20555. {
  20556. res = 0xFF;
  20557. PRE_IO
  20558. WRITE_BYTE_F(adr, res)
  20559. POST_IO
  20560. RET(12)
  20561. }
  20562. res = 0;
  20563. PRE_IO
  20564. WRITE_BYTE_F(adr, res)
  20565. POST_IO
  20566. RET(12)
  20567. }
  20568. // STCC
  20569. OPCODE(0x50E7)
  20570. {
  20571. u32 adr, res;
  20572. u32 src, dst;
  20573. adr = AREG(7) - 2;
  20574. AREG(7) = adr;
  20575. res = 0xFF;
  20576. PRE_IO
  20577. WRITE_BYTE_F(adr, res)
  20578. POST_IO
  20579. RET(14)
  20580. }
  20581. // STCC
  20582. OPCODE(0x51E7)
  20583. {
  20584. u32 adr, res;
  20585. u32 src, dst;
  20586. adr = AREG(7) - 2;
  20587. AREG(7) = adr;
  20588. res = 0;
  20589. PRE_IO
  20590. WRITE_BYTE_F(adr, res)
  20591. POST_IO
  20592. RET(14)
  20593. }
  20594. // STCC
  20595. OPCODE(0x52E7)
  20596. {
  20597. u32 adr, res;
  20598. u32 src, dst;
  20599. adr = AREG(7) - 2;
  20600. AREG(7) = adr;
  20601. if (flag_NotZ && (!(flag_C & 0x100)))
  20602. {
  20603. res = 0xFF;
  20604. PRE_IO
  20605. WRITE_BYTE_F(adr, res)
  20606. POST_IO
  20607. RET(14)
  20608. }
  20609. res = 0;
  20610. PRE_IO
  20611. WRITE_BYTE_F(adr, res)
  20612. POST_IO
  20613. RET(14)
  20614. }
  20615. // STCC
  20616. OPCODE(0x53E7)
  20617. {
  20618. u32 adr, res;
  20619. u32 src, dst;
  20620. adr = AREG(7) - 2;
  20621. AREG(7) = adr;
  20622. if ((!flag_NotZ) || (flag_C & 0x100))
  20623. {
  20624. res = 0xFF;
  20625. PRE_IO
  20626. WRITE_BYTE_F(adr, res)
  20627. POST_IO
  20628. RET(14)
  20629. }
  20630. res = 0;
  20631. PRE_IO
  20632. WRITE_BYTE_F(adr, res)
  20633. POST_IO
  20634. RET(14)
  20635. }
  20636. // STCC
  20637. OPCODE(0x54E7)
  20638. {
  20639. u32 adr, res;
  20640. u32 src, dst;
  20641. adr = AREG(7) - 2;
  20642. AREG(7) = adr;
  20643. if (!(flag_C & 0x100))
  20644. {
  20645. res = 0xFF;
  20646. PRE_IO
  20647. WRITE_BYTE_F(adr, res)
  20648. POST_IO
  20649. RET(14)
  20650. }
  20651. res = 0;
  20652. PRE_IO
  20653. WRITE_BYTE_F(adr, res)
  20654. POST_IO
  20655. RET(14)
  20656. }
  20657. // STCC
  20658. OPCODE(0x55E7)
  20659. {
  20660. u32 adr, res;
  20661. u32 src, dst;
  20662. adr = AREG(7) - 2;
  20663. AREG(7) = adr;
  20664. if (flag_C & 0x100)
  20665. {
  20666. res = 0xFF;
  20667. PRE_IO
  20668. WRITE_BYTE_F(adr, res)
  20669. POST_IO
  20670. RET(14)
  20671. }
  20672. res = 0;
  20673. PRE_IO
  20674. WRITE_BYTE_F(adr, res)
  20675. POST_IO
  20676. RET(14)
  20677. }
  20678. // STCC
  20679. OPCODE(0x56E7)
  20680. {
  20681. u32 adr, res;
  20682. u32 src, dst;
  20683. adr = AREG(7) - 2;
  20684. AREG(7) = adr;
  20685. if (flag_NotZ)
  20686. {
  20687. res = 0xFF;
  20688. PRE_IO
  20689. WRITE_BYTE_F(adr, res)
  20690. POST_IO
  20691. RET(14)
  20692. }
  20693. res = 0;
  20694. PRE_IO
  20695. WRITE_BYTE_F(adr, res)
  20696. POST_IO
  20697. RET(14)
  20698. }
  20699. // STCC
  20700. OPCODE(0x57E7)
  20701. {
  20702. u32 adr, res;
  20703. u32 src, dst;
  20704. adr = AREG(7) - 2;
  20705. AREG(7) = adr;
  20706. if (!flag_NotZ)
  20707. {
  20708. res = 0xFF;
  20709. PRE_IO
  20710. WRITE_BYTE_F(adr, res)
  20711. POST_IO
  20712. RET(14)
  20713. }
  20714. res = 0;
  20715. PRE_IO
  20716. WRITE_BYTE_F(adr, res)
  20717. POST_IO
  20718. RET(14)
  20719. }
  20720. // STCC
  20721. OPCODE(0x58E7)
  20722. {
  20723. u32 adr, res;
  20724. u32 src, dst;
  20725. adr = AREG(7) - 2;
  20726. AREG(7) = adr;
  20727. if (!(flag_V & 0x80))
  20728. {
  20729. res = 0xFF;
  20730. PRE_IO
  20731. WRITE_BYTE_F(adr, res)
  20732. POST_IO
  20733. RET(14)
  20734. }
  20735. res = 0;
  20736. PRE_IO
  20737. WRITE_BYTE_F(adr, res)
  20738. POST_IO
  20739. RET(14)
  20740. }
  20741. // STCC
  20742. OPCODE(0x59E7)
  20743. {
  20744. u32 adr, res;
  20745. u32 src, dst;
  20746. adr = AREG(7) - 2;
  20747. AREG(7) = adr;
  20748. if (flag_V & 0x80)
  20749. {
  20750. res = 0xFF;
  20751. PRE_IO
  20752. WRITE_BYTE_F(adr, res)
  20753. POST_IO
  20754. RET(14)
  20755. }
  20756. res = 0;
  20757. PRE_IO
  20758. WRITE_BYTE_F(adr, res)
  20759. POST_IO
  20760. RET(14)
  20761. }
  20762. // STCC
  20763. OPCODE(0x5AE7)
  20764. {
  20765. u32 adr, res;
  20766. u32 src, dst;
  20767. adr = AREG(7) - 2;
  20768. AREG(7) = adr;
  20769. if (!(flag_N & 0x80))
  20770. {
  20771. res = 0xFF;
  20772. PRE_IO
  20773. WRITE_BYTE_F(adr, res)
  20774. POST_IO
  20775. RET(14)
  20776. }
  20777. res = 0;
  20778. PRE_IO
  20779. WRITE_BYTE_F(adr, res)
  20780. POST_IO
  20781. RET(14)
  20782. }
  20783. // STCC
  20784. OPCODE(0x5BE7)
  20785. {
  20786. u32 adr, res;
  20787. u32 src, dst;
  20788. adr = AREG(7) - 2;
  20789. AREG(7) = adr;
  20790. if (flag_N & 0x80)
  20791. {
  20792. res = 0xFF;
  20793. PRE_IO
  20794. WRITE_BYTE_F(adr, res)
  20795. POST_IO
  20796. RET(14)
  20797. }
  20798. res = 0;
  20799. PRE_IO
  20800. WRITE_BYTE_F(adr, res)
  20801. POST_IO
  20802. RET(14)
  20803. }
  20804. // STCC
  20805. OPCODE(0x5CE7)
  20806. {
  20807. u32 adr, res;
  20808. u32 src, dst;
  20809. adr = AREG(7) - 2;
  20810. AREG(7) = adr;
  20811. if (!((flag_N ^ flag_V) & 0x80))
  20812. {
  20813. res = 0xFF;
  20814. PRE_IO
  20815. WRITE_BYTE_F(adr, res)
  20816. POST_IO
  20817. RET(14)
  20818. }
  20819. res = 0;
  20820. PRE_IO
  20821. WRITE_BYTE_F(adr, res)
  20822. POST_IO
  20823. RET(14)
  20824. }
  20825. // STCC
  20826. OPCODE(0x5DE7)
  20827. {
  20828. u32 adr, res;
  20829. u32 src, dst;
  20830. adr = AREG(7) - 2;
  20831. AREG(7) = adr;
  20832. if ((flag_N ^ flag_V) & 0x80)
  20833. {
  20834. res = 0xFF;
  20835. PRE_IO
  20836. WRITE_BYTE_F(adr, res)
  20837. POST_IO
  20838. RET(14)
  20839. }
  20840. res = 0;
  20841. PRE_IO
  20842. WRITE_BYTE_F(adr, res)
  20843. POST_IO
  20844. RET(14)
  20845. }
  20846. // STCC
  20847. OPCODE(0x5EE7)
  20848. {
  20849. u32 adr, res;
  20850. u32 src, dst;
  20851. adr = AREG(7) - 2;
  20852. AREG(7) = adr;
  20853. if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
  20854. {
  20855. res = 0xFF;
  20856. PRE_IO
  20857. WRITE_BYTE_F(adr, res)
  20858. POST_IO
  20859. RET(14)
  20860. }
  20861. res = 0;
  20862. PRE_IO
  20863. WRITE_BYTE_F(adr, res)
  20864. POST_IO
  20865. RET(14)
  20866. }
  20867. // STCC
  20868. OPCODE(0x5FE7)
  20869. {
  20870. u32 adr, res;
  20871. u32 src, dst;
  20872. adr = AREG(7) - 2;
  20873. AREG(7) = adr;
  20874. if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
  20875. {
  20876. res = 0xFF;
  20877. PRE_IO
  20878. WRITE_BYTE_F(adr, res)
  20879. POST_IO
  20880. RET(14)
  20881. }
  20882. res = 0;
  20883. PRE_IO
  20884. WRITE_BYTE_F(adr, res)
  20885. POST_IO
  20886. RET(14)
  20887. }
  20888. // DBCC
  20889. OPCODE(0x50C8)
  20890. {
  20891. u32 adr, res;
  20892. u32 src, dst;
  20893. PC++;
  20894. RET(12)
  20895. }
  20896. // DBCC
  20897. OPCODE(0x51C8)
  20898. {
  20899. u32 adr, res;
  20900. u32 src, dst;
  20901. NOT_POLLING
  20902. res = DREGu16((Opcode >> 0) & 7);
  20903. res--;
  20904. DREGu16((Opcode >> 0) & 7) = res;
  20905. if ((s32)res != -1)
  20906. {
  20907. u32 newPC;
  20908. newPC = GET_PC;
  20909. newPC += GET_SWORD;
  20910. SET_PC(newPC);
  20911. CHECK_BRANCH_EXCEPTION(newPC)
  20912. RET(10)
  20913. }
  20914. PC++;
  20915. RET(14)
  20916. }
  20917. // DBCC
  20918. OPCODE(0x52C8)
  20919. {
  20920. u32 adr, res;
  20921. u32 src, dst;
  20922. NOT_POLLING
  20923. if ((!flag_NotZ) || (flag_C & 0x100))
  20924. {
  20925. res = DREGu16((Opcode >> 0) & 7);
  20926. res--;
  20927. DREGu16((Opcode >> 0) & 7) = res;
  20928. if ((s32)res != -1)
  20929. {
  20930. u32 newPC;
  20931. newPC = GET_PC;
  20932. newPC += GET_SWORD;
  20933. SET_PC(newPC);
  20934. CHECK_BRANCH_EXCEPTION(newPC)
  20935. RET(10)
  20936. }
  20937. }
  20938. else
  20939. {
  20940. PC++;
  20941. RET(12)
  20942. }
  20943. PC++;
  20944. RET(14)
  20945. }
  20946. // DBCC
  20947. OPCODE(0x53C8)
  20948. {
  20949. u32 adr, res;
  20950. u32 src, dst;
  20951. NOT_POLLING
  20952. if (flag_NotZ && (!(flag_C & 0x100)))
  20953. {
  20954. res = DREGu16((Opcode >> 0) & 7);
  20955. res--;
  20956. DREGu16((Opcode >> 0) & 7) = res;
  20957. if ((s32)res != -1)
  20958. {
  20959. u32 newPC;
  20960. newPC = GET_PC;
  20961. newPC += GET_SWORD;
  20962. SET_PC(newPC);
  20963. CHECK_BRANCH_EXCEPTION(newPC)
  20964. RET(10)
  20965. }
  20966. }
  20967. else
  20968. {
  20969. PC++;
  20970. RET(12)
  20971. }
  20972. PC++;
  20973. RET(14)
  20974. }
  20975. // DBCC
  20976. OPCODE(0x54C8)
  20977. {
  20978. u32 adr, res;
  20979. u32 src, dst;
  20980. NOT_POLLING
  20981. if (flag_C & 0x100)
  20982. {
  20983. res = DREGu16((Opcode >> 0) & 7);
  20984. res--;
  20985. DREGu16((Opcode >> 0) & 7) = res;
  20986. if ((s32)res != -1)
  20987. {
  20988. u32 newPC;
  20989. newPC = GET_PC;
  20990. newPC += GET_SWORD;
  20991. SET_PC(newPC);
  20992. CHECK_BRANCH_EXCEPTION(newPC)
  20993. RET(10)
  20994. }
  20995. }
  20996. else
  20997. {
  20998. PC++;
  20999. RET(12)
  21000. }
  21001. PC++;
  21002. RET(14)
  21003. }
  21004. // DBCC
  21005. OPCODE(0x55C8)
  21006. {
  21007. u32 adr, res;
  21008. u32 src, dst;
  21009. NOT_POLLING
  21010. if (!(flag_C & 0x100))
  21011. {
  21012. res = DREGu16((Opcode >> 0) & 7);
  21013. res--;
  21014. DREGu16((Opcode >> 0) & 7) = res;
  21015. if ((s32)res != -1)
  21016. {
  21017. u32 newPC;
  21018. newPC = GET_PC;
  21019. newPC += GET_SWORD;
  21020. SET_PC(newPC);
  21021. CHECK_BRANCH_EXCEPTION(newPC)
  21022. RET(10)
  21023. }
  21024. }
  21025. else
  21026. {
  21027. PC++;
  21028. RET(12)
  21029. }
  21030. PC++;
  21031. RET(14)
  21032. }
  21033. // DBCC
  21034. OPCODE(0x56C8)
  21035. {
  21036. u32 adr, res;
  21037. u32 src, dst;
  21038. NOT_POLLING
  21039. if (!flag_NotZ)
  21040. {
  21041. res = DREGu16((Opcode >> 0) & 7);
  21042. res--;
  21043. DREGu16((Opcode >> 0) & 7) = res;
  21044. if ((s32)res != -1)
  21045. {
  21046. u32 newPC;
  21047. newPC = GET_PC;
  21048. newPC += GET_SWORD;
  21049. SET_PC(newPC);
  21050. CHECK_BRANCH_EXCEPTION(newPC)
  21051. RET(10)
  21052. }
  21053. }
  21054. else
  21055. {
  21056. PC++;
  21057. RET(12)
  21058. }
  21059. PC++;
  21060. RET(14)
  21061. }
  21062. // DBCC
  21063. OPCODE(0x57C8)
  21064. {
  21065. u32 adr, res;
  21066. u32 src, dst;
  21067. NOT_POLLING
  21068. if (flag_NotZ)
  21069. {
  21070. res = DREGu16((Opcode >> 0) & 7);
  21071. res--;
  21072. DREGu16((Opcode >> 0) & 7) = res;
  21073. if ((s32)res != -1)
  21074. {
  21075. u32 newPC;
  21076. newPC = GET_PC;
  21077. newPC += GET_SWORD;
  21078. SET_PC(newPC);
  21079. CHECK_BRANCH_EXCEPTION(newPC)
  21080. RET(10)
  21081. }
  21082. }
  21083. else
  21084. {
  21085. PC++;
  21086. RET(12)
  21087. }
  21088. PC++;
  21089. RET(14)
  21090. }
  21091. // DBCC
  21092. OPCODE(0x58C8)
  21093. {
  21094. u32 adr, res;
  21095. u32 src, dst;
  21096. NOT_POLLING
  21097. if (flag_V & 0x80)
  21098. {
  21099. res = DREGu16((Opcode >> 0) & 7);
  21100. res--;
  21101. DREGu16((Opcode >> 0) & 7) = res;
  21102. if ((s32)res != -1)
  21103. {
  21104. u32 newPC;
  21105. newPC = GET_PC;
  21106. newPC += GET_SWORD;
  21107. SET_PC(newPC);
  21108. CHECK_BRANCH_EXCEPTION(newPC)
  21109. RET(10)
  21110. }
  21111. }
  21112. else
  21113. {
  21114. PC++;
  21115. RET(12)
  21116. }
  21117. PC++;
  21118. RET(14)
  21119. }
  21120. // DBCC
  21121. OPCODE(0x59C8)
  21122. {
  21123. u32 adr, res;
  21124. u32 src, dst;
  21125. NOT_POLLING
  21126. if (!(flag_V & 0x80))
  21127. {
  21128. res = DREGu16((Opcode >> 0) & 7);
  21129. res--;
  21130. DREGu16((Opcode >> 0) & 7) = res;
  21131. if ((s32)res != -1)
  21132. {
  21133. u32 newPC;
  21134. newPC = GET_PC;
  21135. newPC += GET_SWORD;
  21136. SET_PC(newPC);
  21137. CHECK_BRANCH_EXCEPTION(newPC)
  21138. RET(10)
  21139. }
  21140. }
  21141. else
  21142. {
  21143. PC++;
  21144. RET(12)
  21145. }
  21146. PC++;
  21147. RET(14)
  21148. }
  21149. // DBCC
  21150. OPCODE(0x5AC8)
  21151. {
  21152. u32 adr, res;
  21153. u32 src, dst;
  21154. NOT_POLLING
  21155. if (flag_N & 0x80)
  21156. {
  21157. res = DREGu16((Opcode >> 0) & 7);
  21158. res--;
  21159. DREGu16((Opcode >> 0) & 7) = res;
  21160. if ((s32)res != -1)
  21161. {
  21162. u32 newPC;
  21163. newPC = GET_PC;
  21164. newPC += GET_SWORD;
  21165. SET_PC(newPC);
  21166. CHECK_BRANCH_EXCEPTION(newPC)
  21167. RET(10)
  21168. }
  21169. }
  21170. else
  21171. {
  21172. PC++;
  21173. RET(12)
  21174. }
  21175. PC++;
  21176. RET(14)
  21177. }
  21178. // DBCC
  21179. OPCODE(0x5BC8)
  21180. {
  21181. u32 adr, res;
  21182. u32 src, dst;
  21183. NOT_POLLING
  21184. if (!(flag_N & 0x80))
  21185. {
  21186. res = DREGu16((Opcode >> 0) & 7);
  21187. res--;
  21188. DREGu16((Opcode >> 0) & 7) = res;
  21189. if ((s32)res != -1)
  21190. {
  21191. u32 newPC;
  21192. newPC = GET_PC;
  21193. newPC += GET_SWORD;
  21194. SET_PC(newPC);
  21195. CHECK_BRANCH_EXCEPTION(newPC)
  21196. RET(10)
  21197. }
  21198. }
  21199. else
  21200. {
  21201. PC++;
  21202. RET(12)
  21203. }
  21204. PC++;
  21205. RET(14)
  21206. }
  21207. // DBCC
  21208. OPCODE(0x5CC8)
  21209. {
  21210. u32 adr, res;
  21211. u32 src, dst;
  21212. NOT_POLLING
  21213. if ((flag_N ^ flag_V) & 0x80)
  21214. {
  21215. res = DREGu16((Opcode >> 0) & 7);
  21216. res--;
  21217. DREGu16((Opcode >> 0) & 7) = res;
  21218. if ((s32)res != -1)
  21219. {
  21220. u32 newPC;
  21221. newPC = GET_PC;
  21222. newPC += GET_SWORD;
  21223. SET_PC(newPC);
  21224. CHECK_BRANCH_EXCEPTION(newPC)
  21225. RET(10)
  21226. }
  21227. }
  21228. else
  21229. {
  21230. PC++;
  21231. RET(12)
  21232. }
  21233. PC++;
  21234. RET(14)
  21235. }
  21236. // DBCC
  21237. OPCODE(0x5DC8)
  21238. {
  21239. u32 adr, res;
  21240. u32 src, dst;
  21241. NOT_POLLING
  21242. if (!((flag_N ^ flag_V) & 0x80))
  21243. {
  21244. res = DREGu16((Opcode >> 0) & 7);
  21245. res--;
  21246. DREGu16((Opcode >> 0) & 7) = res;
  21247. if ((s32)res != -1)
  21248. {
  21249. u32 newPC;
  21250. newPC = GET_PC;
  21251. newPC += GET_SWORD;
  21252. SET_PC(newPC);
  21253. CHECK_BRANCH_EXCEPTION(newPC)
  21254. RET(10)
  21255. }
  21256. }
  21257. else
  21258. {
  21259. PC++;
  21260. RET(12)
  21261. }
  21262. PC++;
  21263. RET(14)
  21264. }
  21265. // DBCC
  21266. OPCODE(0x5EC8)
  21267. {
  21268. u32 adr, res;
  21269. u32 src, dst;
  21270. NOT_POLLING
  21271. if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
  21272. {
  21273. res = DREGu16((Opcode >> 0) & 7);
  21274. res--;
  21275. DREGu16((Opcode >> 0) & 7) = res;
  21276. if ((s32)res != -1)
  21277. {
  21278. u32 newPC;
  21279. newPC = GET_PC;
  21280. newPC += GET_SWORD;
  21281. SET_PC(newPC);
  21282. CHECK_BRANCH_EXCEPTION(newPC)
  21283. RET(10)
  21284. }
  21285. }
  21286. else
  21287. {
  21288. PC++;
  21289. RET(12)
  21290. }
  21291. PC++;
  21292. RET(14)
  21293. }
  21294. // DBCC
  21295. OPCODE(0x5FC8)
  21296. {
  21297. u32 adr, res;
  21298. u32 src, dst;
  21299. NOT_POLLING
  21300. if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
  21301. {
  21302. res = DREGu16((Opcode >> 0) & 7);
  21303. res--;
  21304. DREGu16((Opcode >> 0) & 7) = res;
  21305. if ((s32)res != -1)
  21306. {
  21307. u32 newPC;
  21308. newPC = GET_PC;
  21309. newPC += GET_SWORD;
  21310. SET_PC(newPC);
  21311. CHECK_BRANCH_EXCEPTION(newPC)
  21312. RET(10)
  21313. }
  21314. }
  21315. else
  21316. {
  21317. PC++;
  21318. RET(12)
  21319. }
  21320. PC++;
  21321. RET(14)
  21322. }
  21323. // ADDQ
  21324. OPCODE(0x5000)
  21325. {
  21326. u32 adr, res;
  21327. u32 src, dst;
  21328. src = (((Opcode >> 9) - 1) & 7) + 1;
  21329. dst = DREGu8((Opcode >> 0) & 7);
  21330. res = dst + src;
  21331. flag_N = flag_X = flag_C = res;
  21332. flag_V = (src ^ res) & (dst ^ res);
  21333. flag_NotZ = res & 0xFF;
  21334. DREGu8((Opcode >> 0) & 7) = res;
  21335. RET(4)
  21336. }
  21337. // ADDQ
  21338. OPCODE(0x5010)
  21339. {
  21340. u32 adr, res;
  21341. u32 src, dst;
  21342. src = (((Opcode >> 9) - 1) & 7) + 1;
  21343. adr = AREG((Opcode >> 0) & 7);
  21344. PRE_IO
  21345. READ_BYTE_F(adr, dst)
  21346. res = dst + src;
  21347. flag_N = flag_X = flag_C = res;
  21348. flag_V = (src ^ res) & (dst ^ res);
  21349. flag_NotZ = res & 0xFF;
  21350. WRITE_BYTE_F(adr, res)
  21351. POST_IO
  21352. RET(12)
  21353. }
  21354. // ADDQ
  21355. OPCODE(0x5018)
  21356. {
  21357. u32 adr, res;
  21358. u32 src, dst;
  21359. src = (((Opcode >> 9) - 1) & 7) + 1;
  21360. adr = AREG((Opcode >> 0) & 7);
  21361. AREG((Opcode >> 0) & 7) += 1;
  21362. PRE_IO
  21363. READ_BYTE_F(adr, dst)
  21364. res = dst + src;
  21365. flag_N = flag_X = flag_C = res;
  21366. flag_V = (src ^ res) & (dst ^ res);
  21367. flag_NotZ = res & 0xFF;
  21368. WRITE_BYTE_F(adr, res)
  21369. POST_IO
  21370. RET(12)
  21371. }
  21372. // ADDQ
  21373. OPCODE(0x5020)
  21374. {
  21375. u32 adr, res;
  21376. u32 src, dst;
  21377. src = (((Opcode >> 9) - 1) & 7) + 1;
  21378. adr = AREG((Opcode >> 0) & 7) - 1;
  21379. AREG((Opcode >> 0) & 7) = adr;
  21380. PRE_IO
  21381. READ_BYTE_F(adr, dst)
  21382. res = dst + src;
  21383. flag_N = flag_X = flag_C = res;
  21384. flag_V = (src ^ res) & (dst ^ res);
  21385. flag_NotZ = res & 0xFF;
  21386. WRITE_BYTE_F(adr, res)
  21387. POST_IO
  21388. RET(14)
  21389. }
  21390. // ADDQ
  21391. OPCODE(0x5028)
  21392. {
  21393. u32 adr, res;
  21394. u32 src, dst;
  21395. src = (((Opcode >> 9) - 1) & 7) + 1;
  21396. FETCH_SWORD(adr);
  21397. adr += AREG((Opcode >> 0) & 7);
  21398. PRE_IO
  21399. READ_BYTE_F(adr, dst)
  21400. res = dst + src;
  21401. flag_N = flag_X = flag_C = res;
  21402. flag_V = (src ^ res) & (dst ^ res);
  21403. flag_NotZ = res & 0xFF;
  21404. WRITE_BYTE_F(adr, res)
  21405. POST_IO
  21406. RET(16)
  21407. }
  21408. // ADDQ
  21409. OPCODE(0x5030)
  21410. {
  21411. u32 adr, res;
  21412. u32 src, dst;
  21413. src = (((Opcode >> 9) - 1) & 7) + 1;
  21414. adr = AREG((Opcode >> 0) & 7);
  21415. DECODE_EXT_WORD
  21416. PRE_IO
  21417. READ_BYTE_F(adr, dst)
  21418. res = dst + src;
  21419. flag_N = flag_X = flag_C = res;
  21420. flag_V = (src ^ res) & (dst ^ res);
  21421. flag_NotZ = res & 0xFF;
  21422. WRITE_BYTE_F(adr, res)
  21423. POST_IO
  21424. RET(18)
  21425. }
  21426. // ADDQ
  21427. OPCODE(0x5038)
  21428. {
  21429. u32 adr, res;
  21430. u32 src, dst;
  21431. src = (((Opcode >> 9) - 1) & 7) + 1;
  21432. FETCH_SWORD(adr);
  21433. PRE_IO
  21434. READ_BYTE_F(adr, dst)
  21435. res = dst + src;
  21436. flag_N = flag_X = flag_C = res;
  21437. flag_V = (src ^ res) & (dst ^ res);
  21438. flag_NotZ = res & 0xFF;
  21439. WRITE_BYTE_F(adr, res)
  21440. POST_IO
  21441. RET(16)
  21442. }
  21443. // ADDQ
  21444. OPCODE(0x5039)
  21445. {
  21446. u32 adr, res;
  21447. u32 src, dst;
  21448. src = (((Opcode >> 9) - 1) & 7) + 1;
  21449. FETCH_LONG(adr);
  21450. PRE_IO
  21451. READ_BYTE_F(adr, dst)
  21452. res = dst + src;
  21453. flag_N = flag_X = flag_C = res;
  21454. flag_V = (src ^ res) & (dst ^ res);
  21455. flag_NotZ = res & 0xFF;
  21456. WRITE_BYTE_F(adr, res)
  21457. POST_IO
  21458. RET(20)
  21459. }
  21460. // ADDQ
  21461. OPCODE(0x501F)
  21462. {
  21463. u32 adr, res;
  21464. u32 src, dst;
  21465. src = (((Opcode >> 9) - 1) & 7) + 1;
  21466. adr = AREG(7);
  21467. AREG(7) += 2;
  21468. PRE_IO
  21469. READ_BYTE_F(adr, dst)
  21470. res = dst + src;
  21471. flag_N = flag_X = flag_C = res;
  21472. flag_V = (src ^ res) & (dst ^ res);
  21473. flag_NotZ = res & 0xFF;
  21474. WRITE_BYTE_F(adr, res)
  21475. POST_IO
  21476. RET(12)
  21477. }
  21478. // ADDQ
  21479. OPCODE(0x5027)
  21480. {
  21481. u32 adr, res;
  21482. u32 src, dst;
  21483. src = (((Opcode >> 9) - 1) & 7) + 1;
  21484. adr = AREG(7) - 2;
  21485. AREG(7) = adr;
  21486. PRE_IO
  21487. READ_BYTE_F(adr, dst)
  21488. res = dst + src;
  21489. flag_N = flag_X = flag_C = res;
  21490. flag_V = (src ^ res) & (dst ^ res);
  21491. flag_NotZ = res & 0xFF;
  21492. WRITE_BYTE_F(adr, res)
  21493. POST_IO
  21494. RET(14)
  21495. }
  21496. // ADDQ
  21497. OPCODE(0x5040)
  21498. {
  21499. u32 adr, res;
  21500. u32 src, dst;
  21501. src = (((Opcode >> 9) - 1) & 7) + 1;
  21502. dst = DREGu16((Opcode >> 0) & 7);
  21503. res = dst + src;
  21504. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  21505. flag_N = flag_X = flag_C = res >> 8;
  21506. flag_NotZ = res & 0xFFFF;
  21507. DREGu16((Opcode >> 0) & 7) = res;
  21508. RET(4)
  21509. }
  21510. // ADDQ
  21511. OPCODE(0x5048)
  21512. {
  21513. u32 adr, res;
  21514. u32 src, dst;
  21515. src = (((Opcode >> 9) - 1) & 7) + 1;
  21516. dst = AREGu32((Opcode >> 0) & 7);
  21517. res = dst + src;
  21518. AREG((Opcode >> 0) & 7) = res;
  21519. RET(8)
  21520. }
  21521. // ADDQ
  21522. OPCODE(0x5050)
  21523. {
  21524. u32 adr, res;
  21525. u32 src, dst;
  21526. src = (((Opcode >> 9) - 1) & 7) + 1;
  21527. adr = AREG((Opcode >> 0) & 7);
  21528. PRE_IO
  21529. READ_WORD_F(adr, dst)
  21530. res = dst + src;
  21531. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  21532. flag_N = flag_X = flag_C = res >> 8;
  21533. flag_NotZ = res & 0xFFFF;
  21534. WRITE_WORD_F(adr, res)
  21535. POST_IO
  21536. RET(12)
  21537. }
  21538. // ADDQ
  21539. OPCODE(0x5058)
  21540. {
  21541. u32 adr, res;
  21542. u32 src, dst;
  21543. src = (((Opcode >> 9) - 1) & 7) + 1;
  21544. adr = AREG((Opcode >> 0) & 7);
  21545. AREG((Opcode >> 0) & 7) += 2;
  21546. PRE_IO
  21547. READ_WORD_F(adr, dst)
  21548. res = dst + src;
  21549. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  21550. flag_N = flag_X = flag_C = res >> 8;
  21551. flag_NotZ = res & 0xFFFF;
  21552. WRITE_WORD_F(adr, res)
  21553. POST_IO
  21554. RET(12)
  21555. }
  21556. // ADDQ
  21557. OPCODE(0x5060)
  21558. {
  21559. u32 adr, res;
  21560. u32 src, dst;
  21561. src = (((Opcode >> 9) - 1) & 7) + 1;
  21562. adr = AREG((Opcode >> 0) & 7) - 2;
  21563. AREG((Opcode >> 0) & 7) = adr;
  21564. PRE_IO
  21565. READ_WORD_F(adr, dst)
  21566. res = dst + src;
  21567. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  21568. flag_N = flag_X = flag_C = res >> 8;
  21569. flag_NotZ = res & 0xFFFF;
  21570. WRITE_WORD_F(adr, res)
  21571. POST_IO
  21572. RET(14)
  21573. }
  21574. // ADDQ
  21575. OPCODE(0x5068)
  21576. {
  21577. u32 adr, res;
  21578. u32 src, dst;
  21579. src = (((Opcode >> 9) - 1) & 7) + 1;
  21580. FETCH_SWORD(adr);
  21581. adr += AREG((Opcode >> 0) & 7);
  21582. PRE_IO
  21583. READ_WORD_F(adr, dst)
  21584. res = dst + src;
  21585. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  21586. flag_N = flag_X = flag_C = res >> 8;
  21587. flag_NotZ = res & 0xFFFF;
  21588. WRITE_WORD_F(adr, res)
  21589. POST_IO
  21590. RET(16)
  21591. }
  21592. // ADDQ
  21593. OPCODE(0x5070)
  21594. {
  21595. u32 adr, res;
  21596. u32 src, dst;
  21597. src = (((Opcode >> 9) - 1) & 7) + 1;
  21598. adr = AREG((Opcode >> 0) & 7);
  21599. DECODE_EXT_WORD
  21600. PRE_IO
  21601. READ_WORD_F(adr, dst)
  21602. res = dst + src;
  21603. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  21604. flag_N = flag_X = flag_C = res >> 8;
  21605. flag_NotZ = res & 0xFFFF;
  21606. WRITE_WORD_F(adr, res)
  21607. POST_IO
  21608. RET(18)
  21609. }
  21610. // ADDQ
  21611. OPCODE(0x5078)
  21612. {
  21613. u32 adr, res;
  21614. u32 src, dst;
  21615. src = (((Opcode >> 9) - 1) & 7) + 1;
  21616. FETCH_SWORD(adr);
  21617. PRE_IO
  21618. READ_WORD_F(adr, dst)
  21619. res = dst + src;
  21620. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  21621. flag_N = flag_X = flag_C = res >> 8;
  21622. flag_NotZ = res & 0xFFFF;
  21623. WRITE_WORD_F(adr, res)
  21624. POST_IO
  21625. RET(16)
  21626. }
  21627. // ADDQ
  21628. OPCODE(0x5079)
  21629. {
  21630. u32 adr, res;
  21631. u32 src, dst;
  21632. src = (((Opcode >> 9) - 1) & 7) + 1;
  21633. FETCH_LONG(adr);
  21634. PRE_IO
  21635. READ_WORD_F(adr, dst)
  21636. res = dst + src;
  21637. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  21638. flag_N = flag_X = flag_C = res >> 8;
  21639. flag_NotZ = res & 0xFFFF;
  21640. WRITE_WORD_F(adr, res)
  21641. POST_IO
  21642. RET(20)
  21643. }
  21644. // ADDQ
  21645. OPCODE(0x505F)
  21646. {
  21647. u32 adr, res;
  21648. u32 src, dst;
  21649. src = (((Opcode >> 9) - 1) & 7) + 1;
  21650. adr = AREG(7);
  21651. AREG(7) += 2;
  21652. PRE_IO
  21653. READ_WORD_F(adr, dst)
  21654. res = dst + src;
  21655. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  21656. flag_N = flag_X = flag_C = res >> 8;
  21657. flag_NotZ = res & 0xFFFF;
  21658. WRITE_WORD_F(adr, res)
  21659. POST_IO
  21660. RET(12)
  21661. }
  21662. // ADDQ
  21663. OPCODE(0x5067)
  21664. {
  21665. u32 adr, res;
  21666. u32 src, dst;
  21667. src = (((Opcode >> 9) - 1) & 7) + 1;
  21668. adr = AREG(7) - 2;
  21669. AREG(7) = adr;
  21670. PRE_IO
  21671. READ_WORD_F(adr, dst)
  21672. res = dst + src;
  21673. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  21674. flag_N = flag_X = flag_C = res >> 8;
  21675. flag_NotZ = res & 0xFFFF;
  21676. WRITE_WORD_F(adr, res)
  21677. POST_IO
  21678. RET(14)
  21679. }
  21680. // ADDQ
  21681. OPCODE(0x5080)
  21682. {
  21683. u32 adr, res;
  21684. u32 src, dst;
  21685. src = (((Opcode >> 9) - 1) & 7) + 1;
  21686. dst = DREGu32((Opcode >> 0) & 7);
  21687. res = dst + src;
  21688. flag_NotZ = res;
  21689. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  21690. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  21691. flag_N = res >> 24;
  21692. DREGu32((Opcode >> 0) & 7) = res;
  21693. RET(8)
  21694. }
  21695. // ADDQ
  21696. OPCODE(0x5088)
  21697. {
  21698. u32 adr, res;
  21699. u32 src, dst;
  21700. src = (((Opcode >> 9) - 1) & 7) + 1;
  21701. dst = AREGu32((Opcode >> 0) & 7);
  21702. res = dst + src;
  21703. AREG((Opcode >> 0) & 7) = res;
  21704. RET(8)
  21705. }
  21706. // ADDQ
  21707. OPCODE(0x5090)
  21708. {
  21709. u32 adr, res;
  21710. u32 src, dst;
  21711. src = (((Opcode >> 9) - 1) & 7) + 1;
  21712. adr = AREG((Opcode >> 0) & 7);
  21713. PRE_IO
  21714. READ_LONG_F(adr, dst)
  21715. res = dst + src;
  21716. flag_NotZ = res;
  21717. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  21718. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  21719. flag_N = res >> 24;
  21720. WRITE_LONG_F(adr, res)
  21721. POST_IO
  21722. RET(20)
  21723. }
  21724. // ADDQ
  21725. OPCODE(0x5098)
  21726. {
  21727. u32 adr, res;
  21728. u32 src, dst;
  21729. src = (((Opcode >> 9) - 1) & 7) + 1;
  21730. adr = AREG((Opcode >> 0) & 7);
  21731. AREG((Opcode >> 0) & 7) += 4;
  21732. PRE_IO
  21733. READ_LONG_F(adr, dst)
  21734. res = dst + src;
  21735. flag_NotZ = res;
  21736. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  21737. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  21738. flag_N = res >> 24;
  21739. WRITE_LONG_F(adr, res)
  21740. POST_IO
  21741. RET(20)
  21742. }
  21743. // ADDQ
  21744. OPCODE(0x50A0)
  21745. {
  21746. u32 adr, res;
  21747. u32 src, dst;
  21748. src = (((Opcode >> 9) - 1) & 7) + 1;
  21749. adr = AREG((Opcode >> 0) & 7) - 4;
  21750. AREG((Opcode >> 0) & 7) = adr;
  21751. PRE_IO
  21752. READ_LONG_F(adr, dst)
  21753. res = dst + src;
  21754. flag_NotZ = res;
  21755. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  21756. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  21757. flag_N = res >> 24;
  21758. WRITE_LONG_F(adr, res)
  21759. POST_IO
  21760. RET(22)
  21761. }
  21762. // ADDQ
  21763. OPCODE(0x50A8)
  21764. {
  21765. u32 adr, res;
  21766. u32 src, dst;
  21767. src = (((Opcode >> 9) - 1) & 7) + 1;
  21768. FETCH_SWORD(adr);
  21769. adr += AREG((Opcode >> 0) & 7);
  21770. PRE_IO
  21771. READ_LONG_F(adr, dst)
  21772. res = dst + src;
  21773. flag_NotZ = res;
  21774. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  21775. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  21776. flag_N = res >> 24;
  21777. WRITE_LONG_F(adr, res)
  21778. POST_IO
  21779. RET(24)
  21780. }
  21781. // ADDQ
  21782. OPCODE(0x50B0)
  21783. {
  21784. u32 adr, res;
  21785. u32 src, dst;
  21786. src = (((Opcode >> 9) - 1) & 7) + 1;
  21787. adr = AREG((Opcode >> 0) & 7);
  21788. DECODE_EXT_WORD
  21789. PRE_IO
  21790. READ_LONG_F(adr, dst)
  21791. res = dst + src;
  21792. flag_NotZ = res;
  21793. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  21794. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  21795. flag_N = res >> 24;
  21796. WRITE_LONG_F(adr, res)
  21797. POST_IO
  21798. RET(26)
  21799. }
  21800. // ADDQ
  21801. OPCODE(0x50B8)
  21802. {
  21803. u32 adr, res;
  21804. u32 src, dst;
  21805. src = (((Opcode >> 9) - 1) & 7) + 1;
  21806. FETCH_SWORD(adr);
  21807. PRE_IO
  21808. READ_LONG_F(adr, dst)
  21809. res = dst + src;
  21810. flag_NotZ = res;
  21811. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  21812. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  21813. flag_N = res >> 24;
  21814. WRITE_LONG_F(adr, res)
  21815. POST_IO
  21816. RET(24)
  21817. }
  21818. // ADDQ
  21819. OPCODE(0x50B9)
  21820. {
  21821. u32 adr, res;
  21822. u32 src, dst;
  21823. src = (((Opcode >> 9) - 1) & 7) + 1;
  21824. FETCH_LONG(adr);
  21825. PRE_IO
  21826. READ_LONG_F(adr, dst)
  21827. res = dst + src;
  21828. flag_NotZ = res;
  21829. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  21830. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  21831. flag_N = res >> 24;
  21832. WRITE_LONG_F(adr, res)
  21833. POST_IO
  21834. RET(28)
  21835. }
  21836. // ADDQ
  21837. OPCODE(0x509F)
  21838. {
  21839. u32 adr, res;
  21840. u32 src, dst;
  21841. src = (((Opcode >> 9) - 1) & 7) + 1;
  21842. adr = AREG(7);
  21843. AREG(7) += 4;
  21844. PRE_IO
  21845. READ_LONG_F(adr, dst)
  21846. res = dst + src;
  21847. flag_NotZ = res;
  21848. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  21849. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  21850. flag_N = res >> 24;
  21851. WRITE_LONG_F(adr, res)
  21852. POST_IO
  21853. RET(20)
  21854. }
  21855. // ADDQ
  21856. OPCODE(0x50A7)
  21857. {
  21858. u32 adr, res;
  21859. u32 src, dst;
  21860. src = (((Opcode >> 9) - 1) & 7) + 1;
  21861. adr = AREG(7) - 4;
  21862. AREG(7) = adr;
  21863. PRE_IO
  21864. READ_LONG_F(adr, dst)
  21865. res = dst + src;
  21866. flag_NotZ = res;
  21867. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  21868. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  21869. flag_N = res >> 24;
  21870. WRITE_LONG_F(adr, res)
  21871. POST_IO
  21872. RET(22)
  21873. }
  21874. // SUBQ
  21875. OPCODE(0x5100)
  21876. {
  21877. u32 adr, res;
  21878. u32 src, dst;
  21879. src = (((Opcode >> 9) - 1) & 7) + 1;
  21880. dst = DREGu8((Opcode >> 0) & 7);
  21881. res = dst - src;
  21882. flag_N = flag_X = flag_C = res;
  21883. flag_V = (src ^ dst) & (res ^ dst);
  21884. flag_NotZ = res & 0xFF;
  21885. DREGu8((Opcode >> 0) & 7) = res;
  21886. RET(4)
  21887. }
  21888. // SUBQ
  21889. OPCODE(0x5110)
  21890. {
  21891. u32 adr, res;
  21892. u32 src, dst;
  21893. src = (((Opcode >> 9) - 1) & 7) + 1;
  21894. adr = AREG((Opcode >> 0) & 7);
  21895. PRE_IO
  21896. READ_BYTE_F(adr, dst)
  21897. res = dst - src;
  21898. flag_N = flag_X = flag_C = res;
  21899. flag_V = (src ^ dst) & (res ^ dst);
  21900. flag_NotZ = res & 0xFF;
  21901. WRITE_BYTE_F(adr, res)
  21902. POST_IO
  21903. RET(12)
  21904. }
  21905. // SUBQ
  21906. OPCODE(0x5118)
  21907. {
  21908. u32 adr, res;
  21909. u32 src, dst;
  21910. src = (((Opcode >> 9) - 1) & 7) + 1;
  21911. adr = AREG((Opcode >> 0) & 7);
  21912. AREG((Opcode >> 0) & 7) += 1;
  21913. PRE_IO
  21914. READ_BYTE_F(adr, dst)
  21915. res = dst - src;
  21916. flag_N = flag_X = flag_C = res;
  21917. flag_V = (src ^ dst) & (res ^ dst);
  21918. flag_NotZ = res & 0xFF;
  21919. WRITE_BYTE_F(adr, res)
  21920. POST_IO
  21921. RET(12)
  21922. }
  21923. // SUBQ
  21924. OPCODE(0x5120)
  21925. {
  21926. u32 adr, res;
  21927. u32 src, dst;
  21928. src = (((Opcode >> 9) - 1) & 7) + 1;
  21929. adr = AREG((Opcode >> 0) & 7) - 1;
  21930. AREG((Opcode >> 0) & 7) = adr;
  21931. PRE_IO
  21932. READ_BYTE_F(adr, dst)
  21933. res = dst - src;
  21934. flag_N = flag_X = flag_C = res;
  21935. flag_V = (src ^ dst) & (res ^ dst);
  21936. flag_NotZ = res & 0xFF;
  21937. WRITE_BYTE_F(adr, res)
  21938. POST_IO
  21939. RET(14)
  21940. }
  21941. // SUBQ
  21942. OPCODE(0x5128)
  21943. {
  21944. u32 adr, res;
  21945. u32 src, dst;
  21946. src = (((Opcode >> 9) - 1) & 7) + 1;
  21947. FETCH_SWORD(adr);
  21948. adr += AREG((Opcode >> 0) & 7);
  21949. PRE_IO
  21950. READ_BYTE_F(adr, dst)
  21951. res = dst - src;
  21952. flag_N = flag_X = flag_C = res;
  21953. flag_V = (src ^ dst) & (res ^ dst);
  21954. flag_NotZ = res & 0xFF;
  21955. WRITE_BYTE_F(adr, res)
  21956. POST_IO
  21957. RET(16)
  21958. }
  21959. // SUBQ
  21960. OPCODE(0x5130)
  21961. {
  21962. u32 adr, res;
  21963. u32 src, dst;
  21964. src = (((Opcode >> 9) - 1) & 7) + 1;
  21965. adr = AREG((Opcode >> 0) & 7);
  21966. DECODE_EXT_WORD
  21967. PRE_IO
  21968. READ_BYTE_F(adr, dst)
  21969. res = dst - src;
  21970. flag_N = flag_X = flag_C = res;
  21971. flag_V = (src ^ dst) & (res ^ dst);
  21972. flag_NotZ = res & 0xFF;
  21973. WRITE_BYTE_F(adr, res)
  21974. POST_IO
  21975. RET(18)
  21976. }
  21977. // SUBQ
  21978. OPCODE(0x5138)
  21979. {
  21980. u32 adr, res;
  21981. u32 src, dst;
  21982. src = (((Opcode >> 9) - 1) & 7) + 1;
  21983. FETCH_SWORD(adr);
  21984. PRE_IO
  21985. READ_BYTE_F(adr, dst)
  21986. res = dst - src;
  21987. flag_N = flag_X = flag_C = res;
  21988. flag_V = (src ^ dst) & (res ^ dst);
  21989. flag_NotZ = res & 0xFF;
  21990. WRITE_BYTE_F(adr, res)
  21991. POST_IO
  21992. RET(16)
  21993. }
  21994. // SUBQ
  21995. OPCODE(0x5139)
  21996. {
  21997. u32 adr, res;
  21998. u32 src, dst;
  21999. src = (((Opcode >> 9) - 1) & 7) + 1;
  22000. FETCH_LONG(adr);
  22001. PRE_IO
  22002. READ_BYTE_F(adr, dst)
  22003. res = dst - src;
  22004. flag_N = flag_X = flag_C = res;
  22005. flag_V = (src ^ dst) & (res ^ dst);
  22006. flag_NotZ = res & 0xFF;
  22007. WRITE_BYTE_F(adr, res)
  22008. POST_IO
  22009. RET(20)
  22010. }
  22011. // SUBQ
  22012. OPCODE(0x511F)
  22013. {
  22014. u32 adr, res;
  22015. u32 src, dst;
  22016. src = (((Opcode >> 9) - 1) & 7) + 1;
  22017. adr = AREG(7);
  22018. AREG(7) += 2;
  22019. PRE_IO
  22020. READ_BYTE_F(adr, dst)
  22021. res = dst - src;
  22022. flag_N = flag_X = flag_C = res;
  22023. flag_V = (src ^ dst) & (res ^ dst);
  22024. flag_NotZ = res & 0xFF;
  22025. WRITE_BYTE_F(adr, res)
  22026. POST_IO
  22027. RET(12)
  22028. }
  22029. // SUBQ
  22030. OPCODE(0x5127)
  22031. {
  22032. u32 adr, res;
  22033. u32 src, dst;
  22034. src = (((Opcode >> 9) - 1) & 7) + 1;
  22035. adr = AREG(7) - 2;
  22036. AREG(7) = adr;
  22037. PRE_IO
  22038. READ_BYTE_F(adr, dst)
  22039. res = dst - src;
  22040. flag_N = flag_X = flag_C = res;
  22041. flag_V = (src ^ dst) & (res ^ dst);
  22042. flag_NotZ = res & 0xFF;
  22043. WRITE_BYTE_F(adr, res)
  22044. POST_IO
  22045. RET(14)
  22046. }
  22047. // SUBQ
  22048. OPCODE(0x5140)
  22049. {
  22050. u32 adr, res;
  22051. u32 src, dst;
  22052. src = (((Opcode >> 9) - 1) & 7) + 1;
  22053. dst = DREGu16((Opcode >> 0) & 7);
  22054. res = dst - src;
  22055. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  22056. flag_N = flag_X = flag_C = res >> 8;
  22057. flag_NotZ = res & 0xFFFF;
  22058. DREGu16((Opcode >> 0) & 7) = res;
  22059. RET(4)
  22060. }
  22061. // SUBQ
  22062. OPCODE(0x5148)
  22063. {
  22064. u32 adr, res;
  22065. u32 src, dst;
  22066. src = (((Opcode >> 9) - 1) & 7) + 1;
  22067. dst = AREGu32((Opcode >> 0) & 7);
  22068. res = dst - src;
  22069. AREG((Opcode >> 0) & 7) = res;
  22070. RET(8)
  22071. }
  22072. // SUBQ
  22073. OPCODE(0x5150)
  22074. {
  22075. u32 adr, res;
  22076. u32 src, dst;
  22077. src = (((Opcode >> 9) - 1) & 7) + 1;
  22078. adr = AREG((Opcode >> 0) & 7);
  22079. PRE_IO
  22080. READ_WORD_F(adr, dst)
  22081. res = dst - src;
  22082. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  22083. flag_N = flag_X = flag_C = res >> 8;
  22084. flag_NotZ = res & 0xFFFF;
  22085. WRITE_WORD_F(adr, res)
  22086. POST_IO
  22087. RET(12)
  22088. }
  22089. // SUBQ
  22090. OPCODE(0x5158)
  22091. {
  22092. u32 adr, res;
  22093. u32 src, dst;
  22094. src = (((Opcode >> 9) - 1) & 7) + 1;
  22095. adr = AREG((Opcode >> 0) & 7);
  22096. AREG((Opcode >> 0) & 7) += 2;
  22097. PRE_IO
  22098. READ_WORD_F(adr, dst)
  22099. res = dst - src;
  22100. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  22101. flag_N = flag_X = flag_C = res >> 8;
  22102. flag_NotZ = res & 0xFFFF;
  22103. WRITE_WORD_F(adr, res)
  22104. POST_IO
  22105. RET(12)
  22106. }
  22107. // SUBQ
  22108. OPCODE(0x5160)
  22109. {
  22110. u32 adr, res;
  22111. u32 src, dst;
  22112. src = (((Opcode >> 9) - 1) & 7) + 1;
  22113. adr = AREG((Opcode >> 0) & 7) - 2;
  22114. AREG((Opcode >> 0) & 7) = adr;
  22115. PRE_IO
  22116. READ_WORD_F(adr, dst)
  22117. res = dst - src;
  22118. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  22119. flag_N = flag_X = flag_C = res >> 8;
  22120. flag_NotZ = res & 0xFFFF;
  22121. WRITE_WORD_F(adr, res)
  22122. POST_IO
  22123. RET(14)
  22124. }
  22125. // SUBQ
  22126. OPCODE(0x5168)
  22127. {
  22128. u32 adr, res;
  22129. u32 src, dst;
  22130. src = (((Opcode >> 9) - 1) & 7) + 1;
  22131. FETCH_SWORD(adr);
  22132. adr += AREG((Opcode >> 0) & 7);
  22133. PRE_IO
  22134. READ_WORD_F(adr, dst)
  22135. res = dst - src;
  22136. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  22137. flag_N = flag_X = flag_C = res >> 8;
  22138. flag_NotZ = res & 0xFFFF;
  22139. WRITE_WORD_F(adr, res)
  22140. POST_IO
  22141. RET(16)
  22142. }
  22143. // SUBQ
  22144. OPCODE(0x5170)
  22145. {
  22146. u32 adr, res;
  22147. u32 src, dst;
  22148. src = (((Opcode >> 9) - 1) & 7) + 1;
  22149. adr = AREG((Opcode >> 0) & 7);
  22150. DECODE_EXT_WORD
  22151. PRE_IO
  22152. READ_WORD_F(adr, dst)
  22153. res = dst - src;
  22154. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  22155. flag_N = flag_X = flag_C = res >> 8;
  22156. flag_NotZ = res & 0xFFFF;
  22157. WRITE_WORD_F(adr, res)
  22158. POST_IO
  22159. RET(18)
  22160. }
  22161. // SUBQ
  22162. OPCODE(0x5178)
  22163. {
  22164. u32 adr, res;
  22165. u32 src, dst;
  22166. src = (((Opcode >> 9) - 1) & 7) + 1;
  22167. FETCH_SWORD(adr);
  22168. PRE_IO
  22169. READ_WORD_F(adr, dst)
  22170. res = dst - src;
  22171. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  22172. flag_N = flag_X = flag_C = res >> 8;
  22173. flag_NotZ = res & 0xFFFF;
  22174. WRITE_WORD_F(adr, res)
  22175. POST_IO
  22176. RET(16)
  22177. }
  22178. // SUBQ
  22179. OPCODE(0x5179)
  22180. {
  22181. u32 adr, res;
  22182. u32 src, dst;
  22183. src = (((Opcode >> 9) - 1) & 7) + 1;
  22184. FETCH_LONG(adr);
  22185. PRE_IO
  22186. READ_WORD_F(adr, dst)
  22187. res = dst - src;
  22188. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  22189. flag_N = flag_X = flag_C = res >> 8;
  22190. flag_NotZ = res & 0xFFFF;
  22191. WRITE_WORD_F(adr, res)
  22192. POST_IO
  22193. RET(20)
  22194. }
  22195. // SUBQ
  22196. OPCODE(0x515F)
  22197. {
  22198. u32 adr, res;
  22199. u32 src, dst;
  22200. src = (((Opcode >> 9) - 1) & 7) + 1;
  22201. adr = AREG(7);
  22202. AREG(7) += 2;
  22203. PRE_IO
  22204. READ_WORD_F(adr, dst)
  22205. res = dst - src;
  22206. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  22207. flag_N = flag_X = flag_C = res >> 8;
  22208. flag_NotZ = res & 0xFFFF;
  22209. WRITE_WORD_F(adr, res)
  22210. POST_IO
  22211. RET(12)
  22212. }
  22213. // SUBQ
  22214. OPCODE(0x5167)
  22215. {
  22216. u32 adr, res;
  22217. u32 src, dst;
  22218. src = (((Opcode >> 9) - 1) & 7) + 1;
  22219. adr = AREG(7) - 2;
  22220. AREG(7) = adr;
  22221. PRE_IO
  22222. READ_WORD_F(adr, dst)
  22223. res = dst - src;
  22224. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  22225. flag_N = flag_X = flag_C = res >> 8;
  22226. flag_NotZ = res & 0xFFFF;
  22227. WRITE_WORD_F(adr, res)
  22228. POST_IO
  22229. RET(14)
  22230. }
  22231. // SUBQ
  22232. OPCODE(0x5180)
  22233. {
  22234. u32 adr, res;
  22235. u32 src, dst;
  22236. src = (((Opcode >> 9) - 1) & 7) + 1;
  22237. dst = DREGu32((Opcode >> 0) & 7);
  22238. res = dst - src;
  22239. flag_NotZ = res;
  22240. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  22241. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  22242. flag_N = res >> 24;
  22243. DREGu32((Opcode >> 0) & 7) = res;
  22244. RET(8)
  22245. }
  22246. // SUBQ
  22247. OPCODE(0x5188)
  22248. {
  22249. u32 adr, res;
  22250. u32 src, dst;
  22251. src = (((Opcode >> 9) - 1) & 7) + 1;
  22252. dst = AREGu32((Opcode >> 0) & 7);
  22253. res = dst - src;
  22254. AREG((Opcode >> 0) & 7) = res;
  22255. RET(8)
  22256. }
  22257. // SUBQ
  22258. OPCODE(0x5190)
  22259. {
  22260. u32 adr, res;
  22261. u32 src, dst;
  22262. src = (((Opcode >> 9) - 1) & 7) + 1;
  22263. adr = AREG((Opcode >> 0) & 7);
  22264. PRE_IO
  22265. READ_LONG_F(adr, dst)
  22266. res = dst - src;
  22267. flag_NotZ = res;
  22268. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  22269. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  22270. flag_N = res >> 24;
  22271. WRITE_LONG_F(adr, res)
  22272. POST_IO
  22273. RET(20)
  22274. }
  22275. // SUBQ
  22276. OPCODE(0x5198)
  22277. {
  22278. u32 adr, res;
  22279. u32 src, dst;
  22280. src = (((Opcode >> 9) - 1) & 7) + 1;
  22281. adr = AREG((Opcode >> 0) & 7);
  22282. AREG((Opcode >> 0) & 7) += 4;
  22283. PRE_IO
  22284. READ_LONG_F(adr, dst)
  22285. res = dst - src;
  22286. flag_NotZ = res;
  22287. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  22288. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  22289. flag_N = res >> 24;
  22290. WRITE_LONG_F(adr, res)
  22291. POST_IO
  22292. RET(20)
  22293. }
  22294. // SUBQ
  22295. OPCODE(0x51A0)
  22296. {
  22297. u32 adr, res;
  22298. u32 src, dst;
  22299. src = (((Opcode >> 9) - 1) & 7) + 1;
  22300. adr = AREG((Opcode >> 0) & 7) - 4;
  22301. AREG((Opcode >> 0) & 7) = adr;
  22302. PRE_IO
  22303. READ_LONG_F(adr, dst)
  22304. res = dst - src;
  22305. flag_NotZ = res;
  22306. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  22307. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  22308. flag_N = res >> 24;
  22309. WRITE_LONG_F(adr, res)
  22310. POST_IO
  22311. RET(22)
  22312. }
  22313. // SUBQ
  22314. OPCODE(0x51A8)
  22315. {
  22316. u32 adr, res;
  22317. u32 src, dst;
  22318. src = (((Opcode >> 9) - 1) & 7) + 1;
  22319. FETCH_SWORD(adr);
  22320. adr += AREG((Opcode >> 0) & 7);
  22321. PRE_IO
  22322. READ_LONG_F(adr, dst)
  22323. res = dst - src;
  22324. flag_NotZ = res;
  22325. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  22326. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  22327. flag_N = res >> 24;
  22328. WRITE_LONG_F(adr, res)
  22329. POST_IO
  22330. RET(24)
  22331. }
  22332. // SUBQ
  22333. OPCODE(0x51B0)
  22334. {
  22335. u32 adr, res;
  22336. u32 src, dst;
  22337. src = (((Opcode >> 9) - 1) & 7) + 1;
  22338. adr = AREG((Opcode >> 0) & 7);
  22339. DECODE_EXT_WORD
  22340. PRE_IO
  22341. READ_LONG_F(adr, dst)
  22342. res = dst - src;
  22343. flag_NotZ = res;
  22344. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  22345. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  22346. flag_N = res >> 24;
  22347. WRITE_LONG_F(adr, res)
  22348. POST_IO
  22349. RET(26)
  22350. }
  22351. // SUBQ
  22352. OPCODE(0x51B8)
  22353. {
  22354. u32 adr, res;
  22355. u32 src, dst;
  22356. src = (((Opcode >> 9) - 1) & 7) + 1;
  22357. FETCH_SWORD(adr);
  22358. PRE_IO
  22359. READ_LONG_F(adr, dst)
  22360. res = dst - src;
  22361. flag_NotZ = res;
  22362. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  22363. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  22364. flag_N = res >> 24;
  22365. WRITE_LONG_F(adr, res)
  22366. POST_IO
  22367. RET(24)
  22368. }
  22369. // SUBQ
  22370. OPCODE(0x51B9)
  22371. {
  22372. u32 adr, res;
  22373. u32 src, dst;
  22374. src = (((Opcode >> 9) - 1) & 7) + 1;
  22375. FETCH_LONG(adr);
  22376. PRE_IO
  22377. READ_LONG_F(adr, dst)
  22378. res = dst - src;
  22379. flag_NotZ = res;
  22380. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  22381. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  22382. flag_N = res >> 24;
  22383. WRITE_LONG_F(adr, res)
  22384. POST_IO
  22385. RET(28)
  22386. }
  22387. // SUBQ
  22388. OPCODE(0x519F)
  22389. {
  22390. u32 adr, res;
  22391. u32 src, dst;
  22392. src = (((Opcode >> 9) - 1) & 7) + 1;
  22393. adr = AREG(7);
  22394. AREG(7) += 4;
  22395. PRE_IO
  22396. READ_LONG_F(adr, dst)
  22397. res = dst - src;
  22398. flag_NotZ = res;
  22399. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  22400. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  22401. flag_N = res >> 24;
  22402. WRITE_LONG_F(adr, res)
  22403. POST_IO
  22404. RET(20)
  22405. }
  22406. // SUBQ
  22407. OPCODE(0x51A7)
  22408. {
  22409. u32 adr, res;
  22410. u32 src, dst;
  22411. src = (((Opcode >> 9) - 1) & 7) + 1;
  22412. adr = AREG(7) - 4;
  22413. AREG(7) = adr;
  22414. PRE_IO
  22415. READ_LONG_F(adr, dst)
  22416. res = dst - src;
  22417. flag_NotZ = res;
  22418. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  22419. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  22420. flag_N = res >> 24;
  22421. WRITE_LONG_F(adr, res)
  22422. POST_IO
  22423. RET(22)
  22424. }
  22425. // BCC
  22426. OPCODE(0x6201)
  22427. {
  22428. u32 adr, res;
  22429. u32 src, dst;
  22430. if (flag_NotZ && (!(flag_C & 0x100)))
  22431. {
  22432. PC += ((s8)(Opcode & 0xFE)) >> 1;
  22433. ctx->io_cycle_counter -= 2;
  22434. }
  22435. RET(8)
  22436. }
  22437. // BCC
  22438. OPCODE(0x6301)
  22439. {
  22440. u32 adr, res;
  22441. u32 src, dst;
  22442. if ((!flag_NotZ) || (flag_C & 0x100))
  22443. {
  22444. PC += ((s8)(Opcode & 0xFE)) >> 1;
  22445. ctx->io_cycle_counter -= 2;
  22446. }
  22447. RET(8)
  22448. }
  22449. // BCC
  22450. OPCODE(0x6401)
  22451. {
  22452. u32 adr, res;
  22453. u32 src, dst;
  22454. if (!(flag_C & 0x100))
  22455. {
  22456. PC += ((s8)(Opcode & 0xFE)) >> 1;
  22457. ctx->io_cycle_counter -= 2;
  22458. }
  22459. RET(8)
  22460. }
  22461. // BCC
  22462. OPCODE(0x6501)
  22463. {
  22464. u32 adr, res;
  22465. u32 src, dst;
  22466. if (flag_C & 0x100)
  22467. {
  22468. PC += ((s8)(Opcode & 0xFE)) >> 1;
  22469. ctx->io_cycle_counter -= 2;
  22470. }
  22471. RET(8)
  22472. }
  22473. // BCC
  22474. OPCODE(0x6601)
  22475. {
  22476. u32 adr, res;
  22477. u32 src, dst;
  22478. if (flag_NotZ)
  22479. {
  22480. PC += ((s8)(Opcode & 0xFE)) >> 1;
  22481. ctx->io_cycle_counter -= 2;
  22482. }
  22483. RET(8)
  22484. }
  22485. // BCC
  22486. OPCODE(0x6701)
  22487. {
  22488. u32 adr, res;
  22489. u32 src, dst;
  22490. if (!flag_NotZ)
  22491. {
  22492. PC += ((s8)(Opcode & 0xFE)) >> 1;
  22493. ctx->io_cycle_counter -= 2;
  22494. }
  22495. RET(8)
  22496. }
  22497. // BCC
  22498. OPCODE(0x6801)
  22499. {
  22500. u32 adr, res;
  22501. u32 src, dst;
  22502. if (!(flag_V & 0x80))
  22503. {
  22504. PC += ((s8)(Opcode & 0xFE)) >> 1;
  22505. ctx->io_cycle_counter -= 2;
  22506. }
  22507. RET(8)
  22508. }
  22509. // BCC
  22510. OPCODE(0x6901)
  22511. {
  22512. u32 adr, res;
  22513. u32 src, dst;
  22514. if (flag_V & 0x80)
  22515. {
  22516. PC += ((s8)(Opcode & 0xFE)) >> 1;
  22517. ctx->io_cycle_counter -= 2;
  22518. }
  22519. RET(8)
  22520. }
  22521. // BCC
  22522. OPCODE(0x6A01)
  22523. {
  22524. u32 adr, res;
  22525. u32 src, dst;
  22526. if (!(flag_N & 0x80))
  22527. {
  22528. PC += ((s8)(Opcode & 0xFE)) >> 1;
  22529. ctx->io_cycle_counter -= 2;
  22530. }
  22531. RET(8)
  22532. }
  22533. // BCC
  22534. OPCODE(0x6B01)
  22535. {
  22536. u32 adr, res;
  22537. u32 src, dst;
  22538. if (flag_N & 0x80)
  22539. {
  22540. PC += ((s8)(Opcode & 0xFE)) >> 1;
  22541. ctx->io_cycle_counter -= 2;
  22542. }
  22543. RET(8)
  22544. }
  22545. // BCC
  22546. OPCODE(0x6C01)
  22547. {
  22548. u32 adr, res;
  22549. u32 src, dst;
  22550. if (!((flag_N ^ flag_V) & 0x80))
  22551. {
  22552. PC += ((s8)(Opcode & 0xFE)) >> 1;
  22553. ctx->io_cycle_counter -= 2;
  22554. }
  22555. RET(8)
  22556. }
  22557. // BCC
  22558. OPCODE(0x6D01)
  22559. {
  22560. u32 adr, res;
  22561. u32 src, dst;
  22562. if ((flag_N ^ flag_V) & 0x80)
  22563. {
  22564. PC += ((s8)(Opcode & 0xFE)) >> 1;
  22565. ctx->io_cycle_counter -= 2;
  22566. }
  22567. RET(8)
  22568. }
  22569. // BCC
  22570. OPCODE(0x6E01)
  22571. {
  22572. u32 adr, res;
  22573. u32 src, dst;
  22574. if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
  22575. {
  22576. PC += ((s8)(Opcode & 0xFE)) >> 1;
  22577. ctx->io_cycle_counter -= 2;
  22578. }
  22579. RET(8)
  22580. }
  22581. // BCC
  22582. OPCODE(0x6F01)
  22583. {
  22584. u32 adr, res;
  22585. u32 src, dst;
  22586. if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
  22587. {
  22588. PC += ((s8)(Opcode & 0xFE)) >> 1;
  22589. ctx->io_cycle_counter -= 2;
  22590. }
  22591. RET(8)
  22592. }
  22593. // BCC16
  22594. OPCODE(0x6200)
  22595. {
  22596. u32 adr, res;
  22597. u32 src, dst;
  22598. if (flag_NotZ && (!(flag_C & 0x100)))
  22599. {
  22600. u32 newPC;
  22601. newPC = GET_PC;
  22602. newPC += GET_SWORD;
  22603. SET_PC(newPC);
  22604. CHECK_BRANCH_EXCEPTION(newPC)
  22605. RET(10)
  22606. }
  22607. PC++;
  22608. RET(12)
  22609. }
  22610. // BCC16
  22611. OPCODE(0x6300)
  22612. {
  22613. u32 adr, res;
  22614. u32 src, dst;
  22615. if ((!flag_NotZ) || (flag_C & 0x100))
  22616. {
  22617. u32 newPC;
  22618. newPC = GET_PC;
  22619. newPC += GET_SWORD;
  22620. SET_PC(newPC);
  22621. CHECK_BRANCH_EXCEPTION(newPC)
  22622. RET(10)
  22623. }
  22624. PC++;
  22625. RET(12)
  22626. }
  22627. // BCC16
  22628. OPCODE(0x6400)
  22629. {
  22630. u32 adr, res;
  22631. u32 src, dst;
  22632. if (!(flag_C & 0x100))
  22633. {
  22634. u32 newPC;
  22635. newPC = GET_PC;
  22636. newPC += GET_SWORD;
  22637. SET_PC(newPC);
  22638. CHECK_BRANCH_EXCEPTION(newPC)
  22639. RET(10)
  22640. }
  22641. PC++;
  22642. RET(12)
  22643. }
  22644. // BCC16
  22645. OPCODE(0x6500)
  22646. {
  22647. u32 adr, res;
  22648. u32 src, dst;
  22649. if (flag_C & 0x100)
  22650. {
  22651. u32 newPC;
  22652. newPC = GET_PC;
  22653. newPC += GET_SWORD;
  22654. SET_PC(newPC);
  22655. CHECK_BRANCH_EXCEPTION(newPC)
  22656. RET(10)
  22657. }
  22658. PC++;
  22659. RET(12)
  22660. }
  22661. // BCC16
  22662. OPCODE(0x6600)
  22663. {
  22664. u32 adr, res;
  22665. u32 src, dst;
  22666. if (flag_NotZ)
  22667. {
  22668. u32 newPC;
  22669. newPC = GET_PC;
  22670. newPC += GET_SWORD;
  22671. SET_PC(newPC);
  22672. CHECK_BRANCH_EXCEPTION(newPC)
  22673. RET(10)
  22674. }
  22675. PC++;
  22676. RET(12)
  22677. }
  22678. // BCC16
  22679. OPCODE(0x6700)
  22680. {
  22681. u32 adr, res;
  22682. u32 src, dst;
  22683. if (!flag_NotZ)
  22684. {
  22685. u32 newPC;
  22686. newPC = GET_PC;
  22687. newPC += GET_SWORD;
  22688. SET_PC(newPC);
  22689. CHECK_BRANCH_EXCEPTION(newPC)
  22690. RET(10)
  22691. }
  22692. PC++;
  22693. RET(12)
  22694. }
  22695. // BCC16
  22696. OPCODE(0x6800)
  22697. {
  22698. u32 adr, res;
  22699. u32 src, dst;
  22700. if (!(flag_V & 0x80))
  22701. {
  22702. u32 newPC;
  22703. newPC = GET_PC;
  22704. newPC += GET_SWORD;
  22705. SET_PC(newPC);
  22706. CHECK_BRANCH_EXCEPTION(newPC)
  22707. RET(10)
  22708. }
  22709. PC++;
  22710. RET(12)
  22711. }
  22712. // BCC16
  22713. OPCODE(0x6900)
  22714. {
  22715. u32 adr, res;
  22716. u32 src, dst;
  22717. if (flag_V & 0x80)
  22718. {
  22719. u32 newPC;
  22720. newPC = GET_PC;
  22721. newPC += GET_SWORD;
  22722. SET_PC(newPC);
  22723. CHECK_BRANCH_EXCEPTION(newPC)
  22724. RET(10)
  22725. }
  22726. PC++;
  22727. RET(12)
  22728. }
  22729. // BCC16
  22730. OPCODE(0x6A00)
  22731. {
  22732. u32 adr, res;
  22733. u32 src, dst;
  22734. if (!(flag_N & 0x80))
  22735. {
  22736. u32 newPC;
  22737. newPC = GET_PC;
  22738. newPC += GET_SWORD;
  22739. SET_PC(newPC);
  22740. CHECK_BRANCH_EXCEPTION(newPC)
  22741. RET(10)
  22742. }
  22743. PC++;
  22744. RET(12)
  22745. }
  22746. // BCC16
  22747. OPCODE(0x6B00)
  22748. {
  22749. u32 adr, res;
  22750. u32 src, dst;
  22751. if (flag_N & 0x80)
  22752. {
  22753. u32 newPC;
  22754. newPC = GET_PC;
  22755. newPC += GET_SWORD;
  22756. SET_PC(newPC);
  22757. CHECK_BRANCH_EXCEPTION(newPC)
  22758. RET(10)
  22759. }
  22760. PC++;
  22761. RET(12)
  22762. }
  22763. // BCC16
  22764. OPCODE(0x6C00)
  22765. {
  22766. u32 adr, res;
  22767. u32 src, dst;
  22768. if (!((flag_N ^ flag_V) & 0x80))
  22769. {
  22770. u32 newPC;
  22771. newPC = GET_PC;
  22772. newPC += GET_SWORD;
  22773. SET_PC(newPC);
  22774. CHECK_BRANCH_EXCEPTION(newPC)
  22775. RET(10)
  22776. }
  22777. PC++;
  22778. RET(12)
  22779. }
  22780. // BCC16
  22781. OPCODE(0x6D00)
  22782. {
  22783. u32 adr, res;
  22784. u32 src, dst;
  22785. if ((flag_N ^ flag_V) & 0x80)
  22786. {
  22787. u32 newPC;
  22788. newPC = GET_PC;
  22789. newPC += GET_SWORD;
  22790. SET_PC(newPC);
  22791. CHECK_BRANCH_EXCEPTION(newPC)
  22792. RET(10)
  22793. }
  22794. PC++;
  22795. RET(12)
  22796. }
  22797. // BCC16
  22798. OPCODE(0x6E00)
  22799. {
  22800. u32 adr, res;
  22801. u32 src, dst;
  22802. if (flag_NotZ && (!((flag_N ^ flag_V) & 0x80)))
  22803. {
  22804. u32 newPC;
  22805. newPC = GET_PC;
  22806. newPC += GET_SWORD;
  22807. SET_PC(newPC);
  22808. CHECK_BRANCH_EXCEPTION(newPC)
  22809. RET(10)
  22810. }
  22811. PC++;
  22812. RET(12)
  22813. }
  22814. // BCC16
  22815. OPCODE(0x6F00)
  22816. {
  22817. u32 adr, res;
  22818. u32 src, dst;
  22819. if ((!flag_NotZ) || ((flag_N ^ flag_V) & 0x80))
  22820. {
  22821. u32 newPC;
  22822. newPC = GET_PC;
  22823. newPC += GET_SWORD;
  22824. SET_PC(newPC);
  22825. CHECK_BRANCH_EXCEPTION(newPC)
  22826. RET(10)
  22827. }
  22828. PC++;
  22829. RET(12)
  22830. }
  22831. // BRA
  22832. OPCODE(0x6001)
  22833. {
  22834. #ifdef FAMEC_CHECK_BRANCHES
  22835. u32 newPC = GET_PC;
  22836. s8 offs=Opcode;
  22837. newPC += offs;
  22838. SET_PC(newPC);
  22839. CHECK_BRANCH_EXCEPTION(offs)
  22840. #else
  22841. PC += ((s8)(Opcode & 0xFE)) >> 1;
  22842. #endif
  22843. RET(10)
  22844. }
  22845. // BRA16
  22846. OPCODE(0x6000)
  22847. {
  22848. u32 adr, res;
  22849. u32 src, dst;
  22850. {
  22851. u32 newPC;
  22852. newPC = GET_PC;
  22853. newPC += GET_SWORD;
  22854. SET_PC(newPC);
  22855. CHECK_BRANCH_EXCEPTION(newPC)
  22856. }
  22857. RET(10)
  22858. }
  22859. // BSR
  22860. OPCODE(0x6101)
  22861. {
  22862. u32 adr, res;
  22863. u32 src, dst;
  22864. u32 oldPC;
  22865. s8 offs;
  22866. PRE_IO
  22867. oldPC = GET_PC;
  22868. PUSH_32_F(oldPC)
  22869. #ifdef FAMEC_CHECK_BRANCHES
  22870. offs = Opcode;
  22871. oldPC += offs;
  22872. SET_PC(oldPC);
  22873. CHECK_BRANCH_EXCEPTION(offs)
  22874. #else
  22875. PC += ((s8)(Opcode & 0xFE)) >> 1;
  22876. #endif
  22877. POST_IO
  22878. RET(18)
  22879. }
  22880. // BSR16
  22881. OPCODE(0x6100)
  22882. {
  22883. u32 adr, res;
  22884. u32 src, dst;
  22885. PRE_IO
  22886. {
  22887. u32 oldPC, newPC;
  22888. newPC = GET_PC;
  22889. oldPC = newPC + 2;
  22890. PUSH_32_F(oldPC)
  22891. newPC += GET_SWORD;
  22892. SET_PC(newPC);
  22893. CHECK_BRANCH_EXCEPTION(newPC)
  22894. }
  22895. POST_IO
  22896. RET(18)
  22897. }
  22898. // MOVEQ
  22899. OPCODE(0x7000)
  22900. {
  22901. u32 adr, res;
  22902. u32 src, dst;
  22903. res = (s32)(s8)Opcode;
  22904. flag_C = flag_V = 0;
  22905. flag_N = flag_NotZ = res;
  22906. DREGu32((Opcode >> 9) & 7) = res;
  22907. RET(4)
  22908. }
  22909. // ORaD
  22910. OPCODE(0x8000)
  22911. {
  22912. u32 adr, res;
  22913. u32 src, dst;
  22914. src = DREGu8((Opcode >> 0) & 7);
  22915. res = DREGu8((Opcode >> 9) & 7);
  22916. res |= src;
  22917. flag_C = 0;
  22918. flag_V = 0;
  22919. flag_NotZ = res;
  22920. flag_N = res;
  22921. DREGu8((Opcode >> 9) & 7) = res;
  22922. RET(4)
  22923. }
  22924. // ORaD
  22925. OPCODE(0x8010)
  22926. {
  22927. u32 adr, res;
  22928. u32 src, dst;
  22929. adr = AREG((Opcode >> 0) & 7);
  22930. PRE_IO
  22931. READ_BYTE_F(adr, src)
  22932. res = DREGu8((Opcode >> 9) & 7);
  22933. res |= src;
  22934. flag_C = 0;
  22935. flag_V = 0;
  22936. flag_NotZ = res;
  22937. flag_N = res;
  22938. DREGu8((Opcode >> 9) & 7) = res;
  22939. POST_IO
  22940. RET(8)
  22941. }
  22942. // ORaD
  22943. OPCODE(0x8018)
  22944. {
  22945. u32 adr, res;
  22946. u32 src, dst;
  22947. adr = AREG((Opcode >> 0) & 7);
  22948. AREG((Opcode >> 0) & 7) += 1;
  22949. PRE_IO
  22950. READ_BYTE_F(adr, src)
  22951. res = DREGu8((Opcode >> 9) & 7);
  22952. res |= src;
  22953. flag_C = 0;
  22954. flag_V = 0;
  22955. flag_NotZ = res;
  22956. flag_N = res;
  22957. DREGu8((Opcode >> 9) & 7) = res;
  22958. POST_IO
  22959. RET(8)
  22960. }
  22961. // ORaD
  22962. OPCODE(0x8020)
  22963. {
  22964. u32 adr, res;
  22965. u32 src, dst;
  22966. adr = AREG((Opcode >> 0) & 7) - 1;
  22967. AREG((Opcode >> 0) & 7) = adr;
  22968. PRE_IO
  22969. READ_BYTE_F(adr, src)
  22970. res = DREGu8((Opcode >> 9) & 7);
  22971. res |= src;
  22972. flag_C = 0;
  22973. flag_V = 0;
  22974. flag_NotZ = res;
  22975. flag_N = res;
  22976. DREGu8((Opcode >> 9) & 7) = res;
  22977. POST_IO
  22978. RET(10)
  22979. }
  22980. // ORaD
  22981. OPCODE(0x8028)
  22982. {
  22983. u32 adr, res;
  22984. u32 src, dst;
  22985. FETCH_SWORD(adr);
  22986. adr += AREG((Opcode >> 0) & 7);
  22987. PRE_IO
  22988. READ_BYTE_F(adr, src)
  22989. res = DREGu8((Opcode >> 9) & 7);
  22990. res |= src;
  22991. flag_C = 0;
  22992. flag_V = 0;
  22993. flag_NotZ = res;
  22994. flag_N = res;
  22995. DREGu8((Opcode >> 9) & 7) = res;
  22996. POST_IO
  22997. RET(12)
  22998. }
  22999. // ORaD
  23000. OPCODE(0x8030)
  23001. {
  23002. u32 adr, res;
  23003. u32 src, dst;
  23004. adr = AREG((Opcode >> 0) & 7);
  23005. DECODE_EXT_WORD
  23006. PRE_IO
  23007. READ_BYTE_F(adr, src)
  23008. res = DREGu8((Opcode >> 9) & 7);
  23009. res |= src;
  23010. flag_C = 0;
  23011. flag_V = 0;
  23012. flag_NotZ = res;
  23013. flag_N = res;
  23014. DREGu8((Opcode >> 9) & 7) = res;
  23015. POST_IO
  23016. RET(14)
  23017. }
  23018. // ORaD
  23019. OPCODE(0x8038)
  23020. {
  23021. u32 adr, res;
  23022. u32 src, dst;
  23023. FETCH_SWORD(adr);
  23024. PRE_IO
  23025. READ_BYTE_F(adr, src)
  23026. res = DREGu8((Opcode >> 9) & 7);
  23027. res |= src;
  23028. flag_C = 0;
  23029. flag_V = 0;
  23030. flag_NotZ = res;
  23031. flag_N = res;
  23032. DREGu8((Opcode >> 9) & 7) = res;
  23033. POST_IO
  23034. RET(12)
  23035. }
  23036. // ORaD
  23037. OPCODE(0x8039)
  23038. {
  23039. u32 adr, res;
  23040. u32 src, dst;
  23041. FETCH_LONG(adr);
  23042. PRE_IO
  23043. READ_BYTE_F(adr, src)
  23044. res = DREGu8((Opcode >> 9) & 7);
  23045. res |= src;
  23046. flag_C = 0;
  23047. flag_V = 0;
  23048. flag_NotZ = res;
  23049. flag_N = res;
  23050. DREGu8((Opcode >> 9) & 7) = res;
  23051. POST_IO
  23052. RET(16)
  23053. }
  23054. // ORaD
  23055. OPCODE(0x803A)
  23056. {
  23057. u32 adr, res;
  23058. u32 src, dst;
  23059. adr = GET_SWORD + GET_PC;
  23060. PC++;
  23061. PRE_IO
  23062. READ_BYTE_F(adr, src)
  23063. res = DREGu8((Opcode >> 9) & 7);
  23064. res |= src;
  23065. flag_C = 0;
  23066. flag_V = 0;
  23067. flag_NotZ = res;
  23068. flag_N = res;
  23069. DREGu8((Opcode >> 9) & 7) = res;
  23070. POST_IO
  23071. RET(12)
  23072. }
  23073. // ORaD
  23074. OPCODE(0x803B)
  23075. {
  23076. u32 adr, res;
  23077. u32 src, dst;
  23078. adr = GET_PC;
  23079. DECODE_EXT_WORD
  23080. PRE_IO
  23081. READ_BYTE_F(adr, src)
  23082. res = DREGu8((Opcode >> 9) & 7);
  23083. res |= src;
  23084. flag_C = 0;
  23085. flag_V = 0;
  23086. flag_NotZ = res;
  23087. flag_N = res;
  23088. DREGu8((Opcode >> 9) & 7) = res;
  23089. POST_IO
  23090. RET(14)
  23091. }
  23092. // ORaD
  23093. OPCODE(0x803C)
  23094. {
  23095. u32 adr, res;
  23096. u32 src, dst;
  23097. FETCH_BYTE(src);
  23098. res = DREGu8((Opcode >> 9) & 7);
  23099. res |= src;
  23100. flag_C = 0;
  23101. flag_V = 0;
  23102. flag_NotZ = res;
  23103. flag_N = res;
  23104. DREGu8((Opcode >> 9) & 7) = res;
  23105. RET(8)
  23106. }
  23107. // ORaD
  23108. OPCODE(0x801F)
  23109. {
  23110. u32 adr, res;
  23111. u32 src, dst;
  23112. adr = AREG(7);
  23113. AREG(7) += 2;
  23114. PRE_IO
  23115. READ_BYTE_F(adr, src)
  23116. res = DREGu8((Opcode >> 9) & 7);
  23117. res |= src;
  23118. flag_C = 0;
  23119. flag_V = 0;
  23120. flag_NotZ = res;
  23121. flag_N = res;
  23122. DREGu8((Opcode >> 9) & 7) = res;
  23123. POST_IO
  23124. RET(8)
  23125. }
  23126. // ORaD
  23127. OPCODE(0x8027)
  23128. {
  23129. u32 adr, res;
  23130. u32 src, dst;
  23131. adr = AREG(7) - 2;
  23132. AREG(7) = adr;
  23133. PRE_IO
  23134. READ_BYTE_F(adr, src)
  23135. res = DREGu8((Opcode >> 9) & 7);
  23136. res |= src;
  23137. flag_C = 0;
  23138. flag_V = 0;
  23139. flag_NotZ = res;
  23140. flag_N = res;
  23141. DREGu8((Opcode >> 9) & 7) = res;
  23142. POST_IO
  23143. RET(10)
  23144. }
  23145. // ORaD
  23146. OPCODE(0x8040)
  23147. {
  23148. u32 adr, res;
  23149. u32 src, dst;
  23150. src = DREGu16((Opcode >> 0) & 7);
  23151. res = DREGu16((Opcode >> 9) & 7);
  23152. res |= src;
  23153. flag_C = 0;
  23154. flag_V = 0;
  23155. flag_NotZ = res;
  23156. flag_N = res >> 8;
  23157. DREGu16((Opcode >> 9) & 7) = res;
  23158. RET(4)
  23159. }
  23160. // ORaD
  23161. OPCODE(0x8050)
  23162. {
  23163. u32 adr, res;
  23164. u32 src, dst;
  23165. adr = AREG((Opcode >> 0) & 7);
  23166. PRE_IO
  23167. READ_WORD_F(adr, src)
  23168. res = DREGu16((Opcode >> 9) & 7);
  23169. res |= src;
  23170. flag_C = 0;
  23171. flag_V = 0;
  23172. flag_NotZ = res;
  23173. flag_N = res >> 8;
  23174. DREGu16((Opcode >> 9) & 7) = res;
  23175. POST_IO
  23176. RET(8)
  23177. }
  23178. // ORaD
  23179. OPCODE(0x8058)
  23180. {
  23181. u32 adr, res;
  23182. u32 src, dst;
  23183. adr = AREG((Opcode >> 0) & 7);
  23184. AREG((Opcode >> 0) & 7) += 2;
  23185. PRE_IO
  23186. READ_WORD_F(adr, src)
  23187. res = DREGu16((Opcode >> 9) & 7);
  23188. res |= src;
  23189. flag_C = 0;
  23190. flag_V = 0;
  23191. flag_NotZ = res;
  23192. flag_N = res >> 8;
  23193. DREGu16((Opcode >> 9) & 7) = res;
  23194. POST_IO
  23195. RET(8)
  23196. }
  23197. // ORaD
  23198. OPCODE(0x8060)
  23199. {
  23200. u32 adr, res;
  23201. u32 src, dst;
  23202. adr = AREG((Opcode >> 0) & 7) - 2;
  23203. AREG((Opcode >> 0) & 7) = adr;
  23204. PRE_IO
  23205. READ_WORD_F(adr, src)
  23206. res = DREGu16((Opcode >> 9) & 7);
  23207. res |= src;
  23208. flag_C = 0;
  23209. flag_V = 0;
  23210. flag_NotZ = res;
  23211. flag_N = res >> 8;
  23212. DREGu16((Opcode >> 9) & 7) = res;
  23213. POST_IO
  23214. RET(10)
  23215. }
  23216. // ORaD
  23217. OPCODE(0x8068)
  23218. {
  23219. u32 adr, res;
  23220. u32 src, dst;
  23221. FETCH_SWORD(adr);
  23222. adr += AREG((Opcode >> 0) & 7);
  23223. PRE_IO
  23224. READ_WORD_F(adr, src)
  23225. res = DREGu16((Opcode >> 9) & 7);
  23226. res |= src;
  23227. flag_C = 0;
  23228. flag_V = 0;
  23229. flag_NotZ = res;
  23230. flag_N = res >> 8;
  23231. DREGu16((Opcode >> 9) & 7) = res;
  23232. POST_IO
  23233. RET(12)
  23234. }
  23235. // ORaD
  23236. OPCODE(0x8070)
  23237. {
  23238. u32 adr, res;
  23239. u32 src, dst;
  23240. adr = AREG((Opcode >> 0) & 7);
  23241. DECODE_EXT_WORD
  23242. PRE_IO
  23243. READ_WORD_F(adr, src)
  23244. res = DREGu16((Opcode >> 9) & 7);
  23245. res |= src;
  23246. flag_C = 0;
  23247. flag_V = 0;
  23248. flag_NotZ = res;
  23249. flag_N = res >> 8;
  23250. DREGu16((Opcode >> 9) & 7) = res;
  23251. POST_IO
  23252. RET(14)
  23253. }
  23254. // ORaD
  23255. OPCODE(0x8078)
  23256. {
  23257. u32 adr, res;
  23258. u32 src, dst;
  23259. FETCH_SWORD(adr);
  23260. PRE_IO
  23261. READ_WORD_F(adr, src)
  23262. res = DREGu16((Opcode >> 9) & 7);
  23263. res |= src;
  23264. flag_C = 0;
  23265. flag_V = 0;
  23266. flag_NotZ = res;
  23267. flag_N = res >> 8;
  23268. DREGu16((Opcode >> 9) & 7) = res;
  23269. POST_IO
  23270. RET(12)
  23271. }
  23272. // ORaD
  23273. OPCODE(0x8079)
  23274. {
  23275. u32 adr, res;
  23276. u32 src, dst;
  23277. FETCH_LONG(adr);
  23278. PRE_IO
  23279. READ_WORD_F(adr, src)
  23280. res = DREGu16((Opcode >> 9) & 7);
  23281. res |= src;
  23282. flag_C = 0;
  23283. flag_V = 0;
  23284. flag_NotZ = res;
  23285. flag_N = res >> 8;
  23286. DREGu16((Opcode >> 9) & 7) = res;
  23287. POST_IO
  23288. RET(16)
  23289. }
  23290. // ORaD
  23291. OPCODE(0x807A)
  23292. {
  23293. u32 adr, res;
  23294. u32 src, dst;
  23295. adr = GET_SWORD + GET_PC;
  23296. PC++;
  23297. PRE_IO
  23298. READ_WORD_F(adr, src)
  23299. res = DREGu16((Opcode >> 9) & 7);
  23300. res |= src;
  23301. flag_C = 0;
  23302. flag_V = 0;
  23303. flag_NotZ = res;
  23304. flag_N = res >> 8;
  23305. DREGu16((Opcode >> 9) & 7) = res;
  23306. POST_IO
  23307. RET(12)
  23308. }
  23309. // ORaD
  23310. OPCODE(0x807B)
  23311. {
  23312. u32 adr, res;
  23313. u32 src, dst;
  23314. adr = GET_PC;
  23315. DECODE_EXT_WORD
  23316. PRE_IO
  23317. READ_WORD_F(adr, src)
  23318. res = DREGu16((Opcode >> 9) & 7);
  23319. res |= src;
  23320. flag_C = 0;
  23321. flag_V = 0;
  23322. flag_NotZ = res;
  23323. flag_N = res >> 8;
  23324. DREGu16((Opcode >> 9) & 7) = res;
  23325. POST_IO
  23326. RET(14)
  23327. }
  23328. // ORaD
  23329. OPCODE(0x807C)
  23330. {
  23331. u32 adr, res;
  23332. u32 src, dst;
  23333. FETCH_WORD(src);
  23334. res = DREGu16((Opcode >> 9) & 7);
  23335. res |= src;
  23336. flag_C = 0;
  23337. flag_V = 0;
  23338. flag_NotZ = res;
  23339. flag_N = res >> 8;
  23340. DREGu16((Opcode >> 9) & 7) = res;
  23341. RET(8)
  23342. }
  23343. // ORaD
  23344. OPCODE(0x805F)
  23345. {
  23346. u32 adr, res;
  23347. u32 src, dst;
  23348. adr = AREG(7);
  23349. AREG(7) += 2;
  23350. PRE_IO
  23351. READ_WORD_F(adr, src)
  23352. res = DREGu16((Opcode >> 9) & 7);
  23353. res |= src;
  23354. flag_C = 0;
  23355. flag_V = 0;
  23356. flag_NotZ = res;
  23357. flag_N = res >> 8;
  23358. DREGu16((Opcode >> 9) & 7) = res;
  23359. POST_IO
  23360. RET(8)
  23361. }
  23362. // ORaD
  23363. OPCODE(0x8067)
  23364. {
  23365. u32 adr, res;
  23366. u32 src, dst;
  23367. adr = AREG(7) - 2;
  23368. AREG(7) = adr;
  23369. PRE_IO
  23370. READ_WORD_F(adr, src)
  23371. res = DREGu16((Opcode >> 9) & 7);
  23372. res |= src;
  23373. flag_C = 0;
  23374. flag_V = 0;
  23375. flag_NotZ = res;
  23376. flag_N = res >> 8;
  23377. DREGu16((Opcode >> 9) & 7) = res;
  23378. POST_IO
  23379. RET(10)
  23380. }
  23381. // ORaD
  23382. OPCODE(0x8080)
  23383. {
  23384. u32 adr, res;
  23385. u32 src, dst;
  23386. src = DREGu32((Opcode >> 0) & 7);
  23387. res = DREGu32((Opcode >> 9) & 7);
  23388. res |= src;
  23389. flag_C = 0;
  23390. flag_V = 0;
  23391. flag_NotZ = res;
  23392. flag_N = res >> 24;
  23393. DREGu32((Opcode >> 9) & 7) = res;
  23394. RET(8)
  23395. }
  23396. // ORaD
  23397. OPCODE(0x8090)
  23398. {
  23399. u32 adr, res;
  23400. u32 src, dst;
  23401. adr = AREG((Opcode >> 0) & 7);
  23402. PRE_IO
  23403. READ_LONG_F(adr, src)
  23404. res = DREGu32((Opcode >> 9) & 7);
  23405. res |= src;
  23406. flag_C = 0;
  23407. flag_V = 0;
  23408. flag_NotZ = res;
  23409. flag_N = res >> 24;
  23410. DREGu32((Opcode >> 9) & 7) = res;
  23411. POST_IO
  23412. RET(14)
  23413. }
  23414. // ORaD
  23415. OPCODE(0x8098)
  23416. {
  23417. u32 adr, res;
  23418. u32 src, dst;
  23419. adr = AREG((Opcode >> 0) & 7);
  23420. AREG((Opcode >> 0) & 7) += 4;
  23421. PRE_IO
  23422. READ_LONG_F(adr, src)
  23423. res = DREGu32((Opcode >> 9) & 7);
  23424. res |= src;
  23425. flag_C = 0;
  23426. flag_V = 0;
  23427. flag_NotZ = res;
  23428. flag_N = res >> 24;
  23429. DREGu32((Opcode >> 9) & 7) = res;
  23430. POST_IO
  23431. RET(14)
  23432. }
  23433. // ORaD
  23434. OPCODE(0x80A0)
  23435. {
  23436. u32 adr, res;
  23437. u32 src, dst;
  23438. adr = AREG((Opcode >> 0) & 7) - 4;
  23439. AREG((Opcode >> 0) & 7) = adr;
  23440. PRE_IO
  23441. READ_LONG_F(adr, src)
  23442. res = DREGu32((Opcode >> 9) & 7);
  23443. res |= src;
  23444. flag_C = 0;
  23445. flag_V = 0;
  23446. flag_NotZ = res;
  23447. flag_N = res >> 24;
  23448. DREGu32((Opcode >> 9) & 7) = res;
  23449. POST_IO
  23450. RET(16)
  23451. }
  23452. // ORaD
  23453. OPCODE(0x80A8)
  23454. {
  23455. u32 adr, res;
  23456. u32 src, dst;
  23457. FETCH_SWORD(adr);
  23458. adr += AREG((Opcode >> 0) & 7);
  23459. PRE_IO
  23460. READ_LONG_F(adr, src)
  23461. res = DREGu32((Opcode >> 9) & 7);
  23462. res |= src;
  23463. flag_C = 0;
  23464. flag_V = 0;
  23465. flag_NotZ = res;
  23466. flag_N = res >> 24;
  23467. DREGu32((Opcode >> 9) & 7) = res;
  23468. POST_IO
  23469. RET(18)
  23470. }
  23471. // ORaD
  23472. OPCODE(0x80B0)
  23473. {
  23474. u32 adr, res;
  23475. u32 src, dst;
  23476. adr = AREG((Opcode >> 0) & 7);
  23477. DECODE_EXT_WORD
  23478. PRE_IO
  23479. READ_LONG_F(adr, src)
  23480. res = DREGu32((Opcode >> 9) & 7);
  23481. res |= src;
  23482. flag_C = 0;
  23483. flag_V = 0;
  23484. flag_NotZ = res;
  23485. flag_N = res >> 24;
  23486. DREGu32((Opcode >> 9) & 7) = res;
  23487. POST_IO
  23488. RET(20)
  23489. }
  23490. // ORaD
  23491. OPCODE(0x80B8)
  23492. {
  23493. u32 adr, res;
  23494. u32 src, dst;
  23495. FETCH_SWORD(adr);
  23496. PRE_IO
  23497. READ_LONG_F(adr, src)
  23498. res = DREGu32((Opcode >> 9) & 7);
  23499. res |= src;
  23500. flag_C = 0;
  23501. flag_V = 0;
  23502. flag_NotZ = res;
  23503. flag_N = res >> 24;
  23504. DREGu32((Opcode >> 9) & 7) = res;
  23505. POST_IO
  23506. RET(18)
  23507. }
  23508. // ORaD
  23509. OPCODE(0x80B9)
  23510. {
  23511. u32 adr, res;
  23512. u32 src, dst;
  23513. FETCH_LONG(adr);
  23514. PRE_IO
  23515. READ_LONG_F(adr, src)
  23516. res = DREGu32((Opcode >> 9) & 7);
  23517. res |= src;
  23518. flag_C = 0;
  23519. flag_V = 0;
  23520. flag_NotZ = res;
  23521. flag_N = res >> 24;
  23522. DREGu32((Opcode >> 9) & 7) = res;
  23523. POST_IO
  23524. RET(22)
  23525. }
  23526. // ORaD
  23527. OPCODE(0x80BA)
  23528. {
  23529. u32 adr, res;
  23530. u32 src, dst;
  23531. adr = GET_SWORD + GET_PC;
  23532. PC++;
  23533. PRE_IO
  23534. READ_LONG_F(adr, src)
  23535. res = DREGu32((Opcode >> 9) & 7);
  23536. res |= src;
  23537. flag_C = 0;
  23538. flag_V = 0;
  23539. flag_NotZ = res;
  23540. flag_N = res >> 24;
  23541. DREGu32((Opcode >> 9) & 7) = res;
  23542. POST_IO
  23543. RET(18)
  23544. }
  23545. // ORaD
  23546. OPCODE(0x80BB)
  23547. {
  23548. u32 adr, res;
  23549. u32 src, dst;
  23550. adr = GET_PC;
  23551. DECODE_EXT_WORD
  23552. PRE_IO
  23553. READ_LONG_F(adr, src)
  23554. res = DREGu32((Opcode >> 9) & 7);
  23555. res |= src;
  23556. flag_C = 0;
  23557. flag_V = 0;
  23558. flag_NotZ = res;
  23559. flag_N = res >> 24;
  23560. DREGu32((Opcode >> 9) & 7) = res;
  23561. POST_IO
  23562. RET(20)
  23563. }
  23564. // ORaD
  23565. OPCODE(0x80BC)
  23566. {
  23567. u32 adr, res;
  23568. u32 src, dst;
  23569. FETCH_LONG(src);
  23570. res = DREGu32((Opcode >> 9) & 7);
  23571. res |= src;
  23572. flag_C = 0;
  23573. flag_V = 0;
  23574. flag_NotZ = res;
  23575. flag_N = res >> 24;
  23576. DREGu32((Opcode >> 9) & 7) = res;
  23577. RET(16)
  23578. }
  23579. // ORaD
  23580. OPCODE(0x809F)
  23581. {
  23582. u32 adr, res;
  23583. u32 src, dst;
  23584. adr = AREG(7);
  23585. AREG(7) += 4;
  23586. PRE_IO
  23587. READ_LONG_F(adr, src)
  23588. res = DREGu32((Opcode >> 9) & 7);
  23589. res |= src;
  23590. flag_C = 0;
  23591. flag_V = 0;
  23592. flag_NotZ = res;
  23593. flag_N = res >> 24;
  23594. DREGu32((Opcode >> 9) & 7) = res;
  23595. POST_IO
  23596. RET(14)
  23597. }
  23598. // ORaD
  23599. OPCODE(0x80A7)
  23600. {
  23601. u32 adr, res;
  23602. u32 src, dst;
  23603. adr = AREG(7) - 4;
  23604. AREG(7) = adr;
  23605. PRE_IO
  23606. READ_LONG_F(adr, src)
  23607. res = DREGu32((Opcode >> 9) & 7);
  23608. res |= src;
  23609. flag_C = 0;
  23610. flag_V = 0;
  23611. flag_NotZ = res;
  23612. flag_N = res >> 24;
  23613. DREGu32((Opcode >> 9) & 7) = res;
  23614. POST_IO
  23615. RET(16)
  23616. }
  23617. // ORDa
  23618. OPCODE(0x8110)
  23619. {
  23620. u32 adr, res;
  23621. u32 src, dst;
  23622. src = DREGu8((Opcode >> 9) & 7);
  23623. adr = AREG((Opcode >> 0) & 7);
  23624. PRE_IO
  23625. READ_BYTE_F(adr, res)
  23626. res |= src;
  23627. flag_C = 0;
  23628. flag_V = 0;
  23629. flag_NotZ = res;
  23630. flag_N = res;
  23631. WRITE_BYTE_F(adr, res)
  23632. POST_IO
  23633. RET(12)
  23634. }
  23635. // ORDa
  23636. OPCODE(0x8118)
  23637. {
  23638. u32 adr, res;
  23639. u32 src, dst;
  23640. src = DREGu8((Opcode >> 9) & 7);
  23641. adr = AREG((Opcode >> 0) & 7);
  23642. AREG((Opcode >> 0) & 7) += 1;
  23643. PRE_IO
  23644. READ_BYTE_F(adr, res)
  23645. res |= src;
  23646. flag_C = 0;
  23647. flag_V = 0;
  23648. flag_NotZ = res;
  23649. flag_N = res;
  23650. WRITE_BYTE_F(adr, res)
  23651. POST_IO
  23652. RET(12)
  23653. }
  23654. // ORDa
  23655. OPCODE(0x8120)
  23656. {
  23657. u32 adr, res;
  23658. u32 src, dst;
  23659. src = DREGu8((Opcode >> 9) & 7);
  23660. adr = AREG((Opcode >> 0) & 7) - 1;
  23661. AREG((Opcode >> 0) & 7) = adr;
  23662. PRE_IO
  23663. READ_BYTE_F(adr, res)
  23664. res |= src;
  23665. flag_C = 0;
  23666. flag_V = 0;
  23667. flag_NotZ = res;
  23668. flag_N = res;
  23669. WRITE_BYTE_F(adr, res)
  23670. POST_IO
  23671. RET(14)
  23672. }
  23673. // ORDa
  23674. OPCODE(0x8128)
  23675. {
  23676. u32 adr, res;
  23677. u32 src, dst;
  23678. src = DREGu8((Opcode >> 9) & 7);
  23679. FETCH_SWORD(adr);
  23680. adr += AREG((Opcode >> 0) & 7);
  23681. PRE_IO
  23682. READ_BYTE_F(adr, res)
  23683. res |= src;
  23684. flag_C = 0;
  23685. flag_V = 0;
  23686. flag_NotZ = res;
  23687. flag_N = res;
  23688. WRITE_BYTE_F(adr, res)
  23689. POST_IO
  23690. RET(16)
  23691. }
  23692. // ORDa
  23693. OPCODE(0x8130)
  23694. {
  23695. u32 adr, res;
  23696. u32 src, dst;
  23697. src = DREGu8((Opcode >> 9) & 7);
  23698. adr = AREG((Opcode >> 0) & 7);
  23699. DECODE_EXT_WORD
  23700. PRE_IO
  23701. READ_BYTE_F(adr, res)
  23702. res |= src;
  23703. flag_C = 0;
  23704. flag_V = 0;
  23705. flag_NotZ = res;
  23706. flag_N = res;
  23707. WRITE_BYTE_F(adr, res)
  23708. POST_IO
  23709. RET(18)
  23710. }
  23711. // ORDa
  23712. OPCODE(0x8138)
  23713. {
  23714. u32 adr, res;
  23715. u32 src, dst;
  23716. src = DREGu8((Opcode >> 9) & 7);
  23717. FETCH_SWORD(adr);
  23718. PRE_IO
  23719. READ_BYTE_F(adr, res)
  23720. res |= src;
  23721. flag_C = 0;
  23722. flag_V = 0;
  23723. flag_NotZ = res;
  23724. flag_N = res;
  23725. WRITE_BYTE_F(adr, res)
  23726. POST_IO
  23727. RET(16)
  23728. }
  23729. // ORDa
  23730. OPCODE(0x8139)
  23731. {
  23732. u32 adr, res;
  23733. u32 src, dst;
  23734. src = DREGu8((Opcode >> 9) & 7);
  23735. FETCH_LONG(adr);
  23736. PRE_IO
  23737. READ_BYTE_F(adr, res)
  23738. res |= src;
  23739. flag_C = 0;
  23740. flag_V = 0;
  23741. flag_NotZ = res;
  23742. flag_N = res;
  23743. WRITE_BYTE_F(adr, res)
  23744. POST_IO
  23745. RET(20)
  23746. }
  23747. // ORDa
  23748. OPCODE(0x811F)
  23749. {
  23750. u32 adr, res;
  23751. u32 src, dst;
  23752. src = DREGu8((Opcode >> 9) & 7);
  23753. adr = AREG(7);
  23754. AREG(7) += 2;
  23755. PRE_IO
  23756. READ_BYTE_F(adr, res)
  23757. res |= src;
  23758. flag_C = 0;
  23759. flag_V = 0;
  23760. flag_NotZ = res;
  23761. flag_N = res;
  23762. WRITE_BYTE_F(adr, res)
  23763. POST_IO
  23764. RET(12)
  23765. }
  23766. // ORDa
  23767. OPCODE(0x8127)
  23768. {
  23769. u32 adr, res;
  23770. u32 src, dst;
  23771. src = DREGu8((Opcode >> 9) & 7);
  23772. adr = AREG(7) - 2;
  23773. AREG(7) = adr;
  23774. PRE_IO
  23775. READ_BYTE_F(adr, res)
  23776. res |= src;
  23777. flag_C = 0;
  23778. flag_V = 0;
  23779. flag_NotZ = res;
  23780. flag_N = res;
  23781. WRITE_BYTE_F(adr, res)
  23782. POST_IO
  23783. RET(14)
  23784. }
  23785. // ORDa
  23786. OPCODE(0x8150)
  23787. {
  23788. u32 adr, res;
  23789. u32 src, dst;
  23790. src = DREGu16((Opcode >> 9) & 7);
  23791. adr = AREG((Opcode >> 0) & 7);
  23792. PRE_IO
  23793. READ_WORD_F(adr, res)
  23794. res |= src;
  23795. flag_C = 0;
  23796. flag_V = 0;
  23797. flag_NotZ = res;
  23798. flag_N = res >> 8;
  23799. WRITE_WORD_F(adr, res)
  23800. POST_IO
  23801. RET(12)
  23802. }
  23803. // ORDa
  23804. OPCODE(0x8158)
  23805. {
  23806. u32 adr, res;
  23807. u32 src, dst;
  23808. src = DREGu16((Opcode >> 9) & 7);
  23809. adr = AREG((Opcode >> 0) & 7);
  23810. AREG((Opcode >> 0) & 7) += 2;
  23811. PRE_IO
  23812. READ_WORD_F(adr, res)
  23813. res |= src;
  23814. flag_C = 0;
  23815. flag_V = 0;
  23816. flag_NotZ = res;
  23817. flag_N = res >> 8;
  23818. WRITE_WORD_F(adr, res)
  23819. POST_IO
  23820. RET(12)
  23821. }
  23822. // ORDa
  23823. OPCODE(0x8160)
  23824. {
  23825. u32 adr, res;
  23826. u32 src, dst;
  23827. src = DREGu16((Opcode >> 9) & 7);
  23828. adr = AREG((Opcode >> 0) & 7) - 2;
  23829. AREG((Opcode >> 0) & 7) = adr;
  23830. PRE_IO
  23831. READ_WORD_F(adr, res)
  23832. res |= src;
  23833. flag_C = 0;
  23834. flag_V = 0;
  23835. flag_NotZ = res;
  23836. flag_N = res >> 8;
  23837. WRITE_WORD_F(adr, res)
  23838. POST_IO
  23839. RET(14)
  23840. }
  23841. // ORDa
  23842. OPCODE(0x8168)
  23843. {
  23844. u32 adr, res;
  23845. u32 src, dst;
  23846. src = DREGu16((Opcode >> 9) & 7);
  23847. FETCH_SWORD(adr);
  23848. adr += AREG((Opcode >> 0) & 7);
  23849. PRE_IO
  23850. READ_WORD_F(adr, res)
  23851. res |= src;
  23852. flag_C = 0;
  23853. flag_V = 0;
  23854. flag_NotZ = res;
  23855. flag_N = res >> 8;
  23856. WRITE_WORD_F(adr, res)
  23857. POST_IO
  23858. RET(16)
  23859. }
  23860. // ORDa
  23861. OPCODE(0x8170)
  23862. {
  23863. u32 adr, res;
  23864. u32 src, dst;
  23865. src = DREGu16((Opcode >> 9) & 7);
  23866. adr = AREG((Opcode >> 0) & 7);
  23867. DECODE_EXT_WORD
  23868. PRE_IO
  23869. READ_WORD_F(adr, res)
  23870. res |= src;
  23871. flag_C = 0;
  23872. flag_V = 0;
  23873. flag_NotZ = res;
  23874. flag_N = res >> 8;
  23875. WRITE_WORD_F(adr, res)
  23876. POST_IO
  23877. RET(18)
  23878. }
  23879. // ORDa
  23880. OPCODE(0x8178)
  23881. {
  23882. u32 adr, res;
  23883. u32 src, dst;
  23884. src = DREGu16((Opcode >> 9) & 7);
  23885. FETCH_SWORD(adr);
  23886. PRE_IO
  23887. READ_WORD_F(adr, res)
  23888. res |= src;
  23889. flag_C = 0;
  23890. flag_V = 0;
  23891. flag_NotZ = res;
  23892. flag_N = res >> 8;
  23893. WRITE_WORD_F(adr, res)
  23894. POST_IO
  23895. RET(16)
  23896. }
  23897. // ORDa
  23898. OPCODE(0x8179)
  23899. {
  23900. u32 adr, res;
  23901. u32 src, dst;
  23902. src = DREGu16((Opcode >> 9) & 7);
  23903. FETCH_LONG(adr);
  23904. PRE_IO
  23905. READ_WORD_F(adr, res)
  23906. res |= src;
  23907. flag_C = 0;
  23908. flag_V = 0;
  23909. flag_NotZ = res;
  23910. flag_N = res >> 8;
  23911. WRITE_WORD_F(adr, res)
  23912. POST_IO
  23913. RET(20)
  23914. }
  23915. // ORDa
  23916. OPCODE(0x815F)
  23917. {
  23918. u32 adr, res;
  23919. u32 src, dst;
  23920. src = DREGu16((Opcode >> 9) & 7);
  23921. adr = AREG(7);
  23922. AREG(7) += 2;
  23923. PRE_IO
  23924. READ_WORD_F(adr, res)
  23925. res |= src;
  23926. flag_C = 0;
  23927. flag_V = 0;
  23928. flag_NotZ = res;
  23929. flag_N = res >> 8;
  23930. WRITE_WORD_F(adr, res)
  23931. POST_IO
  23932. RET(12)
  23933. }
  23934. // ORDa
  23935. OPCODE(0x8167)
  23936. {
  23937. u32 adr, res;
  23938. u32 src, dst;
  23939. src = DREGu16((Opcode >> 9) & 7);
  23940. adr = AREG(7) - 2;
  23941. AREG(7) = adr;
  23942. PRE_IO
  23943. READ_WORD_F(adr, res)
  23944. res |= src;
  23945. flag_C = 0;
  23946. flag_V = 0;
  23947. flag_NotZ = res;
  23948. flag_N = res >> 8;
  23949. WRITE_WORD_F(adr, res)
  23950. POST_IO
  23951. RET(14)
  23952. }
  23953. // ORDa
  23954. OPCODE(0x8190)
  23955. {
  23956. u32 adr, res;
  23957. u32 src, dst;
  23958. src = DREGu32((Opcode >> 9) & 7);
  23959. adr = AREG((Opcode >> 0) & 7);
  23960. PRE_IO
  23961. READ_LONG_F(adr, res)
  23962. res |= src;
  23963. flag_C = 0;
  23964. flag_V = 0;
  23965. flag_NotZ = res;
  23966. flag_N = res >> 24;
  23967. WRITE_LONG_F(adr, res)
  23968. POST_IO
  23969. RET(20)
  23970. }
  23971. // ORDa
  23972. OPCODE(0x8198)
  23973. {
  23974. u32 adr, res;
  23975. u32 src, dst;
  23976. src = DREGu32((Opcode >> 9) & 7);
  23977. adr = AREG((Opcode >> 0) & 7);
  23978. AREG((Opcode >> 0) & 7) += 4;
  23979. PRE_IO
  23980. READ_LONG_F(adr, res)
  23981. res |= src;
  23982. flag_C = 0;
  23983. flag_V = 0;
  23984. flag_NotZ = res;
  23985. flag_N = res >> 24;
  23986. WRITE_LONG_F(adr, res)
  23987. POST_IO
  23988. RET(20)
  23989. }
  23990. // ORDa
  23991. OPCODE(0x81A0)
  23992. {
  23993. u32 adr, res;
  23994. u32 src, dst;
  23995. src = DREGu32((Opcode >> 9) & 7);
  23996. adr = AREG((Opcode >> 0) & 7) - 4;
  23997. AREG((Opcode >> 0) & 7) = adr;
  23998. PRE_IO
  23999. READ_LONG_F(adr, res)
  24000. res |= src;
  24001. flag_C = 0;
  24002. flag_V = 0;
  24003. flag_NotZ = res;
  24004. flag_N = res >> 24;
  24005. WRITE_LONG_F(adr, res)
  24006. POST_IO
  24007. RET(22)
  24008. }
  24009. // ORDa
  24010. OPCODE(0x81A8)
  24011. {
  24012. u32 adr, res;
  24013. u32 src, dst;
  24014. src = DREGu32((Opcode >> 9) & 7);
  24015. FETCH_SWORD(adr);
  24016. adr += AREG((Opcode >> 0) & 7);
  24017. PRE_IO
  24018. READ_LONG_F(adr, res)
  24019. res |= src;
  24020. flag_C = 0;
  24021. flag_V = 0;
  24022. flag_NotZ = res;
  24023. flag_N = res >> 24;
  24024. WRITE_LONG_F(adr, res)
  24025. POST_IO
  24026. RET(24)
  24027. }
  24028. // ORDa
  24029. OPCODE(0x81B0)
  24030. {
  24031. u32 adr, res;
  24032. u32 src, dst;
  24033. src = DREGu32((Opcode >> 9) & 7);
  24034. adr = AREG((Opcode >> 0) & 7);
  24035. DECODE_EXT_WORD
  24036. PRE_IO
  24037. READ_LONG_F(adr, res)
  24038. res |= src;
  24039. flag_C = 0;
  24040. flag_V = 0;
  24041. flag_NotZ = res;
  24042. flag_N = res >> 24;
  24043. WRITE_LONG_F(adr, res)
  24044. POST_IO
  24045. RET(26)
  24046. }
  24047. // ORDa
  24048. OPCODE(0x81B8)
  24049. {
  24050. u32 adr, res;
  24051. u32 src, dst;
  24052. src = DREGu32((Opcode >> 9) & 7);
  24053. FETCH_SWORD(adr);
  24054. PRE_IO
  24055. READ_LONG_F(adr, res)
  24056. res |= src;
  24057. flag_C = 0;
  24058. flag_V = 0;
  24059. flag_NotZ = res;
  24060. flag_N = res >> 24;
  24061. WRITE_LONG_F(adr, res)
  24062. POST_IO
  24063. RET(24)
  24064. }
  24065. // ORDa
  24066. OPCODE(0x81B9)
  24067. {
  24068. u32 adr, res;
  24069. u32 src, dst;
  24070. src = DREGu32((Opcode >> 9) & 7);
  24071. FETCH_LONG(adr);
  24072. PRE_IO
  24073. READ_LONG_F(adr, res)
  24074. res |= src;
  24075. flag_C = 0;
  24076. flag_V = 0;
  24077. flag_NotZ = res;
  24078. flag_N = res >> 24;
  24079. WRITE_LONG_F(adr, res)
  24080. POST_IO
  24081. RET(28)
  24082. }
  24083. // ORDa
  24084. OPCODE(0x819F)
  24085. {
  24086. u32 adr, res;
  24087. u32 src, dst;
  24088. src = DREGu32((Opcode >> 9) & 7);
  24089. adr = AREG(7);
  24090. AREG(7) += 4;
  24091. PRE_IO
  24092. READ_LONG_F(adr, res)
  24093. res |= src;
  24094. flag_C = 0;
  24095. flag_V = 0;
  24096. flag_NotZ = res;
  24097. flag_N = res >> 24;
  24098. WRITE_LONG_F(adr, res)
  24099. POST_IO
  24100. RET(20)
  24101. }
  24102. // ORDa
  24103. OPCODE(0x81A7)
  24104. {
  24105. u32 adr, res;
  24106. u32 src, dst;
  24107. src = DREGu32((Opcode >> 9) & 7);
  24108. adr = AREG(7) - 4;
  24109. AREG(7) = adr;
  24110. PRE_IO
  24111. READ_LONG_F(adr, res)
  24112. res |= src;
  24113. flag_C = 0;
  24114. flag_V = 0;
  24115. flag_NotZ = res;
  24116. flag_N = res >> 24;
  24117. WRITE_LONG_F(adr, res)
  24118. POST_IO
  24119. RET(22)
  24120. }
  24121. // SBCD
  24122. OPCODE(0x8100)
  24123. {
  24124. u32 adr, res;
  24125. u32 src, dst;
  24126. u32 corf = 0;
  24127. src = DREGu8((Opcode >> 0) & 7);
  24128. dst = DREGu8((Opcode >> 9) & 7);
  24129. res = (dst & 0xF) - (src & 0xF) - ((flag_X >> M68K_SR_X_SFT) & 1);
  24130. if (res > 0xF) corf = 6;
  24131. res += (dst & 0xF0) - (src & 0xF0);
  24132. flag_V = res;
  24133. flag_X = flag_C = (s32)res < (s32)corf ? M68K_SR_C : 0;
  24134. if (res > 0xff) res += 0xA0;
  24135. res = (res - corf) & 0xFF;
  24136. flag_V &= ~res;
  24137. flag_NotZ |= res;
  24138. flag_N = res;
  24139. DREGu8((Opcode >> 9) & 7) = res;
  24140. RET(6)
  24141. }
  24142. // SBCDM
  24143. OPCODE(0x8108)
  24144. {
  24145. u32 adr, res;
  24146. u32 src, dst;
  24147. u32 corf = 0;
  24148. adr = AREG((Opcode >> 0) & 7) - 1;
  24149. AREG((Opcode >> 0) & 7) = adr;
  24150. PRE_IO
  24151. READ_BYTE_F(adr, src)
  24152. adr = AREG((Opcode >> 9) & 7) - 1;
  24153. AREG((Opcode >> 9) & 7) = adr;
  24154. READ_BYTE_F(adr, dst)
  24155. res = (dst & 0xF) - (src & 0xF) - ((flag_X >> M68K_SR_X_SFT) & 1);
  24156. if (res > 0xF) corf = 6;
  24157. res += (dst & 0xF0) - (src & 0xF0);
  24158. flag_V = res;
  24159. flag_X = flag_C = (s32)res < (s32)corf ? M68K_SR_C : 0;
  24160. if (res > 0xff) res += 0xA0;
  24161. res = (res - corf) & 0xFF;
  24162. flag_V &= ~res;
  24163. flag_NotZ |= res;
  24164. flag_N = res;
  24165. WRITE_BYTE_F(adr, res)
  24166. POST_IO
  24167. RET(18)
  24168. }
  24169. // SBCD7M
  24170. OPCODE(0x810F)
  24171. {
  24172. u32 adr, res;
  24173. u32 src, dst;
  24174. u32 corf = 0;
  24175. adr = AREG(7) - 2;
  24176. AREG(7) = adr;
  24177. PRE_IO
  24178. READ_BYTE_F(adr, src)
  24179. adr = AREG((Opcode >> 9) & 7) - 1;
  24180. AREG((Opcode >> 9) & 7) = adr;
  24181. READ_BYTE_F(adr, dst)
  24182. res = (dst & 0xF) - (src & 0xF) - ((flag_X >> M68K_SR_X_SFT) & 1);
  24183. if (res > 0xF) corf = 6;
  24184. res += (dst & 0xF0) - (src & 0xF0);
  24185. flag_V = res;
  24186. flag_X = flag_C = (s32)res < (s32)corf ? M68K_SR_C : 0;
  24187. if (res > 0xff) res += 0xA0;
  24188. res = (res - corf) & 0xFF;
  24189. flag_V &= ~res;
  24190. flag_NotZ |= res;
  24191. flag_N = res;
  24192. WRITE_BYTE_F(adr, res)
  24193. POST_IO
  24194. RET(18)
  24195. }
  24196. // SBCDM7
  24197. OPCODE(0x8F08)
  24198. {
  24199. u32 adr, res;
  24200. u32 src, dst;
  24201. u32 corf = 0;
  24202. adr = AREG((Opcode >> 0) & 7) - 1;
  24203. AREG((Opcode >> 0) & 7) = adr;
  24204. PRE_IO
  24205. READ_BYTE_F(adr, src)
  24206. adr = AREG(7) - 2;
  24207. AREG(7) = adr;
  24208. READ_BYTE_F(adr, dst)
  24209. res = (dst & 0xF) - (src & 0xF) - ((flag_X >> M68K_SR_X_SFT) & 1);
  24210. if (res > 0xF) corf = 6;
  24211. res += (dst & 0xF0) - (src & 0xF0);
  24212. flag_V = res;
  24213. flag_X = flag_C = (s32)res < (s32)corf ? M68K_SR_C : 0;
  24214. if (res > 0xff) res += 0xA0;
  24215. res = (res - corf) & 0xFF;
  24216. flag_V &= ~res;
  24217. flag_NotZ |= res;
  24218. flag_N = res;
  24219. WRITE_BYTE_F(adr, res)
  24220. POST_IO
  24221. RET(18)
  24222. }
  24223. // SBCD7M7
  24224. OPCODE(0x8F0F)
  24225. {
  24226. u32 adr, res;
  24227. u32 src, dst;
  24228. u32 corf = 0;
  24229. adr = AREG(7) - 2;
  24230. AREG(7) = adr;
  24231. PRE_IO
  24232. READ_BYTE_F(adr, src)
  24233. adr = AREG(7) - 2;
  24234. AREG(7) = adr;
  24235. READ_BYTE_F(adr, dst)
  24236. res = (dst & 0xF) - (src & 0xF) - ((flag_X >> M68K_SR_X_SFT) & 1);
  24237. if (res > 0xF) corf = 6;
  24238. res += (dst & 0xF0) - (src & 0xF0);
  24239. flag_V = res;
  24240. flag_X = flag_C = (s32)res < (s32)corf ? M68K_SR_C : 0;
  24241. if (res > 0xff) res += 0xA0;
  24242. res = (res - corf) & 0xFF;
  24243. flag_V &= ~res;
  24244. flag_NotZ |= res;
  24245. flag_N = res;
  24246. WRITE_BYTE_F(adr, res)
  24247. POST_IO
  24248. RET(18)
  24249. }
  24250. // DIVU
  24251. OPCODE(0x80C0)
  24252. {
  24253. u32 adr, res;
  24254. u32 src, dst;
  24255. src = DREGu16((Opcode >> 0) & 7);
  24256. if (src == 0)
  24257. {
  24258. SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
  24259. #ifdef USE_CYCLONE_TIMING_DIV
  24260. RET(140)
  24261. #else
  24262. RET(10)
  24263. #endif
  24264. }
  24265. dst = DREGu32((Opcode >> 9) & 7);
  24266. {
  24267. u32 q, r;
  24268. q = dst / src;
  24269. r = dst % src;
  24270. if (q & 0xFFFF0000)
  24271. {
  24272. flag_V = M68K_SR_V;
  24273. #ifdef USE_CYCLONE_TIMING_DIV
  24274. RET(140)
  24275. #else
  24276. RET(70)
  24277. #endif
  24278. }
  24279. q &= 0x0000FFFF;
  24280. flag_NotZ = q;
  24281. flag_N = q >> 8;
  24282. flag_V = flag_C = 0;
  24283. res = q | (r << 16);
  24284. DREGu32((Opcode >> 9) & 7) = res;
  24285. }
  24286. #ifdef USE_CYCLONE_TIMING_DIV
  24287. RET(140)
  24288. #else
  24289. RET(90)
  24290. #endif
  24291. }
  24292. // DIVU
  24293. OPCODE(0x80D0)
  24294. {
  24295. u32 adr, res;
  24296. u32 src, dst;
  24297. adr = AREG((Opcode >> 0) & 7);
  24298. PRE_IO
  24299. READ_WORD_F(adr, src)
  24300. if (src == 0)
  24301. {
  24302. SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
  24303. #ifdef USE_CYCLONE_TIMING_DIV
  24304. RET(144)
  24305. #else
  24306. RET(14)
  24307. #endif
  24308. }
  24309. dst = DREGu32((Opcode >> 9) & 7);
  24310. {
  24311. u32 q, r;
  24312. q = dst / src;
  24313. r = dst % src;
  24314. if (q & 0xFFFF0000)
  24315. {
  24316. flag_V = M68K_SR_V;
  24317. #ifdef USE_CYCLONE_TIMING_DIV
  24318. RET(144)
  24319. #else
  24320. RET(74)
  24321. #endif
  24322. }
  24323. q &= 0x0000FFFF;
  24324. flag_NotZ = q;
  24325. flag_N = q >> 8;
  24326. flag_V = flag_C = 0;
  24327. res = q | (r << 16);
  24328. DREGu32((Opcode >> 9) & 7) = res;
  24329. }
  24330. #ifdef USE_CYCLONE_TIMING_DIV
  24331. RET(144)
  24332. #else
  24333. RET(94)
  24334. #endif
  24335. }
  24336. // DIVU
  24337. OPCODE(0x80D8)
  24338. {
  24339. u32 adr, res;
  24340. u32 src, dst;
  24341. adr = AREG((Opcode >> 0) & 7);
  24342. AREG((Opcode >> 0) & 7) += 2;
  24343. PRE_IO
  24344. READ_WORD_F(adr, src)
  24345. if (src == 0)
  24346. {
  24347. SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
  24348. #ifdef USE_CYCLONE_TIMING_DIV
  24349. RET(144)
  24350. #else
  24351. RET(14)
  24352. #endif
  24353. }
  24354. dst = DREGu32((Opcode >> 9) & 7);
  24355. {
  24356. u32 q, r;
  24357. q = dst / src;
  24358. r = dst % src;
  24359. if (q & 0xFFFF0000)
  24360. {
  24361. flag_V = M68K_SR_V;
  24362. #ifdef USE_CYCLONE_TIMING_DIV
  24363. RET(144)
  24364. #else
  24365. RET(74)
  24366. #endif
  24367. }
  24368. q &= 0x0000FFFF;
  24369. flag_NotZ = q;
  24370. flag_N = q >> 8;
  24371. flag_V = flag_C = 0;
  24372. res = q | (r << 16);
  24373. DREGu32((Opcode >> 9) & 7) = res;
  24374. }
  24375. #ifdef USE_CYCLONE_TIMING_DIV
  24376. RET(144)
  24377. #else
  24378. RET(94)
  24379. #endif
  24380. }
  24381. // DIVU
  24382. OPCODE(0x80E0)
  24383. {
  24384. u32 adr, res;
  24385. u32 src, dst;
  24386. adr = AREG((Opcode >> 0) & 7) - 2;
  24387. AREG((Opcode >> 0) & 7) = adr;
  24388. PRE_IO
  24389. READ_WORD_F(adr, src)
  24390. if (src == 0)
  24391. {
  24392. SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
  24393. #ifdef USE_CYCLONE_TIMING_DIV
  24394. RET(146)
  24395. #else
  24396. RET(16)
  24397. #endif
  24398. }
  24399. dst = DREGu32((Opcode >> 9) & 7);
  24400. {
  24401. u32 q, r;
  24402. q = dst / src;
  24403. r = dst % src;
  24404. if (q & 0xFFFF0000)
  24405. {
  24406. flag_V = M68K_SR_V;
  24407. #ifdef USE_CYCLONE_TIMING_DIV
  24408. RET(146)
  24409. #else
  24410. RET(76)
  24411. #endif
  24412. }
  24413. q &= 0x0000FFFF;
  24414. flag_NotZ = q;
  24415. flag_N = q >> 8;
  24416. flag_V = flag_C = 0;
  24417. res = q | (r << 16);
  24418. DREGu32((Opcode >> 9) & 7) = res;
  24419. }
  24420. #ifdef USE_CYCLONE_TIMING_DIV
  24421. RET(146)
  24422. #else
  24423. RET(96)
  24424. #endif
  24425. }
  24426. // DIVU
  24427. OPCODE(0x80E8)
  24428. {
  24429. u32 adr, res;
  24430. u32 src, dst;
  24431. FETCH_SWORD(adr);
  24432. adr += AREG((Opcode >> 0) & 7);
  24433. PRE_IO
  24434. READ_WORD_F(adr, src)
  24435. if (src == 0)
  24436. {
  24437. SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
  24438. #ifdef USE_CYCLONE_TIMING_DIV
  24439. RET(148)
  24440. #else
  24441. RET(18)
  24442. #endif
  24443. }
  24444. dst = DREGu32((Opcode >> 9) & 7);
  24445. {
  24446. u32 q, r;
  24447. q = dst / src;
  24448. r = dst % src;
  24449. if (q & 0xFFFF0000)
  24450. {
  24451. flag_V = M68K_SR_V;
  24452. #ifdef USE_CYCLONE_TIMING_DIV
  24453. RET(148)
  24454. #else
  24455. RET(78)
  24456. #endif
  24457. }
  24458. q &= 0x0000FFFF;
  24459. flag_NotZ = q;
  24460. flag_N = q >> 8;
  24461. flag_V = flag_C = 0;
  24462. res = q | (r << 16);
  24463. DREGu32((Opcode >> 9) & 7) = res;
  24464. }
  24465. #ifdef USE_CYCLONE_TIMING_DIV
  24466. RET(148)
  24467. #else
  24468. RET(98)
  24469. #endif
  24470. }
  24471. // DIVU
  24472. OPCODE(0x80F0)
  24473. {
  24474. u32 adr, res;
  24475. u32 src, dst;
  24476. adr = AREG((Opcode >> 0) & 7);
  24477. DECODE_EXT_WORD
  24478. PRE_IO
  24479. READ_WORD_F(adr, src)
  24480. if (src == 0)
  24481. {
  24482. SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
  24483. #ifdef USE_CYCLONE_TIMING_DIV
  24484. RET(150)
  24485. #else
  24486. RET(20)
  24487. #endif
  24488. }
  24489. dst = DREGu32((Opcode >> 9) & 7);
  24490. {
  24491. u32 q, r;
  24492. q = dst / src;
  24493. r = dst % src;
  24494. if (q & 0xFFFF0000)
  24495. {
  24496. flag_V = M68K_SR_V;
  24497. #ifdef USE_CYCLONE_TIMING_DIV
  24498. RET(150)
  24499. #else
  24500. RET(80)
  24501. #endif
  24502. }
  24503. q &= 0x0000FFFF;
  24504. flag_NotZ = q;
  24505. flag_N = q >> 8;
  24506. flag_V = flag_C = 0;
  24507. res = q | (r << 16);
  24508. DREGu32((Opcode >> 9) & 7) = res;
  24509. }
  24510. #ifdef USE_CYCLONE_TIMING_DIV
  24511. RET(150)
  24512. #else
  24513. RET(100)
  24514. #endif
  24515. }
  24516. // DIVU
  24517. OPCODE(0x80F8)
  24518. {
  24519. u32 adr, res;
  24520. u32 src, dst;
  24521. FETCH_SWORD(adr);
  24522. PRE_IO
  24523. READ_WORD_F(adr, src)
  24524. if (src == 0)
  24525. {
  24526. SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
  24527. #ifdef USE_CYCLONE_TIMING_DIV
  24528. RET(148)
  24529. #else
  24530. RET(18)
  24531. #endif
  24532. }
  24533. dst = DREGu32((Opcode >> 9) & 7);
  24534. {
  24535. u32 q, r;
  24536. q = dst / src;
  24537. r = dst % src;
  24538. if (q & 0xFFFF0000)
  24539. {
  24540. flag_V = M68K_SR_V;
  24541. #ifdef USE_CYCLONE_TIMING_DIV
  24542. RET(148)
  24543. #else
  24544. RET(78)
  24545. #endif
  24546. }
  24547. q &= 0x0000FFFF;
  24548. flag_NotZ = q;
  24549. flag_N = q >> 8;
  24550. flag_V = flag_C = 0;
  24551. res = q | (r << 16);
  24552. DREGu32((Opcode >> 9) & 7) = res;
  24553. }
  24554. #ifdef USE_CYCLONE_TIMING_DIV
  24555. RET(148)
  24556. #else
  24557. RET(98)
  24558. #endif
  24559. }
  24560. // DIVU
  24561. OPCODE(0x80F9)
  24562. {
  24563. u32 adr, res;
  24564. u32 src, dst;
  24565. FETCH_LONG(adr);
  24566. PRE_IO
  24567. READ_WORD_F(adr, src)
  24568. if (src == 0)
  24569. {
  24570. SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
  24571. #ifdef USE_CYCLONE_TIMING_DIV
  24572. RET(152)
  24573. #else
  24574. RET(22)
  24575. #endif
  24576. }
  24577. dst = DREGu32((Opcode >> 9) & 7);
  24578. {
  24579. u32 q, r;
  24580. q = dst / src;
  24581. r = dst % src;
  24582. if (q & 0xFFFF0000)
  24583. {
  24584. flag_V = M68K_SR_V;
  24585. #ifdef USE_CYCLONE_TIMING_DIV
  24586. RET(152)
  24587. #else
  24588. RET(82)
  24589. #endif
  24590. }
  24591. q &= 0x0000FFFF;
  24592. flag_NotZ = q;
  24593. flag_N = q >> 8;
  24594. flag_V = flag_C = 0;
  24595. res = q | (r << 16);
  24596. DREGu32((Opcode >> 9) & 7) = res;
  24597. }
  24598. #ifdef USE_CYCLONE_TIMING_DIV
  24599. RET(152)
  24600. #else
  24601. RET(102)
  24602. #endif
  24603. }
  24604. // DIVU
  24605. OPCODE(0x80FA)
  24606. {
  24607. u32 adr, res;
  24608. u32 src, dst;
  24609. adr = GET_SWORD + GET_PC;
  24610. PC++;
  24611. PRE_IO
  24612. READ_WORD_F(adr, src)
  24613. if (src == 0)
  24614. {
  24615. SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
  24616. #ifdef USE_CYCLONE_TIMING_DIV
  24617. RET(148)
  24618. #else
  24619. RET(18)
  24620. #endif
  24621. }
  24622. dst = DREGu32((Opcode >> 9) & 7);
  24623. {
  24624. u32 q, r;
  24625. q = dst / src;
  24626. r = dst % src;
  24627. if (q & 0xFFFF0000)
  24628. {
  24629. flag_V = M68K_SR_V;
  24630. #ifdef USE_CYCLONE_TIMING_DIV
  24631. RET(148)
  24632. #else
  24633. RET(78)
  24634. #endif
  24635. }
  24636. q &= 0x0000FFFF;
  24637. flag_NotZ = q;
  24638. flag_N = q >> 8;
  24639. flag_V = flag_C = 0;
  24640. res = q | (r << 16);
  24641. DREGu32((Opcode >> 9) & 7) = res;
  24642. }
  24643. #ifdef USE_CYCLONE_TIMING_DIV
  24644. RET(148)
  24645. #else
  24646. RET(98)
  24647. #endif
  24648. }
  24649. // DIVU
  24650. OPCODE(0x80FB)
  24651. {
  24652. u32 adr, res;
  24653. u32 src, dst;
  24654. adr = GET_PC;
  24655. DECODE_EXT_WORD
  24656. PRE_IO
  24657. READ_WORD_F(adr, src)
  24658. if (src == 0)
  24659. {
  24660. SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
  24661. #ifdef USE_CYCLONE_TIMING_DIV
  24662. RET(150)
  24663. #else
  24664. RET(20)
  24665. #endif
  24666. }
  24667. dst = DREGu32((Opcode >> 9) & 7);
  24668. {
  24669. u32 q, r;
  24670. q = dst / src;
  24671. r = dst % src;
  24672. if (q & 0xFFFF0000)
  24673. {
  24674. flag_V = M68K_SR_V;
  24675. #ifdef USE_CYCLONE_TIMING_DIV
  24676. RET(150)
  24677. #else
  24678. RET(80)
  24679. #endif
  24680. }
  24681. q &= 0x0000FFFF;
  24682. flag_NotZ = q;
  24683. flag_N = q >> 8;
  24684. flag_V = flag_C = 0;
  24685. res = q | (r << 16);
  24686. DREGu32((Opcode >> 9) & 7) = res;
  24687. }
  24688. #ifdef USE_CYCLONE_TIMING_DIV
  24689. RET(150)
  24690. #else
  24691. RET(100)
  24692. #endif
  24693. }
  24694. // DIVU
  24695. OPCODE(0x80FC)
  24696. {
  24697. u32 adr, res;
  24698. u32 src, dst;
  24699. FETCH_WORD(src);
  24700. if (src == 0)
  24701. {
  24702. SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
  24703. #ifdef USE_CYCLONE_TIMING_DIV
  24704. RET(144)
  24705. #else
  24706. RET(14)
  24707. #endif
  24708. }
  24709. dst = DREGu32((Opcode >> 9) & 7);
  24710. {
  24711. u32 q, r;
  24712. q = dst / src;
  24713. r = dst % src;
  24714. if (q & 0xFFFF0000)
  24715. {
  24716. flag_V = M68K_SR_V;
  24717. #ifdef USE_CYCLONE_TIMING_DIV
  24718. RET(144)
  24719. #else
  24720. RET(74)
  24721. #endif
  24722. }
  24723. q &= 0x0000FFFF;
  24724. flag_NotZ = q;
  24725. flag_N = q >> 8;
  24726. flag_V = flag_C = 0;
  24727. res = q | (r << 16);
  24728. DREGu32((Opcode >> 9) & 7) = res;
  24729. }
  24730. #ifdef USE_CYCLONE_TIMING_DIV
  24731. RET(144)
  24732. #else
  24733. RET(94)
  24734. #endif
  24735. }
  24736. // DIVU
  24737. OPCODE(0x80DF)
  24738. {
  24739. u32 adr, res;
  24740. u32 src, dst;
  24741. adr = AREG(7);
  24742. AREG(7) += 2;
  24743. PRE_IO
  24744. READ_WORD_F(adr, src)
  24745. if (src == 0)
  24746. {
  24747. SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
  24748. #ifdef USE_CYCLONE_TIMING_DIV
  24749. RET(144)
  24750. #else
  24751. RET(14)
  24752. #endif
  24753. }
  24754. dst = DREGu32((Opcode >> 9) & 7);
  24755. {
  24756. u32 q, r;
  24757. q = dst / src;
  24758. r = dst % src;
  24759. if (q & 0xFFFF0000)
  24760. {
  24761. flag_V = M68K_SR_V;
  24762. #ifdef USE_CYCLONE_TIMING_DIV
  24763. RET(144)
  24764. #else
  24765. RET(74)
  24766. #endif
  24767. }
  24768. q &= 0x0000FFFF;
  24769. flag_NotZ = q;
  24770. flag_N = q >> 8;
  24771. flag_V = flag_C = 0;
  24772. res = q | (r << 16);
  24773. DREGu32((Opcode >> 9) & 7) = res;
  24774. }
  24775. #ifdef USE_CYCLONE_TIMING_DIV
  24776. RET(144)
  24777. #else
  24778. RET(94)
  24779. #endif
  24780. }
  24781. // DIVU
  24782. OPCODE(0x80E7)
  24783. {
  24784. u32 adr, res;
  24785. u32 src, dst;
  24786. adr = AREG(7) - 2;
  24787. AREG(7) = adr;
  24788. PRE_IO
  24789. READ_WORD_F(adr, src)
  24790. if (src == 0)
  24791. {
  24792. SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
  24793. #ifdef USE_CYCLONE_TIMING_DIV
  24794. RET(146)
  24795. #else
  24796. RET(16)
  24797. #endif
  24798. }
  24799. dst = DREGu32((Opcode >> 9) & 7);
  24800. {
  24801. u32 q, r;
  24802. q = dst / src;
  24803. r = dst % src;
  24804. if (q & 0xFFFF0000)
  24805. {
  24806. flag_V = M68K_SR_V;
  24807. #ifdef USE_CYCLONE_TIMING_DIV
  24808. RET(146)
  24809. #else
  24810. RET(76)
  24811. #endif
  24812. }
  24813. q &= 0x0000FFFF;
  24814. flag_NotZ = q;
  24815. flag_N = q >> 8;
  24816. flag_V = flag_C = 0;
  24817. res = q | (r << 16);
  24818. DREGu32((Opcode >> 9) & 7) = res;
  24819. }
  24820. #ifdef USE_CYCLONE_TIMING_DIV
  24821. RET(146)
  24822. #else
  24823. RET(96)
  24824. #endif
  24825. }
  24826. // DIVS
  24827. OPCODE(0x81C0)
  24828. {
  24829. u32 adr, res;
  24830. u32 src, dst;
  24831. src = (s32)DREGs16((Opcode >> 0) & 7);
  24832. if (src == 0)
  24833. {
  24834. SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
  24835. #ifdef USE_CYCLONE_TIMING_DIV
  24836. goto end81C0;
  24837. #endif
  24838. RET(10)
  24839. }
  24840. dst = DREGu32((Opcode >> 9) & 7);
  24841. if ((dst == 0x80000000) && (src == (u32)-1))
  24842. {
  24843. flag_NotZ = flag_N = 0;
  24844. flag_V = flag_C = 0;
  24845. res = 0;
  24846. DREGu32((Opcode >> 9) & 7) = res;
  24847. #ifdef USE_CYCLONE_TIMING_DIV
  24848. goto end81C0;
  24849. #endif
  24850. RET(50)
  24851. }
  24852. {
  24853. s32 q, r;
  24854. q = (s32)dst / (s32)src;
  24855. r = (s32)dst % (s32)src;
  24856. if ((q > 0x7FFF) || (q < -0x8000))
  24857. {
  24858. flag_V = M68K_SR_V;
  24859. #ifdef USE_CYCLONE_TIMING_DIV
  24860. goto end81C0;
  24861. #endif
  24862. RET(80)
  24863. }
  24864. q &= 0x0000FFFF;
  24865. flag_NotZ = q;
  24866. flag_N = q >> 8;
  24867. flag_V = flag_C = 0;
  24868. res = q | (r << 16);
  24869. DREGu32((Opcode >> 9) & 7) = res;
  24870. }
  24871. #ifdef USE_CYCLONE_TIMING_DIV
  24872. end81C0: ctx->io_cycle_counter -= 50;
  24873. #endif
  24874. RET(108)
  24875. }
  24876. // DIVS
  24877. OPCODE(0x81D0)
  24878. {
  24879. u32 adr, res;
  24880. u32 src, dst;
  24881. adr = AREG((Opcode >> 0) & 7);
  24882. PRE_IO
  24883. READSX_WORD_F(adr, src)
  24884. if (src == 0)
  24885. {
  24886. SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
  24887. #ifdef USE_CYCLONE_TIMING_DIV
  24888. goto end81D0;
  24889. #endif
  24890. RET(14)
  24891. }
  24892. dst = DREGu32((Opcode >> 9) & 7);
  24893. if ((dst == 0x80000000) && (src == (u32)-1))
  24894. {
  24895. flag_NotZ = flag_N = 0;
  24896. flag_V = flag_C = 0;
  24897. res = 0;
  24898. DREGu32((Opcode >> 9) & 7) = res;
  24899. #ifdef USE_CYCLONE_TIMING_DIV
  24900. goto end81D0;
  24901. #endif
  24902. RET(54)
  24903. }
  24904. {
  24905. s32 q, r;
  24906. q = (s32)dst / (s32)src;
  24907. r = (s32)dst % (s32)src;
  24908. if ((q > 0x7FFF) || (q < -0x8000))
  24909. {
  24910. flag_V = M68K_SR_V;
  24911. #ifdef USE_CYCLONE_TIMING_DIV
  24912. goto end81D0;
  24913. #endif
  24914. RET(84)
  24915. }
  24916. q &= 0x0000FFFF;
  24917. flag_NotZ = q;
  24918. flag_N = q >> 8;
  24919. flag_V = flag_C = 0;
  24920. res = q | (r << 16);
  24921. DREGu32((Opcode >> 9) & 7) = res;
  24922. }
  24923. #ifdef USE_CYCLONE_TIMING_DIV
  24924. end81D0: ctx->io_cycle_counter -= 50;
  24925. #endif
  24926. RET(112)
  24927. }
  24928. // DIVS
  24929. OPCODE(0x81D8)
  24930. {
  24931. u32 adr, res;
  24932. u32 src, dst;
  24933. adr = AREG((Opcode >> 0) & 7);
  24934. AREG((Opcode >> 0) & 7) += 2;
  24935. PRE_IO
  24936. READSX_WORD_F(adr, src)
  24937. if (src == 0)
  24938. {
  24939. SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
  24940. #ifdef USE_CYCLONE_TIMING_DIV
  24941. goto end81D8;
  24942. #endif
  24943. RET(14)
  24944. }
  24945. dst = DREGu32((Opcode >> 9) & 7);
  24946. if ((dst == 0x80000000) && (src == (u32)-1))
  24947. {
  24948. flag_NotZ = flag_N = 0;
  24949. flag_V = flag_C = 0;
  24950. res = 0;
  24951. DREGu32((Opcode >> 9) & 7) = res;
  24952. #ifdef USE_CYCLONE_TIMING_DIV
  24953. goto end81D8;
  24954. #endif
  24955. RET(54)
  24956. }
  24957. {
  24958. s32 q, r;
  24959. q = (s32)dst / (s32)src;
  24960. r = (s32)dst % (s32)src;
  24961. if ((q > 0x7FFF) || (q < -0x8000))
  24962. {
  24963. flag_V = M68K_SR_V;
  24964. #ifdef USE_CYCLONE_TIMING_DIV
  24965. goto end81D8;
  24966. #endif
  24967. RET(84)
  24968. }
  24969. q &= 0x0000FFFF;
  24970. flag_NotZ = q;
  24971. flag_N = q >> 8;
  24972. flag_V = flag_C = 0;
  24973. res = q | (r << 16);
  24974. DREGu32((Opcode >> 9) & 7) = res;
  24975. }
  24976. #ifdef USE_CYCLONE_TIMING_DIV
  24977. end81D8: ctx->io_cycle_counter -= 50;
  24978. #endif
  24979. RET(112)
  24980. }
  24981. // DIVS
  24982. OPCODE(0x81E0)
  24983. {
  24984. u32 adr, res;
  24985. u32 src, dst;
  24986. adr = AREG((Opcode >> 0) & 7) - 2;
  24987. AREG((Opcode >> 0) & 7) = adr;
  24988. PRE_IO
  24989. READSX_WORD_F(adr, src)
  24990. if (src == 0)
  24991. {
  24992. SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
  24993. #ifdef USE_CYCLONE_TIMING_DIV
  24994. goto end81E0;
  24995. #endif
  24996. RET(16)
  24997. }
  24998. dst = DREGu32((Opcode >> 9) & 7);
  24999. if ((dst == 0x80000000) && (src == (u32)-1))
  25000. {
  25001. flag_NotZ = flag_N = 0;
  25002. flag_V = flag_C = 0;
  25003. res = 0;
  25004. DREGu32((Opcode >> 9) & 7) = res;
  25005. #ifdef USE_CYCLONE_TIMING_DIV
  25006. goto end81E0;
  25007. #endif
  25008. RET(56)
  25009. }
  25010. {
  25011. s32 q, r;
  25012. q = (s32)dst / (s32)src;
  25013. r = (s32)dst % (s32)src;
  25014. if ((q > 0x7FFF) || (q < -0x8000))
  25015. {
  25016. flag_V = M68K_SR_V;
  25017. #ifdef USE_CYCLONE_TIMING_DIV
  25018. goto end81E0;
  25019. #endif
  25020. RET(86)
  25021. }
  25022. q &= 0x0000FFFF;
  25023. flag_NotZ = q;
  25024. flag_N = q >> 8;
  25025. flag_V = flag_C = 0;
  25026. res = q | (r << 16);
  25027. DREGu32((Opcode >> 9) & 7) = res;
  25028. }
  25029. #ifdef USE_CYCLONE_TIMING_DIV
  25030. end81E0: ctx->io_cycle_counter -= 50;
  25031. #endif
  25032. RET(114)
  25033. }
  25034. // DIVS
  25035. OPCODE(0x81E8)
  25036. {
  25037. u32 adr, res;
  25038. u32 src, dst;
  25039. FETCH_SWORD(adr);
  25040. adr += AREG((Opcode >> 0) & 7);
  25041. PRE_IO
  25042. READSX_WORD_F(adr, src)
  25043. if (src == 0)
  25044. {
  25045. SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
  25046. #ifdef USE_CYCLONE_TIMING_DIV
  25047. goto end81E8;
  25048. #endif
  25049. RET(18)
  25050. }
  25051. dst = DREGu32((Opcode >> 9) & 7);
  25052. if ((dst == 0x80000000) && (src == (u32)-1))
  25053. {
  25054. flag_NotZ = flag_N = 0;
  25055. flag_V = flag_C = 0;
  25056. res = 0;
  25057. DREGu32((Opcode >> 9) & 7) = res;
  25058. #ifdef USE_CYCLONE_TIMING_DIV
  25059. goto end81E8;
  25060. #endif
  25061. RET(58)
  25062. }
  25063. {
  25064. s32 q, r;
  25065. q = (s32)dst / (s32)src;
  25066. r = (s32)dst % (s32)src;
  25067. if ((q > 0x7FFF) || (q < -0x8000))
  25068. {
  25069. flag_V = M68K_SR_V;
  25070. #ifdef USE_CYCLONE_TIMING_DIV
  25071. goto end81E8;
  25072. #endif
  25073. RET(88)
  25074. }
  25075. q &= 0x0000FFFF;
  25076. flag_NotZ = q;
  25077. flag_N = q >> 8;
  25078. flag_V = flag_C = 0;
  25079. res = q | (r << 16);
  25080. DREGu32((Opcode >> 9) & 7) = res;
  25081. }
  25082. #ifdef USE_CYCLONE_TIMING_DIV
  25083. end81E8: ctx->io_cycle_counter -= 50;
  25084. #endif
  25085. RET(116)
  25086. }
  25087. // DIVS
  25088. OPCODE(0x81F0)
  25089. {
  25090. u32 adr, res;
  25091. u32 src, dst;
  25092. adr = AREG((Opcode >> 0) & 7);
  25093. DECODE_EXT_WORD
  25094. PRE_IO
  25095. READSX_WORD_F(adr, src)
  25096. if (src == 0)
  25097. {
  25098. SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
  25099. #ifdef USE_CYCLONE_TIMING_DIV
  25100. goto end81F0;
  25101. #endif
  25102. RET(20)
  25103. }
  25104. dst = DREGu32((Opcode >> 9) & 7);
  25105. if ((dst == 0x80000000) && (src == (u32)-1))
  25106. {
  25107. flag_NotZ = flag_N = 0;
  25108. flag_V = flag_C = 0;
  25109. res = 0;
  25110. DREGu32((Opcode >> 9) & 7) = res;
  25111. #ifdef USE_CYCLONE_TIMING_DIV
  25112. goto end81F0;
  25113. #endif
  25114. RET(60)
  25115. }
  25116. {
  25117. s32 q, r;
  25118. q = (s32)dst / (s32)src;
  25119. r = (s32)dst % (s32)src;
  25120. if ((q > 0x7FFF) || (q < -0x8000))
  25121. {
  25122. flag_V = M68K_SR_V;
  25123. #ifdef USE_CYCLONE_TIMING_DIV
  25124. goto end81F0;
  25125. #endif
  25126. RET(90)
  25127. }
  25128. q &= 0x0000FFFF;
  25129. flag_NotZ = q;
  25130. flag_N = q >> 8;
  25131. flag_V = flag_C = 0;
  25132. res = q | (r << 16);
  25133. DREGu32((Opcode >> 9) & 7) = res;
  25134. }
  25135. #ifdef USE_CYCLONE_TIMING_DIV
  25136. end81F0: ctx->io_cycle_counter -= 50;
  25137. #endif
  25138. RET(118)
  25139. }
  25140. // DIVS
  25141. OPCODE(0x81F8)
  25142. {
  25143. u32 adr, res;
  25144. u32 src, dst;
  25145. FETCH_SWORD(adr);
  25146. PRE_IO
  25147. READSX_WORD_F(adr, src)
  25148. if (src == 0)
  25149. {
  25150. SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
  25151. #ifdef USE_CYCLONE_TIMING_DIV
  25152. goto end81F8;
  25153. #endif
  25154. RET(18)
  25155. }
  25156. dst = DREGu32((Opcode >> 9) & 7);
  25157. if ((dst == 0x80000000) && (src == (u32)-1))
  25158. {
  25159. flag_NotZ = flag_N = 0;
  25160. flag_V = flag_C = 0;
  25161. res = 0;
  25162. DREGu32((Opcode >> 9) & 7) = res;
  25163. #ifdef USE_CYCLONE_TIMING_DIV
  25164. goto end81F8;
  25165. #endif
  25166. RET(58)
  25167. }
  25168. {
  25169. s32 q, r;
  25170. q = (s32)dst / (s32)src;
  25171. r = (s32)dst % (s32)src;
  25172. if ((q > 0x7FFF) || (q < -0x8000))
  25173. {
  25174. flag_V = M68K_SR_V;
  25175. #ifdef USE_CYCLONE_TIMING_DIV
  25176. goto end81F8;
  25177. #endif
  25178. RET(88)
  25179. }
  25180. q &= 0x0000FFFF;
  25181. flag_NotZ = q;
  25182. flag_N = q >> 8;
  25183. flag_V = flag_C = 0;
  25184. res = q | (r << 16);
  25185. DREGu32((Opcode >> 9) & 7) = res;
  25186. }
  25187. #ifdef USE_CYCLONE_TIMING_DIV
  25188. end81F8: ctx->io_cycle_counter -= 50;
  25189. #endif
  25190. RET(116)
  25191. }
  25192. // DIVS
  25193. OPCODE(0x81F9)
  25194. {
  25195. u32 adr, res;
  25196. u32 src, dst;
  25197. FETCH_LONG(adr);
  25198. PRE_IO
  25199. READSX_WORD_F(adr, src)
  25200. if (src == 0)
  25201. {
  25202. SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
  25203. #ifdef USE_CYCLONE_TIMING_DIV
  25204. goto end81F9;
  25205. #endif
  25206. RET(22)
  25207. }
  25208. dst = DREGu32((Opcode >> 9) & 7);
  25209. if ((dst == 0x80000000) && (src == (u32)-1))
  25210. {
  25211. flag_NotZ = flag_N = 0;
  25212. flag_V = flag_C = 0;
  25213. res = 0;
  25214. DREGu32((Opcode >> 9) & 7) = res;
  25215. #ifdef USE_CYCLONE_TIMING_DIV
  25216. goto end81F9;
  25217. #endif
  25218. RET(62)
  25219. }
  25220. {
  25221. s32 q, r;
  25222. q = (s32)dst / (s32)src;
  25223. r = (s32)dst % (s32)src;
  25224. if ((q > 0x7FFF) || (q < -0x8000))
  25225. {
  25226. flag_V = M68K_SR_V;
  25227. #ifdef USE_CYCLONE_TIMING_DIV
  25228. goto end81F9;
  25229. #endif
  25230. RET(92)
  25231. }
  25232. q &= 0x0000FFFF;
  25233. flag_NotZ = q;
  25234. flag_N = q >> 8;
  25235. flag_V = flag_C = 0;
  25236. res = q | (r << 16);
  25237. DREGu32((Opcode >> 9) & 7) = res;
  25238. }
  25239. #ifdef USE_CYCLONE_TIMING_DIV
  25240. end81F9: ctx->io_cycle_counter -= 50;
  25241. #endif
  25242. RET(120)
  25243. }
  25244. // DIVS
  25245. OPCODE(0x81FA)
  25246. {
  25247. u32 adr, res;
  25248. u32 src, dst;
  25249. adr = GET_SWORD + GET_PC;
  25250. PC++;
  25251. PRE_IO
  25252. READSX_WORD_F(adr, src)
  25253. if (src == 0)
  25254. {
  25255. SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
  25256. #ifdef USE_CYCLONE_TIMING_DIV
  25257. goto end81FA;
  25258. #endif
  25259. RET(18)
  25260. }
  25261. dst = DREGu32((Opcode >> 9) & 7);
  25262. if ((dst == 0x80000000) && (src == (u32)-1))
  25263. {
  25264. flag_NotZ = flag_N = 0;
  25265. flag_V = flag_C = 0;
  25266. res = 0;
  25267. DREGu32((Opcode >> 9) & 7) = res;
  25268. #ifdef USE_CYCLONE_TIMING_DIV
  25269. goto end81FA;
  25270. #endif
  25271. RET(58)
  25272. }
  25273. {
  25274. s32 q, r;
  25275. q = (s32)dst / (s32)src;
  25276. r = (s32)dst % (s32)src;
  25277. if ((q > 0x7FFF) || (q < -0x8000))
  25278. {
  25279. flag_V = M68K_SR_V;
  25280. #ifdef USE_CYCLONE_TIMING_DIV
  25281. goto end81FA;
  25282. #endif
  25283. RET(88)
  25284. }
  25285. q &= 0x0000FFFF;
  25286. flag_NotZ = q;
  25287. flag_N = q >> 8;
  25288. flag_V = flag_C = 0;
  25289. res = q | (r << 16);
  25290. DREGu32((Opcode >> 9) & 7) = res;
  25291. }
  25292. #ifdef USE_CYCLONE_TIMING_DIV
  25293. end81FA: ctx->io_cycle_counter -= 50;
  25294. #endif
  25295. RET(116)
  25296. }
  25297. // DIVS
  25298. OPCODE(0x81FB)
  25299. {
  25300. u32 adr, res;
  25301. u32 src, dst;
  25302. adr = GET_PC;
  25303. DECODE_EXT_WORD
  25304. PRE_IO
  25305. READSX_WORD_F(adr, src)
  25306. if (src == 0)
  25307. {
  25308. SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
  25309. #ifdef USE_CYCLONE_TIMING_DIV
  25310. goto end81FB;
  25311. #endif
  25312. RET(20)
  25313. }
  25314. dst = DREGu32((Opcode >> 9) & 7);
  25315. if ((dst == 0x80000000) && (src == (u32)-1))
  25316. {
  25317. flag_NotZ = flag_N = 0;
  25318. flag_V = flag_C = 0;
  25319. res = 0;
  25320. DREGu32((Opcode >> 9) & 7) = res;
  25321. #ifdef USE_CYCLONE_TIMING_DIV
  25322. goto end81FB;
  25323. #endif
  25324. RET(60)
  25325. }
  25326. {
  25327. s32 q, r;
  25328. q = (s32)dst / (s32)src;
  25329. r = (s32)dst % (s32)src;
  25330. if ((q > 0x7FFF) || (q < -0x8000))
  25331. {
  25332. flag_V = M68K_SR_V;
  25333. #ifdef USE_CYCLONE_TIMING_DIV
  25334. goto end81FB;
  25335. #endif
  25336. RET(90)
  25337. }
  25338. q &= 0x0000FFFF;
  25339. flag_NotZ = q;
  25340. flag_N = q >> 8;
  25341. flag_V = flag_C = 0;
  25342. res = q | (r << 16);
  25343. DREGu32((Opcode >> 9) & 7) = res;
  25344. }
  25345. #ifdef USE_CYCLONE_TIMING_DIV
  25346. end81FB: ctx->io_cycle_counter -= 50;
  25347. #endif
  25348. RET(118)
  25349. }
  25350. // DIVS
  25351. OPCODE(0x81FC)
  25352. {
  25353. u32 adr, res;
  25354. u32 src, dst;
  25355. FETCH_SWORD(src);
  25356. if (src == 0)
  25357. {
  25358. SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
  25359. #ifdef USE_CYCLONE_TIMING_DIV
  25360. goto end81FC;
  25361. #endif
  25362. RET(14)
  25363. }
  25364. dst = DREGu32((Opcode >> 9) & 7);
  25365. if ((dst == 0x80000000) && (src == (u32)-1))
  25366. {
  25367. flag_NotZ = flag_N = 0;
  25368. flag_V = flag_C = 0;
  25369. res = 0;
  25370. DREGu32((Opcode >> 9) & 7) = res;
  25371. #ifdef USE_CYCLONE_TIMING_DIV
  25372. goto end81FC;
  25373. #endif
  25374. RET(54)
  25375. }
  25376. {
  25377. s32 q, r;
  25378. q = (s32)dst / (s32)src;
  25379. r = (s32)dst % (s32)src;
  25380. if ((q > 0x7FFF) || (q < -0x8000))
  25381. {
  25382. flag_V = M68K_SR_V;
  25383. #ifdef USE_CYCLONE_TIMING_DIV
  25384. goto end81FC;
  25385. #endif
  25386. RET(84)
  25387. }
  25388. q &= 0x0000FFFF;
  25389. flag_NotZ = q;
  25390. flag_N = q >> 8;
  25391. flag_V = flag_C = 0;
  25392. res = q | (r << 16);
  25393. DREGu32((Opcode >> 9) & 7) = res;
  25394. }
  25395. #ifdef USE_CYCLONE_TIMING_DIV
  25396. end81FC: ctx->io_cycle_counter -= 50;
  25397. #endif
  25398. RET(112)
  25399. }
  25400. // DIVS
  25401. OPCODE(0x81DF)
  25402. {
  25403. u32 adr, res;
  25404. u32 src, dst;
  25405. adr = AREG(7);
  25406. AREG(7) += 2;
  25407. PRE_IO
  25408. READSX_WORD_F(adr, src)
  25409. if (src == 0)
  25410. {
  25411. SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
  25412. #ifdef USE_CYCLONE_TIMING_DIV
  25413. goto end81DF;
  25414. #endif
  25415. RET(14)
  25416. }
  25417. dst = DREGu32((Opcode >> 9) & 7);
  25418. if ((dst == 0x80000000) && (src == (u32)-1))
  25419. {
  25420. flag_NotZ = flag_N = 0;
  25421. flag_V = flag_C = 0;
  25422. res = 0;
  25423. DREGu32((Opcode >> 9) & 7) = res;
  25424. #ifdef USE_CYCLONE_TIMING_DIV
  25425. goto end81DF;
  25426. #endif
  25427. RET(54)
  25428. }
  25429. {
  25430. s32 q, r;
  25431. q = (s32)dst / (s32)src;
  25432. r = (s32)dst % (s32)src;
  25433. if ((q > 0x7FFF) || (q < -0x8000))
  25434. {
  25435. flag_V = M68K_SR_V;
  25436. #ifdef USE_CYCLONE_TIMING_DIV
  25437. goto end81DF;
  25438. #endif
  25439. RET(84)
  25440. }
  25441. q &= 0x0000FFFF;
  25442. flag_NotZ = q;
  25443. flag_N = q >> 8;
  25444. flag_V = flag_C = 0;
  25445. res = q | (r << 16);
  25446. DREGu32((Opcode >> 9) & 7) = res;
  25447. }
  25448. #ifdef USE_CYCLONE_TIMING_DIV
  25449. end81DF: ctx->io_cycle_counter -= 50;
  25450. #endif
  25451. RET(112)
  25452. }
  25453. // DIVS
  25454. OPCODE(0x81E7)
  25455. {
  25456. u32 adr, res;
  25457. u32 src, dst;
  25458. adr = AREG(7) - 2;
  25459. AREG(7) = adr;
  25460. PRE_IO
  25461. READSX_WORD_F(adr, src)
  25462. if (src == 0)
  25463. {
  25464. SET_PC(execute_exception(ctx, M68K_ZERO_DIVIDE_EX, GET_PC, GET_SR));
  25465. #ifdef USE_CYCLONE_TIMING_DIV
  25466. goto end81E7;
  25467. #endif
  25468. RET(16)
  25469. }
  25470. dst = DREGu32((Opcode >> 9) & 7);
  25471. if ((dst == 0x80000000) && (src == (u32)-1))
  25472. {
  25473. flag_NotZ = flag_N = 0;
  25474. flag_V = flag_C = 0;
  25475. res = 0;
  25476. DREGu32((Opcode >> 9) & 7) = res;
  25477. #ifdef USE_CYCLONE_TIMING_DIV
  25478. goto end81E7;
  25479. #endif
  25480. RET(56)
  25481. }
  25482. {
  25483. s32 q, r;
  25484. q = (s32)dst / (s32)src;
  25485. r = (s32)dst % (s32)src;
  25486. if ((q > 0x7FFF) || (q < -0x8000))
  25487. {
  25488. flag_V = M68K_SR_V;
  25489. #ifdef USE_CYCLONE_TIMING_DIV
  25490. goto end81E7;
  25491. #endif
  25492. RET(86)
  25493. }
  25494. q &= 0x0000FFFF;
  25495. flag_NotZ = q;
  25496. flag_N = q >> 8;
  25497. flag_V = flag_C = 0;
  25498. res = q | (r << 16);
  25499. DREGu32((Opcode >> 9) & 7) = res;
  25500. }
  25501. #ifdef USE_CYCLONE_TIMING_DIV
  25502. end81E7: ctx->io_cycle_counter -= 50;
  25503. #endif
  25504. RET(114)
  25505. }
  25506. // SUBaD
  25507. OPCODE(0x9000)
  25508. {
  25509. u32 adr, res;
  25510. u32 src, dst;
  25511. src = DREGu8((Opcode >> 0) & 7);
  25512. dst = DREGu8((Opcode >> 9) & 7);
  25513. res = dst - src;
  25514. flag_N = flag_X = flag_C = res;
  25515. flag_V = (src ^ dst) & (res ^ dst);
  25516. flag_NotZ = res & 0xFF;
  25517. DREGu8((Opcode >> 9) & 7) = res;
  25518. RET(4)
  25519. }
  25520. // SUBaD
  25521. #if 0
  25522. OPCODE(0x9008)
  25523. {
  25524. u32 adr, res;
  25525. u32 src, dst;
  25526. // can't read byte from Ax registers !
  25527. ctx->execinfo |= M68K_FAULTED;
  25528. ctx->io_cycle_counter = 0;
  25529. /*
  25530. goto famec_Exec_End;
  25531. dst = DREGu8((Opcode >> 9) & 7);
  25532. res = dst - src;
  25533. flag_N = flag_X = flag_C = res;
  25534. flag_V = (src ^ dst) & (res ^ dst);
  25535. flag_NotZ = res & 0xFF;
  25536. DREGu8((Opcode >> 9) & 7) = res;
  25537. */
  25538. RET(4)
  25539. }
  25540. #endif
  25541. // SUBaD
  25542. OPCODE(0x9010)
  25543. {
  25544. u32 adr, res;
  25545. u32 src, dst;
  25546. adr = AREG((Opcode >> 0) & 7);
  25547. PRE_IO
  25548. READ_BYTE_F(adr, src)
  25549. dst = DREGu8((Opcode >> 9) & 7);
  25550. res = dst - src;
  25551. flag_N = flag_X = flag_C = res;
  25552. flag_V = (src ^ dst) & (res ^ dst);
  25553. flag_NotZ = res & 0xFF;
  25554. DREGu8((Opcode >> 9) & 7) = res;
  25555. POST_IO
  25556. RET(8)
  25557. }
  25558. // SUBaD
  25559. OPCODE(0x9018)
  25560. {
  25561. u32 adr, res;
  25562. u32 src, dst;
  25563. adr = AREG((Opcode >> 0) & 7);
  25564. AREG((Opcode >> 0) & 7) += 1;
  25565. PRE_IO
  25566. READ_BYTE_F(adr, src)
  25567. dst = DREGu8((Opcode >> 9) & 7);
  25568. res = dst - src;
  25569. flag_N = flag_X = flag_C = res;
  25570. flag_V = (src ^ dst) & (res ^ dst);
  25571. flag_NotZ = res & 0xFF;
  25572. DREGu8((Opcode >> 9) & 7) = res;
  25573. POST_IO
  25574. RET(8)
  25575. }
  25576. // SUBaD
  25577. OPCODE(0x9020)
  25578. {
  25579. u32 adr, res;
  25580. u32 src, dst;
  25581. adr = AREG((Opcode >> 0) & 7) - 1;
  25582. AREG((Opcode >> 0) & 7) = adr;
  25583. PRE_IO
  25584. READ_BYTE_F(adr, src)
  25585. dst = DREGu8((Opcode >> 9) & 7);
  25586. res = dst - src;
  25587. flag_N = flag_X = flag_C = res;
  25588. flag_V = (src ^ dst) & (res ^ dst);
  25589. flag_NotZ = res & 0xFF;
  25590. DREGu8((Opcode >> 9) & 7) = res;
  25591. POST_IO
  25592. RET(10)
  25593. }
  25594. // SUBaD
  25595. OPCODE(0x9028)
  25596. {
  25597. u32 adr, res;
  25598. u32 src, dst;
  25599. FETCH_SWORD(adr);
  25600. adr += AREG((Opcode >> 0) & 7);
  25601. PRE_IO
  25602. READ_BYTE_F(adr, src)
  25603. dst = DREGu8((Opcode >> 9) & 7);
  25604. res = dst - src;
  25605. flag_N = flag_X = flag_C = res;
  25606. flag_V = (src ^ dst) & (res ^ dst);
  25607. flag_NotZ = res & 0xFF;
  25608. DREGu8((Opcode >> 9) & 7) = res;
  25609. POST_IO
  25610. RET(12)
  25611. }
  25612. // SUBaD
  25613. OPCODE(0x9030)
  25614. {
  25615. u32 adr, res;
  25616. u32 src, dst;
  25617. adr = AREG((Opcode >> 0) & 7);
  25618. DECODE_EXT_WORD
  25619. PRE_IO
  25620. READ_BYTE_F(adr, src)
  25621. dst = DREGu8((Opcode >> 9) & 7);
  25622. res = dst - src;
  25623. flag_N = flag_X = flag_C = res;
  25624. flag_V = (src ^ dst) & (res ^ dst);
  25625. flag_NotZ = res & 0xFF;
  25626. DREGu8((Opcode >> 9) & 7) = res;
  25627. POST_IO
  25628. RET(14)
  25629. }
  25630. // SUBaD
  25631. OPCODE(0x9038)
  25632. {
  25633. u32 adr, res;
  25634. u32 src, dst;
  25635. FETCH_SWORD(adr);
  25636. PRE_IO
  25637. READ_BYTE_F(adr, src)
  25638. dst = DREGu8((Opcode >> 9) & 7);
  25639. res = dst - src;
  25640. flag_N = flag_X = flag_C = res;
  25641. flag_V = (src ^ dst) & (res ^ dst);
  25642. flag_NotZ = res & 0xFF;
  25643. DREGu8((Opcode >> 9) & 7) = res;
  25644. POST_IO
  25645. RET(12)
  25646. }
  25647. // SUBaD
  25648. OPCODE(0x9039)
  25649. {
  25650. u32 adr, res;
  25651. u32 src, dst;
  25652. FETCH_LONG(adr);
  25653. PRE_IO
  25654. READ_BYTE_F(adr, src)
  25655. dst = DREGu8((Opcode >> 9) & 7);
  25656. res = dst - src;
  25657. flag_N = flag_X = flag_C = res;
  25658. flag_V = (src ^ dst) & (res ^ dst);
  25659. flag_NotZ = res & 0xFF;
  25660. DREGu8((Opcode >> 9) & 7) = res;
  25661. POST_IO
  25662. RET(16)
  25663. }
  25664. // SUBaD
  25665. OPCODE(0x903A)
  25666. {
  25667. u32 adr, res;
  25668. u32 src, dst;
  25669. adr = GET_SWORD + GET_PC;
  25670. PC++;
  25671. PRE_IO
  25672. READ_BYTE_F(adr, src)
  25673. dst = DREGu8((Opcode >> 9) & 7);
  25674. res = dst - src;
  25675. flag_N = flag_X = flag_C = res;
  25676. flag_V = (src ^ dst) & (res ^ dst);
  25677. flag_NotZ = res & 0xFF;
  25678. DREGu8((Opcode >> 9) & 7) = res;
  25679. POST_IO
  25680. RET(12)
  25681. }
  25682. // SUBaD
  25683. OPCODE(0x903B)
  25684. {
  25685. u32 adr, res;
  25686. u32 src, dst;
  25687. adr = GET_PC;
  25688. DECODE_EXT_WORD
  25689. PRE_IO
  25690. READ_BYTE_F(adr, src)
  25691. dst = DREGu8((Opcode >> 9) & 7);
  25692. res = dst - src;
  25693. flag_N = flag_X = flag_C = res;
  25694. flag_V = (src ^ dst) & (res ^ dst);
  25695. flag_NotZ = res & 0xFF;
  25696. DREGu8((Opcode >> 9) & 7) = res;
  25697. POST_IO
  25698. RET(14)
  25699. }
  25700. // SUBaD
  25701. OPCODE(0x903C)
  25702. {
  25703. u32 adr, res;
  25704. u32 src, dst;
  25705. FETCH_BYTE(src);
  25706. dst = DREGu8((Opcode >> 9) & 7);
  25707. res = dst - src;
  25708. flag_N = flag_X = flag_C = res;
  25709. flag_V = (src ^ dst) & (res ^ dst);
  25710. flag_NotZ = res & 0xFF;
  25711. DREGu8((Opcode >> 9) & 7) = res;
  25712. RET(8)
  25713. }
  25714. // SUBaD
  25715. OPCODE(0x901F)
  25716. {
  25717. u32 adr, res;
  25718. u32 src, dst;
  25719. adr = AREG(7);
  25720. AREG(7) += 2;
  25721. PRE_IO
  25722. READ_BYTE_F(adr, src)
  25723. dst = DREGu8((Opcode >> 9) & 7);
  25724. res = dst - src;
  25725. flag_N = flag_X = flag_C = res;
  25726. flag_V = (src ^ dst) & (res ^ dst);
  25727. flag_NotZ = res & 0xFF;
  25728. DREGu8((Opcode >> 9) & 7) = res;
  25729. POST_IO
  25730. RET(8)
  25731. }
  25732. // SUBaD
  25733. OPCODE(0x9027)
  25734. {
  25735. u32 adr, res;
  25736. u32 src, dst;
  25737. adr = AREG(7) - 2;
  25738. AREG(7) = adr;
  25739. PRE_IO
  25740. READ_BYTE_F(adr, src)
  25741. dst = DREGu8((Opcode >> 9) & 7);
  25742. res = dst - src;
  25743. flag_N = flag_X = flag_C = res;
  25744. flag_V = (src ^ dst) & (res ^ dst);
  25745. flag_NotZ = res & 0xFF;
  25746. DREGu8((Opcode >> 9) & 7) = res;
  25747. POST_IO
  25748. RET(10)
  25749. }
  25750. // SUBaD
  25751. OPCODE(0x9040)
  25752. {
  25753. u32 adr, res;
  25754. u32 src, dst;
  25755. src = DREGu16((Opcode >> 0) & 7);
  25756. dst = DREGu16((Opcode >> 9) & 7);
  25757. res = dst - src;
  25758. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  25759. flag_N = flag_X = flag_C = res >> 8;
  25760. flag_NotZ = res & 0xFFFF;
  25761. DREGu16((Opcode >> 9) & 7) = res;
  25762. RET(4)
  25763. }
  25764. // SUBaD
  25765. OPCODE(0x9048)
  25766. {
  25767. u32 adr, res;
  25768. u32 src, dst;
  25769. src = AREGu16((Opcode >> 0) & 7);
  25770. dst = DREGu16((Opcode >> 9) & 7);
  25771. res = dst - src;
  25772. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  25773. flag_N = flag_X = flag_C = res >> 8;
  25774. flag_NotZ = res & 0xFFFF;
  25775. DREGu16((Opcode >> 9) & 7) = res;
  25776. RET(4)
  25777. }
  25778. // SUBaD
  25779. OPCODE(0x9050)
  25780. {
  25781. u32 adr, res;
  25782. u32 src, dst;
  25783. adr = AREG((Opcode >> 0) & 7);
  25784. PRE_IO
  25785. READ_WORD_F(adr, src)
  25786. dst = DREGu16((Opcode >> 9) & 7);
  25787. res = dst - src;
  25788. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  25789. flag_N = flag_X = flag_C = res >> 8;
  25790. flag_NotZ = res & 0xFFFF;
  25791. DREGu16((Opcode >> 9) & 7) = res;
  25792. POST_IO
  25793. RET(8)
  25794. }
  25795. // SUBaD
  25796. OPCODE(0x9058)
  25797. {
  25798. u32 adr, res;
  25799. u32 src, dst;
  25800. adr = AREG((Opcode >> 0) & 7);
  25801. AREG((Opcode >> 0) & 7) += 2;
  25802. PRE_IO
  25803. READ_WORD_F(adr, src)
  25804. dst = DREGu16((Opcode >> 9) & 7);
  25805. res = dst - src;
  25806. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  25807. flag_N = flag_X = flag_C = res >> 8;
  25808. flag_NotZ = res & 0xFFFF;
  25809. DREGu16((Opcode >> 9) & 7) = res;
  25810. POST_IO
  25811. RET(8)
  25812. }
  25813. // SUBaD
  25814. OPCODE(0x9060)
  25815. {
  25816. u32 adr, res;
  25817. u32 src, dst;
  25818. adr = AREG((Opcode >> 0) & 7) - 2;
  25819. AREG((Opcode >> 0) & 7) = adr;
  25820. PRE_IO
  25821. READ_WORD_F(adr, src)
  25822. dst = DREGu16((Opcode >> 9) & 7);
  25823. res = dst - src;
  25824. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  25825. flag_N = flag_X = flag_C = res >> 8;
  25826. flag_NotZ = res & 0xFFFF;
  25827. DREGu16((Opcode >> 9) & 7) = res;
  25828. POST_IO
  25829. RET(10)
  25830. }
  25831. // SUBaD
  25832. OPCODE(0x9068)
  25833. {
  25834. u32 adr, res;
  25835. u32 src, dst;
  25836. FETCH_SWORD(adr);
  25837. adr += AREG((Opcode >> 0) & 7);
  25838. PRE_IO
  25839. READ_WORD_F(adr, src)
  25840. dst = DREGu16((Opcode >> 9) & 7);
  25841. res = dst - src;
  25842. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  25843. flag_N = flag_X = flag_C = res >> 8;
  25844. flag_NotZ = res & 0xFFFF;
  25845. DREGu16((Opcode >> 9) & 7) = res;
  25846. POST_IO
  25847. RET(12)
  25848. }
  25849. // SUBaD
  25850. OPCODE(0x9070)
  25851. {
  25852. u32 adr, res;
  25853. u32 src, dst;
  25854. adr = AREG((Opcode >> 0) & 7);
  25855. DECODE_EXT_WORD
  25856. PRE_IO
  25857. READ_WORD_F(adr, src)
  25858. dst = DREGu16((Opcode >> 9) & 7);
  25859. res = dst - src;
  25860. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  25861. flag_N = flag_X = flag_C = res >> 8;
  25862. flag_NotZ = res & 0xFFFF;
  25863. DREGu16((Opcode >> 9) & 7) = res;
  25864. POST_IO
  25865. RET(14)
  25866. }
  25867. // SUBaD
  25868. OPCODE(0x9078)
  25869. {
  25870. u32 adr, res;
  25871. u32 src, dst;
  25872. FETCH_SWORD(adr);
  25873. PRE_IO
  25874. READ_WORD_F(adr, src)
  25875. dst = DREGu16((Opcode >> 9) & 7);
  25876. res = dst - src;
  25877. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  25878. flag_N = flag_X = flag_C = res >> 8;
  25879. flag_NotZ = res & 0xFFFF;
  25880. DREGu16((Opcode >> 9) & 7) = res;
  25881. POST_IO
  25882. RET(12)
  25883. }
  25884. // SUBaD
  25885. OPCODE(0x9079)
  25886. {
  25887. u32 adr, res;
  25888. u32 src, dst;
  25889. FETCH_LONG(adr);
  25890. PRE_IO
  25891. READ_WORD_F(adr, src)
  25892. dst = DREGu16((Opcode >> 9) & 7);
  25893. res = dst - src;
  25894. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  25895. flag_N = flag_X = flag_C = res >> 8;
  25896. flag_NotZ = res & 0xFFFF;
  25897. DREGu16((Opcode >> 9) & 7) = res;
  25898. POST_IO
  25899. RET(16)
  25900. }
  25901. // SUBaD
  25902. OPCODE(0x907A)
  25903. {
  25904. u32 adr, res;
  25905. u32 src, dst;
  25906. adr = GET_SWORD + GET_PC;
  25907. PC++;
  25908. PRE_IO
  25909. READ_WORD_F(adr, src)
  25910. dst = DREGu16((Opcode >> 9) & 7);
  25911. res = dst - src;
  25912. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  25913. flag_N = flag_X = flag_C = res >> 8;
  25914. flag_NotZ = res & 0xFFFF;
  25915. DREGu16((Opcode >> 9) & 7) = res;
  25916. POST_IO
  25917. RET(12)
  25918. }
  25919. // SUBaD
  25920. OPCODE(0x907B)
  25921. {
  25922. u32 adr, res;
  25923. u32 src, dst;
  25924. adr = GET_PC;
  25925. DECODE_EXT_WORD
  25926. PRE_IO
  25927. READ_WORD_F(adr, src)
  25928. dst = DREGu16((Opcode >> 9) & 7);
  25929. res = dst - src;
  25930. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  25931. flag_N = flag_X = flag_C = res >> 8;
  25932. flag_NotZ = res & 0xFFFF;
  25933. DREGu16((Opcode >> 9) & 7) = res;
  25934. POST_IO
  25935. RET(14)
  25936. }
  25937. // SUBaD
  25938. OPCODE(0x907C)
  25939. {
  25940. u32 adr, res;
  25941. u32 src, dst;
  25942. FETCH_WORD(src);
  25943. dst = DREGu16((Opcode >> 9) & 7);
  25944. res = dst - src;
  25945. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  25946. flag_N = flag_X = flag_C = res >> 8;
  25947. flag_NotZ = res & 0xFFFF;
  25948. DREGu16((Opcode >> 9) & 7) = res;
  25949. RET(8)
  25950. }
  25951. // SUBaD
  25952. OPCODE(0x905F)
  25953. {
  25954. u32 adr, res;
  25955. u32 src, dst;
  25956. adr = AREG(7);
  25957. AREG(7) += 2;
  25958. PRE_IO
  25959. READ_WORD_F(adr, src)
  25960. dst = DREGu16((Opcode >> 9) & 7);
  25961. res = dst - src;
  25962. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  25963. flag_N = flag_X = flag_C = res >> 8;
  25964. flag_NotZ = res & 0xFFFF;
  25965. DREGu16((Opcode >> 9) & 7) = res;
  25966. POST_IO
  25967. RET(8)
  25968. }
  25969. // SUBaD
  25970. OPCODE(0x9067)
  25971. {
  25972. u32 adr, res;
  25973. u32 src, dst;
  25974. adr = AREG(7) - 2;
  25975. AREG(7) = adr;
  25976. PRE_IO
  25977. READ_WORD_F(adr, src)
  25978. dst = DREGu16((Opcode >> 9) & 7);
  25979. res = dst - src;
  25980. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  25981. flag_N = flag_X = flag_C = res >> 8;
  25982. flag_NotZ = res & 0xFFFF;
  25983. DREGu16((Opcode >> 9) & 7) = res;
  25984. POST_IO
  25985. RET(10)
  25986. }
  25987. // SUBaD
  25988. OPCODE(0x9080)
  25989. {
  25990. u32 adr, res;
  25991. u32 src, dst;
  25992. src = DREGu32((Opcode >> 0) & 7);
  25993. dst = DREGu32((Opcode >> 9) & 7);
  25994. res = dst - src;
  25995. flag_NotZ = res;
  25996. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  25997. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  25998. flag_N = res >> 24;
  25999. DREGu32((Opcode >> 9) & 7) = res;
  26000. RET(8)
  26001. }
  26002. // SUBaD
  26003. OPCODE(0x9088)
  26004. {
  26005. u32 adr, res;
  26006. u32 src, dst;
  26007. src = AREGu32((Opcode >> 0) & 7);
  26008. dst = DREGu32((Opcode >> 9) & 7);
  26009. res = dst - src;
  26010. flag_NotZ = res;
  26011. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  26012. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  26013. flag_N = res >> 24;
  26014. DREGu32((Opcode >> 9) & 7) = res;
  26015. RET(8)
  26016. }
  26017. // SUBaD
  26018. OPCODE(0x9090)
  26019. {
  26020. u32 adr, res;
  26021. u32 src, dst;
  26022. adr = AREG((Opcode >> 0) & 7);
  26023. PRE_IO
  26024. READ_LONG_F(adr, src)
  26025. dst = DREGu32((Opcode >> 9) & 7);
  26026. res = dst - src;
  26027. flag_NotZ = res;
  26028. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  26029. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  26030. flag_N = res >> 24;
  26031. DREGu32((Opcode >> 9) & 7) = res;
  26032. POST_IO
  26033. RET(14)
  26034. }
  26035. // SUBaD
  26036. OPCODE(0x9098)
  26037. {
  26038. u32 adr, res;
  26039. u32 src, dst;
  26040. adr = AREG((Opcode >> 0) & 7);
  26041. AREG((Opcode >> 0) & 7) += 4;
  26042. PRE_IO
  26043. READ_LONG_F(adr, src)
  26044. dst = DREGu32((Opcode >> 9) & 7);
  26045. res = dst - src;
  26046. flag_NotZ = res;
  26047. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  26048. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  26049. flag_N = res >> 24;
  26050. DREGu32((Opcode >> 9) & 7) = res;
  26051. POST_IO
  26052. RET(14)
  26053. }
  26054. // SUBaD
  26055. OPCODE(0x90A0)
  26056. {
  26057. u32 adr, res;
  26058. u32 src, dst;
  26059. adr = AREG((Opcode >> 0) & 7) - 4;
  26060. AREG((Opcode >> 0) & 7) = adr;
  26061. PRE_IO
  26062. READ_LONG_F(adr, src)
  26063. dst = DREGu32((Opcode >> 9) & 7);
  26064. res = dst - src;
  26065. flag_NotZ = res;
  26066. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  26067. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  26068. flag_N = res >> 24;
  26069. DREGu32((Opcode >> 9) & 7) = res;
  26070. POST_IO
  26071. RET(16)
  26072. }
  26073. // SUBaD
  26074. OPCODE(0x90A8)
  26075. {
  26076. u32 adr, res;
  26077. u32 src, dst;
  26078. FETCH_SWORD(adr);
  26079. adr += AREG((Opcode >> 0) & 7);
  26080. PRE_IO
  26081. READ_LONG_F(adr, src)
  26082. dst = DREGu32((Opcode >> 9) & 7);
  26083. res = dst - src;
  26084. flag_NotZ = res;
  26085. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  26086. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  26087. flag_N = res >> 24;
  26088. DREGu32((Opcode >> 9) & 7) = res;
  26089. POST_IO
  26090. RET(18)
  26091. }
  26092. // SUBaD
  26093. OPCODE(0x90B0)
  26094. {
  26095. u32 adr, res;
  26096. u32 src, dst;
  26097. adr = AREG((Opcode >> 0) & 7);
  26098. DECODE_EXT_WORD
  26099. PRE_IO
  26100. READ_LONG_F(adr, src)
  26101. dst = DREGu32((Opcode >> 9) & 7);
  26102. res = dst - src;
  26103. flag_NotZ = res;
  26104. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  26105. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  26106. flag_N = res >> 24;
  26107. DREGu32((Opcode >> 9) & 7) = res;
  26108. POST_IO
  26109. RET(20)
  26110. }
  26111. // SUBaD
  26112. OPCODE(0x90B8)
  26113. {
  26114. u32 adr, res;
  26115. u32 src, dst;
  26116. FETCH_SWORD(adr);
  26117. PRE_IO
  26118. READ_LONG_F(adr, src)
  26119. dst = DREGu32((Opcode >> 9) & 7);
  26120. res = dst - src;
  26121. flag_NotZ = res;
  26122. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  26123. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  26124. flag_N = res >> 24;
  26125. DREGu32((Opcode >> 9) & 7) = res;
  26126. POST_IO
  26127. RET(18)
  26128. }
  26129. // SUBaD
  26130. OPCODE(0x90B9)
  26131. {
  26132. u32 adr, res;
  26133. u32 src, dst;
  26134. FETCH_LONG(adr);
  26135. PRE_IO
  26136. READ_LONG_F(adr, src)
  26137. dst = DREGu32((Opcode >> 9) & 7);
  26138. res = dst - src;
  26139. flag_NotZ = res;
  26140. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  26141. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  26142. flag_N = res >> 24;
  26143. DREGu32((Opcode >> 9) & 7) = res;
  26144. POST_IO
  26145. RET(22)
  26146. }
  26147. // SUBaD
  26148. OPCODE(0x90BA)
  26149. {
  26150. u32 adr, res;
  26151. u32 src, dst;
  26152. adr = GET_SWORD + GET_PC;
  26153. PC++;
  26154. PRE_IO
  26155. READ_LONG_F(adr, src)
  26156. dst = DREGu32((Opcode >> 9) & 7);
  26157. res = dst - src;
  26158. flag_NotZ = res;
  26159. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  26160. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  26161. flag_N = res >> 24;
  26162. DREGu32((Opcode >> 9) & 7) = res;
  26163. POST_IO
  26164. RET(18)
  26165. }
  26166. // SUBaD
  26167. OPCODE(0x90BB)
  26168. {
  26169. u32 adr, res;
  26170. u32 src, dst;
  26171. adr = GET_PC;
  26172. DECODE_EXT_WORD
  26173. PRE_IO
  26174. READ_LONG_F(adr, src)
  26175. dst = DREGu32((Opcode >> 9) & 7);
  26176. res = dst - src;
  26177. flag_NotZ = res;
  26178. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  26179. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  26180. flag_N = res >> 24;
  26181. DREGu32((Opcode >> 9) & 7) = res;
  26182. POST_IO
  26183. RET(20)
  26184. }
  26185. // SUBaD
  26186. OPCODE(0x90BC)
  26187. {
  26188. u32 adr, res;
  26189. u32 src, dst;
  26190. FETCH_LONG(src);
  26191. dst = DREGu32((Opcode >> 9) & 7);
  26192. res = dst - src;
  26193. flag_NotZ = res;
  26194. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  26195. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  26196. flag_N = res >> 24;
  26197. DREGu32((Opcode >> 9) & 7) = res;
  26198. RET(16)
  26199. }
  26200. // SUBaD
  26201. OPCODE(0x909F)
  26202. {
  26203. u32 adr, res;
  26204. u32 src, dst;
  26205. adr = AREG(7);
  26206. AREG(7) += 4;
  26207. PRE_IO
  26208. READ_LONG_F(adr, src)
  26209. dst = DREGu32((Opcode >> 9) & 7);
  26210. res = dst - src;
  26211. flag_NotZ = res;
  26212. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  26213. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  26214. flag_N = res >> 24;
  26215. DREGu32((Opcode >> 9) & 7) = res;
  26216. POST_IO
  26217. RET(14)
  26218. }
  26219. // SUBaD
  26220. OPCODE(0x90A7)
  26221. {
  26222. u32 adr, res;
  26223. u32 src, dst;
  26224. adr = AREG(7) - 4;
  26225. AREG(7) = adr;
  26226. PRE_IO
  26227. READ_LONG_F(adr, src)
  26228. dst = DREGu32((Opcode >> 9) & 7);
  26229. res = dst - src;
  26230. flag_NotZ = res;
  26231. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  26232. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  26233. flag_N = res >> 24;
  26234. DREGu32((Opcode >> 9) & 7) = res;
  26235. POST_IO
  26236. RET(16)
  26237. }
  26238. // SUBDa
  26239. OPCODE(0x9110)
  26240. {
  26241. u32 adr, res;
  26242. u32 src, dst;
  26243. src = DREGu8((Opcode >> 9) & 7);
  26244. adr = AREG((Opcode >> 0) & 7);
  26245. PRE_IO
  26246. READ_BYTE_F(adr, dst)
  26247. res = dst - src;
  26248. flag_N = flag_X = flag_C = res;
  26249. flag_V = (src ^ dst) & (res ^ dst);
  26250. flag_NotZ = res & 0xFF;
  26251. WRITE_BYTE_F(adr, res)
  26252. POST_IO
  26253. RET(12)
  26254. }
  26255. // SUBDa
  26256. OPCODE(0x9118)
  26257. {
  26258. u32 adr, res;
  26259. u32 src, dst;
  26260. src = DREGu8((Opcode >> 9) & 7);
  26261. adr = AREG((Opcode >> 0) & 7);
  26262. AREG((Opcode >> 0) & 7) += 1;
  26263. PRE_IO
  26264. READ_BYTE_F(adr, dst)
  26265. res = dst - src;
  26266. flag_N = flag_X = flag_C = res;
  26267. flag_V = (src ^ dst) & (res ^ dst);
  26268. flag_NotZ = res & 0xFF;
  26269. WRITE_BYTE_F(adr, res)
  26270. POST_IO
  26271. RET(12)
  26272. }
  26273. // SUBDa
  26274. OPCODE(0x9120)
  26275. {
  26276. u32 adr, res;
  26277. u32 src, dst;
  26278. src = DREGu8((Opcode >> 9) & 7);
  26279. adr = AREG((Opcode >> 0) & 7) - 1;
  26280. AREG((Opcode >> 0) & 7) = adr;
  26281. PRE_IO
  26282. READ_BYTE_F(adr, dst)
  26283. res = dst - src;
  26284. flag_N = flag_X = flag_C = res;
  26285. flag_V = (src ^ dst) & (res ^ dst);
  26286. flag_NotZ = res & 0xFF;
  26287. WRITE_BYTE_F(adr, res)
  26288. POST_IO
  26289. RET(14)
  26290. }
  26291. // SUBDa
  26292. OPCODE(0x9128)
  26293. {
  26294. u32 adr, res;
  26295. u32 src, dst;
  26296. src = DREGu8((Opcode >> 9) & 7);
  26297. FETCH_SWORD(adr);
  26298. adr += AREG((Opcode >> 0) & 7);
  26299. PRE_IO
  26300. READ_BYTE_F(adr, dst)
  26301. res = dst - src;
  26302. flag_N = flag_X = flag_C = res;
  26303. flag_V = (src ^ dst) & (res ^ dst);
  26304. flag_NotZ = res & 0xFF;
  26305. WRITE_BYTE_F(adr, res)
  26306. POST_IO
  26307. RET(16)
  26308. }
  26309. // SUBDa
  26310. OPCODE(0x9130)
  26311. {
  26312. u32 adr, res;
  26313. u32 src, dst;
  26314. src = DREGu8((Opcode >> 9) & 7);
  26315. adr = AREG((Opcode >> 0) & 7);
  26316. DECODE_EXT_WORD
  26317. PRE_IO
  26318. READ_BYTE_F(adr, dst)
  26319. res = dst - src;
  26320. flag_N = flag_X = flag_C = res;
  26321. flag_V = (src ^ dst) & (res ^ dst);
  26322. flag_NotZ = res & 0xFF;
  26323. WRITE_BYTE_F(adr, res)
  26324. POST_IO
  26325. RET(18)
  26326. }
  26327. // SUBDa
  26328. OPCODE(0x9138)
  26329. {
  26330. u32 adr, res;
  26331. u32 src, dst;
  26332. src = DREGu8((Opcode >> 9) & 7);
  26333. FETCH_SWORD(adr);
  26334. PRE_IO
  26335. READ_BYTE_F(adr, dst)
  26336. res = dst - src;
  26337. flag_N = flag_X = flag_C = res;
  26338. flag_V = (src ^ dst) & (res ^ dst);
  26339. flag_NotZ = res & 0xFF;
  26340. WRITE_BYTE_F(adr, res)
  26341. POST_IO
  26342. RET(16)
  26343. }
  26344. // SUBDa
  26345. OPCODE(0x9139)
  26346. {
  26347. u32 adr, res;
  26348. u32 src, dst;
  26349. src = DREGu8((Opcode >> 9) & 7);
  26350. FETCH_LONG(adr);
  26351. PRE_IO
  26352. READ_BYTE_F(adr, dst)
  26353. res = dst - src;
  26354. flag_N = flag_X = flag_C = res;
  26355. flag_V = (src ^ dst) & (res ^ dst);
  26356. flag_NotZ = res & 0xFF;
  26357. WRITE_BYTE_F(adr, res)
  26358. POST_IO
  26359. RET(20)
  26360. }
  26361. // SUBDa
  26362. OPCODE(0x911F)
  26363. {
  26364. u32 adr, res;
  26365. u32 src, dst;
  26366. src = DREGu8((Opcode >> 9) & 7);
  26367. adr = AREG(7);
  26368. AREG(7) += 2;
  26369. PRE_IO
  26370. READ_BYTE_F(adr, dst)
  26371. res = dst - src;
  26372. flag_N = flag_X = flag_C = res;
  26373. flag_V = (src ^ dst) & (res ^ dst);
  26374. flag_NotZ = res & 0xFF;
  26375. WRITE_BYTE_F(adr, res)
  26376. POST_IO
  26377. RET(12)
  26378. }
  26379. // SUBDa
  26380. OPCODE(0x9127)
  26381. {
  26382. u32 adr, res;
  26383. u32 src, dst;
  26384. src = DREGu8((Opcode >> 9) & 7);
  26385. adr = AREG(7) - 2;
  26386. AREG(7) = adr;
  26387. PRE_IO
  26388. READ_BYTE_F(adr, dst)
  26389. res = dst - src;
  26390. flag_N = flag_X = flag_C = res;
  26391. flag_V = (src ^ dst) & (res ^ dst);
  26392. flag_NotZ = res & 0xFF;
  26393. WRITE_BYTE_F(adr, res)
  26394. POST_IO
  26395. RET(14)
  26396. }
  26397. // SUBDa
  26398. OPCODE(0x9150)
  26399. {
  26400. u32 adr, res;
  26401. u32 src, dst;
  26402. src = DREGu16((Opcode >> 9) & 7);
  26403. adr = AREG((Opcode >> 0) & 7);
  26404. PRE_IO
  26405. READ_WORD_F(adr, dst)
  26406. res = dst - src;
  26407. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  26408. flag_N = flag_X = flag_C = res >> 8;
  26409. flag_NotZ = res & 0xFFFF;
  26410. WRITE_WORD_F(adr, res)
  26411. POST_IO
  26412. RET(12)
  26413. }
  26414. // SUBDa
  26415. OPCODE(0x9158)
  26416. {
  26417. u32 adr, res;
  26418. u32 src, dst;
  26419. src = DREGu16((Opcode >> 9) & 7);
  26420. adr = AREG((Opcode >> 0) & 7);
  26421. AREG((Opcode >> 0) & 7) += 2;
  26422. PRE_IO
  26423. READ_WORD_F(adr, dst)
  26424. res = dst - src;
  26425. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  26426. flag_N = flag_X = flag_C = res >> 8;
  26427. flag_NotZ = res & 0xFFFF;
  26428. WRITE_WORD_F(adr, res)
  26429. POST_IO
  26430. RET(12)
  26431. }
  26432. // SUBDa
  26433. OPCODE(0x9160)
  26434. {
  26435. u32 adr, res;
  26436. u32 src, dst;
  26437. src = DREGu16((Opcode >> 9) & 7);
  26438. adr = AREG((Opcode >> 0) & 7) - 2;
  26439. AREG((Opcode >> 0) & 7) = adr;
  26440. PRE_IO
  26441. READ_WORD_F(adr, dst)
  26442. res = dst - src;
  26443. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  26444. flag_N = flag_X = flag_C = res >> 8;
  26445. flag_NotZ = res & 0xFFFF;
  26446. WRITE_WORD_F(adr, res)
  26447. POST_IO
  26448. RET(14)
  26449. }
  26450. // SUBDa
  26451. OPCODE(0x9168)
  26452. {
  26453. u32 adr, res;
  26454. u32 src, dst;
  26455. src = DREGu16((Opcode >> 9) & 7);
  26456. FETCH_SWORD(adr);
  26457. adr += AREG((Opcode >> 0) & 7);
  26458. PRE_IO
  26459. READ_WORD_F(adr, dst)
  26460. res = dst - src;
  26461. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  26462. flag_N = flag_X = flag_C = res >> 8;
  26463. flag_NotZ = res & 0xFFFF;
  26464. WRITE_WORD_F(adr, res)
  26465. POST_IO
  26466. RET(16)
  26467. }
  26468. // SUBDa
  26469. OPCODE(0x9170)
  26470. {
  26471. u32 adr, res;
  26472. u32 src, dst;
  26473. src = DREGu16((Opcode >> 9) & 7);
  26474. adr = AREG((Opcode >> 0) & 7);
  26475. DECODE_EXT_WORD
  26476. PRE_IO
  26477. READ_WORD_F(adr, dst)
  26478. res = dst - src;
  26479. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  26480. flag_N = flag_X = flag_C = res >> 8;
  26481. flag_NotZ = res & 0xFFFF;
  26482. WRITE_WORD_F(adr, res)
  26483. POST_IO
  26484. RET(18)
  26485. }
  26486. // SUBDa
  26487. OPCODE(0x9178)
  26488. {
  26489. u32 adr, res;
  26490. u32 src, dst;
  26491. src = DREGu16((Opcode >> 9) & 7);
  26492. FETCH_SWORD(adr);
  26493. PRE_IO
  26494. READ_WORD_F(adr, dst)
  26495. res = dst - src;
  26496. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  26497. flag_N = flag_X = flag_C = res >> 8;
  26498. flag_NotZ = res & 0xFFFF;
  26499. WRITE_WORD_F(adr, res)
  26500. POST_IO
  26501. RET(16)
  26502. }
  26503. // SUBDa
  26504. OPCODE(0x9179)
  26505. {
  26506. u32 adr, res;
  26507. u32 src, dst;
  26508. src = DREGu16((Opcode >> 9) & 7);
  26509. FETCH_LONG(adr);
  26510. PRE_IO
  26511. READ_WORD_F(adr, dst)
  26512. res = dst - src;
  26513. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  26514. flag_N = flag_X = flag_C = res >> 8;
  26515. flag_NotZ = res & 0xFFFF;
  26516. WRITE_WORD_F(adr, res)
  26517. POST_IO
  26518. RET(20)
  26519. }
  26520. // SUBDa
  26521. OPCODE(0x915F)
  26522. {
  26523. u32 adr, res;
  26524. u32 src, dst;
  26525. src = DREGu16((Opcode >> 9) & 7);
  26526. adr = AREG(7);
  26527. AREG(7) += 2;
  26528. PRE_IO
  26529. READ_WORD_F(adr, dst)
  26530. res = dst - src;
  26531. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  26532. flag_N = flag_X = flag_C = res >> 8;
  26533. flag_NotZ = res & 0xFFFF;
  26534. WRITE_WORD_F(adr, res)
  26535. POST_IO
  26536. RET(12)
  26537. }
  26538. // SUBDa
  26539. OPCODE(0x9167)
  26540. {
  26541. u32 adr, res;
  26542. u32 src, dst;
  26543. src = DREGu16((Opcode >> 9) & 7);
  26544. adr = AREG(7) - 2;
  26545. AREG(7) = adr;
  26546. PRE_IO
  26547. READ_WORD_F(adr, dst)
  26548. res = dst - src;
  26549. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  26550. flag_N = flag_X = flag_C = res >> 8;
  26551. flag_NotZ = res & 0xFFFF;
  26552. WRITE_WORD_F(adr, res)
  26553. POST_IO
  26554. RET(14)
  26555. }
  26556. // SUBDa
  26557. OPCODE(0x9190)
  26558. {
  26559. u32 adr, res;
  26560. u32 src, dst;
  26561. src = DREGu32((Opcode >> 9) & 7);
  26562. adr = AREG((Opcode >> 0) & 7);
  26563. PRE_IO
  26564. READ_LONG_F(adr, dst)
  26565. res = dst - src;
  26566. flag_NotZ = res;
  26567. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  26568. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  26569. flag_N = res >> 24;
  26570. WRITE_LONG_F(adr, res)
  26571. POST_IO
  26572. RET(20)
  26573. }
  26574. // SUBDa
  26575. OPCODE(0x9198)
  26576. {
  26577. u32 adr, res;
  26578. u32 src, dst;
  26579. src = DREGu32((Opcode >> 9) & 7);
  26580. adr = AREG((Opcode >> 0) & 7);
  26581. AREG((Opcode >> 0) & 7) += 4;
  26582. PRE_IO
  26583. READ_LONG_F(adr, dst)
  26584. res = dst - src;
  26585. flag_NotZ = res;
  26586. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  26587. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  26588. flag_N = res >> 24;
  26589. WRITE_LONG_F(adr, res)
  26590. POST_IO
  26591. RET(20)
  26592. }
  26593. // SUBDa
  26594. OPCODE(0x91A0)
  26595. {
  26596. u32 adr, res;
  26597. u32 src, dst;
  26598. src = DREGu32((Opcode >> 9) & 7);
  26599. adr = AREG((Opcode >> 0) & 7) - 4;
  26600. AREG((Opcode >> 0) & 7) = adr;
  26601. PRE_IO
  26602. READ_LONG_F(adr, dst)
  26603. res = dst - src;
  26604. flag_NotZ = res;
  26605. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  26606. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  26607. flag_N = res >> 24;
  26608. WRITE_LONG_F(adr, res)
  26609. POST_IO
  26610. RET(22)
  26611. }
  26612. // SUBDa
  26613. OPCODE(0x91A8)
  26614. {
  26615. u32 adr, res;
  26616. u32 src, dst;
  26617. src = DREGu32((Opcode >> 9) & 7);
  26618. FETCH_SWORD(adr);
  26619. adr += AREG((Opcode >> 0) & 7);
  26620. PRE_IO
  26621. READ_LONG_F(adr, dst)
  26622. res = dst - src;
  26623. flag_NotZ = res;
  26624. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  26625. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  26626. flag_N = res >> 24;
  26627. WRITE_LONG_F(adr, res)
  26628. POST_IO
  26629. RET(24)
  26630. }
  26631. // SUBDa
  26632. OPCODE(0x91B0)
  26633. {
  26634. u32 adr, res;
  26635. u32 src, dst;
  26636. src = DREGu32((Opcode >> 9) & 7);
  26637. adr = AREG((Opcode >> 0) & 7);
  26638. DECODE_EXT_WORD
  26639. PRE_IO
  26640. READ_LONG_F(adr, dst)
  26641. res = dst - src;
  26642. flag_NotZ = res;
  26643. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  26644. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  26645. flag_N = res >> 24;
  26646. WRITE_LONG_F(adr, res)
  26647. POST_IO
  26648. RET(26)
  26649. }
  26650. // SUBDa
  26651. OPCODE(0x91B8)
  26652. {
  26653. u32 adr, res;
  26654. u32 src, dst;
  26655. src = DREGu32((Opcode >> 9) & 7);
  26656. FETCH_SWORD(adr);
  26657. PRE_IO
  26658. READ_LONG_F(adr, dst)
  26659. res = dst - src;
  26660. flag_NotZ = res;
  26661. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  26662. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  26663. flag_N = res >> 24;
  26664. WRITE_LONG_F(adr, res)
  26665. POST_IO
  26666. RET(24)
  26667. }
  26668. // SUBDa
  26669. OPCODE(0x91B9)
  26670. {
  26671. u32 adr, res;
  26672. u32 src, dst;
  26673. src = DREGu32((Opcode >> 9) & 7);
  26674. FETCH_LONG(adr);
  26675. PRE_IO
  26676. READ_LONG_F(adr, dst)
  26677. res = dst - src;
  26678. flag_NotZ = res;
  26679. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  26680. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  26681. flag_N = res >> 24;
  26682. WRITE_LONG_F(adr, res)
  26683. POST_IO
  26684. RET(28)
  26685. }
  26686. // SUBDa
  26687. OPCODE(0x919F)
  26688. {
  26689. u32 adr, res;
  26690. u32 src, dst;
  26691. src = DREGu32((Opcode >> 9) & 7);
  26692. adr = AREG(7);
  26693. AREG(7) += 4;
  26694. PRE_IO
  26695. READ_LONG_F(adr, dst)
  26696. res = dst - src;
  26697. flag_NotZ = res;
  26698. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  26699. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  26700. flag_N = res >> 24;
  26701. WRITE_LONG_F(adr, res)
  26702. POST_IO
  26703. RET(20)
  26704. }
  26705. // SUBDa
  26706. OPCODE(0x91A7)
  26707. {
  26708. u32 adr, res;
  26709. u32 src, dst;
  26710. src = DREGu32((Opcode >> 9) & 7);
  26711. adr = AREG(7) - 4;
  26712. AREG(7) = adr;
  26713. PRE_IO
  26714. READ_LONG_F(adr, dst)
  26715. res = dst - src;
  26716. flag_NotZ = res;
  26717. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  26718. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  26719. flag_N = res >> 24;
  26720. WRITE_LONG_F(adr, res)
  26721. POST_IO
  26722. RET(22)
  26723. }
  26724. // SUBX
  26725. OPCODE(0x9100)
  26726. {
  26727. u32 adr, res;
  26728. u32 src, dst;
  26729. src = DREGu8((Opcode >> 0) & 7);
  26730. dst = DREGu8((Opcode >> 9) & 7);
  26731. res = dst - src - ((flag_X >> 8) & 1);
  26732. flag_N = flag_X = flag_C = res;
  26733. flag_V = (src ^ dst) & (res ^ dst);
  26734. flag_NotZ |= res & 0xFF;
  26735. DREGu8((Opcode >> 9) & 7) = res;
  26736. RET(4)
  26737. }
  26738. // SUBX
  26739. OPCODE(0x9140)
  26740. {
  26741. u32 adr, res;
  26742. u32 src, dst;
  26743. src = DREGu16((Opcode >> 0) & 7);
  26744. dst = DREGu16((Opcode >> 9) & 7);
  26745. res = dst - src - ((flag_X >> 8) & 1);
  26746. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  26747. flag_N = flag_X = flag_C = res >> 8;
  26748. flag_NotZ |= res & 0xFFFF;
  26749. DREGu16((Opcode >> 9) & 7) = res;
  26750. RET(4)
  26751. }
  26752. // SUBX
  26753. OPCODE(0x9180)
  26754. {
  26755. u32 adr, res;
  26756. u32 src, dst;
  26757. src = DREGu32((Opcode >> 0) & 7);
  26758. dst = DREGu32((Opcode >> 9) & 7);
  26759. res = dst - src - ((flag_X >> 8) & 1);
  26760. flag_NotZ |= res;
  26761. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  26762. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  26763. flag_N = res >> 24;
  26764. DREGu32((Opcode >> 9) & 7) = res;
  26765. RET(8)
  26766. }
  26767. // SUBXM
  26768. OPCODE(0x9108)
  26769. {
  26770. u32 adr, res;
  26771. u32 src, dst;
  26772. adr = AREG((Opcode >> 0) & 7) - 1;
  26773. AREG((Opcode >> 0) & 7) = adr;
  26774. PRE_IO
  26775. READ_BYTE_F(adr, src)
  26776. adr = AREG((Opcode >> 9) & 7) - 1;
  26777. AREG((Opcode >> 9) & 7) = adr;
  26778. READ_BYTE_F(adr, dst)
  26779. res = dst - src - ((flag_X >> 8) & 1);
  26780. flag_N = flag_X = flag_C = res;
  26781. flag_V = (src ^ dst) & (res ^ dst);
  26782. flag_NotZ |= res & 0xFF;
  26783. WRITE_BYTE_F(adr, res)
  26784. POST_IO
  26785. RET(18)
  26786. }
  26787. // SUBXM
  26788. OPCODE(0x9148)
  26789. {
  26790. u32 adr, res;
  26791. u32 src, dst;
  26792. adr = AREG((Opcode >> 0) & 7) - 2;
  26793. AREG((Opcode >> 0) & 7) = adr;
  26794. PRE_IO
  26795. READ_WORD_F(adr, src)
  26796. adr = AREG((Opcode >> 9) & 7) - 2;
  26797. AREG((Opcode >> 9) & 7) = adr;
  26798. READ_WORD_F(adr, dst)
  26799. res = dst - src - ((flag_X >> 8) & 1);
  26800. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  26801. flag_N = flag_X = flag_C = res >> 8;
  26802. flag_NotZ |= res & 0xFFFF;
  26803. WRITE_WORD_F(adr, res)
  26804. POST_IO
  26805. RET(18)
  26806. }
  26807. // SUBXM
  26808. OPCODE(0x9188)
  26809. {
  26810. u32 adr, res;
  26811. u32 src, dst;
  26812. adr = AREG((Opcode >> 0) & 7) - 4;
  26813. AREG((Opcode >> 0) & 7) = adr;
  26814. PRE_IO
  26815. READ_LONG_F(adr, src)
  26816. adr = AREG((Opcode >> 9) & 7) - 4;
  26817. AREG((Opcode >> 9) & 7) = adr;
  26818. READ_LONG_F(adr, dst)
  26819. res = dst - src - ((flag_X >> 8) & 1);
  26820. flag_NotZ |= res;
  26821. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  26822. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  26823. flag_N = res >> 24;
  26824. WRITE_LONG_F(adr, res)
  26825. POST_IO
  26826. RET(30)
  26827. }
  26828. // SUBX7M
  26829. OPCODE(0x910F)
  26830. {
  26831. u32 adr, res;
  26832. u32 src, dst;
  26833. adr = AREG(7) - 2;
  26834. AREG(7) = adr;
  26835. PRE_IO
  26836. READ_BYTE_F(adr, src)
  26837. adr = AREG((Opcode >> 9) & 7) - 1;
  26838. AREG((Opcode >> 9) & 7) = adr;
  26839. READ_BYTE_F(adr, dst)
  26840. res = dst - src - ((flag_X >> 8) & 1);
  26841. flag_N = flag_X = flag_C = res;
  26842. flag_V = (src ^ dst) & (res ^ dst);
  26843. flag_NotZ |= res & 0xFF;
  26844. WRITE_BYTE_F(adr, res)
  26845. POST_IO
  26846. RET(18)
  26847. }
  26848. // SUBX7M
  26849. OPCODE(0x914F)
  26850. {
  26851. u32 adr, res;
  26852. u32 src, dst;
  26853. adr = AREG(7) - 2;
  26854. AREG(7) = adr;
  26855. PRE_IO
  26856. READ_WORD_F(adr, src)
  26857. adr = AREG((Opcode >> 9) & 7) - 2;
  26858. AREG((Opcode >> 9) & 7) = adr;
  26859. READ_WORD_F(adr, dst)
  26860. res = dst - src - ((flag_X >> 8) & 1);
  26861. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  26862. flag_N = flag_X = flag_C = res >> 8;
  26863. flag_NotZ |= res & 0xFFFF;
  26864. WRITE_WORD_F(adr, res)
  26865. POST_IO
  26866. RET(18)
  26867. }
  26868. // SUBX7M
  26869. OPCODE(0x918F)
  26870. {
  26871. u32 adr, res;
  26872. u32 src, dst;
  26873. adr = AREG(7) - 4;
  26874. AREG(7) = adr;
  26875. PRE_IO
  26876. READ_LONG_F(adr, src)
  26877. adr = AREG((Opcode >> 9) & 7) - 4;
  26878. AREG((Opcode >> 9) & 7) = adr;
  26879. READ_LONG_F(adr, dst)
  26880. res = dst - src - ((flag_X >> 8) & 1);
  26881. flag_NotZ |= res;
  26882. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  26883. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  26884. flag_N = res >> 24;
  26885. WRITE_LONG_F(adr, res)
  26886. POST_IO
  26887. RET(30)
  26888. }
  26889. // SUBXM7
  26890. OPCODE(0x9F08)
  26891. {
  26892. u32 adr, res;
  26893. u32 src, dst;
  26894. adr = AREG((Opcode >> 0) & 7) - 1;
  26895. AREG((Opcode >> 0) & 7) = adr;
  26896. PRE_IO
  26897. READ_BYTE_F(adr, src)
  26898. adr = AREG(7) - 2;
  26899. AREG(7) = adr;
  26900. READ_BYTE_F(adr, dst)
  26901. res = dst - src - ((flag_X >> 8) & 1);
  26902. flag_N = flag_X = flag_C = res;
  26903. flag_V = (src ^ dst) & (res ^ dst);
  26904. flag_NotZ |= res & 0xFF;
  26905. WRITE_BYTE_F(adr, res)
  26906. POST_IO
  26907. RET(18)
  26908. }
  26909. // SUBXM7
  26910. OPCODE(0x9F48)
  26911. {
  26912. u32 adr, res;
  26913. u32 src, dst;
  26914. adr = AREG((Opcode >> 0) & 7) - 2;
  26915. AREG((Opcode >> 0) & 7) = adr;
  26916. PRE_IO
  26917. READ_WORD_F(adr, src)
  26918. adr = AREG(7) - 2;
  26919. AREG(7) = adr;
  26920. READ_WORD_F(adr, dst)
  26921. res = dst - src - ((flag_X >> 8) & 1);
  26922. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  26923. flag_N = flag_X = flag_C = res >> 8;
  26924. flag_NotZ |= res & 0xFFFF;
  26925. WRITE_WORD_F(adr, res)
  26926. POST_IO
  26927. RET(18)
  26928. }
  26929. // SUBXM7
  26930. OPCODE(0x9F88)
  26931. {
  26932. u32 adr, res;
  26933. u32 src, dst;
  26934. adr = AREG((Opcode >> 0) & 7) - 4;
  26935. AREG((Opcode >> 0) & 7) = adr;
  26936. PRE_IO
  26937. READ_LONG_F(adr, src)
  26938. adr = AREG(7) - 4;
  26939. AREG(7) = adr;
  26940. READ_LONG_F(adr, dst)
  26941. res = dst - src - ((flag_X >> 8) & 1);
  26942. flag_NotZ |= res;
  26943. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  26944. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  26945. flag_N = res >> 24;
  26946. WRITE_LONG_F(adr, res)
  26947. POST_IO
  26948. RET(30)
  26949. }
  26950. // SUBX7M7
  26951. OPCODE(0x9F0F)
  26952. {
  26953. u32 adr, res;
  26954. u32 src, dst;
  26955. adr = AREG(7) - 2;
  26956. AREG(7) = adr;
  26957. PRE_IO
  26958. READ_BYTE_F(adr, src)
  26959. adr = AREG(7) - 2;
  26960. AREG(7) = adr;
  26961. READ_BYTE_F(adr, dst)
  26962. res = dst - src - ((flag_X >> 8) & 1);
  26963. flag_N = flag_X = flag_C = res;
  26964. flag_V = (src ^ dst) & (res ^ dst);
  26965. flag_NotZ |= res & 0xFF;
  26966. WRITE_BYTE_F(adr, res)
  26967. POST_IO
  26968. RET(18)
  26969. }
  26970. // SUBX7M7
  26971. OPCODE(0x9F4F)
  26972. {
  26973. u32 adr, res;
  26974. u32 src, dst;
  26975. adr = AREG(7) - 2;
  26976. AREG(7) = adr;
  26977. PRE_IO
  26978. READ_WORD_F(adr, src)
  26979. adr = AREG(7) - 2;
  26980. AREG(7) = adr;
  26981. READ_WORD_F(adr, dst)
  26982. res = dst - src - ((flag_X >> 8) & 1);
  26983. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  26984. flag_N = flag_X = flag_C = res >> 8;
  26985. flag_NotZ |= res & 0xFFFF;
  26986. WRITE_WORD_F(adr, res)
  26987. POST_IO
  26988. RET(18)
  26989. }
  26990. // SUBX7M7
  26991. OPCODE(0x9F8F)
  26992. {
  26993. u32 adr, res;
  26994. u32 src, dst;
  26995. adr = AREG(7) - 4;
  26996. AREG(7) = adr;
  26997. PRE_IO
  26998. READ_LONG_F(adr, src)
  26999. adr = AREG(7) - 4;
  27000. AREG(7) = adr;
  27001. READ_LONG_F(adr, dst)
  27002. res = dst - src - ((flag_X >> 8) & 1);
  27003. flag_NotZ |= res;
  27004. flag_X = flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  27005. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  27006. flag_N = res >> 24;
  27007. WRITE_LONG_F(adr, res)
  27008. POST_IO
  27009. RET(30)
  27010. }
  27011. // SUBA
  27012. OPCODE(0x90C0)
  27013. {
  27014. u32 adr, res;
  27015. u32 src, dst;
  27016. src = (s32)DREGs16((Opcode >> 0) & 7);
  27017. dst = AREGu32((Opcode >> 9) & 7);
  27018. res = dst - src;
  27019. AREG((Opcode >> 9) & 7) = res;
  27020. RET(8)
  27021. }
  27022. // SUBA
  27023. OPCODE(0x90C8)
  27024. {
  27025. u32 adr, res;
  27026. u32 src, dst;
  27027. src = (s32)AREGs16((Opcode >> 0) & 7);
  27028. dst = AREGu32((Opcode >> 9) & 7);
  27029. res = dst - src;
  27030. AREG((Opcode >> 9) & 7) = res;
  27031. RET(8)
  27032. }
  27033. // SUBA
  27034. OPCODE(0x90D0)
  27035. {
  27036. u32 adr, res;
  27037. u32 src, dst;
  27038. adr = AREG((Opcode >> 0) & 7);
  27039. PRE_IO
  27040. READSX_WORD_F(adr, src)
  27041. dst = AREGu32((Opcode >> 9) & 7);
  27042. res = dst - src;
  27043. AREG((Opcode >> 9) & 7) = res;
  27044. POST_IO
  27045. #ifdef USE_CYCLONE_TIMING
  27046. RET(12)
  27047. #else
  27048. RET(10)
  27049. #endif
  27050. }
  27051. // SUBA
  27052. OPCODE(0x90D8)
  27053. {
  27054. u32 adr, res;
  27055. u32 src, dst;
  27056. adr = AREG((Opcode >> 0) & 7);
  27057. AREG((Opcode >> 0) & 7) += 2;
  27058. PRE_IO
  27059. READSX_WORD_F(adr, src)
  27060. dst = AREGu32((Opcode >> 9) & 7);
  27061. res = dst - src;
  27062. AREG((Opcode >> 9) & 7) = res;
  27063. POST_IO
  27064. #ifdef USE_CYCLONE_TIMING
  27065. RET(12)
  27066. #else
  27067. RET(10)
  27068. #endif
  27069. }
  27070. // SUBA
  27071. OPCODE(0x90E0)
  27072. {
  27073. u32 adr, res;
  27074. u32 src, dst;
  27075. adr = AREG((Opcode >> 0) & 7) - 2;
  27076. AREG((Opcode >> 0) & 7) = adr;
  27077. PRE_IO
  27078. READSX_WORD_F(adr, src)
  27079. dst = AREGu32((Opcode >> 9) & 7);
  27080. res = dst - src;
  27081. AREG((Opcode >> 9) & 7) = res;
  27082. POST_IO
  27083. #ifdef USE_CYCLONE_TIMING
  27084. RET(14)
  27085. #else
  27086. RET(12)
  27087. #endif
  27088. }
  27089. // SUBA
  27090. OPCODE(0x90E8)
  27091. {
  27092. u32 adr, res;
  27093. u32 src, dst;
  27094. FETCH_SWORD(adr);
  27095. adr += AREG((Opcode >> 0) & 7);
  27096. PRE_IO
  27097. READSX_WORD_F(adr, src)
  27098. dst = AREGu32((Opcode >> 9) & 7);
  27099. res = dst - src;
  27100. AREG((Opcode >> 9) & 7) = res;
  27101. POST_IO
  27102. #ifdef USE_CYCLONE_TIMING
  27103. RET(16)
  27104. #else
  27105. RET(14)
  27106. #endif
  27107. }
  27108. // SUBA
  27109. OPCODE(0x90F0)
  27110. {
  27111. u32 adr, res;
  27112. u32 src, dst;
  27113. adr = AREG((Opcode >> 0) & 7);
  27114. DECODE_EXT_WORD
  27115. PRE_IO
  27116. READSX_WORD_F(adr, src)
  27117. dst = AREGu32((Opcode >> 9) & 7);
  27118. res = dst - src;
  27119. AREG((Opcode >> 9) & 7) = res;
  27120. POST_IO
  27121. #ifdef USE_CYCLONE_TIMING
  27122. RET(18)
  27123. #else
  27124. RET(16)
  27125. #endif
  27126. }
  27127. // SUBA
  27128. OPCODE(0x90F8)
  27129. {
  27130. u32 adr, res;
  27131. u32 src, dst;
  27132. FETCH_SWORD(adr);
  27133. PRE_IO
  27134. READSX_WORD_F(adr, src)
  27135. dst = AREGu32((Opcode >> 9) & 7);
  27136. res = dst - src;
  27137. AREG((Opcode >> 9) & 7) = res;
  27138. POST_IO
  27139. #ifdef USE_CYCLONE_TIMING
  27140. RET(16)
  27141. #else
  27142. RET(14)
  27143. #endif
  27144. }
  27145. // SUBA
  27146. OPCODE(0x90F9)
  27147. {
  27148. u32 adr, res;
  27149. u32 src, dst;
  27150. FETCH_LONG(adr);
  27151. PRE_IO
  27152. READSX_WORD_F(adr, src)
  27153. dst = AREGu32((Opcode >> 9) & 7);
  27154. res = dst - src;
  27155. AREG((Opcode >> 9) & 7) = res;
  27156. POST_IO
  27157. #ifdef USE_CYCLONE_TIMING
  27158. RET(20)
  27159. #else
  27160. RET(18)
  27161. #endif
  27162. }
  27163. // SUBA
  27164. OPCODE(0x90FA)
  27165. {
  27166. u32 adr, res;
  27167. u32 src, dst;
  27168. adr = GET_SWORD + GET_PC;
  27169. PC++;
  27170. PRE_IO
  27171. READSX_WORD_F(adr, src)
  27172. dst = AREGu32((Opcode >> 9) & 7);
  27173. res = dst - src;
  27174. AREG((Opcode >> 9) & 7) = res;
  27175. POST_IO
  27176. #ifdef USE_CYCLONE_TIMING
  27177. RET(16)
  27178. #else
  27179. RET(14)
  27180. #endif
  27181. }
  27182. // SUBA
  27183. OPCODE(0x90FB)
  27184. {
  27185. u32 adr, res;
  27186. u32 src, dst;
  27187. adr = GET_PC;
  27188. DECODE_EXT_WORD
  27189. PRE_IO
  27190. READSX_WORD_F(adr, src)
  27191. dst = AREGu32((Opcode >> 9) & 7);
  27192. res = dst - src;
  27193. AREG((Opcode >> 9) & 7) = res;
  27194. POST_IO
  27195. #ifdef USE_CYCLONE_TIMING
  27196. RET(18)
  27197. #else
  27198. RET(16)
  27199. #endif
  27200. }
  27201. // SUBA
  27202. OPCODE(0x90FC)
  27203. {
  27204. u32 adr, res;
  27205. u32 src, dst;
  27206. FETCH_SWORD(src);
  27207. dst = AREGu32((Opcode >> 9) & 7);
  27208. res = dst - src;
  27209. AREG((Opcode >> 9) & 7) = res;
  27210. RET(12)
  27211. }
  27212. // SUBA
  27213. OPCODE(0x90DF)
  27214. {
  27215. u32 adr, res;
  27216. u32 src, dst;
  27217. adr = AREG(7);
  27218. AREG(7) += 2;
  27219. PRE_IO
  27220. READSX_WORD_F(adr, src)
  27221. dst = AREGu32((Opcode >> 9) & 7);
  27222. res = dst - src;
  27223. AREG((Opcode >> 9) & 7) = res;
  27224. POST_IO
  27225. #ifdef USE_CYCLONE_TIMING
  27226. RET(12)
  27227. #else
  27228. RET(10)
  27229. #endif
  27230. }
  27231. // SUBA
  27232. OPCODE(0x90E7)
  27233. {
  27234. u32 adr, res;
  27235. u32 src, dst;
  27236. adr = AREG(7) - 2;
  27237. AREG(7) = adr;
  27238. PRE_IO
  27239. READSX_WORD_F(adr, src)
  27240. dst = AREGu32((Opcode >> 9) & 7);
  27241. res = dst - src;
  27242. AREG((Opcode >> 9) & 7) = res;
  27243. POST_IO
  27244. #ifdef USE_CYCLONE_TIMING
  27245. RET(14)
  27246. #else
  27247. RET(12)
  27248. #endif
  27249. }
  27250. // SUBA
  27251. OPCODE(0x91C0)
  27252. {
  27253. u32 adr, res;
  27254. u32 src, dst;
  27255. src = (s32)DREGs32((Opcode >> 0) & 7);
  27256. dst = AREGu32((Opcode >> 9) & 7);
  27257. res = dst - src;
  27258. AREG((Opcode >> 9) & 7) = res;
  27259. #ifdef USE_CYCLONE_TIMING
  27260. RET(8)
  27261. #else
  27262. RET(6)
  27263. #endif
  27264. }
  27265. // SUBA
  27266. OPCODE(0x91C8)
  27267. {
  27268. u32 adr, res;
  27269. u32 src, dst;
  27270. src = (s32)AREGs32((Opcode >> 0) & 7);
  27271. dst = AREGu32((Opcode >> 9) & 7);
  27272. res = dst - src;
  27273. AREG((Opcode >> 9) & 7) = res;
  27274. #ifdef USE_CYCLONE_TIMING
  27275. RET(8)
  27276. #else
  27277. RET(6)
  27278. #endif
  27279. }
  27280. // SUBA
  27281. OPCODE(0x91D0)
  27282. {
  27283. u32 adr, res;
  27284. u32 src, dst;
  27285. adr = AREG((Opcode >> 0) & 7);
  27286. PRE_IO
  27287. READSX_LONG_F(adr, src)
  27288. dst = AREGu32((Opcode >> 9) & 7);
  27289. res = dst - src;
  27290. AREG((Opcode >> 9) & 7) = res;
  27291. POST_IO
  27292. RET(14)
  27293. }
  27294. // SUBA
  27295. OPCODE(0x91D8)
  27296. {
  27297. u32 adr, res;
  27298. u32 src, dst;
  27299. adr = AREG((Opcode >> 0) & 7);
  27300. AREG((Opcode >> 0) & 7) += 4;
  27301. PRE_IO
  27302. READSX_LONG_F(adr, src)
  27303. dst = AREGu32((Opcode >> 9) & 7);
  27304. res = dst - src;
  27305. AREG((Opcode >> 9) & 7) = res;
  27306. POST_IO
  27307. RET(14)
  27308. }
  27309. // SUBA
  27310. OPCODE(0x91E0)
  27311. {
  27312. u32 adr, res;
  27313. u32 src, dst;
  27314. adr = AREG((Opcode >> 0) & 7) - 4;
  27315. AREG((Opcode >> 0) & 7) = adr;
  27316. PRE_IO
  27317. READSX_LONG_F(adr, src)
  27318. dst = AREGu32((Opcode >> 9) & 7);
  27319. res = dst - src;
  27320. AREG((Opcode >> 9) & 7) = res;
  27321. POST_IO
  27322. RET(16)
  27323. }
  27324. // SUBA
  27325. OPCODE(0x91E8)
  27326. {
  27327. u32 adr, res;
  27328. u32 src, dst;
  27329. FETCH_SWORD(adr);
  27330. adr += AREG((Opcode >> 0) & 7);
  27331. PRE_IO
  27332. READSX_LONG_F(adr, src)
  27333. dst = AREGu32((Opcode >> 9) & 7);
  27334. res = dst - src;
  27335. AREG((Opcode >> 9) & 7) = res;
  27336. POST_IO
  27337. RET(18)
  27338. }
  27339. // SUBA
  27340. OPCODE(0x91F0)
  27341. {
  27342. u32 adr, res;
  27343. u32 src, dst;
  27344. adr = AREG((Opcode >> 0) & 7);
  27345. DECODE_EXT_WORD
  27346. PRE_IO
  27347. READSX_LONG_F(adr, src)
  27348. dst = AREGu32((Opcode >> 9) & 7);
  27349. res = dst - src;
  27350. AREG((Opcode >> 9) & 7) = res;
  27351. POST_IO
  27352. RET(20)
  27353. }
  27354. // SUBA
  27355. OPCODE(0x91F8)
  27356. {
  27357. u32 adr, res;
  27358. u32 src, dst;
  27359. FETCH_SWORD(adr);
  27360. PRE_IO
  27361. READSX_LONG_F(adr, src)
  27362. dst = AREGu32((Opcode >> 9) & 7);
  27363. res = dst - src;
  27364. AREG((Opcode >> 9) & 7) = res;
  27365. POST_IO
  27366. RET(18)
  27367. }
  27368. // SUBA
  27369. OPCODE(0x91F9)
  27370. {
  27371. u32 adr, res;
  27372. u32 src, dst;
  27373. FETCH_LONG(adr);
  27374. PRE_IO
  27375. READSX_LONG_F(adr, src)
  27376. dst = AREGu32((Opcode >> 9) & 7);
  27377. res = dst - src;
  27378. AREG((Opcode >> 9) & 7) = res;
  27379. POST_IO
  27380. RET(22)
  27381. }
  27382. // SUBA
  27383. OPCODE(0x91FA)
  27384. {
  27385. u32 adr, res;
  27386. u32 src, dst;
  27387. adr = GET_SWORD + GET_PC;
  27388. PC++;
  27389. PRE_IO
  27390. READSX_LONG_F(adr, src)
  27391. dst = AREGu32((Opcode >> 9) & 7);
  27392. res = dst - src;
  27393. AREG((Opcode >> 9) & 7) = res;
  27394. POST_IO
  27395. RET(18)
  27396. }
  27397. // SUBA
  27398. OPCODE(0x91FB)
  27399. {
  27400. u32 adr, res;
  27401. u32 src, dst;
  27402. adr = GET_PC;
  27403. DECODE_EXT_WORD
  27404. PRE_IO
  27405. READSX_LONG_F(adr, src)
  27406. dst = AREGu32((Opcode >> 9) & 7);
  27407. res = dst - src;
  27408. AREG((Opcode >> 9) & 7) = res;
  27409. POST_IO
  27410. RET(20)
  27411. }
  27412. // SUBA
  27413. OPCODE(0x91FC)
  27414. {
  27415. u32 adr, res;
  27416. u32 src, dst;
  27417. FETCH_LONG(src);
  27418. dst = AREGu32((Opcode >> 9) & 7);
  27419. res = dst - src;
  27420. AREG((Opcode >> 9) & 7) = res;
  27421. #ifdef USE_CYCLONE_TIMING
  27422. RET(16)
  27423. #else
  27424. RET(14)
  27425. #endif
  27426. }
  27427. // SUBA
  27428. OPCODE(0x91DF)
  27429. {
  27430. u32 adr, res;
  27431. u32 src, dst;
  27432. adr = AREG(7);
  27433. AREG(7) += 4;
  27434. PRE_IO
  27435. READSX_LONG_F(adr, src)
  27436. dst = AREGu32((Opcode >> 9) & 7);
  27437. res = dst - src;
  27438. AREG((Opcode >> 9) & 7) = res;
  27439. POST_IO
  27440. RET(14)
  27441. }
  27442. // SUBA
  27443. OPCODE(0x91E7)
  27444. {
  27445. u32 adr, res;
  27446. u32 src, dst;
  27447. adr = AREG(7) - 4;
  27448. AREG(7) = adr;
  27449. PRE_IO
  27450. READSX_LONG_F(adr, src)
  27451. dst = AREGu32((Opcode >> 9) & 7);
  27452. res = dst - src;
  27453. AREG((Opcode >> 9) & 7) = res;
  27454. POST_IO
  27455. RET(16)
  27456. }
  27457. // CMP
  27458. OPCODE(0xB000)
  27459. {
  27460. u32 adr, res;
  27461. u32 src, dst;
  27462. src = DREGu8((Opcode >> 0) & 7);
  27463. dst = DREGu8((Opcode >> 9) & 7);
  27464. res = dst - src;
  27465. flag_N = flag_C = res;
  27466. flag_V = (src ^ dst) & (res ^ dst);
  27467. flag_NotZ = res & 0xFF;
  27468. RET(4)
  27469. }
  27470. // CMP
  27471. #if 0
  27472. OPCODE(0xB008)
  27473. {
  27474. u32 adr, res;
  27475. u32 src, dst;
  27476. // can't read byte from Ax registers !
  27477. ctx->execinfo |= M68K_FAULTED;
  27478. ctx->io_cycle_counter = 0;
  27479. /*
  27480. goto famec_Exec_End;
  27481. dst = DREGu8((Opcode >> 9) & 7);
  27482. res = dst - src;
  27483. flag_N = flag_C = res;
  27484. flag_V = (src ^ dst) & (res ^ dst);
  27485. flag_NotZ = res & 0xFF;
  27486. */
  27487. RET(4)
  27488. }
  27489. #endif
  27490. // CMP
  27491. OPCODE(0xB010)
  27492. {
  27493. u32 adr, res;
  27494. u32 src, dst;
  27495. adr = AREG((Opcode >> 0) & 7);
  27496. PRE_IO
  27497. READ_BYTE_F(adr, src)
  27498. dst = DREGu8((Opcode >> 9) & 7);
  27499. res = dst - src;
  27500. flag_N = flag_C = res;
  27501. flag_V = (src ^ dst) & (res ^ dst);
  27502. flag_NotZ = res & 0xFF;
  27503. POST_IO
  27504. RET(8)
  27505. }
  27506. // CMP
  27507. OPCODE(0xB018)
  27508. {
  27509. u32 adr, res;
  27510. u32 src, dst;
  27511. adr = AREG((Opcode >> 0) & 7);
  27512. AREG((Opcode >> 0) & 7) += 1;
  27513. PRE_IO
  27514. READ_BYTE_F(adr, src)
  27515. dst = DREGu8((Opcode >> 9) & 7);
  27516. res = dst - src;
  27517. flag_N = flag_C = res;
  27518. flag_V = (src ^ dst) & (res ^ dst);
  27519. flag_NotZ = res & 0xFF;
  27520. POST_IO
  27521. RET(8)
  27522. }
  27523. // CMP
  27524. OPCODE(0xB020)
  27525. {
  27526. u32 adr, res;
  27527. u32 src, dst;
  27528. adr = AREG((Opcode >> 0) & 7) - 1;
  27529. AREG((Opcode >> 0) & 7) = adr;
  27530. PRE_IO
  27531. READ_BYTE_F(adr, src)
  27532. dst = DREGu8((Opcode >> 9) & 7);
  27533. res = dst - src;
  27534. flag_N = flag_C = res;
  27535. flag_V = (src ^ dst) & (res ^ dst);
  27536. flag_NotZ = res & 0xFF;
  27537. POST_IO
  27538. RET(10)
  27539. }
  27540. // CMP
  27541. OPCODE(0xB028)
  27542. {
  27543. u32 adr, res;
  27544. u32 src, dst;
  27545. FETCH_SWORD(adr);
  27546. adr += AREG((Opcode >> 0) & 7);
  27547. PRE_IO
  27548. READ_BYTE_F(adr, src)
  27549. dst = DREGu8((Opcode >> 9) & 7);
  27550. res = dst - src;
  27551. flag_N = flag_C = res;
  27552. flag_V = (src ^ dst) & (res ^ dst);
  27553. flag_NotZ = res & 0xFF;
  27554. POST_IO
  27555. RET(12)
  27556. }
  27557. // CMP
  27558. OPCODE(0xB030)
  27559. {
  27560. u32 adr, res;
  27561. u32 src, dst;
  27562. adr = AREG((Opcode >> 0) & 7);
  27563. DECODE_EXT_WORD
  27564. PRE_IO
  27565. READ_BYTE_F(adr, src)
  27566. dst = DREGu8((Opcode >> 9) & 7);
  27567. res = dst - src;
  27568. flag_N = flag_C = res;
  27569. flag_V = (src ^ dst) & (res ^ dst);
  27570. flag_NotZ = res & 0xFF;
  27571. POST_IO
  27572. RET(14)
  27573. }
  27574. // CMP
  27575. OPCODE(0xB038)
  27576. {
  27577. u32 adr, res;
  27578. u32 src, dst;
  27579. FETCH_SWORD(adr);
  27580. PRE_IO
  27581. READ_BYTE_F(adr, src)
  27582. dst = DREGu8((Opcode >> 9) & 7);
  27583. res = dst - src;
  27584. flag_N = flag_C = res;
  27585. flag_V = (src ^ dst) & (res ^ dst);
  27586. flag_NotZ = res & 0xFF;
  27587. POST_IO
  27588. RET(12)
  27589. }
  27590. // CMP
  27591. OPCODE(0xB039)
  27592. {
  27593. u32 adr, res;
  27594. u32 src, dst;
  27595. FETCH_LONG(adr);
  27596. PRE_IO
  27597. READ_BYTE_F(adr, src)
  27598. dst = DREGu8((Opcode >> 9) & 7);
  27599. res = dst - src;
  27600. flag_N = flag_C = res;
  27601. flag_V = (src ^ dst) & (res ^ dst);
  27602. flag_NotZ = res & 0xFF;
  27603. POST_IO
  27604. RET(16)
  27605. }
  27606. // CMP
  27607. OPCODE(0xB03A)
  27608. {
  27609. u32 adr, res;
  27610. u32 src, dst;
  27611. adr = GET_SWORD + GET_PC;
  27612. PC++;
  27613. PRE_IO
  27614. READ_BYTE_F(adr, src)
  27615. dst = DREGu8((Opcode >> 9) & 7);
  27616. res = dst - src;
  27617. flag_N = flag_C = res;
  27618. flag_V = (src ^ dst) & (res ^ dst);
  27619. flag_NotZ = res & 0xFF;
  27620. POST_IO
  27621. RET(12)
  27622. }
  27623. // CMP
  27624. OPCODE(0xB03B)
  27625. {
  27626. u32 adr, res;
  27627. u32 src, dst;
  27628. adr = GET_PC;
  27629. DECODE_EXT_WORD
  27630. PRE_IO
  27631. READ_BYTE_F(adr, src)
  27632. dst = DREGu8((Opcode >> 9) & 7);
  27633. res = dst - src;
  27634. flag_N = flag_C = res;
  27635. flag_V = (src ^ dst) & (res ^ dst);
  27636. flag_NotZ = res & 0xFF;
  27637. POST_IO
  27638. RET(14)
  27639. }
  27640. // CMP
  27641. OPCODE(0xB03C)
  27642. {
  27643. u32 adr, res;
  27644. u32 src, dst;
  27645. FETCH_BYTE(src);
  27646. dst = DREGu8((Opcode >> 9) & 7);
  27647. res = dst - src;
  27648. flag_N = flag_C = res;
  27649. flag_V = (src ^ dst) & (res ^ dst);
  27650. flag_NotZ = res & 0xFF;
  27651. RET(8)
  27652. }
  27653. // CMP
  27654. OPCODE(0xB01F)
  27655. {
  27656. u32 adr, res;
  27657. u32 src, dst;
  27658. adr = AREG(7);
  27659. AREG(7) += 2;
  27660. PRE_IO
  27661. READ_BYTE_F(adr, src)
  27662. dst = DREGu8((Opcode >> 9) & 7);
  27663. res = dst - src;
  27664. flag_N = flag_C = res;
  27665. flag_V = (src ^ dst) & (res ^ dst);
  27666. flag_NotZ = res & 0xFF;
  27667. POST_IO
  27668. RET(8)
  27669. }
  27670. // CMP
  27671. OPCODE(0xB027)
  27672. {
  27673. u32 adr, res;
  27674. u32 src, dst;
  27675. adr = AREG(7) - 2;
  27676. AREG(7) = adr;
  27677. PRE_IO
  27678. READ_BYTE_F(adr, src)
  27679. dst = DREGu8((Opcode >> 9) & 7);
  27680. res = dst - src;
  27681. flag_N = flag_C = res;
  27682. flag_V = (src ^ dst) & (res ^ dst);
  27683. flag_NotZ = res & 0xFF;
  27684. POST_IO
  27685. RET(10)
  27686. }
  27687. // CMP
  27688. OPCODE(0xB040)
  27689. {
  27690. u32 adr, res;
  27691. u32 src, dst;
  27692. src = DREGu16((Opcode >> 0) & 7);
  27693. dst = DREGu16((Opcode >> 9) & 7);
  27694. res = dst - src;
  27695. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  27696. flag_N = flag_C = res >> 8;
  27697. flag_NotZ = res & 0xFFFF;
  27698. RET(4)
  27699. }
  27700. // CMP
  27701. OPCODE(0xB048)
  27702. {
  27703. u32 adr, res;
  27704. u32 src, dst;
  27705. src = AREGu16((Opcode >> 0) & 7);
  27706. dst = DREGu16((Opcode >> 9) & 7);
  27707. res = dst - src;
  27708. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  27709. flag_N = flag_C = res >> 8;
  27710. flag_NotZ = res & 0xFFFF;
  27711. RET(4)
  27712. }
  27713. // CMP
  27714. OPCODE(0xB050)
  27715. {
  27716. u32 adr, res;
  27717. u32 src, dst;
  27718. adr = AREG((Opcode >> 0) & 7);
  27719. PRE_IO
  27720. READ_WORD_F(adr, src)
  27721. dst = DREGu16((Opcode >> 9) & 7);
  27722. res = dst - src;
  27723. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  27724. flag_N = flag_C = res >> 8;
  27725. flag_NotZ = res & 0xFFFF;
  27726. POST_IO
  27727. RET(8)
  27728. }
  27729. // CMP
  27730. OPCODE(0xB058)
  27731. {
  27732. u32 adr, res;
  27733. u32 src, dst;
  27734. adr = AREG((Opcode >> 0) & 7);
  27735. AREG((Opcode >> 0) & 7) += 2;
  27736. PRE_IO
  27737. READ_WORD_F(adr, src)
  27738. dst = DREGu16((Opcode >> 9) & 7);
  27739. res = dst - src;
  27740. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  27741. flag_N = flag_C = res >> 8;
  27742. flag_NotZ = res & 0xFFFF;
  27743. POST_IO
  27744. RET(8)
  27745. }
  27746. // CMP
  27747. OPCODE(0xB060)
  27748. {
  27749. u32 adr, res;
  27750. u32 src, dst;
  27751. adr = AREG((Opcode >> 0) & 7) - 2;
  27752. AREG((Opcode >> 0) & 7) = adr;
  27753. PRE_IO
  27754. READ_WORD_F(adr, src)
  27755. dst = DREGu16((Opcode >> 9) & 7);
  27756. res = dst - src;
  27757. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  27758. flag_N = flag_C = res >> 8;
  27759. flag_NotZ = res & 0xFFFF;
  27760. POST_IO
  27761. RET(10)
  27762. }
  27763. // CMP
  27764. OPCODE(0xB068)
  27765. {
  27766. u32 adr, res;
  27767. u32 src, dst;
  27768. FETCH_SWORD(adr);
  27769. adr += AREG((Opcode >> 0) & 7);
  27770. PRE_IO
  27771. READ_WORD_F(adr, src)
  27772. dst = DREGu16((Opcode >> 9) & 7);
  27773. res = dst - src;
  27774. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  27775. flag_N = flag_C = res >> 8;
  27776. flag_NotZ = res & 0xFFFF;
  27777. POST_IO
  27778. RET(12)
  27779. }
  27780. // CMP
  27781. OPCODE(0xB070)
  27782. {
  27783. u32 adr, res;
  27784. u32 src, dst;
  27785. adr = AREG((Opcode >> 0) & 7);
  27786. DECODE_EXT_WORD
  27787. PRE_IO
  27788. READ_WORD_F(adr, src)
  27789. dst = DREGu16((Opcode >> 9) & 7);
  27790. res = dst - src;
  27791. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  27792. flag_N = flag_C = res >> 8;
  27793. flag_NotZ = res & 0xFFFF;
  27794. POST_IO
  27795. RET(14)
  27796. }
  27797. // CMP
  27798. OPCODE(0xB078)
  27799. {
  27800. u32 adr, res;
  27801. u32 src, dst;
  27802. FETCH_SWORD(adr);
  27803. PRE_IO
  27804. READ_WORD_F(adr, src)
  27805. dst = DREGu16((Opcode >> 9) & 7);
  27806. res = dst - src;
  27807. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  27808. flag_N = flag_C = res >> 8;
  27809. flag_NotZ = res & 0xFFFF;
  27810. POST_IO
  27811. RET(12)
  27812. }
  27813. // CMP
  27814. OPCODE(0xB079)
  27815. {
  27816. u32 adr, res;
  27817. u32 src, dst;
  27818. FETCH_LONG(adr);
  27819. PRE_IO
  27820. READ_WORD_F(adr, src)
  27821. dst = DREGu16((Opcode >> 9) & 7);
  27822. res = dst - src;
  27823. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  27824. flag_N = flag_C = res >> 8;
  27825. flag_NotZ = res & 0xFFFF;
  27826. POST_IO
  27827. RET(16)
  27828. }
  27829. // CMP
  27830. OPCODE(0xB07A)
  27831. {
  27832. u32 adr, res;
  27833. u32 src, dst;
  27834. adr = GET_SWORD + GET_PC;
  27835. PC++;
  27836. PRE_IO
  27837. READ_WORD_F(adr, src)
  27838. dst = DREGu16((Opcode >> 9) & 7);
  27839. res = dst - src;
  27840. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  27841. flag_N = flag_C = res >> 8;
  27842. flag_NotZ = res & 0xFFFF;
  27843. POST_IO
  27844. RET(12)
  27845. }
  27846. // CMP
  27847. OPCODE(0xB07B)
  27848. {
  27849. u32 adr, res;
  27850. u32 src, dst;
  27851. adr = GET_PC;
  27852. DECODE_EXT_WORD
  27853. PRE_IO
  27854. READ_WORD_F(adr, src)
  27855. dst = DREGu16((Opcode >> 9) & 7);
  27856. res = dst - src;
  27857. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  27858. flag_N = flag_C = res >> 8;
  27859. flag_NotZ = res & 0xFFFF;
  27860. POST_IO
  27861. RET(14)
  27862. }
  27863. // CMP
  27864. OPCODE(0xB07C)
  27865. {
  27866. u32 adr, res;
  27867. u32 src, dst;
  27868. FETCH_WORD(src);
  27869. dst = DREGu16((Opcode >> 9) & 7);
  27870. res = dst - src;
  27871. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  27872. flag_N = flag_C = res >> 8;
  27873. flag_NotZ = res & 0xFFFF;
  27874. RET(8)
  27875. }
  27876. // CMP
  27877. OPCODE(0xB05F)
  27878. {
  27879. u32 adr, res;
  27880. u32 src, dst;
  27881. adr = AREG(7);
  27882. AREG(7) += 2;
  27883. PRE_IO
  27884. READ_WORD_F(adr, src)
  27885. dst = DREGu16((Opcode >> 9) & 7);
  27886. res = dst - src;
  27887. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  27888. flag_N = flag_C = res >> 8;
  27889. flag_NotZ = res & 0xFFFF;
  27890. POST_IO
  27891. RET(8)
  27892. }
  27893. // CMP
  27894. OPCODE(0xB067)
  27895. {
  27896. u32 adr, res;
  27897. u32 src, dst;
  27898. adr = AREG(7) - 2;
  27899. AREG(7) = adr;
  27900. PRE_IO
  27901. READ_WORD_F(adr, src)
  27902. dst = DREGu16((Opcode >> 9) & 7);
  27903. res = dst - src;
  27904. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  27905. flag_N = flag_C = res >> 8;
  27906. flag_NotZ = res & 0xFFFF;
  27907. POST_IO
  27908. RET(10)
  27909. }
  27910. // CMP
  27911. OPCODE(0xB080)
  27912. {
  27913. u32 adr, res;
  27914. u32 src, dst;
  27915. src = DREGu32((Opcode >> 0) & 7);
  27916. dst = DREGu32((Opcode >> 9) & 7);
  27917. res = dst - src;
  27918. flag_NotZ = res;
  27919. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  27920. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  27921. flag_N = res >> 24;
  27922. RET(6)
  27923. }
  27924. // CMP
  27925. OPCODE(0xB088)
  27926. {
  27927. u32 adr, res;
  27928. u32 src, dst;
  27929. src = AREGu32((Opcode >> 0) & 7);
  27930. dst = DREGu32((Opcode >> 9) & 7);
  27931. res = dst - src;
  27932. flag_NotZ = res;
  27933. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  27934. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  27935. flag_N = res >> 24;
  27936. RET(6)
  27937. }
  27938. // CMP
  27939. OPCODE(0xB090)
  27940. {
  27941. u32 adr, res;
  27942. u32 src, dst;
  27943. adr = AREG((Opcode >> 0) & 7);
  27944. PRE_IO
  27945. READ_LONG_F(adr, src)
  27946. dst = DREGu32((Opcode >> 9) & 7);
  27947. res = dst - src;
  27948. flag_NotZ = res;
  27949. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  27950. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  27951. flag_N = res >> 24;
  27952. POST_IO
  27953. RET(14)
  27954. }
  27955. // CMP
  27956. OPCODE(0xB098)
  27957. {
  27958. u32 adr, res;
  27959. u32 src, dst;
  27960. adr = AREG((Opcode >> 0) & 7);
  27961. AREG((Opcode >> 0) & 7) += 4;
  27962. PRE_IO
  27963. READ_LONG_F(adr, src)
  27964. dst = DREGu32((Opcode >> 9) & 7);
  27965. res = dst - src;
  27966. flag_NotZ = res;
  27967. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  27968. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  27969. flag_N = res >> 24;
  27970. POST_IO
  27971. RET(14)
  27972. }
  27973. // CMP
  27974. OPCODE(0xB0A0)
  27975. {
  27976. u32 adr, res;
  27977. u32 src, dst;
  27978. adr = AREG((Opcode >> 0) & 7) - 4;
  27979. AREG((Opcode >> 0) & 7) = adr;
  27980. PRE_IO
  27981. READ_LONG_F(adr, src)
  27982. dst = DREGu32((Opcode >> 9) & 7);
  27983. res = dst - src;
  27984. flag_NotZ = res;
  27985. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  27986. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  27987. flag_N = res >> 24;
  27988. POST_IO
  27989. RET(16)
  27990. }
  27991. // CMP
  27992. OPCODE(0xB0A8)
  27993. {
  27994. u32 adr, res;
  27995. u32 src, dst;
  27996. FETCH_SWORD(adr);
  27997. adr += AREG((Opcode >> 0) & 7);
  27998. PRE_IO
  27999. READ_LONG_F(adr, src)
  28000. dst = DREGu32((Opcode >> 9) & 7);
  28001. res = dst - src;
  28002. flag_NotZ = res;
  28003. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  28004. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  28005. flag_N = res >> 24;
  28006. POST_IO
  28007. RET(18)
  28008. }
  28009. // CMP
  28010. OPCODE(0xB0B0)
  28011. {
  28012. u32 adr, res;
  28013. u32 src, dst;
  28014. adr = AREG((Opcode >> 0) & 7);
  28015. DECODE_EXT_WORD
  28016. PRE_IO
  28017. READ_LONG_F(adr, src)
  28018. dst = DREGu32((Opcode >> 9) & 7);
  28019. res = dst - src;
  28020. flag_NotZ = res;
  28021. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  28022. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  28023. flag_N = res >> 24;
  28024. POST_IO
  28025. RET(20)
  28026. }
  28027. // CMP
  28028. OPCODE(0xB0B8)
  28029. {
  28030. u32 adr, res;
  28031. u32 src, dst;
  28032. FETCH_SWORD(adr);
  28033. PRE_IO
  28034. READ_LONG_F(adr, src)
  28035. dst = DREGu32((Opcode >> 9) & 7);
  28036. res = dst - src;
  28037. flag_NotZ = res;
  28038. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  28039. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  28040. flag_N = res >> 24;
  28041. POST_IO
  28042. RET(18)
  28043. }
  28044. // CMP
  28045. OPCODE(0xB0B9)
  28046. {
  28047. u32 adr, res;
  28048. u32 src, dst;
  28049. FETCH_LONG(adr);
  28050. PRE_IO
  28051. READ_LONG_F(adr, src)
  28052. dst = DREGu32((Opcode >> 9) & 7);
  28053. res = dst - src;
  28054. flag_NotZ = res;
  28055. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  28056. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  28057. flag_N = res >> 24;
  28058. POST_IO
  28059. RET(22)
  28060. }
  28061. // CMP
  28062. OPCODE(0xB0BA)
  28063. {
  28064. u32 adr, res;
  28065. u32 src, dst;
  28066. adr = GET_SWORD + GET_PC;
  28067. PC++;
  28068. PRE_IO
  28069. READ_LONG_F(adr, src)
  28070. dst = DREGu32((Opcode >> 9) & 7);
  28071. res = dst - src;
  28072. flag_NotZ = res;
  28073. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  28074. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  28075. flag_N = res >> 24;
  28076. POST_IO
  28077. RET(18)
  28078. }
  28079. // CMP
  28080. OPCODE(0xB0BB)
  28081. {
  28082. u32 adr, res;
  28083. u32 src, dst;
  28084. adr = GET_PC;
  28085. DECODE_EXT_WORD
  28086. PRE_IO
  28087. READ_LONG_F(adr, src)
  28088. dst = DREGu32((Opcode >> 9) & 7);
  28089. res = dst - src;
  28090. flag_NotZ = res;
  28091. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  28092. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  28093. flag_N = res >> 24;
  28094. POST_IO
  28095. RET(20)
  28096. }
  28097. // CMP
  28098. OPCODE(0xB0BC)
  28099. {
  28100. u32 adr, res;
  28101. u32 src, dst;
  28102. FETCH_LONG(src);
  28103. dst = DREGu32((Opcode >> 9) & 7);
  28104. res = dst - src;
  28105. flag_NotZ = res;
  28106. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  28107. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  28108. flag_N = res >> 24;
  28109. RET(14)
  28110. }
  28111. // CMP
  28112. OPCODE(0xB09F)
  28113. {
  28114. u32 adr, res;
  28115. u32 src, dst;
  28116. adr = AREG(7);
  28117. AREG(7) += 4;
  28118. PRE_IO
  28119. READ_LONG_F(adr, src)
  28120. dst = DREGu32((Opcode >> 9) & 7);
  28121. res = dst - src;
  28122. flag_NotZ = res;
  28123. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  28124. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  28125. flag_N = res >> 24;
  28126. POST_IO
  28127. RET(14)
  28128. }
  28129. // CMP
  28130. OPCODE(0xB0A7)
  28131. {
  28132. u32 adr, res;
  28133. u32 src, dst;
  28134. adr = AREG(7) - 4;
  28135. AREG(7) = adr;
  28136. PRE_IO
  28137. READ_LONG_F(adr, src)
  28138. dst = DREGu32((Opcode >> 9) & 7);
  28139. res = dst - src;
  28140. flag_NotZ = res;
  28141. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  28142. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  28143. flag_N = res >> 24;
  28144. POST_IO
  28145. RET(16)
  28146. }
  28147. // CMPM
  28148. OPCODE(0xB108)
  28149. {
  28150. u32 adr, res;
  28151. u32 src, dst;
  28152. adr = AREG((Opcode >> 0) & 7);
  28153. AREG((Opcode >> 0) & 7) += 1;
  28154. PRE_IO
  28155. READ_BYTE_F(adr, src)
  28156. adr = AREG((Opcode >> 9) & 7);
  28157. AREG((Opcode >> 9) & 7) += 1;
  28158. READ_BYTE_F(adr, dst)
  28159. res = dst - src;
  28160. flag_N = flag_C = res;
  28161. flag_V = (src ^ dst) & (res ^ dst);
  28162. flag_NotZ = res & 0xFF;
  28163. POST_IO
  28164. RET(12)
  28165. }
  28166. // CMPM
  28167. OPCODE(0xB148)
  28168. {
  28169. u32 adr, res;
  28170. u32 src, dst;
  28171. adr = AREG((Opcode >> 0) & 7);
  28172. AREG((Opcode >> 0) & 7) += 2;
  28173. PRE_IO
  28174. READ_WORD_F(adr, src)
  28175. adr = AREG((Opcode >> 9) & 7);
  28176. AREG((Opcode >> 9) & 7) += 2;
  28177. READ_WORD_F(adr, dst)
  28178. res = dst - src;
  28179. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  28180. flag_N = flag_C = res >> 8;
  28181. flag_NotZ = res & 0xFFFF;
  28182. POST_IO
  28183. RET(12)
  28184. }
  28185. // CMPM
  28186. OPCODE(0xB188)
  28187. {
  28188. u32 adr, res;
  28189. u32 src, dst;
  28190. adr = AREG((Opcode >> 0) & 7);
  28191. AREG((Opcode >> 0) & 7) += 4;
  28192. PRE_IO
  28193. READ_LONG_F(adr, src)
  28194. adr = AREG((Opcode >> 9) & 7);
  28195. AREG((Opcode >> 9) & 7) += 4;
  28196. READ_LONG_F(adr, dst)
  28197. res = dst - src;
  28198. flag_NotZ = res;
  28199. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  28200. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  28201. flag_N = res >> 24;
  28202. POST_IO
  28203. RET(20)
  28204. }
  28205. // CMP7M
  28206. OPCODE(0xB10F)
  28207. {
  28208. u32 adr, res;
  28209. u32 src, dst;
  28210. adr = AREG(7);
  28211. AREG(7) += 2;
  28212. PRE_IO
  28213. READ_BYTE_F(adr, src)
  28214. adr = AREG((Opcode >> 9) & 7);
  28215. AREG((Opcode >> 9) & 7) += 1;
  28216. READ_BYTE_F(adr, dst)
  28217. res = dst - src;
  28218. flag_N = flag_C = res;
  28219. flag_V = (src ^ dst) & (res ^ dst);
  28220. flag_NotZ = res & 0xFF;
  28221. POST_IO
  28222. RET(12)
  28223. }
  28224. // CMP7M
  28225. OPCODE(0xB14F)
  28226. {
  28227. u32 adr, res;
  28228. u32 src, dst;
  28229. adr = AREG(7);
  28230. AREG(7) += 2;
  28231. PRE_IO
  28232. READ_WORD_F(adr, src)
  28233. adr = AREG((Opcode >> 9) & 7);
  28234. AREG((Opcode >> 9) & 7) += 2;
  28235. READ_WORD_F(adr, dst)
  28236. res = dst - src;
  28237. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  28238. flag_N = flag_C = res >> 8;
  28239. flag_NotZ = res & 0xFFFF;
  28240. POST_IO
  28241. RET(12)
  28242. }
  28243. // CMP7M
  28244. OPCODE(0xB18F)
  28245. {
  28246. u32 adr, res;
  28247. u32 src, dst;
  28248. adr = AREG(7);
  28249. AREG(7) += 4;
  28250. PRE_IO
  28251. READ_LONG_F(adr, src)
  28252. adr = AREG((Opcode >> 9) & 7);
  28253. AREG((Opcode >> 9) & 7) += 4;
  28254. READ_LONG_F(adr, dst)
  28255. res = dst - src;
  28256. flag_NotZ = res;
  28257. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  28258. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  28259. flag_N = res >> 24;
  28260. POST_IO
  28261. RET(20)
  28262. }
  28263. // CMPM7
  28264. OPCODE(0xBF08)
  28265. {
  28266. u32 adr, res;
  28267. u32 src, dst;
  28268. adr = AREG((Opcode >> 0) & 7);
  28269. AREG((Opcode >> 0) & 7) += 1;
  28270. PRE_IO
  28271. READ_BYTE_F(adr, src)
  28272. adr = AREG(7);
  28273. AREG(7) += 2;
  28274. READ_BYTE_F(adr, dst)
  28275. res = dst - src;
  28276. flag_N = flag_C = res;
  28277. flag_V = (src ^ dst) & (res ^ dst);
  28278. flag_NotZ = res & 0xFF;
  28279. POST_IO
  28280. RET(12)
  28281. }
  28282. // CMPM7
  28283. OPCODE(0xBF48)
  28284. {
  28285. u32 adr, res;
  28286. u32 src, dst;
  28287. adr = AREG((Opcode >> 0) & 7);
  28288. AREG((Opcode >> 0) & 7) += 2;
  28289. PRE_IO
  28290. READ_WORD_F(adr, src)
  28291. adr = AREG(7);
  28292. AREG(7) += 2;
  28293. READ_WORD_F(adr, dst)
  28294. res = dst - src;
  28295. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  28296. flag_N = flag_C = res >> 8;
  28297. flag_NotZ = res & 0xFFFF;
  28298. POST_IO
  28299. RET(12)
  28300. }
  28301. // CMPM7
  28302. OPCODE(0xBF88)
  28303. {
  28304. u32 adr, res;
  28305. u32 src, dst;
  28306. adr = AREG((Opcode >> 0) & 7);
  28307. AREG((Opcode >> 0) & 7) += 4;
  28308. PRE_IO
  28309. READ_LONG_F(adr, src)
  28310. adr = AREG(7);
  28311. AREG(7) += 4;
  28312. READ_LONG_F(adr, dst)
  28313. res = dst - src;
  28314. flag_NotZ = res;
  28315. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  28316. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  28317. flag_N = res >> 24;
  28318. POST_IO
  28319. RET(20)
  28320. }
  28321. // CMP7M7
  28322. OPCODE(0xBF0F)
  28323. {
  28324. u32 adr, res;
  28325. u32 src, dst;
  28326. adr = AREG(7);
  28327. AREG(7) += 2;
  28328. PRE_IO
  28329. READ_BYTE_F(adr, src)
  28330. adr = AREG(7);
  28331. AREG(7) += 2;
  28332. READ_BYTE_F(adr, dst)
  28333. res = dst - src;
  28334. flag_N = flag_C = res;
  28335. flag_V = (src ^ dst) & (res ^ dst);
  28336. flag_NotZ = res & 0xFF;
  28337. POST_IO
  28338. RET(12)
  28339. }
  28340. // CMP7M7
  28341. OPCODE(0xBF4F)
  28342. {
  28343. u32 adr, res;
  28344. u32 src, dst;
  28345. adr = AREG(7);
  28346. AREG(7) += 2;
  28347. PRE_IO
  28348. READ_WORD_F(adr, src)
  28349. adr = AREG(7);
  28350. AREG(7) += 2;
  28351. READ_WORD_F(adr, dst)
  28352. res = dst - src;
  28353. flag_V = ((src ^ dst) & (res ^ dst)) >> 8;
  28354. flag_N = flag_C = res >> 8;
  28355. flag_NotZ = res & 0xFFFF;
  28356. POST_IO
  28357. RET(12)
  28358. }
  28359. // CMP7M7
  28360. OPCODE(0xBF8F)
  28361. {
  28362. u32 adr, res;
  28363. u32 src, dst;
  28364. adr = AREG(7);
  28365. AREG(7) += 4;
  28366. PRE_IO
  28367. READ_LONG_F(adr, src)
  28368. adr = AREG(7);
  28369. AREG(7) += 4;
  28370. READ_LONG_F(adr, dst)
  28371. res = dst - src;
  28372. flag_NotZ = res;
  28373. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  28374. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  28375. flag_N = res >> 24;
  28376. POST_IO
  28377. RET(20)
  28378. }
  28379. // EORDa
  28380. OPCODE(0xB100)
  28381. {
  28382. u32 adr, res;
  28383. u32 src, dst;
  28384. src = DREGu8((Opcode >> 9) & 7);
  28385. res = DREGu8((Opcode >> 0) & 7);
  28386. res ^= src;
  28387. flag_C = 0;
  28388. flag_V = 0;
  28389. flag_NotZ = res;
  28390. flag_N = res;
  28391. DREGu8((Opcode >> 0) & 7) = res;
  28392. RET(4)
  28393. }
  28394. // EORDa
  28395. OPCODE(0xB110)
  28396. {
  28397. u32 adr, res;
  28398. u32 src, dst;
  28399. src = DREGu8((Opcode >> 9) & 7);
  28400. adr = AREG((Opcode >> 0) & 7);
  28401. PRE_IO
  28402. READ_BYTE_F(adr, res)
  28403. res ^= src;
  28404. flag_C = 0;
  28405. flag_V = 0;
  28406. flag_NotZ = res;
  28407. flag_N = res;
  28408. WRITE_BYTE_F(adr, res)
  28409. POST_IO
  28410. RET(12)
  28411. }
  28412. // EORDa
  28413. OPCODE(0xB118)
  28414. {
  28415. u32 adr, res;
  28416. u32 src, dst;
  28417. src = DREGu8((Opcode >> 9) & 7);
  28418. adr = AREG((Opcode >> 0) & 7);
  28419. AREG((Opcode >> 0) & 7) += 1;
  28420. PRE_IO
  28421. READ_BYTE_F(adr, res)
  28422. res ^= src;
  28423. flag_C = 0;
  28424. flag_V = 0;
  28425. flag_NotZ = res;
  28426. flag_N = res;
  28427. WRITE_BYTE_F(adr, res)
  28428. POST_IO
  28429. RET(12)
  28430. }
  28431. // EORDa
  28432. OPCODE(0xB120)
  28433. {
  28434. u32 adr, res;
  28435. u32 src, dst;
  28436. src = DREGu8((Opcode >> 9) & 7);
  28437. adr = AREG((Opcode >> 0) & 7) - 1;
  28438. AREG((Opcode >> 0) & 7) = adr;
  28439. PRE_IO
  28440. READ_BYTE_F(adr, res)
  28441. res ^= src;
  28442. flag_C = 0;
  28443. flag_V = 0;
  28444. flag_NotZ = res;
  28445. flag_N = res;
  28446. WRITE_BYTE_F(adr, res)
  28447. POST_IO
  28448. RET(14)
  28449. }
  28450. // EORDa
  28451. OPCODE(0xB128)
  28452. {
  28453. u32 adr, res;
  28454. u32 src, dst;
  28455. src = DREGu8((Opcode >> 9) & 7);
  28456. FETCH_SWORD(adr);
  28457. adr += AREG((Opcode >> 0) & 7);
  28458. PRE_IO
  28459. READ_BYTE_F(adr, res)
  28460. res ^= src;
  28461. flag_C = 0;
  28462. flag_V = 0;
  28463. flag_NotZ = res;
  28464. flag_N = res;
  28465. WRITE_BYTE_F(adr, res)
  28466. POST_IO
  28467. RET(16)
  28468. }
  28469. // EORDa
  28470. OPCODE(0xB130)
  28471. {
  28472. u32 adr, res;
  28473. u32 src, dst;
  28474. src = DREGu8((Opcode >> 9) & 7);
  28475. adr = AREG((Opcode >> 0) & 7);
  28476. DECODE_EXT_WORD
  28477. PRE_IO
  28478. READ_BYTE_F(adr, res)
  28479. res ^= src;
  28480. flag_C = 0;
  28481. flag_V = 0;
  28482. flag_NotZ = res;
  28483. flag_N = res;
  28484. WRITE_BYTE_F(adr, res)
  28485. POST_IO
  28486. RET(18)
  28487. }
  28488. // EORDa
  28489. OPCODE(0xB138)
  28490. {
  28491. u32 adr, res;
  28492. u32 src, dst;
  28493. src = DREGu8((Opcode >> 9) & 7);
  28494. FETCH_SWORD(adr);
  28495. PRE_IO
  28496. READ_BYTE_F(adr, res)
  28497. res ^= src;
  28498. flag_C = 0;
  28499. flag_V = 0;
  28500. flag_NotZ = res;
  28501. flag_N = res;
  28502. WRITE_BYTE_F(adr, res)
  28503. POST_IO
  28504. RET(16)
  28505. }
  28506. // EORDa
  28507. OPCODE(0xB139)
  28508. {
  28509. u32 adr, res;
  28510. u32 src, dst;
  28511. src = DREGu8((Opcode >> 9) & 7);
  28512. FETCH_LONG(adr);
  28513. PRE_IO
  28514. READ_BYTE_F(adr, res)
  28515. res ^= src;
  28516. flag_C = 0;
  28517. flag_V = 0;
  28518. flag_NotZ = res;
  28519. flag_N = res;
  28520. WRITE_BYTE_F(adr, res)
  28521. POST_IO
  28522. RET(20)
  28523. }
  28524. // EORDa
  28525. OPCODE(0xB11F)
  28526. {
  28527. u32 adr, res;
  28528. u32 src, dst;
  28529. src = DREGu8((Opcode >> 9) & 7);
  28530. adr = AREG(7);
  28531. AREG(7) += 2;
  28532. PRE_IO
  28533. READ_BYTE_F(adr, res)
  28534. res ^= src;
  28535. flag_C = 0;
  28536. flag_V = 0;
  28537. flag_NotZ = res;
  28538. flag_N = res;
  28539. WRITE_BYTE_F(adr, res)
  28540. POST_IO
  28541. RET(12)
  28542. }
  28543. // EORDa
  28544. OPCODE(0xB127)
  28545. {
  28546. u32 adr, res;
  28547. u32 src, dst;
  28548. src = DREGu8((Opcode >> 9) & 7);
  28549. adr = AREG(7) - 2;
  28550. AREG(7) = adr;
  28551. PRE_IO
  28552. READ_BYTE_F(adr, res)
  28553. res ^= src;
  28554. flag_C = 0;
  28555. flag_V = 0;
  28556. flag_NotZ = res;
  28557. flag_N = res;
  28558. WRITE_BYTE_F(adr, res)
  28559. POST_IO
  28560. RET(14)
  28561. }
  28562. // EORDa
  28563. OPCODE(0xB140)
  28564. {
  28565. u32 adr, res;
  28566. u32 src, dst;
  28567. src = DREGu16((Opcode >> 9) & 7);
  28568. res = DREGu16((Opcode >> 0) & 7);
  28569. res ^= src;
  28570. flag_C = 0;
  28571. flag_V = 0;
  28572. flag_NotZ = res;
  28573. flag_N = res >> 8;
  28574. DREGu16((Opcode >> 0) & 7) = res;
  28575. RET(4)
  28576. }
  28577. // EORDa
  28578. OPCODE(0xB150)
  28579. {
  28580. u32 adr, res;
  28581. u32 src, dst;
  28582. src = DREGu16((Opcode >> 9) & 7);
  28583. adr = AREG((Opcode >> 0) & 7);
  28584. PRE_IO
  28585. READ_WORD_F(adr, res)
  28586. res ^= src;
  28587. flag_C = 0;
  28588. flag_V = 0;
  28589. flag_NotZ = res;
  28590. flag_N = res >> 8;
  28591. WRITE_WORD_F(adr, res)
  28592. POST_IO
  28593. RET(12)
  28594. }
  28595. // EORDa
  28596. OPCODE(0xB158)
  28597. {
  28598. u32 adr, res;
  28599. u32 src, dst;
  28600. src = DREGu16((Opcode >> 9) & 7);
  28601. adr = AREG((Opcode >> 0) & 7);
  28602. AREG((Opcode >> 0) & 7) += 2;
  28603. PRE_IO
  28604. READ_WORD_F(adr, res)
  28605. res ^= src;
  28606. flag_C = 0;
  28607. flag_V = 0;
  28608. flag_NotZ = res;
  28609. flag_N = res >> 8;
  28610. WRITE_WORD_F(adr, res)
  28611. POST_IO
  28612. RET(12)
  28613. }
  28614. // EORDa
  28615. OPCODE(0xB160)
  28616. {
  28617. u32 adr, res;
  28618. u32 src, dst;
  28619. src = DREGu16((Opcode >> 9) & 7);
  28620. adr = AREG((Opcode >> 0) & 7) - 2;
  28621. AREG((Opcode >> 0) & 7) = adr;
  28622. PRE_IO
  28623. READ_WORD_F(adr, res)
  28624. res ^= src;
  28625. flag_C = 0;
  28626. flag_V = 0;
  28627. flag_NotZ = res;
  28628. flag_N = res >> 8;
  28629. WRITE_WORD_F(adr, res)
  28630. POST_IO
  28631. RET(14)
  28632. }
  28633. // EORDa
  28634. OPCODE(0xB168)
  28635. {
  28636. u32 adr, res;
  28637. u32 src, dst;
  28638. src = DREGu16((Opcode >> 9) & 7);
  28639. FETCH_SWORD(adr);
  28640. adr += AREG((Opcode >> 0) & 7);
  28641. PRE_IO
  28642. READ_WORD_F(adr, res)
  28643. res ^= src;
  28644. flag_C = 0;
  28645. flag_V = 0;
  28646. flag_NotZ = res;
  28647. flag_N = res >> 8;
  28648. WRITE_WORD_F(adr, res)
  28649. POST_IO
  28650. RET(16)
  28651. }
  28652. // EORDa
  28653. OPCODE(0xB170)
  28654. {
  28655. u32 adr, res;
  28656. u32 src, dst;
  28657. src = DREGu16((Opcode >> 9) & 7);
  28658. adr = AREG((Opcode >> 0) & 7);
  28659. DECODE_EXT_WORD
  28660. PRE_IO
  28661. READ_WORD_F(adr, res)
  28662. res ^= src;
  28663. flag_C = 0;
  28664. flag_V = 0;
  28665. flag_NotZ = res;
  28666. flag_N = res >> 8;
  28667. WRITE_WORD_F(adr, res)
  28668. POST_IO
  28669. RET(18)
  28670. }
  28671. // EORDa
  28672. OPCODE(0xB178)
  28673. {
  28674. u32 adr, res;
  28675. u32 src, dst;
  28676. src = DREGu16((Opcode >> 9) & 7);
  28677. FETCH_SWORD(adr);
  28678. PRE_IO
  28679. READ_WORD_F(adr, res)
  28680. res ^= src;
  28681. flag_C = 0;
  28682. flag_V = 0;
  28683. flag_NotZ = res;
  28684. flag_N = res >> 8;
  28685. WRITE_WORD_F(adr, res)
  28686. POST_IO
  28687. RET(16)
  28688. }
  28689. // EORDa
  28690. OPCODE(0xB179)
  28691. {
  28692. u32 adr, res;
  28693. u32 src, dst;
  28694. src = DREGu16((Opcode >> 9) & 7);
  28695. FETCH_LONG(adr);
  28696. PRE_IO
  28697. READ_WORD_F(adr, res)
  28698. res ^= src;
  28699. flag_C = 0;
  28700. flag_V = 0;
  28701. flag_NotZ = res;
  28702. flag_N = res >> 8;
  28703. WRITE_WORD_F(adr, res)
  28704. POST_IO
  28705. RET(20)
  28706. }
  28707. // EORDa
  28708. OPCODE(0xB15F)
  28709. {
  28710. u32 adr, res;
  28711. u32 src, dst;
  28712. src = DREGu16((Opcode >> 9) & 7);
  28713. adr = AREG(7);
  28714. AREG(7) += 2;
  28715. PRE_IO
  28716. READ_WORD_F(adr, res)
  28717. res ^= src;
  28718. flag_C = 0;
  28719. flag_V = 0;
  28720. flag_NotZ = res;
  28721. flag_N = res >> 8;
  28722. WRITE_WORD_F(adr, res)
  28723. POST_IO
  28724. RET(12)
  28725. }
  28726. // EORDa
  28727. OPCODE(0xB167)
  28728. {
  28729. u32 adr, res;
  28730. u32 src, dst;
  28731. src = DREGu16((Opcode >> 9) & 7);
  28732. adr = AREG(7) - 2;
  28733. AREG(7) = adr;
  28734. PRE_IO
  28735. READ_WORD_F(adr, res)
  28736. res ^= src;
  28737. flag_C = 0;
  28738. flag_V = 0;
  28739. flag_NotZ = res;
  28740. flag_N = res >> 8;
  28741. WRITE_WORD_F(adr, res)
  28742. POST_IO
  28743. RET(14)
  28744. }
  28745. // EORDa
  28746. OPCODE(0xB180)
  28747. {
  28748. u32 adr, res;
  28749. u32 src, dst;
  28750. src = DREGu32((Opcode >> 9) & 7);
  28751. res = DREGu32((Opcode >> 0) & 7);
  28752. res ^= src;
  28753. flag_C = 0;
  28754. flag_V = 0;
  28755. flag_NotZ = res;
  28756. flag_N = res >> 24;
  28757. DREGu32((Opcode >> 0) & 7) = res;
  28758. RET(8)
  28759. }
  28760. // EORDa
  28761. OPCODE(0xB190)
  28762. {
  28763. u32 adr, res;
  28764. u32 src, dst;
  28765. src = DREGu32((Opcode >> 9) & 7);
  28766. adr = AREG((Opcode >> 0) & 7);
  28767. PRE_IO
  28768. READ_LONG_F(adr, res)
  28769. res ^= src;
  28770. flag_C = 0;
  28771. flag_V = 0;
  28772. flag_NotZ = res;
  28773. flag_N = res >> 24;
  28774. WRITE_LONG_F(adr, res)
  28775. POST_IO
  28776. RET(20)
  28777. }
  28778. // EORDa
  28779. OPCODE(0xB198)
  28780. {
  28781. u32 adr, res;
  28782. u32 src, dst;
  28783. src = DREGu32((Opcode >> 9) & 7);
  28784. adr = AREG((Opcode >> 0) & 7);
  28785. AREG((Opcode >> 0) & 7) += 4;
  28786. PRE_IO
  28787. READ_LONG_F(adr, res)
  28788. res ^= src;
  28789. flag_C = 0;
  28790. flag_V = 0;
  28791. flag_NotZ = res;
  28792. flag_N = res >> 24;
  28793. WRITE_LONG_F(adr, res)
  28794. POST_IO
  28795. RET(20)
  28796. }
  28797. // EORDa
  28798. OPCODE(0xB1A0)
  28799. {
  28800. u32 adr, res;
  28801. u32 src, dst;
  28802. src = DREGu32((Opcode >> 9) & 7);
  28803. adr = AREG((Opcode >> 0) & 7) - 4;
  28804. AREG((Opcode >> 0) & 7) = adr;
  28805. PRE_IO
  28806. READ_LONG_F(adr, res)
  28807. res ^= src;
  28808. flag_C = 0;
  28809. flag_V = 0;
  28810. flag_NotZ = res;
  28811. flag_N = res >> 24;
  28812. WRITE_LONG_F(adr, res)
  28813. POST_IO
  28814. RET(22)
  28815. }
  28816. // EORDa
  28817. OPCODE(0xB1A8)
  28818. {
  28819. u32 adr, res;
  28820. u32 src, dst;
  28821. src = DREGu32((Opcode >> 9) & 7);
  28822. FETCH_SWORD(adr);
  28823. adr += AREG((Opcode >> 0) & 7);
  28824. PRE_IO
  28825. READ_LONG_F(adr, res)
  28826. res ^= src;
  28827. flag_C = 0;
  28828. flag_V = 0;
  28829. flag_NotZ = res;
  28830. flag_N = res >> 24;
  28831. WRITE_LONG_F(adr, res)
  28832. POST_IO
  28833. RET(24)
  28834. }
  28835. // EORDa
  28836. OPCODE(0xB1B0)
  28837. {
  28838. u32 adr, res;
  28839. u32 src, dst;
  28840. src = DREGu32((Opcode >> 9) & 7);
  28841. adr = AREG((Opcode >> 0) & 7);
  28842. DECODE_EXT_WORD
  28843. PRE_IO
  28844. READ_LONG_F(adr, res)
  28845. res ^= src;
  28846. flag_C = 0;
  28847. flag_V = 0;
  28848. flag_NotZ = res;
  28849. flag_N = res >> 24;
  28850. WRITE_LONG_F(adr, res)
  28851. POST_IO
  28852. RET(26)
  28853. }
  28854. // EORDa
  28855. OPCODE(0xB1B8)
  28856. {
  28857. u32 adr, res;
  28858. u32 src, dst;
  28859. src = DREGu32((Opcode >> 9) & 7);
  28860. FETCH_SWORD(adr);
  28861. PRE_IO
  28862. READ_LONG_F(adr, res)
  28863. res ^= src;
  28864. flag_C = 0;
  28865. flag_V = 0;
  28866. flag_NotZ = res;
  28867. flag_N = res >> 24;
  28868. WRITE_LONG_F(adr, res)
  28869. POST_IO
  28870. RET(24)
  28871. }
  28872. // EORDa
  28873. OPCODE(0xB1B9)
  28874. {
  28875. u32 adr, res;
  28876. u32 src, dst;
  28877. src = DREGu32((Opcode >> 9) & 7);
  28878. FETCH_LONG(adr);
  28879. PRE_IO
  28880. READ_LONG_F(adr, res)
  28881. res ^= src;
  28882. flag_C = 0;
  28883. flag_V = 0;
  28884. flag_NotZ = res;
  28885. flag_N = res >> 24;
  28886. WRITE_LONG_F(adr, res)
  28887. POST_IO
  28888. RET(28)
  28889. }
  28890. // EORDa
  28891. OPCODE(0xB19F)
  28892. {
  28893. u32 adr, res;
  28894. u32 src, dst;
  28895. src = DREGu32((Opcode >> 9) & 7);
  28896. adr = AREG(7);
  28897. AREG(7) += 4;
  28898. PRE_IO
  28899. READ_LONG_F(adr, res)
  28900. res ^= src;
  28901. flag_C = 0;
  28902. flag_V = 0;
  28903. flag_NotZ = res;
  28904. flag_N = res >> 24;
  28905. WRITE_LONG_F(adr, res)
  28906. POST_IO
  28907. RET(20)
  28908. }
  28909. // EORDa
  28910. OPCODE(0xB1A7)
  28911. {
  28912. u32 adr, res;
  28913. u32 src, dst;
  28914. src = DREGu32((Opcode >> 9) & 7);
  28915. adr = AREG(7) - 4;
  28916. AREG(7) = adr;
  28917. PRE_IO
  28918. READ_LONG_F(adr, res)
  28919. res ^= src;
  28920. flag_C = 0;
  28921. flag_V = 0;
  28922. flag_NotZ = res;
  28923. flag_N = res >> 24;
  28924. WRITE_LONG_F(adr, res)
  28925. POST_IO
  28926. RET(22)
  28927. }
  28928. // CMPA
  28929. OPCODE(0xB0C0)
  28930. {
  28931. u32 adr, res;
  28932. u32 src, dst;
  28933. src = (s32)DREGs16((Opcode >> 0) & 7);
  28934. dst = AREGu32((Opcode >> 9) & 7);
  28935. res = dst - src;
  28936. flag_NotZ = res;
  28937. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  28938. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  28939. flag_N = res >> 24;
  28940. RET(6)
  28941. }
  28942. // CMPA
  28943. OPCODE(0xB0C8)
  28944. {
  28945. u32 adr, res;
  28946. u32 src, dst;
  28947. src = (s32)AREGs16((Opcode >> 0) & 7);
  28948. dst = AREGu32((Opcode >> 9) & 7);
  28949. res = dst - src;
  28950. flag_NotZ = res;
  28951. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  28952. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  28953. flag_N = res >> 24;
  28954. RET(6)
  28955. }
  28956. // CMPA
  28957. OPCODE(0xB0D0)
  28958. {
  28959. u32 adr, res;
  28960. u32 src, dst;
  28961. adr = AREG((Opcode >> 0) & 7);
  28962. PRE_IO
  28963. READSX_WORD_F(adr, src)
  28964. dst = AREGu32((Opcode >> 9) & 7);
  28965. res = dst - src;
  28966. flag_NotZ = res;
  28967. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  28968. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  28969. flag_N = res >> 24;
  28970. POST_IO
  28971. RET(10)
  28972. }
  28973. // CMPA
  28974. OPCODE(0xB0D8)
  28975. {
  28976. u32 adr, res;
  28977. u32 src, dst;
  28978. adr = AREG((Opcode >> 0) & 7);
  28979. AREG((Opcode >> 0) & 7) += 2;
  28980. PRE_IO
  28981. READSX_WORD_F(adr, src)
  28982. dst = AREGu32((Opcode >> 9) & 7);
  28983. res = dst - src;
  28984. flag_NotZ = res;
  28985. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  28986. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  28987. flag_N = res >> 24;
  28988. POST_IO
  28989. RET(10)
  28990. }
  28991. // CMPA
  28992. OPCODE(0xB0E0)
  28993. {
  28994. u32 adr, res;
  28995. u32 src, dst;
  28996. adr = AREG((Opcode >> 0) & 7) - 2;
  28997. AREG((Opcode >> 0) & 7) = adr;
  28998. PRE_IO
  28999. READSX_WORD_F(adr, src)
  29000. dst = AREGu32((Opcode >> 9) & 7);
  29001. res = dst - src;
  29002. flag_NotZ = res;
  29003. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  29004. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  29005. flag_N = res >> 24;
  29006. POST_IO
  29007. RET(12)
  29008. }
  29009. // CMPA
  29010. OPCODE(0xB0E8)
  29011. {
  29012. u32 adr, res;
  29013. u32 src, dst;
  29014. FETCH_SWORD(adr);
  29015. adr += AREG((Opcode >> 0) & 7);
  29016. PRE_IO
  29017. READSX_WORD_F(adr, src)
  29018. dst = AREGu32((Opcode >> 9) & 7);
  29019. res = dst - src;
  29020. flag_NotZ = res;
  29021. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  29022. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  29023. flag_N = res >> 24;
  29024. POST_IO
  29025. RET(14)
  29026. }
  29027. // CMPA
  29028. OPCODE(0xB0F0)
  29029. {
  29030. u32 adr, res;
  29031. u32 src, dst;
  29032. adr = AREG((Opcode >> 0) & 7);
  29033. DECODE_EXT_WORD
  29034. PRE_IO
  29035. READSX_WORD_F(adr, src)
  29036. dst = AREGu32((Opcode >> 9) & 7);
  29037. res = dst - src;
  29038. flag_NotZ = res;
  29039. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  29040. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  29041. flag_N = res >> 24;
  29042. POST_IO
  29043. RET(16)
  29044. }
  29045. // CMPA
  29046. OPCODE(0xB0F8)
  29047. {
  29048. u32 adr, res;
  29049. u32 src, dst;
  29050. FETCH_SWORD(adr);
  29051. PRE_IO
  29052. READSX_WORD_F(adr, src)
  29053. dst = AREGu32((Opcode >> 9) & 7);
  29054. res = dst - src;
  29055. flag_NotZ = res;
  29056. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  29057. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  29058. flag_N = res >> 24;
  29059. POST_IO
  29060. RET(14)
  29061. }
  29062. // CMPA
  29063. OPCODE(0xB0F9)
  29064. {
  29065. u32 adr, res;
  29066. u32 src, dst;
  29067. FETCH_LONG(adr);
  29068. PRE_IO
  29069. READSX_WORD_F(adr, src)
  29070. dst = AREGu32((Opcode >> 9) & 7);
  29071. res = dst - src;
  29072. flag_NotZ = res;
  29073. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  29074. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  29075. flag_N = res >> 24;
  29076. POST_IO
  29077. RET(18)
  29078. }
  29079. // CMPA
  29080. OPCODE(0xB0FA)
  29081. {
  29082. u32 adr, res;
  29083. u32 src, dst;
  29084. adr = GET_SWORD + GET_PC;
  29085. PC++;
  29086. PRE_IO
  29087. READSX_WORD_F(adr, src)
  29088. dst = AREGu32((Opcode >> 9) & 7);
  29089. res = dst - src;
  29090. flag_NotZ = res;
  29091. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  29092. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  29093. flag_N = res >> 24;
  29094. POST_IO
  29095. RET(14)
  29096. }
  29097. // CMPA
  29098. OPCODE(0xB0FB)
  29099. {
  29100. u32 adr, res;
  29101. u32 src, dst;
  29102. adr = GET_PC;
  29103. DECODE_EXT_WORD
  29104. PRE_IO
  29105. READSX_WORD_F(adr, src)
  29106. dst = AREGu32((Opcode >> 9) & 7);
  29107. res = dst - src;
  29108. flag_NotZ = res;
  29109. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  29110. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  29111. flag_N = res >> 24;
  29112. POST_IO
  29113. RET(16)
  29114. }
  29115. // CMPA
  29116. OPCODE(0xB0FC)
  29117. {
  29118. u32 adr, res;
  29119. u32 src, dst;
  29120. FETCH_SWORD(src);
  29121. dst = AREGu32((Opcode >> 9) & 7);
  29122. res = dst - src;
  29123. flag_NotZ = res;
  29124. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  29125. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  29126. flag_N = res >> 24;
  29127. RET(10)
  29128. }
  29129. // CMPA
  29130. OPCODE(0xB0DF)
  29131. {
  29132. u32 adr, res;
  29133. u32 src, dst;
  29134. adr = AREG(7);
  29135. AREG(7) += 2;
  29136. PRE_IO
  29137. READSX_WORD_F(adr, src)
  29138. dst = AREGu32((Opcode >> 9) & 7);
  29139. res = dst - src;
  29140. flag_NotZ = res;
  29141. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  29142. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  29143. flag_N = res >> 24;
  29144. POST_IO
  29145. RET(10)
  29146. }
  29147. // CMPA
  29148. OPCODE(0xB0E7)
  29149. {
  29150. u32 adr, res;
  29151. u32 src, dst;
  29152. adr = AREG(7) - 2;
  29153. AREG(7) = adr;
  29154. PRE_IO
  29155. READSX_WORD_F(adr, src)
  29156. dst = AREGu32((Opcode >> 9) & 7);
  29157. res = dst - src;
  29158. flag_NotZ = res;
  29159. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  29160. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  29161. flag_N = res >> 24;
  29162. POST_IO
  29163. RET(12)
  29164. }
  29165. // CMPA
  29166. OPCODE(0xB1C0)
  29167. {
  29168. u32 adr, res;
  29169. u32 src, dst;
  29170. src = (s32)DREGs32((Opcode >> 0) & 7);
  29171. dst = AREGu32((Opcode >> 9) & 7);
  29172. res = dst - src;
  29173. flag_NotZ = res;
  29174. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  29175. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  29176. flag_N = res >> 24;
  29177. RET(6)
  29178. }
  29179. // CMPA
  29180. OPCODE(0xB1C8)
  29181. {
  29182. u32 adr, res;
  29183. u32 src, dst;
  29184. src = (s32)AREGs32((Opcode >> 0) & 7);
  29185. dst = AREGu32((Opcode >> 9) & 7);
  29186. res = dst - src;
  29187. flag_NotZ = res;
  29188. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  29189. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  29190. flag_N = res >> 24;
  29191. RET(6)
  29192. }
  29193. // CMPA
  29194. OPCODE(0xB1D0)
  29195. {
  29196. u32 adr, res;
  29197. u32 src, dst;
  29198. adr = AREG((Opcode >> 0) & 7);
  29199. PRE_IO
  29200. READSX_LONG_F(adr, src)
  29201. dst = AREGu32((Opcode >> 9) & 7);
  29202. res = dst - src;
  29203. flag_NotZ = res;
  29204. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  29205. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  29206. flag_N = res >> 24;
  29207. POST_IO
  29208. RET(14)
  29209. }
  29210. // CMPA
  29211. OPCODE(0xB1D8)
  29212. {
  29213. u32 adr, res;
  29214. u32 src, dst;
  29215. adr = AREG((Opcode >> 0) & 7);
  29216. AREG((Opcode >> 0) & 7) += 4;
  29217. PRE_IO
  29218. READSX_LONG_F(adr, src)
  29219. dst = AREGu32((Opcode >> 9) & 7);
  29220. res = dst - src;
  29221. flag_NotZ = res;
  29222. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  29223. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  29224. flag_N = res >> 24;
  29225. POST_IO
  29226. RET(14)
  29227. }
  29228. // CMPA
  29229. OPCODE(0xB1E0)
  29230. {
  29231. u32 adr, res;
  29232. u32 src, dst;
  29233. adr = AREG((Opcode >> 0) & 7) - 4;
  29234. AREG((Opcode >> 0) & 7) = adr;
  29235. PRE_IO
  29236. READSX_LONG_F(adr, src)
  29237. dst = AREGu32((Opcode >> 9) & 7);
  29238. res = dst - src;
  29239. flag_NotZ = res;
  29240. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  29241. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  29242. flag_N = res >> 24;
  29243. POST_IO
  29244. RET(16)
  29245. }
  29246. // CMPA
  29247. OPCODE(0xB1E8)
  29248. {
  29249. u32 adr, res;
  29250. u32 src, dst;
  29251. FETCH_SWORD(adr);
  29252. adr += AREG((Opcode >> 0) & 7);
  29253. PRE_IO
  29254. READSX_LONG_F(adr, src)
  29255. dst = AREGu32((Opcode >> 9) & 7);
  29256. res = dst - src;
  29257. flag_NotZ = res;
  29258. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  29259. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  29260. flag_N = res >> 24;
  29261. POST_IO
  29262. RET(18)
  29263. }
  29264. // CMPA
  29265. OPCODE(0xB1F0)
  29266. {
  29267. u32 adr, res;
  29268. u32 src, dst;
  29269. adr = AREG((Opcode >> 0) & 7);
  29270. DECODE_EXT_WORD
  29271. PRE_IO
  29272. READSX_LONG_F(adr, src)
  29273. dst = AREGu32((Opcode >> 9) & 7);
  29274. res = dst - src;
  29275. flag_NotZ = res;
  29276. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  29277. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  29278. flag_N = res >> 24;
  29279. POST_IO
  29280. RET(20)
  29281. }
  29282. // CMPA
  29283. OPCODE(0xB1F8)
  29284. {
  29285. u32 adr, res;
  29286. u32 src, dst;
  29287. FETCH_SWORD(adr);
  29288. PRE_IO
  29289. READSX_LONG_F(adr, src)
  29290. dst = AREGu32((Opcode >> 9) & 7);
  29291. res = dst - src;
  29292. flag_NotZ = res;
  29293. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  29294. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  29295. flag_N = res >> 24;
  29296. POST_IO
  29297. RET(18)
  29298. }
  29299. // CMPA
  29300. OPCODE(0xB1F9)
  29301. {
  29302. u32 adr, res;
  29303. u32 src, dst;
  29304. FETCH_LONG(adr);
  29305. PRE_IO
  29306. READSX_LONG_F(adr, src)
  29307. dst = AREGu32((Opcode >> 9) & 7);
  29308. res = dst - src;
  29309. flag_NotZ = res;
  29310. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  29311. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  29312. flag_N = res >> 24;
  29313. POST_IO
  29314. RET(22)
  29315. }
  29316. // CMPA
  29317. OPCODE(0xB1FA)
  29318. {
  29319. u32 adr, res;
  29320. u32 src, dst;
  29321. adr = GET_SWORD + GET_PC;
  29322. PC++;
  29323. PRE_IO
  29324. READSX_LONG_F(adr, src)
  29325. dst = AREGu32((Opcode >> 9) & 7);
  29326. res = dst - src;
  29327. flag_NotZ = res;
  29328. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  29329. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  29330. flag_N = res >> 24;
  29331. POST_IO
  29332. RET(18)
  29333. }
  29334. // CMPA
  29335. OPCODE(0xB1FB)
  29336. {
  29337. u32 adr, res;
  29338. u32 src, dst;
  29339. adr = GET_PC;
  29340. DECODE_EXT_WORD
  29341. PRE_IO
  29342. READSX_LONG_F(adr, src)
  29343. dst = AREGu32((Opcode >> 9) & 7);
  29344. res = dst - src;
  29345. flag_NotZ = res;
  29346. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  29347. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  29348. flag_N = res >> 24;
  29349. POST_IO
  29350. RET(20)
  29351. }
  29352. // CMPA
  29353. OPCODE(0xB1FC)
  29354. {
  29355. u32 adr, res;
  29356. u32 src, dst;
  29357. FETCH_LONG(src);
  29358. dst = AREGu32((Opcode >> 9) & 7);
  29359. res = dst - src;
  29360. flag_NotZ = res;
  29361. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  29362. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  29363. flag_N = res >> 24;
  29364. RET(14)
  29365. }
  29366. // CMPA
  29367. OPCODE(0xB1DF)
  29368. {
  29369. u32 adr, res;
  29370. u32 src, dst;
  29371. adr = AREG(7);
  29372. AREG(7) += 4;
  29373. PRE_IO
  29374. READSX_LONG_F(adr, src)
  29375. dst = AREGu32((Opcode >> 9) & 7);
  29376. res = dst - src;
  29377. flag_NotZ = res;
  29378. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  29379. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  29380. flag_N = res >> 24;
  29381. POST_IO
  29382. RET(14)
  29383. }
  29384. // CMPA
  29385. OPCODE(0xB1E7)
  29386. {
  29387. u32 adr, res;
  29388. u32 src, dst;
  29389. adr = AREG(7) - 4;
  29390. AREG(7) = adr;
  29391. PRE_IO
  29392. READSX_LONG_F(adr, src)
  29393. dst = AREGu32((Opcode >> 9) & 7);
  29394. res = dst - src;
  29395. flag_NotZ = res;
  29396. flag_C = ((src & res & 1) + (src >> 1) + (res >> 1)) >> 23;
  29397. flag_V = ((src ^ dst) & (res ^ dst)) >> 24;
  29398. flag_N = res >> 24;
  29399. POST_IO
  29400. RET(16)
  29401. }
  29402. // ANDaD
  29403. OPCODE(0xC000)
  29404. {
  29405. u32 adr, res;
  29406. u32 src, dst;
  29407. src = DREGu8((Opcode >> 0) & 7);
  29408. res = DREGu8((Opcode >> 9) & 7);
  29409. res &= src;
  29410. flag_C = 0;
  29411. flag_V = 0;
  29412. flag_NotZ = res;
  29413. flag_N = res;
  29414. DREGu8((Opcode >> 9) & 7) = res;
  29415. RET(4)
  29416. }
  29417. // ANDaD
  29418. OPCODE(0xC010)
  29419. {
  29420. u32 adr, res;
  29421. u32 src, dst;
  29422. adr = AREG((Opcode >> 0) & 7);
  29423. PRE_IO
  29424. READ_BYTE_F(adr, src)
  29425. res = DREGu8((Opcode >> 9) & 7);
  29426. res &= src;
  29427. flag_C = 0;
  29428. flag_V = 0;
  29429. flag_NotZ = res;
  29430. flag_N = res;
  29431. DREGu8((Opcode >> 9) & 7) = res;
  29432. POST_IO
  29433. RET(8)
  29434. }
  29435. // ANDaD
  29436. OPCODE(0xC018)
  29437. {
  29438. u32 adr, res;
  29439. u32 src, dst;
  29440. adr = AREG((Opcode >> 0) & 7);
  29441. AREG((Opcode >> 0) & 7) += 1;
  29442. PRE_IO
  29443. READ_BYTE_F(adr, src)
  29444. res = DREGu8((Opcode >> 9) & 7);
  29445. res &= src;
  29446. flag_C = 0;
  29447. flag_V = 0;
  29448. flag_NotZ = res;
  29449. flag_N = res;
  29450. DREGu8((Opcode >> 9) & 7) = res;
  29451. POST_IO
  29452. RET(8)
  29453. }
  29454. // ANDaD
  29455. OPCODE(0xC020)
  29456. {
  29457. u32 adr, res;
  29458. u32 src, dst;
  29459. adr = AREG((Opcode >> 0) & 7) - 1;
  29460. AREG((Opcode >> 0) & 7) = adr;
  29461. PRE_IO
  29462. READ_BYTE_F(adr, src)
  29463. res = DREGu8((Opcode >> 9) & 7);
  29464. res &= src;
  29465. flag_C = 0;
  29466. flag_V = 0;
  29467. flag_NotZ = res;
  29468. flag_N = res;
  29469. DREGu8((Opcode >> 9) & 7) = res;
  29470. POST_IO
  29471. RET(10)
  29472. }
  29473. // ANDaD
  29474. OPCODE(0xC028)
  29475. {
  29476. u32 adr, res;
  29477. u32 src, dst;
  29478. FETCH_SWORD(adr);
  29479. adr += AREG((Opcode >> 0) & 7);
  29480. PRE_IO
  29481. READ_BYTE_F(adr, src)
  29482. res = DREGu8((Opcode >> 9) & 7);
  29483. res &= src;
  29484. flag_C = 0;
  29485. flag_V = 0;
  29486. flag_NotZ = res;
  29487. flag_N = res;
  29488. DREGu8((Opcode >> 9) & 7) = res;
  29489. POST_IO
  29490. RET(12)
  29491. }
  29492. // ANDaD
  29493. OPCODE(0xC030)
  29494. {
  29495. u32 adr, res;
  29496. u32 src, dst;
  29497. adr = AREG((Opcode >> 0) & 7);
  29498. DECODE_EXT_WORD
  29499. PRE_IO
  29500. READ_BYTE_F(adr, src)
  29501. res = DREGu8((Opcode >> 9) & 7);
  29502. res &= src;
  29503. flag_C = 0;
  29504. flag_V = 0;
  29505. flag_NotZ = res;
  29506. flag_N = res;
  29507. DREGu8((Opcode >> 9) & 7) = res;
  29508. POST_IO
  29509. RET(14)
  29510. }
  29511. // ANDaD
  29512. OPCODE(0xC038)
  29513. {
  29514. u32 adr, res;
  29515. u32 src, dst;
  29516. FETCH_SWORD(adr);
  29517. PRE_IO
  29518. READ_BYTE_F(adr, src)
  29519. res = DREGu8((Opcode >> 9) & 7);
  29520. res &= src;
  29521. flag_C = 0;
  29522. flag_V = 0;
  29523. flag_NotZ = res;
  29524. flag_N = res;
  29525. DREGu8((Opcode >> 9) & 7) = res;
  29526. POST_IO
  29527. RET(12)
  29528. }
  29529. // ANDaD
  29530. OPCODE(0xC039)
  29531. {
  29532. u32 adr, res;
  29533. u32 src, dst;
  29534. FETCH_LONG(adr);
  29535. PRE_IO
  29536. READ_BYTE_F(adr, src)
  29537. res = DREGu8((Opcode >> 9) & 7);
  29538. res &= src;
  29539. flag_C = 0;
  29540. flag_V = 0;
  29541. flag_NotZ = res;
  29542. flag_N = res;
  29543. DREGu8((Opcode >> 9) & 7) = res;
  29544. POST_IO
  29545. RET(16)
  29546. }
  29547. // ANDaD
  29548. OPCODE(0xC03A)
  29549. {
  29550. u32 adr, res;
  29551. u32 src, dst;
  29552. adr = GET_SWORD + GET_PC;
  29553. PC++;
  29554. PRE_IO
  29555. READ_BYTE_F(adr, src)
  29556. res = DREGu8((Opcode >> 9) & 7);
  29557. res &= src;
  29558. flag_C = 0;
  29559. flag_V = 0;
  29560. flag_NotZ = res;
  29561. flag_N = res;
  29562. DREGu8((Opcode >> 9) & 7) = res;
  29563. POST_IO
  29564. RET(12)
  29565. }
  29566. // ANDaD
  29567. OPCODE(0xC03B)
  29568. {
  29569. u32 adr, res;
  29570. u32 src, dst;
  29571. adr = GET_PC;
  29572. DECODE_EXT_WORD
  29573. PRE_IO
  29574. READ_BYTE_F(adr, src)
  29575. res = DREGu8((Opcode >> 9) & 7);
  29576. res &= src;
  29577. flag_C = 0;
  29578. flag_V = 0;
  29579. flag_NotZ = res;
  29580. flag_N = res;
  29581. DREGu8((Opcode >> 9) & 7) = res;
  29582. POST_IO
  29583. RET(14)
  29584. }
  29585. // ANDaD
  29586. OPCODE(0xC03C)
  29587. {
  29588. u32 adr, res;
  29589. u32 src, dst;
  29590. FETCH_BYTE(src);
  29591. res = DREGu8((Opcode >> 9) & 7);
  29592. res &= src;
  29593. flag_C = 0;
  29594. flag_V = 0;
  29595. flag_NotZ = res;
  29596. flag_N = res;
  29597. DREGu8((Opcode >> 9) & 7) = res;
  29598. RET(8)
  29599. }
  29600. // ANDaD
  29601. OPCODE(0xC01F)
  29602. {
  29603. u32 adr, res;
  29604. u32 src, dst;
  29605. adr = AREG(7);
  29606. AREG(7) += 2;
  29607. PRE_IO
  29608. READ_BYTE_F(adr, src)
  29609. res = DREGu8((Opcode >> 9) & 7);
  29610. res &= src;
  29611. flag_C = 0;
  29612. flag_V = 0;
  29613. flag_NotZ = res;
  29614. flag_N = res;
  29615. DREGu8((Opcode >> 9) & 7) = res;
  29616. POST_IO
  29617. RET(8)
  29618. }
  29619. // ANDaD
  29620. OPCODE(0xC027)
  29621. {
  29622. u32 adr, res;
  29623. u32 src, dst;
  29624. adr = AREG(7) - 2;
  29625. AREG(7) = adr;
  29626. PRE_IO
  29627. READ_BYTE_F(adr, src)
  29628. res = DREGu8((Opcode >> 9) & 7);
  29629. res &= src;
  29630. flag_C = 0;
  29631. flag_V = 0;
  29632. flag_NotZ = res;
  29633. flag_N = res;
  29634. DREGu8((Opcode >> 9) & 7) = res;
  29635. POST_IO
  29636. RET(10)
  29637. }
  29638. // ANDaD
  29639. OPCODE(0xC040)
  29640. {
  29641. u32 adr, res;
  29642. u32 src, dst;
  29643. src = DREGu16((Opcode >> 0) & 7);
  29644. res = DREGu16((Opcode >> 9) & 7);
  29645. res &= src;
  29646. flag_C = 0;
  29647. flag_V = 0;
  29648. flag_NotZ = res;
  29649. flag_N = res >> 8;
  29650. DREGu16((Opcode >> 9) & 7) = res;
  29651. RET(4)
  29652. }
  29653. // ANDaD
  29654. OPCODE(0xC050)
  29655. {
  29656. u32 adr, res;
  29657. u32 src, dst;
  29658. adr = AREG((Opcode >> 0) & 7);
  29659. PRE_IO
  29660. READ_WORD_F(adr, src)
  29661. res = DREGu16((Opcode >> 9) & 7);
  29662. res &= src;
  29663. flag_C = 0;
  29664. flag_V = 0;
  29665. flag_NotZ = res;
  29666. flag_N = res >> 8;
  29667. DREGu16((Opcode >> 9) & 7) = res;
  29668. POST_IO
  29669. RET(8)
  29670. }
  29671. // ANDaD
  29672. OPCODE(0xC058)
  29673. {
  29674. u32 adr, res;
  29675. u32 src, dst;
  29676. adr = AREG((Opcode >> 0) & 7);
  29677. AREG((Opcode >> 0) & 7) += 2;
  29678. PRE_IO
  29679. READ_WORD_F(adr, src)
  29680. res = DREGu16((Opcode >> 9) & 7);
  29681. res &= src;
  29682. flag_C = 0;
  29683. flag_V = 0;
  29684. flag_NotZ = res;
  29685. flag_N = res >> 8;
  29686. DREGu16((Opcode >> 9) & 7) = res;
  29687. POST_IO
  29688. RET(8)
  29689. }
  29690. // ANDaD
  29691. OPCODE(0xC060)
  29692. {
  29693. u32 adr, res;
  29694. u32 src, dst;
  29695. adr = AREG((Opcode >> 0) & 7) - 2;
  29696. AREG((Opcode >> 0) & 7) = adr;
  29697. PRE_IO
  29698. READ_WORD_F(adr, src)
  29699. res = DREGu16((Opcode >> 9) & 7);
  29700. res &= src;
  29701. flag_C = 0;
  29702. flag_V = 0;
  29703. flag_NotZ = res;
  29704. flag_N = res >> 8;
  29705. DREGu16((Opcode >> 9) & 7) = res;
  29706. POST_IO
  29707. RET(10)
  29708. }
  29709. // ANDaD
  29710. OPCODE(0xC068)
  29711. {
  29712. u32 adr, res;
  29713. u32 src, dst;
  29714. FETCH_SWORD(adr);
  29715. adr += AREG((Opcode >> 0) & 7);
  29716. PRE_IO
  29717. READ_WORD_F(adr, src)
  29718. res = DREGu16((Opcode >> 9) & 7);
  29719. res &= src;
  29720. flag_C = 0;
  29721. flag_V = 0;
  29722. flag_NotZ = res;
  29723. flag_N = res >> 8;
  29724. DREGu16((Opcode >> 9) & 7) = res;
  29725. POST_IO
  29726. RET(12)
  29727. }
  29728. // ANDaD
  29729. OPCODE(0xC070)
  29730. {
  29731. u32 adr, res;
  29732. u32 src, dst;
  29733. adr = AREG((Opcode >> 0) & 7);
  29734. DECODE_EXT_WORD
  29735. PRE_IO
  29736. READ_WORD_F(adr, src)
  29737. res = DREGu16((Opcode >> 9) & 7);
  29738. res &= src;
  29739. flag_C = 0;
  29740. flag_V = 0;
  29741. flag_NotZ = res;
  29742. flag_N = res >> 8;
  29743. DREGu16((Opcode >> 9) & 7) = res;
  29744. POST_IO
  29745. RET(14)
  29746. }
  29747. // ANDaD
  29748. OPCODE(0xC078)
  29749. {
  29750. u32 adr, res;
  29751. u32 src, dst;
  29752. FETCH_SWORD(adr);
  29753. PRE_IO
  29754. READ_WORD_F(adr, src)
  29755. res = DREGu16((Opcode >> 9) & 7);
  29756. res &= src;
  29757. flag_C = 0;
  29758. flag_V = 0;
  29759. flag_NotZ = res;
  29760. flag_N = res >> 8;
  29761. DREGu16((Opcode >> 9) & 7) = res;
  29762. POST_IO
  29763. RET(12)
  29764. }
  29765. // ANDaD
  29766. OPCODE(0xC079)
  29767. {
  29768. u32 adr, res;
  29769. u32 src, dst;
  29770. FETCH_LONG(adr);
  29771. PRE_IO
  29772. READ_WORD_F(adr, src)
  29773. res = DREGu16((Opcode >> 9) & 7);
  29774. res &= src;
  29775. flag_C = 0;
  29776. flag_V = 0;
  29777. flag_NotZ = res;
  29778. flag_N = res >> 8;
  29779. DREGu16((Opcode >> 9) & 7) = res;
  29780. POST_IO
  29781. RET(16)
  29782. }
  29783. // ANDaD
  29784. OPCODE(0xC07A)
  29785. {
  29786. u32 adr, res;
  29787. u32 src, dst;
  29788. adr = GET_SWORD + GET_PC;
  29789. PC++;
  29790. PRE_IO
  29791. READ_WORD_F(adr, src)
  29792. res = DREGu16((Opcode >> 9) & 7);
  29793. res &= src;
  29794. flag_C = 0;
  29795. flag_V = 0;
  29796. flag_NotZ = res;
  29797. flag_N = res >> 8;
  29798. DREGu16((Opcode >> 9) & 7) = res;
  29799. POST_IO
  29800. RET(12)
  29801. }
  29802. // ANDaD
  29803. OPCODE(0xC07B)
  29804. {
  29805. u32 adr, res;
  29806. u32 src, dst;
  29807. adr = GET_PC;
  29808. DECODE_EXT_WORD
  29809. PRE_IO
  29810. READ_WORD_F(adr, src)
  29811. res = DREGu16((Opcode >> 9) & 7);
  29812. res &= src;
  29813. flag_C = 0;
  29814. flag_V = 0;
  29815. flag_NotZ = res;
  29816. flag_N = res >> 8;
  29817. DREGu16((Opcode >> 9) & 7) = res;
  29818. POST_IO
  29819. RET(14)
  29820. }
  29821. // ANDaD
  29822. OPCODE(0xC07C)
  29823. {
  29824. u32 adr, res;
  29825. u32 src, dst;
  29826. FETCH_WORD(src);
  29827. res = DREGu16((Opcode >> 9) & 7);
  29828. res &= src;
  29829. flag_C = 0;
  29830. flag_V = 0;
  29831. flag_NotZ = res;
  29832. flag_N = res >> 8;
  29833. DREGu16((Opcode >> 9) & 7) = res;
  29834. RET(8)
  29835. }
  29836. // ANDaD
  29837. OPCODE(0xC05F)
  29838. {
  29839. u32 adr, res;
  29840. u32 src, dst;
  29841. adr = AREG(7);
  29842. AREG(7) += 2;
  29843. PRE_IO
  29844. READ_WORD_F(adr, src)
  29845. res = DREGu16((Opcode >> 9) & 7);
  29846. res &= src;
  29847. flag_C = 0;
  29848. flag_V = 0;
  29849. flag_NotZ = res;
  29850. flag_N = res >> 8;
  29851. DREGu16((Opcode >> 9) & 7) = res;
  29852. POST_IO
  29853. RET(8)
  29854. }
  29855. // ANDaD
  29856. OPCODE(0xC067)
  29857. {
  29858. u32 adr, res;
  29859. u32 src, dst;
  29860. adr = AREG(7) - 2;
  29861. AREG(7) = adr;
  29862. PRE_IO
  29863. READ_WORD_F(adr, src)
  29864. res = DREGu16((Opcode >> 9) & 7);
  29865. res &= src;
  29866. flag_C = 0;
  29867. flag_V = 0;
  29868. flag_NotZ = res;
  29869. flag_N = res >> 8;
  29870. DREGu16((Opcode >> 9) & 7) = res;
  29871. POST_IO
  29872. RET(10)
  29873. }
  29874. // ANDaD
  29875. OPCODE(0xC080)
  29876. {
  29877. u32 adr, res;
  29878. u32 src, dst;
  29879. src = DREGu32((Opcode >> 0) & 7);
  29880. res = DREGu32((Opcode >> 9) & 7);
  29881. res &= src;
  29882. flag_C = 0;
  29883. flag_V = 0;
  29884. flag_NotZ = res;
  29885. flag_N = res >> 24;
  29886. DREGu32((Opcode >> 9) & 7) = res;
  29887. RET(8)
  29888. }
  29889. // ANDaD
  29890. OPCODE(0xC090)
  29891. {
  29892. u32 adr, res;
  29893. u32 src, dst;
  29894. adr = AREG((Opcode >> 0) & 7);
  29895. PRE_IO
  29896. READ_LONG_F(adr, src)
  29897. res = DREGu32((Opcode >> 9) & 7);
  29898. res &= src;
  29899. flag_C = 0;
  29900. flag_V = 0;
  29901. flag_NotZ = res;
  29902. flag_N = res >> 24;
  29903. DREGu32((Opcode >> 9) & 7) = res;
  29904. POST_IO
  29905. RET(14)
  29906. }
  29907. // ANDaD
  29908. OPCODE(0xC098)
  29909. {
  29910. u32 adr, res;
  29911. u32 src, dst;
  29912. adr = AREG((Opcode >> 0) & 7);
  29913. AREG((Opcode >> 0) & 7) += 4;
  29914. PRE_IO
  29915. READ_LONG_F(adr, src)
  29916. res = DREGu32((Opcode >> 9) & 7);
  29917. res &= src;
  29918. flag_C = 0;
  29919. flag_V = 0;
  29920. flag_NotZ = res;
  29921. flag_N = res >> 24;
  29922. DREGu32((Opcode >> 9) & 7) = res;
  29923. POST_IO
  29924. RET(14)
  29925. }
  29926. // ANDaD
  29927. OPCODE(0xC0A0)
  29928. {
  29929. u32 adr, res;
  29930. u32 src, dst;
  29931. adr = AREG((Opcode >> 0) & 7) - 4;
  29932. AREG((Opcode >> 0) & 7) = adr;
  29933. PRE_IO
  29934. READ_LONG_F(adr, src)
  29935. res = DREGu32((Opcode >> 9) & 7);
  29936. res &= src;
  29937. flag_C = 0;
  29938. flag_V = 0;
  29939. flag_NotZ = res;
  29940. flag_N = res >> 24;
  29941. DREGu32((Opcode >> 9) & 7) = res;
  29942. POST_IO
  29943. RET(16)
  29944. }
  29945. // ANDaD
  29946. OPCODE(0xC0A8)
  29947. {
  29948. u32 adr, res;
  29949. u32 src, dst;
  29950. FETCH_SWORD(adr);
  29951. adr += AREG((Opcode >> 0) & 7);
  29952. PRE_IO
  29953. READ_LONG_F(adr, src)
  29954. res = DREGu32((Opcode >> 9) & 7);
  29955. res &= src;
  29956. flag_C = 0;
  29957. flag_V = 0;
  29958. flag_NotZ = res;
  29959. flag_N = res >> 24;
  29960. DREGu32((Opcode >> 9) & 7) = res;
  29961. POST_IO
  29962. RET(18)
  29963. }
  29964. // ANDaD
  29965. OPCODE(0xC0B0)
  29966. {
  29967. u32 adr, res;
  29968. u32 src, dst;
  29969. adr = AREG((Opcode >> 0) & 7);
  29970. DECODE_EXT_WORD
  29971. PRE_IO
  29972. READ_LONG_F(adr, src)
  29973. res = DREGu32((Opcode >> 9) & 7);
  29974. res &= src;
  29975. flag_C = 0;
  29976. flag_V = 0;
  29977. flag_NotZ = res;
  29978. flag_N = res >> 24;
  29979. DREGu32((Opcode >> 9) & 7) = res;
  29980. POST_IO
  29981. RET(20)
  29982. }
  29983. // ANDaD
  29984. OPCODE(0xC0B8)
  29985. {
  29986. u32 adr, res;
  29987. u32 src, dst;
  29988. FETCH_SWORD(adr);
  29989. PRE_IO
  29990. READ_LONG_F(adr, src)
  29991. res = DREGu32((Opcode >> 9) & 7);
  29992. res &= src;
  29993. flag_C = 0;
  29994. flag_V = 0;
  29995. flag_NotZ = res;
  29996. flag_N = res >> 24;
  29997. DREGu32((Opcode >> 9) & 7) = res;
  29998. POST_IO
  29999. RET(18)
  30000. }
  30001. // ANDaD
  30002. OPCODE(0xC0B9)
  30003. {
  30004. u32 adr, res;
  30005. u32 src, dst;
  30006. FETCH_LONG(adr);
  30007. PRE_IO
  30008. READ_LONG_F(adr, src)
  30009. res = DREGu32((Opcode >> 9) & 7);
  30010. res &= src;
  30011. flag_C = 0;
  30012. flag_V = 0;
  30013. flag_NotZ = res;
  30014. flag_N = res >> 24;
  30015. DREGu32((Opcode >> 9) & 7) = res;
  30016. POST_IO
  30017. RET(22)
  30018. }
  30019. // ANDaD
  30020. OPCODE(0xC0BA)
  30021. {
  30022. u32 adr, res;
  30023. u32 src, dst;
  30024. adr = GET_SWORD + GET_PC;
  30025. PC++;
  30026. PRE_IO
  30027. READ_LONG_F(adr, src)
  30028. res = DREGu32((Opcode >> 9) & 7);
  30029. res &= src;
  30030. flag_C = 0;
  30031. flag_V = 0;
  30032. flag_NotZ = res;
  30033. flag_N = res >> 24;
  30034. DREGu32((Opcode >> 9) & 7) = res;
  30035. POST_IO
  30036. RET(18)
  30037. }
  30038. // ANDaD
  30039. OPCODE(0xC0BB)
  30040. {
  30041. u32 adr, res;
  30042. u32 src, dst;
  30043. adr = GET_PC;
  30044. DECODE_EXT_WORD
  30045. PRE_IO
  30046. READ_LONG_F(adr, src)
  30047. res = DREGu32((Opcode >> 9) & 7);
  30048. res &= src;
  30049. flag_C = 0;
  30050. flag_V = 0;
  30051. flag_NotZ = res;
  30052. flag_N = res >> 24;
  30053. DREGu32((Opcode >> 9) & 7) = res;
  30054. POST_IO
  30055. RET(20)
  30056. }
  30057. // ANDaD
  30058. OPCODE(0xC0BC)
  30059. {
  30060. u32 adr, res;
  30061. u32 src, dst;
  30062. FETCH_LONG(src);
  30063. res = DREGu32((Opcode >> 9) & 7);
  30064. res &= src;
  30065. flag_C = 0;
  30066. flag_V = 0;
  30067. flag_NotZ = res;
  30068. flag_N = res >> 24;
  30069. DREGu32((Opcode >> 9) & 7) = res;
  30070. RET(16)
  30071. }
  30072. // ANDaD
  30073. OPCODE(0xC09F)
  30074. {
  30075. u32 adr, res;
  30076. u32 src, dst;
  30077. adr = AREG(7);
  30078. AREG(7) += 4;
  30079. PRE_IO
  30080. READ_LONG_F(adr, src)
  30081. res = DREGu32((Opcode >> 9) & 7);
  30082. res &= src;
  30083. flag_C = 0;
  30084. flag_V = 0;
  30085. flag_NotZ = res;
  30086. flag_N = res >> 24;
  30087. DREGu32((Opcode >> 9) & 7) = res;
  30088. POST_IO
  30089. RET(14)
  30090. }
  30091. // ANDaD
  30092. OPCODE(0xC0A7)
  30093. {
  30094. u32 adr, res;
  30095. u32 src, dst;
  30096. adr = AREG(7) - 4;
  30097. AREG(7) = adr;
  30098. PRE_IO
  30099. READ_LONG_F(adr, src)
  30100. res = DREGu32((Opcode >> 9) & 7);
  30101. res &= src;
  30102. flag_C = 0;
  30103. flag_V = 0;
  30104. flag_NotZ = res;
  30105. flag_N = res >> 24;
  30106. DREGu32((Opcode >> 9) & 7) = res;
  30107. POST_IO
  30108. RET(16)
  30109. }
  30110. // ANDDa
  30111. OPCODE(0xC110)
  30112. {
  30113. u32 adr, res;
  30114. u32 src, dst;
  30115. src = DREGu8((Opcode >> 9) & 7);
  30116. adr = AREG((Opcode >> 0) & 7);
  30117. PRE_IO
  30118. READ_BYTE_F(adr, res)
  30119. res &= src;
  30120. flag_C = 0;
  30121. flag_V = 0;
  30122. flag_NotZ = res;
  30123. flag_N = res;
  30124. WRITE_BYTE_F(adr, res)
  30125. POST_IO
  30126. RET(12)
  30127. }
  30128. // ANDDa
  30129. OPCODE(0xC118)
  30130. {
  30131. u32 adr, res;
  30132. u32 src, dst;
  30133. src = DREGu8((Opcode >> 9) & 7);
  30134. adr = AREG((Opcode >> 0) & 7);
  30135. AREG((Opcode >> 0) & 7) += 1;
  30136. PRE_IO
  30137. READ_BYTE_F(adr, res)
  30138. res &= src;
  30139. flag_C = 0;
  30140. flag_V = 0;
  30141. flag_NotZ = res;
  30142. flag_N = res;
  30143. WRITE_BYTE_F(adr, res)
  30144. POST_IO
  30145. RET(12)
  30146. }
  30147. // ANDDa
  30148. OPCODE(0xC120)
  30149. {
  30150. u32 adr, res;
  30151. u32 src, dst;
  30152. src = DREGu8((Opcode >> 9) & 7);
  30153. adr = AREG((Opcode >> 0) & 7) - 1;
  30154. AREG((Opcode >> 0) & 7) = adr;
  30155. PRE_IO
  30156. READ_BYTE_F(adr, res)
  30157. res &= src;
  30158. flag_C = 0;
  30159. flag_V = 0;
  30160. flag_NotZ = res;
  30161. flag_N = res;
  30162. WRITE_BYTE_F(adr, res)
  30163. POST_IO
  30164. RET(14)
  30165. }
  30166. // ANDDa
  30167. OPCODE(0xC128)
  30168. {
  30169. u32 adr, res;
  30170. u32 src, dst;
  30171. src = DREGu8((Opcode >> 9) & 7);
  30172. FETCH_SWORD(adr);
  30173. adr += AREG((Opcode >> 0) & 7);
  30174. PRE_IO
  30175. READ_BYTE_F(adr, res)
  30176. res &= src;
  30177. flag_C = 0;
  30178. flag_V = 0;
  30179. flag_NotZ = res;
  30180. flag_N = res;
  30181. WRITE_BYTE_F(adr, res)
  30182. POST_IO
  30183. RET(16)
  30184. }
  30185. // ANDDa
  30186. OPCODE(0xC130)
  30187. {
  30188. u32 adr, res;
  30189. u32 src, dst;
  30190. src = DREGu8((Opcode >> 9) & 7);
  30191. adr = AREG((Opcode >> 0) & 7);
  30192. DECODE_EXT_WORD
  30193. PRE_IO
  30194. READ_BYTE_F(adr, res)
  30195. res &= src;
  30196. flag_C = 0;
  30197. flag_V = 0;
  30198. flag_NotZ = res;
  30199. flag_N = res;
  30200. WRITE_BYTE_F(adr, res)
  30201. POST_IO
  30202. RET(18)
  30203. }
  30204. // ANDDa
  30205. OPCODE(0xC138)
  30206. {
  30207. u32 adr, res;
  30208. u32 src, dst;
  30209. src = DREGu8((Opcode >> 9) & 7);
  30210. FETCH_SWORD(adr);
  30211. PRE_IO
  30212. READ_BYTE_F(adr, res)
  30213. res &= src;
  30214. flag_C = 0;
  30215. flag_V = 0;
  30216. flag_NotZ = res;
  30217. flag_N = res;
  30218. WRITE_BYTE_F(adr, res)
  30219. POST_IO
  30220. RET(16)
  30221. }
  30222. // ANDDa
  30223. OPCODE(0xC139)
  30224. {
  30225. u32 adr, res;
  30226. u32 src, dst;
  30227. src = DREGu8((Opcode >> 9) & 7);
  30228. FETCH_LONG(adr);
  30229. PRE_IO
  30230. READ_BYTE_F(adr, res)
  30231. res &= src;
  30232. flag_C = 0;
  30233. flag_V = 0;
  30234. flag_NotZ = res;
  30235. flag_N = res;
  30236. WRITE_BYTE_F(adr, res)
  30237. POST_IO
  30238. RET(20)
  30239. }
  30240. // ANDDa
  30241. OPCODE(0xC11F)
  30242. {
  30243. u32 adr, res;
  30244. u32 src, dst;
  30245. src = DREGu8((Opcode >> 9) & 7);
  30246. adr = AREG(7);
  30247. AREG(7) += 2;
  30248. PRE_IO
  30249. READ_BYTE_F(adr, res)
  30250. res &= src;
  30251. flag_C = 0;
  30252. flag_V = 0;
  30253. flag_NotZ = res;
  30254. flag_N = res;
  30255. WRITE_BYTE_F(adr, res)
  30256. POST_IO
  30257. RET(12)
  30258. }
  30259. // ANDDa
  30260. OPCODE(0xC127)
  30261. {
  30262. u32 adr, res;
  30263. u32 src, dst;
  30264. src = DREGu8((Opcode >> 9) & 7);
  30265. adr = AREG(7) - 2;
  30266. AREG(7) = adr;
  30267. PRE_IO
  30268. READ_BYTE_F(adr, res)
  30269. res &= src;
  30270. flag_C = 0;
  30271. flag_V = 0;
  30272. flag_NotZ = res;
  30273. flag_N = res;
  30274. WRITE_BYTE_F(adr, res)
  30275. POST_IO
  30276. RET(14)
  30277. }
  30278. // ANDDa
  30279. OPCODE(0xC150)
  30280. {
  30281. u32 adr, res;
  30282. u32 src, dst;
  30283. src = DREGu16((Opcode >> 9) & 7);
  30284. adr = AREG((Opcode >> 0) & 7);
  30285. PRE_IO
  30286. READ_WORD_F(adr, res)
  30287. res &= src;
  30288. flag_C = 0;
  30289. flag_V = 0;
  30290. flag_NotZ = res;
  30291. flag_N = res >> 8;
  30292. WRITE_WORD_F(adr, res)
  30293. POST_IO
  30294. RET(12)
  30295. }
  30296. // ANDDa
  30297. OPCODE(0xC158)
  30298. {
  30299. u32 adr, res;
  30300. u32 src, dst;
  30301. src = DREGu16((Opcode >> 9) & 7);
  30302. adr = AREG((Opcode >> 0) & 7);
  30303. AREG((Opcode >> 0) & 7) += 2;
  30304. PRE_IO
  30305. READ_WORD_F(adr, res)
  30306. res &= src;
  30307. flag_C = 0;
  30308. flag_V = 0;
  30309. flag_NotZ = res;
  30310. flag_N = res >> 8;
  30311. WRITE_WORD_F(adr, res)
  30312. POST_IO
  30313. RET(12)
  30314. }
  30315. // ANDDa
  30316. OPCODE(0xC160)
  30317. {
  30318. u32 adr, res;
  30319. u32 src, dst;
  30320. src = DREGu16((Opcode >> 9) & 7);
  30321. adr = AREG((Opcode >> 0) & 7) - 2;
  30322. AREG((Opcode >> 0) & 7) = adr;
  30323. PRE_IO
  30324. READ_WORD_F(adr, res)
  30325. res &= src;
  30326. flag_C = 0;
  30327. flag_V = 0;
  30328. flag_NotZ = res;
  30329. flag_N = res >> 8;
  30330. WRITE_WORD_F(adr, res)
  30331. POST_IO
  30332. RET(14)
  30333. }
  30334. // ANDDa
  30335. OPCODE(0xC168)
  30336. {
  30337. u32 adr, res;
  30338. u32 src, dst;
  30339. src = DREGu16((Opcode >> 9) & 7);
  30340. FETCH_SWORD(adr);
  30341. adr += AREG((Opcode >> 0) & 7);
  30342. PRE_IO
  30343. READ_WORD_F(adr, res)
  30344. res &= src;
  30345. flag_C = 0;
  30346. flag_V = 0;
  30347. flag_NotZ = res;
  30348. flag_N = res >> 8;
  30349. WRITE_WORD_F(adr, res)
  30350. POST_IO
  30351. RET(16)
  30352. }
  30353. // ANDDa
  30354. OPCODE(0xC170)
  30355. {
  30356. u32 adr, res;
  30357. u32 src, dst;
  30358. src = DREGu16((Opcode >> 9) & 7);
  30359. adr = AREG((Opcode >> 0) & 7);
  30360. DECODE_EXT_WORD
  30361. PRE_IO
  30362. READ_WORD_F(adr, res)
  30363. res &= src;
  30364. flag_C = 0;
  30365. flag_V = 0;
  30366. flag_NotZ = res;
  30367. flag_N = res >> 8;
  30368. WRITE_WORD_F(adr, res)
  30369. POST_IO
  30370. RET(18)
  30371. }
  30372. // ANDDa
  30373. OPCODE(0xC178)
  30374. {
  30375. u32 adr, res;
  30376. u32 src, dst;
  30377. src = DREGu16((Opcode >> 9) & 7);
  30378. FETCH_SWORD(adr);
  30379. PRE_IO
  30380. READ_WORD_F(adr, res)
  30381. res &= src;
  30382. flag_C = 0;
  30383. flag_V = 0;
  30384. flag_NotZ = res;
  30385. flag_N = res >> 8;
  30386. WRITE_WORD_F(adr, res)
  30387. POST_IO
  30388. RET(16)
  30389. }
  30390. // ANDDa
  30391. OPCODE(0xC179)
  30392. {
  30393. u32 adr, res;
  30394. u32 src, dst;
  30395. src = DREGu16((Opcode >> 9) & 7);
  30396. FETCH_LONG(adr);
  30397. PRE_IO
  30398. READ_WORD_F(adr, res)
  30399. res &= src;
  30400. flag_C = 0;
  30401. flag_V = 0;
  30402. flag_NotZ = res;
  30403. flag_N = res >> 8;
  30404. WRITE_WORD_F(adr, res)
  30405. POST_IO
  30406. RET(20)
  30407. }
  30408. // ANDDa
  30409. OPCODE(0xC15F)
  30410. {
  30411. u32 adr, res;
  30412. u32 src, dst;
  30413. src = DREGu16((Opcode >> 9) & 7);
  30414. adr = AREG(7);
  30415. AREG(7) += 2;
  30416. PRE_IO
  30417. READ_WORD_F(adr, res)
  30418. res &= src;
  30419. flag_C = 0;
  30420. flag_V = 0;
  30421. flag_NotZ = res;
  30422. flag_N = res >> 8;
  30423. WRITE_WORD_F(adr, res)
  30424. POST_IO
  30425. RET(12)
  30426. }
  30427. // ANDDa
  30428. OPCODE(0xC167)
  30429. {
  30430. u32 adr, res;
  30431. u32 src, dst;
  30432. src = DREGu16((Opcode >> 9) & 7);
  30433. adr = AREG(7) - 2;
  30434. AREG(7) = adr;
  30435. PRE_IO
  30436. READ_WORD_F(adr, res)
  30437. res &= src;
  30438. flag_C = 0;
  30439. flag_V = 0;
  30440. flag_NotZ = res;
  30441. flag_N = res >> 8;
  30442. WRITE_WORD_F(adr, res)
  30443. POST_IO
  30444. RET(14)
  30445. }
  30446. // ANDDa
  30447. OPCODE(0xC190)
  30448. {
  30449. u32 adr, res;
  30450. u32 src, dst;
  30451. src = DREGu32((Opcode >> 9) & 7);
  30452. adr = AREG((Opcode >> 0) & 7);
  30453. PRE_IO
  30454. READ_LONG_F(adr, res)
  30455. res &= src;
  30456. flag_C = 0;
  30457. flag_V = 0;
  30458. flag_NotZ = res;
  30459. flag_N = res >> 24;
  30460. WRITE_LONG_F(adr, res)
  30461. POST_IO
  30462. RET(20)
  30463. }
  30464. // ANDDa
  30465. OPCODE(0xC198)
  30466. {
  30467. u32 adr, res;
  30468. u32 src, dst;
  30469. src = DREGu32((Opcode >> 9) & 7);
  30470. adr = AREG((Opcode >> 0) & 7);
  30471. AREG((Opcode >> 0) & 7) += 4;
  30472. PRE_IO
  30473. READ_LONG_F(adr, res)
  30474. res &= src;
  30475. flag_C = 0;
  30476. flag_V = 0;
  30477. flag_NotZ = res;
  30478. flag_N = res >> 24;
  30479. WRITE_LONG_F(adr, res)
  30480. POST_IO
  30481. RET(20)
  30482. }
  30483. // ANDDa
  30484. OPCODE(0xC1A0)
  30485. {
  30486. u32 adr, res;
  30487. u32 src, dst;
  30488. src = DREGu32((Opcode >> 9) & 7);
  30489. adr = AREG((Opcode >> 0) & 7) - 4;
  30490. AREG((Opcode >> 0) & 7) = adr;
  30491. PRE_IO
  30492. READ_LONG_F(adr, res)
  30493. res &= src;
  30494. flag_C = 0;
  30495. flag_V = 0;
  30496. flag_NotZ = res;
  30497. flag_N = res >> 24;
  30498. WRITE_LONG_F(adr, res)
  30499. POST_IO
  30500. RET(22)
  30501. }
  30502. // ANDDa
  30503. OPCODE(0xC1A8)
  30504. {
  30505. u32 adr, res;
  30506. u32 src, dst;
  30507. src = DREGu32((Opcode >> 9) & 7);
  30508. FETCH_SWORD(adr);
  30509. adr += AREG((Opcode >> 0) & 7);
  30510. PRE_IO
  30511. READ_LONG_F(adr, res)
  30512. res &= src;
  30513. flag_C = 0;
  30514. flag_V = 0;
  30515. flag_NotZ = res;
  30516. flag_N = res >> 24;
  30517. WRITE_LONG_F(adr, res)
  30518. POST_IO
  30519. RET(24)
  30520. }
  30521. // ANDDa
  30522. OPCODE(0xC1B0)
  30523. {
  30524. u32 adr, res;
  30525. u32 src, dst;
  30526. src = DREGu32((Opcode >> 9) & 7);
  30527. adr = AREG((Opcode >> 0) & 7);
  30528. DECODE_EXT_WORD
  30529. PRE_IO
  30530. READ_LONG_F(adr, res)
  30531. res &= src;
  30532. flag_C = 0;
  30533. flag_V = 0;
  30534. flag_NotZ = res;
  30535. flag_N = res >> 24;
  30536. WRITE_LONG_F(adr, res)
  30537. POST_IO
  30538. RET(26)
  30539. }
  30540. // ANDDa
  30541. OPCODE(0xC1B8)
  30542. {
  30543. u32 adr, res;
  30544. u32 src, dst;
  30545. src = DREGu32((Opcode >> 9) & 7);
  30546. FETCH_SWORD(adr);
  30547. PRE_IO
  30548. READ_LONG_F(adr, res)
  30549. res &= src;
  30550. flag_C = 0;
  30551. flag_V = 0;
  30552. flag_NotZ = res;
  30553. flag_N = res >> 24;
  30554. WRITE_LONG_F(adr, res)
  30555. POST_IO
  30556. RET(24)
  30557. }
  30558. // ANDDa
  30559. OPCODE(0xC1B9)
  30560. {
  30561. u32 adr, res;
  30562. u32 src, dst;
  30563. src = DREGu32((Opcode >> 9) & 7);
  30564. FETCH_LONG(adr);
  30565. PRE_IO
  30566. READ_LONG_F(adr, res)
  30567. res &= src;
  30568. flag_C = 0;
  30569. flag_V = 0;
  30570. flag_NotZ = res;
  30571. flag_N = res >> 24;
  30572. WRITE_LONG_F(adr, res)
  30573. POST_IO
  30574. RET(28)
  30575. }
  30576. // ANDDa
  30577. OPCODE(0xC19F)
  30578. {
  30579. u32 adr, res;
  30580. u32 src, dst;
  30581. src = DREGu32((Opcode >> 9) & 7);
  30582. adr = AREG(7);
  30583. AREG(7) += 4;
  30584. PRE_IO
  30585. READ_LONG_F(adr, res)
  30586. res &= src;
  30587. flag_C = 0;
  30588. flag_V = 0;
  30589. flag_NotZ = res;
  30590. flag_N = res >> 24;
  30591. WRITE_LONG_F(adr, res)
  30592. POST_IO
  30593. RET(20)
  30594. }
  30595. // ANDDa
  30596. OPCODE(0xC1A7)
  30597. {
  30598. u32 adr, res;
  30599. u32 src, dst;
  30600. src = DREGu32((Opcode >> 9) & 7);
  30601. adr = AREG(7) - 4;
  30602. AREG(7) = adr;
  30603. PRE_IO
  30604. READ_LONG_F(adr, res)
  30605. res &= src;
  30606. flag_C = 0;
  30607. flag_V = 0;
  30608. flag_NotZ = res;
  30609. flag_N = res >> 24;
  30610. WRITE_LONG_F(adr, res)
  30611. POST_IO
  30612. RET(22)
  30613. }
  30614. // ABCD
  30615. OPCODE(0xC100)
  30616. {
  30617. u32 adr, res;
  30618. u32 src, dst;
  30619. u32 corf = 0;
  30620. src = DREGu8((Opcode >> 0) & 7);
  30621. dst = DREGu8((Opcode >> 9) & 7);
  30622. res = (dst & 0xF) + (src & 0xF) + ((flag_X >> M68K_SR_X_SFT) & 1);
  30623. if (res > 9) corf = 6;
  30624. res += (dst & 0xF0) + (src & 0xF0);
  30625. flag_V = ~res;
  30626. res += corf;
  30627. if (res > 0x9F)
  30628. {
  30629. res -= 0xA0;
  30630. flag_X = flag_C = M68K_SR_C;
  30631. }
  30632. else flag_X = flag_C = 0;
  30633. flag_V &= res;
  30634. flag_NotZ |= res & 0xFF;
  30635. flag_N = res;
  30636. DREGu8((Opcode >> 9) & 7) = res;
  30637. RET(6)
  30638. }
  30639. // ABCDM
  30640. OPCODE(0xC108)
  30641. {
  30642. u32 adr, res;
  30643. u32 src, dst;
  30644. u32 corf = 0;
  30645. adr = AREG((Opcode >> 0) & 7) - 1;
  30646. AREG((Opcode >> 0) & 7) = adr;
  30647. PRE_IO
  30648. READ_BYTE_F(adr, src)
  30649. adr = AREG((Opcode >> 9) & 7) - 1;
  30650. AREG((Opcode >> 9) & 7) = adr;
  30651. READ_BYTE_F(adr, dst)
  30652. res = (dst & 0xF) + (src & 0xF) + ((flag_X >> M68K_SR_X_SFT) & 1);
  30653. if (res > 9) corf = 6;
  30654. res += (dst & 0xF0) + (src & 0xF0);
  30655. flag_V = ~res;
  30656. res += corf;
  30657. if (res > 0x9F)
  30658. {
  30659. res -= 0xA0;
  30660. flag_X = flag_C = M68K_SR_C;
  30661. }
  30662. else flag_X = flag_C = 0;
  30663. flag_V &= res;
  30664. flag_NotZ |= res & 0xFF;
  30665. flag_N = res;
  30666. WRITE_BYTE_F(adr, res)
  30667. POST_IO
  30668. RET(18)
  30669. }
  30670. // ABCD7M
  30671. OPCODE(0xC10F)
  30672. {
  30673. u32 adr, res;
  30674. u32 src, dst;
  30675. u32 corf = 0;
  30676. adr = AREG(7) - 2;
  30677. AREG(7) = adr;
  30678. PRE_IO
  30679. READ_BYTE_F(adr, src)
  30680. adr = AREG((Opcode >> 9) & 7) - 1;
  30681. AREG((Opcode >> 9) & 7) = adr;
  30682. READ_BYTE_F(adr, dst)
  30683. res = (dst & 0xF) + (src & 0xF) + ((flag_X >> M68K_SR_X_SFT) & 1);
  30684. if (res > 9) corf = 6;
  30685. res += (dst & 0xF0) + (src & 0xF0);
  30686. flag_V = ~res;
  30687. res += corf;
  30688. if (res > 0x9F)
  30689. {
  30690. res -= 0xA0;
  30691. flag_X = flag_C = M68K_SR_C;
  30692. }
  30693. else flag_X = flag_C = 0;
  30694. flag_V &= res;
  30695. flag_NotZ |= res & 0xFF;
  30696. flag_N = res;
  30697. WRITE_BYTE_F(adr, res)
  30698. POST_IO
  30699. RET(18)
  30700. }
  30701. // ABCDM7
  30702. OPCODE(0xCF08)
  30703. {
  30704. u32 adr, res;
  30705. u32 src, dst;
  30706. u32 corf = 0;
  30707. adr = AREG((Opcode >> 0) & 7) - 1;
  30708. AREG((Opcode >> 0) & 7) = adr;
  30709. PRE_IO
  30710. READ_BYTE_F(adr, src)
  30711. adr = AREG(7) - 2;
  30712. AREG(7) = adr;
  30713. READ_BYTE_F(adr, dst)
  30714. res = (dst & 0xF) + (src & 0xF) + ((flag_X >> M68K_SR_X_SFT) & 1);
  30715. if (res > 9) corf = 6;
  30716. res += (dst & 0xF0) + (src & 0xF0);
  30717. flag_V = ~res;
  30718. res += corf;
  30719. if (res > 0x9F)
  30720. {
  30721. res -= 0xA0;
  30722. flag_X = flag_C = M68K_SR_C;
  30723. }
  30724. else flag_X = flag_C = 0;
  30725. flag_V &= res;
  30726. flag_NotZ |= res & 0xFF;
  30727. flag_N = res;
  30728. WRITE_BYTE_F(adr, res)
  30729. POST_IO
  30730. RET(18)
  30731. }
  30732. // ABCD7M7
  30733. OPCODE(0xCF0F)
  30734. {
  30735. u32 adr, res;
  30736. u32 src, dst;
  30737. u32 corf = 0;
  30738. adr = AREG(7) - 2;
  30739. AREG(7) = adr;
  30740. PRE_IO
  30741. READ_BYTE_F(adr, src)
  30742. adr = AREG(7) - 2;
  30743. AREG(7) = adr;
  30744. READ_BYTE_F(adr, dst)
  30745. res = (dst & 0xF) + (src & 0xF) + ((flag_X >> M68K_SR_X_SFT) & 1);
  30746. if (res > 9) corf = 6;
  30747. res += (dst & 0xF0) + (src & 0xF0);
  30748. flag_V = ~res;
  30749. res += corf;
  30750. if (res > 0x9F)
  30751. {
  30752. res -= 0xA0;
  30753. flag_X = flag_C = M68K_SR_C;
  30754. }
  30755. else flag_X = flag_C = 0;
  30756. flag_V &= res;
  30757. flag_NotZ |= res & 0xFF;
  30758. flag_N = res;
  30759. WRITE_BYTE_F(adr, res)
  30760. POST_IO
  30761. RET(18)
  30762. }
  30763. // MULU
  30764. OPCODE(0xC0C0)
  30765. {
  30766. u32 adr, res;
  30767. u32 src, dst;
  30768. src = DREGu16((Opcode >> 0) & 7);
  30769. res = DREGu16((Opcode >> 9) & 7);
  30770. res *= src;
  30771. flag_N = res >> 24;
  30772. flag_NotZ = res;
  30773. flag_V = flag_C = 0;
  30774. DREGu32((Opcode >> 9) & 7) = res;
  30775. #ifdef USE_CYCLONE_TIMING
  30776. RET(54)
  30777. #else
  30778. RET(50)
  30779. #endif
  30780. }
  30781. // MULU
  30782. OPCODE(0xC0D0)
  30783. {
  30784. u32 adr, res;
  30785. u32 src, dst;
  30786. adr = AREG((Opcode >> 0) & 7);
  30787. PRE_IO
  30788. READ_WORD_F(adr, src)
  30789. res = DREGu16((Opcode >> 9) & 7);
  30790. res *= src;
  30791. flag_N = res >> 24;
  30792. flag_NotZ = res;
  30793. flag_V = flag_C = 0;
  30794. DREGu32((Opcode >> 9) & 7) = res;
  30795. POST_IO
  30796. #ifdef USE_CYCLONE_TIMING
  30797. RET(58)
  30798. #else
  30799. RET(54)
  30800. #endif
  30801. }
  30802. // MULU
  30803. OPCODE(0xC0D8)
  30804. {
  30805. u32 adr, res;
  30806. u32 src, dst;
  30807. adr = AREG((Opcode >> 0) & 7);
  30808. AREG((Opcode >> 0) & 7) += 2;
  30809. PRE_IO
  30810. READ_WORD_F(adr, src)
  30811. res = DREGu16((Opcode >> 9) & 7);
  30812. res *= src;
  30813. flag_N = res >> 24;
  30814. flag_NotZ = res;
  30815. flag_V = flag_C = 0;
  30816. DREGu32((Opcode >> 9) & 7) = res;
  30817. POST_IO
  30818. #ifdef USE_CYCLONE_TIMING
  30819. RET(58)
  30820. #else
  30821. RET(54)
  30822. #endif
  30823. }
  30824. // MULU
  30825. OPCODE(0xC0E0)
  30826. {
  30827. u32 adr, res;
  30828. u32 src, dst;
  30829. adr = AREG((Opcode >> 0) & 7) - 2;
  30830. AREG((Opcode >> 0) & 7) = adr;
  30831. PRE_IO
  30832. READ_WORD_F(adr, src)
  30833. res = DREGu16((Opcode >> 9) & 7);
  30834. res *= src;
  30835. flag_N = res >> 24;
  30836. flag_NotZ = res;
  30837. flag_V = flag_C = 0;
  30838. DREGu32((Opcode >> 9) & 7) = res;
  30839. POST_IO
  30840. #ifdef USE_CYCLONE_TIMING
  30841. RET(60)
  30842. #else
  30843. RET(56)
  30844. #endif
  30845. }
  30846. // MULU
  30847. OPCODE(0xC0E8)
  30848. {
  30849. u32 adr, res;
  30850. u32 src, dst;
  30851. FETCH_SWORD(adr);
  30852. adr += AREG((Opcode >> 0) & 7);
  30853. PRE_IO
  30854. READ_WORD_F(adr, src)
  30855. res = DREGu16((Opcode >> 9) & 7);
  30856. res *= src;
  30857. flag_N = res >> 24;
  30858. flag_NotZ = res;
  30859. flag_V = flag_C = 0;
  30860. DREGu32((Opcode >> 9) & 7) = res;
  30861. POST_IO
  30862. #ifdef USE_CYCLONE_TIMING
  30863. RET(62)
  30864. #else
  30865. RET(58)
  30866. #endif
  30867. }
  30868. // MULU
  30869. OPCODE(0xC0F0)
  30870. {
  30871. u32 adr, res;
  30872. u32 src, dst;
  30873. adr = AREG((Opcode >> 0) & 7);
  30874. DECODE_EXT_WORD
  30875. PRE_IO
  30876. READ_WORD_F(adr, src)
  30877. res = DREGu16((Opcode >> 9) & 7);
  30878. res *= src;
  30879. flag_N = res >> 24;
  30880. flag_NotZ = res;
  30881. flag_V = flag_C = 0;
  30882. DREGu32((Opcode >> 9) & 7) = res;
  30883. POST_IO
  30884. #ifdef USE_CYCLONE_TIMING
  30885. RET(64)
  30886. #else
  30887. RET(60)
  30888. #endif
  30889. }
  30890. // MULU
  30891. OPCODE(0xC0F8)
  30892. {
  30893. u32 adr, res;
  30894. u32 src, dst;
  30895. FETCH_SWORD(adr);
  30896. PRE_IO
  30897. READ_WORD_F(adr, src)
  30898. res = DREGu16((Opcode >> 9) & 7);
  30899. res *= src;
  30900. flag_N = res >> 24;
  30901. flag_NotZ = res;
  30902. flag_V = flag_C = 0;
  30903. DREGu32((Opcode >> 9) & 7) = res;
  30904. POST_IO
  30905. #ifdef USE_CYCLONE_TIMING
  30906. RET(62)
  30907. #else
  30908. RET(58)
  30909. #endif
  30910. }
  30911. // MULU
  30912. OPCODE(0xC0F9)
  30913. {
  30914. u32 adr, res;
  30915. u32 src, dst;
  30916. FETCH_LONG(adr);
  30917. PRE_IO
  30918. READ_WORD_F(adr, src)
  30919. res = DREGu16((Opcode >> 9) & 7);
  30920. res *= src;
  30921. flag_N = res >> 24;
  30922. flag_NotZ = res;
  30923. flag_V = flag_C = 0;
  30924. DREGu32((Opcode >> 9) & 7) = res;
  30925. POST_IO
  30926. #ifdef USE_CYCLONE_TIMING
  30927. RET(66)
  30928. #else
  30929. RET(62)
  30930. #endif
  30931. }
  30932. // MULU
  30933. OPCODE(0xC0FA)
  30934. {
  30935. u32 adr, res;
  30936. u32 src, dst;
  30937. adr = GET_SWORD + GET_PC;
  30938. PC++;
  30939. PRE_IO
  30940. READ_WORD_F(adr, src)
  30941. res = DREGu16((Opcode >> 9) & 7);
  30942. res *= src;
  30943. flag_N = res >> 24;
  30944. flag_NotZ = res;
  30945. flag_V = flag_C = 0;
  30946. DREGu32((Opcode >> 9) & 7) = res;
  30947. POST_IO
  30948. #ifdef USE_CYCLONE_TIMING
  30949. RET(62)
  30950. #else
  30951. RET(58)
  30952. #endif
  30953. }
  30954. // MULU
  30955. OPCODE(0xC0FB)
  30956. {
  30957. u32 adr, res;
  30958. u32 src, dst;
  30959. adr = GET_PC;
  30960. DECODE_EXT_WORD
  30961. PRE_IO
  30962. READ_WORD_F(adr, src)
  30963. res = DREGu16((Opcode >> 9) & 7);
  30964. res *= src;
  30965. flag_N = res >> 24;
  30966. flag_NotZ = res;
  30967. flag_V = flag_C = 0;
  30968. DREGu32((Opcode >> 9) & 7) = res;
  30969. POST_IO
  30970. #ifdef USE_CYCLONE_TIMING
  30971. RET(64)
  30972. #else
  30973. RET(60)
  30974. #endif
  30975. }
  30976. // MULU
  30977. OPCODE(0xC0FC)
  30978. {
  30979. u32 adr, res;
  30980. u32 src, dst;
  30981. FETCH_WORD(src);
  30982. res = DREGu16((Opcode >> 9) & 7);
  30983. res *= src;
  30984. flag_N = res >> 24;
  30985. flag_NotZ = res;
  30986. flag_V = flag_C = 0;
  30987. DREGu32((Opcode >> 9) & 7) = res;
  30988. #ifdef USE_CYCLONE_TIMING
  30989. RET(58)
  30990. #else
  30991. RET(54)
  30992. #endif
  30993. }
  30994. // MULU
  30995. OPCODE(0xC0DF)
  30996. {
  30997. u32 adr, res;
  30998. u32 src, dst;
  30999. adr = AREG(7);
  31000. AREG(7) += 2;
  31001. PRE_IO
  31002. READ_WORD_F(adr, src)
  31003. res = DREGu16((Opcode >> 9) & 7);
  31004. res *= src;
  31005. flag_N = res >> 24;
  31006. flag_NotZ = res;
  31007. flag_V = flag_C = 0;
  31008. DREGu32((Opcode >> 9) & 7) = res;
  31009. POST_IO
  31010. #ifdef USE_CYCLONE_TIMING
  31011. RET(58)
  31012. #else
  31013. RET(54)
  31014. #endif
  31015. }
  31016. // MULU
  31017. OPCODE(0xC0E7)
  31018. {
  31019. u32 adr, res;
  31020. u32 src, dst;
  31021. adr = AREG(7) - 2;
  31022. AREG(7) = adr;
  31023. PRE_IO
  31024. READ_WORD_F(adr, src)
  31025. res = DREGu16((Opcode >> 9) & 7);
  31026. res *= src;
  31027. flag_N = res >> 24;
  31028. flag_NotZ = res;
  31029. flag_V = flag_C = 0;
  31030. DREGu32((Opcode >> 9) & 7) = res;
  31031. POST_IO
  31032. #ifdef USE_CYCLONE_TIMING
  31033. RET(60)
  31034. #else
  31035. RET(56)
  31036. #endif
  31037. }
  31038. // MULS
  31039. OPCODE(0xC1C0)
  31040. {
  31041. u32 adr, res;
  31042. u32 src, dst;
  31043. src = (s32)DREGs16((Opcode >> 0) & 7);
  31044. res = (s32)DREGs16((Opcode >> 9) & 7);
  31045. res = ((s32)res) * ((s32)src);
  31046. flag_N = res >> 24;
  31047. flag_NotZ = res;
  31048. flag_V = flag_C = 0;
  31049. DREGu32((Opcode >> 9) & 7) = res;
  31050. #ifdef USE_CYCLONE_TIMING
  31051. RET(54)
  31052. #else
  31053. RET(50)
  31054. #endif
  31055. }
  31056. // MULS
  31057. OPCODE(0xC1D0)
  31058. {
  31059. u32 adr, res;
  31060. u32 src, dst;
  31061. adr = AREG((Opcode >> 0) & 7);
  31062. PRE_IO
  31063. READSX_WORD_F(adr, src)
  31064. res = (s32)DREGs16((Opcode >> 9) & 7);
  31065. res = ((s32)res) * ((s32)src);
  31066. flag_N = res >> 24;
  31067. flag_NotZ = res;
  31068. flag_V = flag_C = 0;
  31069. DREGu32((Opcode >> 9) & 7) = res;
  31070. POST_IO
  31071. #ifdef USE_CYCLONE_TIMING
  31072. RET(58)
  31073. #else
  31074. RET(54)
  31075. #endif
  31076. }
  31077. // MULS
  31078. OPCODE(0xC1D8)
  31079. {
  31080. u32 adr, res;
  31081. u32 src, dst;
  31082. adr = AREG((Opcode >> 0) & 7);
  31083. AREG((Opcode >> 0) & 7) += 2;
  31084. PRE_IO
  31085. READSX_WORD_F(adr, src)
  31086. res = (s32)DREGs16((Opcode >> 9) & 7);
  31087. res = ((s32)res) * ((s32)src);
  31088. flag_N = res >> 24;
  31089. flag_NotZ = res;
  31090. flag_V = flag_C = 0;
  31091. DREGu32((Opcode >> 9) & 7) = res;
  31092. POST_IO
  31093. #ifdef USE_CYCLONE_TIMING
  31094. RET(58)
  31095. #else
  31096. RET(54)
  31097. #endif
  31098. }
  31099. // MULS
  31100. OPCODE(0xC1E0)
  31101. {
  31102. u32 adr, res;
  31103. u32 src, dst;
  31104. adr = AREG((Opcode >> 0) & 7) - 2;
  31105. AREG((Opcode >> 0) & 7) = adr;
  31106. PRE_IO
  31107. READSX_WORD_F(adr, src)
  31108. res = (s32)DREGs16((Opcode >> 9) & 7);
  31109. res = ((s32)res) * ((s32)src);
  31110. flag_N = res >> 24;
  31111. flag_NotZ = res;
  31112. flag_V = flag_C = 0;
  31113. DREGu32((Opcode >> 9) & 7) = res;
  31114. POST_IO
  31115. #ifdef USE_CYCLONE_TIMING
  31116. RET(60)
  31117. #else
  31118. RET(56)
  31119. #endif
  31120. }
  31121. // MULS
  31122. OPCODE(0xC1E8)
  31123. {
  31124. u32 adr, res;
  31125. u32 src, dst;
  31126. FETCH_SWORD(adr);
  31127. adr += AREG((Opcode >> 0) & 7);
  31128. PRE_IO
  31129. READSX_WORD_F(adr, src)
  31130. res = (s32)DREGs16((Opcode >> 9) & 7);
  31131. res = ((s32)res) * ((s32)src);
  31132. flag_N = res >> 24;
  31133. flag_NotZ = res;
  31134. flag_V = flag_C = 0;
  31135. DREGu32((Opcode >> 9) & 7) = res;
  31136. POST_IO
  31137. #ifdef USE_CYCLONE_TIMING
  31138. RET(62)
  31139. #else
  31140. RET(58)
  31141. #endif
  31142. }
  31143. // MULS
  31144. OPCODE(0xC1F0)
  31145. {
  31146. u32 adr, res;
  31147. u32 src, dst;
  31148. adr = AREG((Opcode >> 0) & 7);
  31149. DECODE_EXT_WORD
  31150. PRE_IO
  31151. READSX_WORD_F(adr, src)
  31152. res = (s32)DREGs16((Opcode >> 9) & 7);
  31153. res = ((s32)res) * ((s32)src);
  31154. flag_N = res >> 24;
  31155. flag_NotZ = res;
  31156. flag_V = flag_C = 0;
  31157. DREGu32((Opcode >> 9) & 7) = res;
  31158. POST_IO
  31159. #ifdef USE_CYCLONE_TIMING
  31160. RET(64)
  31161. #else
  31162. RET(60)
  31163. #endif
  31164. }
  31165. // MULS
  31166. OPCODE(0xC1F8)
  31167. {
  31168. u32 adr, res;
  31169. u32 src, dst;
  31170. FETCH_SWORD(adr);
  31171. PRE_IO
  31172. READSX_WORD_F(adr, src)
  31173. res = (s32)DREGs16((Opcode >> 9) & 7);
  31174. res = ((s32)res) * ((s32)src);
  31175. flag_N = res >> 24;
  31176. flag_NotZ = res;
  31177. flag_V = flag_C = 0;
  31178. DREGu32((Opcode >> 9) & 7) = res;
  31179. POST_IO
  31180. #ifdef USE_CYCLONE_TIMING
  31181. RET(62)
  31182. #else
  31183. RET(58)
  31184. #endif
  31185. }
  31186. // MULS
  31187. OPCODE(0xC1F9)
  31188. {
  31189. u32 adr, res;
  31190. u32 src, dst;
  31191. FETCH_LONG(adr);
  31192. PRE_IO
  31193. READSX_WORD_F(adr, src)
  31194. res = (s32)DREGs16((Opcode >> 9) & 7);
  31195. res = ((s32)res) * ((s32)src);
  31196. flag_N = res >> 24;
  31197. flag_NotZ = res;
  31198. flag_V = flag_C = 0;
  31199. DREGu32((Opcode >> 9) & 7) = res;
  31200. POST_IO
  31201. #ifdef USE_CYCLONE_TIMING
  31202. RET(66)
  31203. #else
  31204. RET(62)
  31205. #endif
  31206. }
  31207. // MULS
  31208. OPCODE(0xC1FA)
  31209. {
  31210. u32 adr, res;
  31211. u32 src, dst;
  31212. adr = GET_SWORD + GET_PC;
  31213. PC++;
  31214. PRE_IO
  31215. READSX_WORD_F(adr, src)
  31216. res = (s32)DREGs16((Opcode >> 9) & 7);
  31217. res = ((s32)res) * ((s32)src);
  31218. flag_N = res >> 24;
  31219. flag_NotZ = res;
  31220. flag_V = flag_C = 0;
  31221. DREGu32((Opcode >> 9) & 7) = res;
  31222. POST_IO
  31223. #ifdef USE_CYCLONE_TIMING
  31224. RET(62)
  31225. #else
  31226. RET(58)
  31227. #endif
  31228. }
  31229. // MULS
  31230. OPCODE(0xC1FB)
  31231. {
  31232. u32 adr, res;
  31233. u32 src, dst;
  31234. adr = GET_PC;
  31235. DECODE_EXT_WORD
  31236. PRE_IO
  31237. READSX_WORD_F(adr, src)
  31238. res = (s32)DREGs16((Opcode >> 9) & 7);
  31239. res = ((s32)res) * ((s32)src);
  31240. flag_N = res >> 24;
  31241. flag_NotZ = res;
  31242. flag_V = flag_C = 0;
  31243. DREGu32((Opcode >> 9) & 7) = res;
  31244. POST_IO
  31245. #ifdef USE_CYCLONE_TIMING
  31246. RET(64)
  31247. #else
  31248. RET(60)
  31249. #endif
  31250. }
  31251. // MULS
  31252. OPCODE(0xC1FC)
  31253. {
  31254. u32 adr, res;
  31255. u32 src, dst;
  31256. FETCH_SWORD(src);
  31257. res = (s32)DREGs16((Opcode >> 9) & 7);
  31258. res = ((s32)res) * ((s32)src);
  31259. flag_N = res >> 24;
  31260. flag_NotZ = res;
  31261. flag_V = flag_C = 0;
  31262. DREGu32((Opcode >> 9) & 7) = res;
  31263. #ifdef USE_CYCLONE_TIMING
  31264. RET(58)
  31265. #else
  31266. RET(54)
  31267. #endif
  31268. }
  31269. // MULS
  31270. OPCODE(0xC1DF)
  31271. {
  31272. u32 adr, res;
  31273. u32 src, dst;
  31274. adr = AREG(7);
  31275. AREG(7) += 2;
  31276. PRE_IO
  31277. READSX_WORD_F(adr, src)
  31278. res = (s32)DREGs16((Opcode >> 9) & 7);
  31279. res = ((s32)res) * ((s32)src);
  31280. flag_N = res >> 24;
  31281. flag_NotZ = res;
  31282. flag_V = flag_C = 0;
  31283. DREGu32((Opcode >> 9) & 7) = res;
  31284. POST_IO
  31285. #ifdef USE_CYCLONE_TIMING
  31286. RET(58)
  31287. #else
  31288. RET(54)
  31289. #endif
  31290. }
  31291. // MULS
  31292. OPCODE(0xC1E7)
  31293. {
  31294. u32 adr, res;
  31295. u32 src, dst;
  31296. adr = AREG(7) - 2;
  31297. AREG(7) = adr;
  31298. PRE_IO
  31299. READSX_WORD_F(adr, src)
  31300. res = (s32)DREGs16((Opcode >> 9) & 7);
  31301. res = ((s32)res) * ((s32)src);
  31302. flag_N = res >> 24;
  31303. flag_NotZ = res;
  31304. flag_V = flag_C = 0;
  31305. DREGu32((Opcode >> 9) & 7) = res;
  31306. POST_IO
  31307. #ifdef USE_CYCLONE_TIMING
  31308. RET(60)
  31309. #else
  31310. RET(56)
  31311. #endif
  31312. }
  31313. // EXGDD
  31314. OPCODE(0xC140)
  31315. {
  31316. u32 adr, res;
  31317. u32 src, dst;
  31318. res = DREGu32((Opcode >> 0) & 7);
  31319. src = DREGu32((Opcode >> 9) & 7);
  31320. DREGu32((Opcode >> 9) & 7) = res;
  31321. res = src;
  31322. DREGu32((Opcode >> 0) & 7) = res;
  31323. RET(6)
  31324. }
  31325. // EXGAA
  31326. OPCODE(0xC148)
  31327. {
  31328. u32 adr, res;
  31329. u32 src, dst;
  31330. res = AREGu32((Opcode >> 0) & 7);
  31331. src = AREGu32((Opcode >> 9) & 7);
  31332. AREG((Opcode >> 9) & 7) = res;
  31333. res = src;
  31334. AREG((Opcode >> 0) & 7) = res;
  31335. RET(6)
  31336. }
  31337. // EXGAD
  31338. OPCODE(0xC188)
  31339. {
  31340. u32 adr, res;
  31341. u32 src, dst;
  31342. res = AREGu32((Opcode >> 0) & 7);
  31343. src = DREGu32((Opcode >> 9) & 7);
  31344. DREGu32((Opcode >> 9) & 7) = res;
  31345. res = src;
  31346. AREG((Opcode >> 0) & 7) = res;
  31347. RET(6)
  31348. }
  31349. // ADDaD
  31350. OPCODE(0xD000)
  31351. {
  31352. u32 adr, res;
  31353. u32 src, dst;
  31354. src = DREGu8((Opcode >> 0) & 7);
  31355. dst = DREGu8((Opcode >> 9) & 7);
  31356. res = dst + src;
  31357. flag_N = flag_X = flag_C = res;
  31358. flag_V = (src ^ res) & (dst ^ res);
  31359. flag_NotZ = res & 0xFF;
  31360. DREGu8((Opcode >> 9) & 7) = res;
  31361. RET(4)
  31362. }
  31363. // ADDaD
  31364. #if 0
  31365. OPCODE(0xD008)
  31366. {
  31367. u32 adr, res;
  31368. u32 src, dst;
  31369. // can't read byte from Ax registers !
  31370. ctx->execinfo |= M68K_FAULTED;
  31371. ctx->io_cycle_counter = 0;
  31372. /*
  31373. goto famec_Exec_End;
  31374. dst = DREGu8((Opcode >> 9) & 7);
  31375. res = dst + src;
  31376. flag_N = flag_X = flag_C = res;
  31377. flag_V = (src ^ res) & (dst ^ res);
  31378. flag_NotZ = res & 0xFF;
  31379. DREGu8((Opcode >> 9) & 7) = res;
  31380. */
  31381. RET(4)
  31382. }
  31383. #endif
  31384. // ADDaD
  31385. OPCODE(0xD010)
  31386. {
  31387. u32 adr, res;
  31388. u32 src, dst;
  31389. adr = AREG((Opcode >> 0) & 7);
  31390. PRE_IO
  31391. READ_BYTE_F(adr, src)
  31392. dst = DREGu8((Opcode >> 9) & 7);
  31393. res = dst + src;
  31394. flag_N = flag_X = flag_C = res;
  31395. flag_V = (src ^ res) & (dst ^ res);
  31396. flag_NotZ = res & 0xFF;
  31397. DREGu8((Opcode >> 9) & 7) = res;
  31398. POST_IO
  31399. RET(8)
  31400. }
  31401. // ADDaD
  31402. OPCODE(0xD018)
  31403. {
  31404. u32 adr, res;
  31405. u32 src, dst;
  31406. adr = AREG((Opcode >> 0) & 7);
  31407. AREG((Opcode >> 0) & 7) += 1;
  31408. PRE_IO
  31409. READ_BYTE_F(adr, src)
  31410. dst = DREGu8((Opcode >> 9) & 7);
  31411. res = dst + src;
  31412. flag_N = flag_X = flag_C = res;
  31413. flag_V = (src ^ res) & (dst ^ res);
  31414. flag_NotZ = res & 0xFF;
  31415. DREGu8((Opcode >> 9) & 7) = res;
  31416. POST_IO
  31417. RET(8)
  31418. }
  31419. // ADDaD
  31420. OPCODE(0xD020)
  31421. {
  31422. u32 adr, res;
  31423. u32 src, dst;
  31424. adr = AREG((Opcode >> 0) & 7) - 1;
  31425. AREG((Opcode >> 0) & 7) = adr;
  31426. PRE_IO
  31427. READ_BYTE_F(adr, src)
  31428. dst = DREGu8((Opcode >> 9) & 7);
  31429. res = dst + src;
  31430. flag_N = flag_X = flag_C = res;
  31431. flag_V = (src ^ res) & (dst ^ res);
  31432. flag_NotZ = res & 0xFF;
  31433. DREGu8((Opcode >> 9) & 7) = res;
  31434. POST_IO
  31435. RET(10)
  31436. }
  31437. // ADDaD
  31438. OPCODE(0xD028)
  31439. {
  31440. u32 adr, res;
  31441. u32 src, dst;
  31442. FETCH_SWORD(adr);
  31443. adr += AREG((Opcode >> 0) & 7);
  31444. PRE_IO
  31445. READ_BYTE_F(adr, src)
  31446. dst = DREGu8((Opcode >> 9) & 7);
  31447. res = dst + src;
  31448. flag_N = flag_X = flag_C = res;
  31449. flag_V = (src ^ res) & (dst ^ res);
  31450. flag_NotZ = res & 0xFF;
  31451. DREGu8((Opcode >> 9) & 7) = res;
  31452. POST_IO
  31453. RET(12)
  31454. }
  31455. // ADDaD
  31456. OPCODE(0xD030)
  31457. {
  31458. u32 adr, res;
  31459. u32 src, dst;
  31460. adr = AREG((Opcode >> 0) & 7);
  31461. DECODE_EXT_WORD
  31462. PRE_IO
  31463. READ_BYTE_F(adr, src)
  31464. dst = DREGu8((Opcode >> 9) & 7);
  31465. res = dst + src;
  31466. flag_N = flag_X = flag_C = res;
  31467. flag_V = (src ^ res) & (dst ^ res);
  31468. flag_NotZ = res & 0xFF;
  31469. DREGu8((Opcode >> 9) & 7) = res;
  31470. POST_IO
  31471. RET(14)
  31472. }
  31473. // ADDaD
  31474. OPCODE(0xD038)
  31475. {
  31476. u32 adr, res;
  31477. u32 src, dst;
  31478. FETCH_SWORD(adr);
  31479. PRE_IO
  31480. READ_BYTE_F(adr, src)
  31481. dst = DREGu8((Opcode >> 9) & 7);
  31482. res = dst + src;
  31483. flag_N = flag_X = flag_C = res;
  31484. flag_V = (src ^ res) & (dst ^ res);
  31485. flag_NotZ = res & 0xFF;
  31486. DREGu8((Opcode >> 9) & 7) = res;
  31487. POST_IO
  31488. RET(12)
  31489. }
  31490. // ADDaD
  31491. OPCODE(0xD039)
  31492. {
  31493. u32 adr, res;
  31494. u32 src, dst;
  31495. FETCH_LONG(adr);
  31496. PRE_IO
  31497. READ_BYTE_F(adr, src)
  31498. dst = DREGu8((Opcode >> 9) & 7);
  31499. res = dst + src;
  31500. flag_N = flag_X = flag_C = res;
  31501. flag_V = (src ^ res) & (dst ^ res);
  31502. flag_NotZ = res & 0xFF;
  31503. DREGu8((Opcode >> 9) & 7) = res;
  31504. POST_IO
  31505. RET(16)
  31506. }
  31507. // ADDaD
  31508. OPCODE(0xD03A)
  31509. {
  31510. u32 adr, res;
  31511. u32 src, dst;
  31512. adr = GET_SWORD + GET_PC;
  31513. PC++;
  31514. PRE_IO
  31515. READ_BYTE_F(adr, src)
  31516. dst = DREGu8((Opcode >> 9) & 7);
  31517. res = dst + src;
  31518. flag_N = flag_X = flag_C = res;
  31519. flag_V = (src ^ res) & (dst ^ res);
  31520. flag_NotZ = res & 0xFF;
  31521. DREGu8((Opcode >> 9) & 7) = res;
  31522. POST_IO
  31523. RET(12)
  31524. }
  31525. // ADDaD
  31526. OPCODE(0xD03B)
  31527. {
  31528. u32 adr, res;
  31529. u32 src, dst;
  31530. adr = GET_PC;
  31531. DECODE_EXT_WORD
  31532. PRE_IO
  31533. READ_BYTE_F(adr, src)
  31534. dst = DREGu8((Opcode >> 9) & 7);
  31535. res = dst + src;
  31536. flag_N = flag_X = flag_C = res;
  31537. flag_V = (src ^ res) & (dst ^ res);
  31538. flag_NotZ = res & 0xFF;
  31539. DREGu8((Opcode >> 9) & 7) = res;
  31540. POST_IO
  31541. RET(14)
  31542. }
  31543. // ADDaD
  31544. OPCODE(0xD03C)
  31545. {
  31546. u32 adr, res;
  31547. u32 src, dst;
  31548. FETCH_BYTE(src);
  31549. dst = DREGu8((Opcode >> 9) & 7);
  31550. res = dst + src;
  31551. flag_N = flag_X = flag_C = res;
  31552. flag_V = (src ^ res) & (dst ^ res);
  31553. flag_NotZ = res & 0xFF;
  31554. DREGu8((Opcode >> 9) & 7) = res;
  31555. RET(8)
  31556. }
  31557. // ADDaD
  31558. OPCODE(0xD01F)
  31559. {
  31560. u32 adr, res;
  31561. u32 src, dst;
  31562. adr = AREG(7);
  31563. AREG(7) += 2;
  31564. PRE_IO
  31565. READ_BYTE_F(adr, src)
  31566. dst = DREGu8((Opcode >> 9) & 7);
  31567. res = dst + src;
  31568. flag_N = flag_X = flag_C = res;
  31569. flag_V = (src ^ res) & (dst ^ res);
  31570. flag_NotZ = res & 0xFF;
  31571. DREGu8((Opcode >> 9) & 7) = res;
  31572. POST_IO
  31573. RET(8)
  31574. }
  31575. // ADDaD
  31576. OPCODE(0xD027)
  31577. {
  31578. u32 adr, res;
  31579. u32 src, dst;
  31580. adr = AREG(7) - 2;
  31581. AREG(7) = adr;
  31582. PRE_IO
  31583. READ_BYTE_F(adr, src)
  31584. dst = DREGu8((Opcode >> 9) & 7);
  31585. res = dst + src;
  31586. flag_N = flag_X = flag_C = res;
  31587. flag_V = (src ^ res) & (dst ^ res);
  31588. flag_NotZ = res & 0xFF;
  31589. DREGu8((Opcode >> 9) & 7) = res;
  31590. POST_IO
  31591. RET(10)
  31592. }
  31593. // ADDaD
  31594. OPCODE(0xD040)
  31595. {
  31596. u32 adr, res;
  31597. u32 src, dst;
  31598. src = DREGu16((Opcode >> 0) & 7);
  31599. dst = DREGu16((Opcode >> 9) & 7);
  31600. res = dst + src;
  31601. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  31602. flag_N = flag_X = flag_C = res >> 8;
  31603. flag_NotZ = res & 0xFFFF;
  31604. DREGu16((Opcode >> 9) & 7) = res;
  31605. RET(4)
  31606. }
  31607. // ADDaD
  31608. OPCODE(0xD048)
  31609. {
  31610. u32 adr, res;
  31611. u32 src, dst;
  31612. src = AREGu16((Opcode >> 0) & 7);
  31613. dst = DREGu16((Opcode >> 9) & 7);
  31614. res = dst + src;
  31615. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  31616. flag_N = flag_X = flag_C = res >> 8;
  31617. flag_NotZ = res & 0xFFFF;
  31618. DREGu16((Opcode >> 9) & 7) = res;
  31619. RET(4)
  31620. }
  31621. // ADDaD
  31622. OPCODE(0xD050)
  31623. {
  31624. u32 adr, res;
  31625. u32 src, dst;
  31626. adr = AREG((Opcode >> 0) & 7);
  31627. PRE_IO
  31628. READ_WORD_F(adr, src)
  31629. dst = DREGu16((Opcode >> 9) & 7);
  31630. res = dst + src;
  31631. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  31632. flag_N = flag_X = flag_C = res >> 8;
  31633. flag_NotZ = res & 0xFFFF;
  31634. DREGu16((Opcode >> 9) & 7) = res;
  31635. POST_IO
  31636. RET(8)
  31637. }
  31638. // ADDaD
  31639. OPCODE(0xD058)
  31640. {
  31641. u32 adr, res;
  31642. u32 src, dst;
  31643. adr = AREG((Opcode >> 0) & 7);
  31644. AREG((Opcode >> 0) & 7) += 2;
  31645. PRE_IO
  31646. READ_WORD_F(adr, src)
  31647. dst = DREGu16((Opcode >> 9) & 7);
  31648. res = dst + src;
  31649. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  31650. flag_N = flag_X = flag_C = res >> 8;
  31651. flag_NotZ = res & 0xFFFF;
  31652. DREGu16((Opcode >> 9) & 7) = res;
  31653. POST_IO
  31654. RET(8)
  31655. }
  31656. // ADDaD
  31657. OPCODE(0xD060)
  31658. {
  31659. u32 adr, res;
  31660. u32 src, dst;
  31661. adr = AREG((Opcode >> 0) & 7) - 2;
  31662. AREG((Opcode >> 0) & 7) = adr;
  31663. PRE_IO
  31664. READ_WORD_F(adr, src)
  31665. dst = DREGu16((Opcode >> 9) & 7);
  31666. res = dst + src;
  31667. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  31668. flag_N = flag_X = flag_C = res >> 8;
  31669. flag_NotZ = res & 0xFFFF;
  31670. DREGu16((Opcode >> 9) & 7) = res;
  31671. POST_IO
  31672. RET(10)
  31673. }
  31674. // ADDaD
  31675. OPCODE(0xD068)
  31676. {
  31677. u32 adr, res;
  31678. u32 src, dst;
  31679. FETCH_SWORD(adr);
  31680. adr += AREG((Opcode >> 0) & 7);
  31681. PRE_IO
  31682. READ_WORD_F(adr, src)
  31683. dst = DREGu16((Opcode >> 9) & 7);
  31684. res = dst + src;
  31685. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  31686. flag_N = flag_X = flag_C = res >> 8;
  31687. flag_NotZ = res & 0xFFFF;
  31688. DREGu16((Opcode >> 9) & 7) = res;
  31689. POST_IO
  31690. RET(12)
  31691. }
  31692. // ADDaD
  31693. OPCODE(0xD070)
  31694. {
  31695. u32 adr, res;
  31696. u32 src, dst;
  31697. adr = AREG((Opcode >> 0) & 7);
  31698. DECODE_EXT_WORD
  31699. PRE_IO
  31700. READ_WORD_F(adr, src)
  31701. dst = DREGu16((Opcode >> 9) & 7);
  31702. res = dst + src;
  31703. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  31704. flag_N = flag_X = flag_C = res >> 8;
  31705. flag_NotZ = res & 0xFFFF;
  31706. DREGu16((Opcode >> 9) & 7) = res;
  31707. POST_IO
  31708. RET(14)
  31709. }
  31710. // ADDaD
  31711. OPCODE(0xD078)
  31712. {
  31713. u32 adr, res;
  31714. u32 src, dst;
  31715. FETCH_SWORD(adr);
  31716. PRE_IO
  31717. READ_WORD_F(adr, src)
  31718. dst = DREGu16((Opcode >> 9) & 7);
  31719. res = dst + src;
  31720. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  31721. flag_N = flag_X = flag_C = res >> 8;
  31722. flag_NotZ = res & 0xFFFF;
  31723. DREGu16((Opcode >> 9) & 7) = res;
  31724. POST_IO
  31725. RET(12)
  31726. }
  31727. // ADDaD
  31728. OPCODE(0xD079)
  31729. {
  31730. u32 adr, res;
  31731. u32 src, dst;
  31732. FETCH_LONG(adr);
  31733. PRE_IO
  31734. READ_WORD_F(adr, src)
  31735. dst = DREGu16((Opcode >> 9) & 7);
  31736. res = dst + src;
  31737. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  31738. flag_N = flag_X = flag_C = res >> 8;
  31739. flag_NotZ = res & 0xFFFF;
  31740. DREGu16((Opcode >> 9) & 7) = res;
  31741. POST_IO
  31742. RET(16)
  31743. }
  31744. // ADDaD
  31745. OPCODE(0xD07A)
  31746. {
  31747. u32 adr, res;
  31748. u32 src, dst;
  31749. adr = GET_SWORD + GET_PC;
  31750. PC++;
  31751. PRE_IO
  31752. READ_WORD_F(adr, src)
  31753. dst = DREGu16((Opcode >> 9) & 7);
  31754. res = dst + src;
  31755. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  31756. flag_N = flag_X = flag_C = res >> 8;
  31757. flag_NotZ = res & 0xFFFF;
  31758. DREGu16((Opcode >> 9) & 7) = res;
  31759. POST_IO
  31760. RET(12)
  31761. }
  31762. // ADDaD
  31763. OPCODE(0xD07B)
  31764. {
  31765. u32 adr, res;
  31766. u32 src, dst;
  31767. adr = GET_PC;
  31768. DECODE_EXT_WORD
  31769. PRE_IO
  31770. READ_WORD_F(adr, src)
  31771. dst = DREGu16((Opcode >> 9) & 7);
  31772. res = dst + src;
  31773. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  31774. flag_N = flag_X = flag_C = res >> 8;
  31775. flag_NotZ = res & 0xFFFF;
  31776. DREGu16((Opcode >> 9) & 7) = res;
  31777. POST_IO
  31778. RET(14)
  31779. }
  31780. // ADDaD
  31781. OPCODE(0xD07C)
  31782. {
  31783. u32 adr, res;
  31784. u32 src, dst;
  31785. FETCH_WORD(src);
  31786. dst = DREGu16((Opcode >> 9) & 7);
  31787. res = dst + src;
  31788. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  31789. flag_N = flag_X = flag_C = res >> 8;
  31790. flag_NotZ = res & 0xFFFF;
  31791. DREGu16((Opcode >> 9) & 7) = res;
  31792. RET(8)
  31793. }
  31794. // ADDaD
  31795. OPCODE(0xD05F)
  31796. {
  31797. u32 adr, res;
  31798. u32 src, dst;
  31799. adr = AREG(7);
  31800. AREG(7) += 2;
  31801. PRE_IO
  31802. READ_WORD_F(adr, src)
  31803. dst = DREGu16((Opcode >> 9) & 7);
  31804. res = dst + src;
  31805. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  31806. flag_N = flag_X = flag_C = res >> 8;
  31807. flag_NotZ = res & 0xFFFF;
  31808. DREGu16((Opcode >> 9) & 7) = res;
  31809. POST_IO
  31810. RET(8)
  31811. }
  31812. // ADDaD
  31813. OPCODE(0xD067)
  31814. {
  31815. u32 adr, res;
  31816. u32 src, dst;
  31817. adr = AREG(7) - 2;
  31818. AREG(7) = adr;
  31819. PRE_IO
  31820. READ_WORD_F(adr, src)
  31821. dst = DREGu16((Opcode >> 9) & 7);
  31822. res = dst + src;
  31823. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  31824. flag_N = flag_X = flag_C = res >> 8;
  31825. flag_NotZ = res & 0xFFFF;
  31826. DREGu16((Opcode >> 9) & 7) = res;
  31827. POST_IO
  31828. RET(10)
  31829. }
  31830. // ADDaD
  31831. OPCODE(0xD080)
  31832. {
  31833. u32 adr, res;
  31834. u32 src, dst;
  31835. src = DREGu32((Opcode >> 0) & 7);
  31836. dst = DREGu32((Opcode >> 9) & 7);
  31837. res = dst + src;
  31838. flag_NotZ = res;
  31839. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  31840. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  31841. flag_N = res >> 24;
  31842. DREGu32((Opcode >> 9) & 7) = res;
  31843. RET(8)
  31844. }
  31845. // ADDaD
  31846. OPCODE(0xD088)
  31847. {
  31848. u32 adr, res;
  31849. u32 src, dst;
  31850. src = AREGu32((Opcode >> 0) & 7);
  31851. dst = DREGu32((Opcode >> 9) & 7);
  31852. res = dst + src;
  31853. flag_NotZ = res;
  31854. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  31855. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  31856. flag_N = res >> 24;
  31857. DREGu32((Opcode >> 9) & 7) = res;
  31858. RET(8)
  31859. }
  31860. // ADDaD
  31861. OPCODE(0xD090)
  31862. {
  31863. u32 adr, res;
  31864. u32 src, dst;
  31865. adr = AREG((Opcode >> 0) & 7);
  31866. PRE_IO
  31867. READ_LONG_F(adr, src)
  31868. dst = DREGu32((Opcode >> 9) & 7);
  31869. res = dst + src;
  31870. flag_NotZ = res;
  31871. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  31872. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  31873. flag_N = res >> 24;
  31874. DREGu32((Opcode >> 9) & 7) = res;
  31875. POST_IO
  31876. RET(14)
  31877. }
  31878. // ADDaD
  31879. OPCODE(0xD098)
  31880. {
  31881. u32 adr, res;
  31882. u32 src, dst;
  31883. adr = AREG((Opcode >> 0) & 7);
  31884. AREG((Opcode >> 0) & 7) += 4;
  31885. PRE_IO
  31886. READ_LONG_F(adr, src)
  31887. dst = DREGu32((Opcode >> 9) & 7);
  31888. res = dst + src;
  31889. flag_NotZ = res;
  31890. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  31891. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  31892. flag_N = res >> 24;
  31893. DREGu32((Opcode >> 9) & 7) = res;
  31894. POST_IO
  31895. RET(14)
  31896. }
  31897. // ADDaD
  31898. OPCODE(0xD0A0)
  31899. {
  31900. u32 adr, res;
  31901. u32 src, dst;
  31902. adr = AREG((Opcode >> 0) & 7) - 4;
  31903. AREG((Opcode >> 0) & 7) = adr;
  31904. PRE_IO
  31905. READ_LONG_F(adr, src)
  31906. dst = DREGu32((Opcode >> 9) & 7);
  31907. res = dst + src;
  31908. flag_NotZ = res;
  31909. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  31910. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  31911. flag_N = res >> 24;
  31912. DREGu32((Opcode >> 9) & 7) = res;
  31913. POST_IO
  31914. RET(16)
  31915. }
  31916. // ADDaD
  31917. OPCODE(0xD0A8)
  31918. {
  31919. u32 adr, res;
  31920. u32 src, dst;
  31921. FETCH_SWORD(adr);
  31922. adr += AREG((Opcode >> 0) & 7);
  31923. PRE_IO
  31924. READ_LONG_F(adr, src)
  31925. dst = DREGu32((Opcode >> 9) & 7);
  31926. res = dst + src;
  31927. flag_NotZ = res;
  31928. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  31929. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  31930. flag_N = res >> 24;
  31931. DREGu32((Opcode >> 9) & 7) = res;
  31932. POST_IO
  31933. RET(18)
  31934. }
  31935. // ADDaD
  31936. OPCODE(0xD0B0)
  31937. {
  31938. u32 adr, res;
  31939. u32 src, dst;
  31940. adr = AREG((Opcode >> 0) & 7);
  31941. DECODE_EXT_WORD
  31942. PRE_IO
  31943. READ_LONG_F(adr, src)
  31944. dst = DREGu32((Opcode >> 9) & 7);
  31945. res = dst + src;
  31946. flag_NotZ = res;
  31947. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  31948. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  31949. flag_N = res >> 24;
  31950. DREGu32((Opcode >> 9) & 7) = res;
  31951. POST_IO
  31952. RET(20)
  31953. }
  31954. // ADDaD
  31955. OPCODE(0xD0B8)
  31956. {
  31957. u32 adr, res;
  31958. u32 src, dst;
  31959. FETCH_SWORD(adr);
  31960. PRE_IO
  31961. READ_LONG_F(adr, src)
  31962. dst = DREGu32((Opcode >> 9) & 7);
  31963. res = dst + src;
  31964. flag_NotZ = res;
  31965. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  31966. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  31967. flag_N = res >> 24;
  31968. DREGu32((Opcode >> 9) & 7) = res;
  31969. POST_IO
  31970. RET(18)
  31971. }
  31972. // ADDaD
  31973. OPCODE(0xD0B9)
  31974. {
  31975. u32 adr, res;
  31976. u32 src, dst;
  31977. FETCH_LONG(adr);
  31978. PRE_IO
  31979. READ_LONG_F(adr, src)
  31980. dst = DREGu32((Opcode >> 9) & 7);
  31981. res = dst + src;
  31982. flag_NotZ = res;
  31983. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  31984. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  31985. flag_N = res >> 24;
  31986. DREGu32((Opcode >> 9) & 7) = res;
  31987. POST_IO
  31988. RET(22)
  31989. }
  31990. // ADDaD
  31991. OPCODE(0xD0BA)
  31992. {
  31993. u32 adr, res;
  31994. u32 src, dst;
  31995. adr = GET_SWORD + GET_PC;
  31996. PC++;
  31997. PRE_IO
  31998. READ_LONG_F(adr, src)
  31999. dst = DREGu32((Opcode >> 9) & 7);
  32000. res = dst + src;
  32001. flag_NotZ = res;
  32002. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  32003. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  32004. flag_N = res >> 24;
  32005. DREGu32((Opcode >> 9) & 7) = res;
  32006. POST_IO
  32007. RET(18)
  32008. }
  32009. // ADDaD
  32010. OPCODE(0xD0BB)
  32011. {
  32012. u32 adr, res;
  32013. u32 src, dst;
  32014. adr = GET_PC;
  32015. DECODE_EXT_WORD
  32016. PRE_IO
  32017. READ_LONG_F(adr, src)
  32018. dst = DREGu32((Opcode >> 9) & 7);
  32019. res = dst + src;
  32020. flag_NotZ = res;
  32021. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  32022. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  32023. flag_N = res >> 24;
  32024. DREGu32((Opcode >> 9) & 7) = res;
  32025. POST_IO
  32026. RET(20)
  32027. }
  32028. // ADDaD
  32029. OPCODE(0xD0BC)
  32030. {
  32031. u32 adr, res;
  32032. u32 src, dst;
  32033. FETCH_LONG(src);
  32034. dst = DREGu32((Opcode >> 9) & 7);
  32035. res = dst + src;
  32036. flag_NotZ = res;
  32037. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  32038. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  32039. flag_N = res >> 24;
  32040. DREGu32((Opcode >> 9) & 7) = res;
  32041. RET(16)
  32042. }
  32043. // ADDaD
  32044. OPCODE(0xD09F)
  32045. {
  32046. u32 adr, res;
  32047. u32 src, dst;
  32048. adr = AREG(7);
  32049. AREG(7) += 4;
  32050. PRE_IO
  32051. READ_LONG_F(adr, src)
  32052. dst = DREGu32((Opcode >> 9) & 7);
  32053. res = dst + src;
  32054. flag_NotZ = res;
  32055. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  32056. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  32057. flag_N = res >> 24;
  32058. DREGu32((Opcode >> 9) & 7) = res;
  32059. POST_IO
  32060. RET(14)
  32061. }
  32062. // ADDaD
  32063. OPCODE(0xD0A7)
  32064. {
  32065. u32 adr, res;
  32066. u32 src, dst;
  32067. adr = AREG(7) - 4;
  32068. AREG(7) = adr;
  32069. PRE_IO
  32070. READ_LONG_F(adr, src)
  32071. dst = DREGu32((Opcode >> 9) & 7);
  32072. res = dst + src;
  32073. flag_NotZ = res;
  32074. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  32075. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  32076. flag_N = res >> 24;
  32077. DREGu32((Opcode >> 9) & 7) = res;
  32078. POST_IO
  32079. RET(16)
  32080. }
  32081. // ADDDa
  32082. OPCODE(0xD110)
  32083. {
  32084. u32 adr, res;
  32085. u32 src, dst;
  32086. src = DREGu8((Opcode >> 9) & 7);
  32087. adr = AREG((Opcode >> 0) & 7);
  32088. PRE_IO
  32089. READ_BYTE_F(adr, dst)
  32090. res = dst + src;
  32091. flag_N = flag_X = flag_C = res;
  32092. flag_V = (src ^ res) & (dst ^ res);
  32093. flag_NotZ = res & 0xFF;
  32094. WRITE_BYTE_F(adr, res)
  32095. POST_IO
  32096. RET(12)
  32097. }
  32098. // ADDDa
  32099. OPCODE(0xD118)
  32100. {
  32101. u32 adr, res;
  32102. u32 src, dst;
  32103. src = DREGu8((Opcode >> 9) & 7);
  32104. adr = AREG((Opcode >> 0) & 7);
  32105. AREG((Opcode >> 0) & 7) += 1;
  32106. PRE_IO
  32107. READ_BYTE_F(adr, dst)
  32108. res = dst + src;
  32109. flag_N = flag_X = flag_C = res;
  32110. flag_V = (src ^ res) & (dst ^ res);
  32111. flag_NotZ = res & 0xFF;
  32112. WRITE_BYTE_F(adr, res)
  32113. POST_IO
  32114. RET(12)
  32115. }
  32116. // ADDDa
  32117. OPCODE(0xD120)
  32118. {
  32119. u32 adr, res;
  32120. u32 src, dst;
  32121. src = DREGu8((Opcode >> 9) & 7);
  32122. adr = AREG((Opcode >> 0) & 7) - 1;
  32123. AREG((Opcode >> 0) & 7) = adr;
  32124. PRE_IO
  32125. READ_BYTE_F(adr, dst)
  32126. res = dst + src;
  32127. flag_N = flag_X = flag_C = res;
  32128. flag_V = (src ^ res) & (dst ^ res);
  32129. flag_NotZ = res & 0xFF;
  32130. WRITE_BYTE_F(adr, res)
  32131. POST_IO
  32132. RET(14)
  32133. }
  32134. // ADDDa
  32135. OPCODE(0xD128)
  32136. {
  32137. u32 adr, res;
  32138. u32 src, dst;
  32139. src = DREGu8((Opcode >> 9) & 7);
  32140. FETCH_SWORD(adr);
  32141. adr += AREG((Opcode >> 0) & 7);
  32142. PRE_IO
  32143. READ_BYTE_F(adr, dst)
  32144. res = dst + src;
  32145. flag_N = flag_X = flag_C = res;
  32146. flag_V = (src ^ res) & (dst ^ res);
  32147. flag_NotZ = res & 0xFF;
  32148. WRITE_BYTE_F(adr, res)
  32149. POST_IO
  32150. RET(16)
  32151. }
  32152. // ADDDa
  32153. OPCODE(0xD130)
  32154. {
  32155. u32 adr, res;
  32156. u32 src, dst;
  32157. src = DREGu8((Opcode >> 9) & 7);
  32158. adr = AREG((Opcode >> 0) & 7);
  32159. DECODE_EXT_WORD
  32160. PRE_IO
  32161. READ_BYTE_F(adr, dst)
  32162. res = dst + src;
  32163. flag_N = flag_X = flag_C = res;
  32164. flag_V = (src ^ res) & (dst ^ res);
  32165. flag_NotZ = res & 0xFF;
  32166. WRITE_BYTE_F(adr, res)
  32167. POST_IO
  32168. RET(18)
  32169. }
  32170. // ADDDa
  32171. OPCODE(0xD138)
  32172. {
  32173. u32 adr, res;
  32174. u32 src, dst;
  32175. src = DREGu8((Opcode >> 9) & 7);
  32176. FETCH_SWORD(adr);
  32177. PRE_IO
  32178. READ_BYTE_F(adr, dst)
  32179. res = dst + src;
  32180. flag_N = flag_X = flag_C = res;
  32181. flag_V = (src ^ res) & (dst ^ res);
  32182. flag_NotZ = res & 0xFF;
  32183. WRITE_BYTE_F(adr, res)
  32184. POST_IO
  32185. RET(16)
  32186. }
  32187. // ADDDa
  32188. OPCODE(0xD139)
  32189. {
  32190. u32 adr, res;
  32191. u32 src, dst;
  32192. src = DREGu8((Opcode >> 9) & 7);
  32193. FETCH_LONG(adr);
  32194. PRE_IO
  32195. READ_BYTE_F(adr, dst)
  32196. res = dst + src;
  32197. flag_N = flag_X = flag_C = res;
  32198. flag_V = (src ^ res) & (dst ^ res);
  32199. flag_NotZ = res & 0xFF;
  32200. WRITE_BYTE_F(adr, res)
  32201. POST_IO
  32202. RET(20)
  32203. }
  32204. // ADDDa
  32205. OPCODE(0xD11F)
  32206. {
  32207. u32 adr, res;
  32208. u32 src, dst;
  32209. src = DREGu8((Opcode >> 9) & 7);
  32210. adr = AREG(7);
  32211. AREG(7) += 2;
  32212. PRE_IO
  32213. READ_BYTE_F(adr, dst)
  32214. res = dst + src;
  32215. flag_N = flag_X = flag_C = res;
  32216. flag_V = (src ^ res) & (dst ^ res);
  32217. flag_NotZ = res & 0xFF;
  32218. WRITE_BYTE_F(adr, res)
  32219. POST_IO
  32220. RET(12)
  32221. }
  32222. // ADDDa
  32223. OPCODE(0xD127)
  32224. {
  32225. u32 adr, res;
  32226. u32 src, dst;
  32227. src = DREGu8((Opcode >> 9) & 7);
  32228. adr = AREG(7) - 2;
  32229. AREG(7) = adr;
  32230. PRE_IO
  32231. READ_BYTE_F(adr, dst)
  32232. res = dst + src;
  32233. flag_N = flag_X = flag_C = res;
  32234. flag_V = (src ^ res) & (dst ^ res);
  32235. flag_NotZ = res & 0xFF;
  32236. WRITE_BYTE_F(adr, res)
  32237. POST_IO
  32238. RET(14)
  32239. }
  32240. // ADDDa
  32241. OPCODE(0xD150)
  32242. {
  32243. u32 adr, res;
  32244. u32 src, dst;
  32245. src = DREGu16((Opcode >> 9) & 7);
  32246. adr = AREG((Opcode >> 0) & 7);
  32247. PRE_IO
  32248. READ_WORD_F(adr, dst)
  32249. res = dst + src;
  32250. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  32251. flag_N = flag_X = flag_C = res >> 8;
  32252. flag_NotZ = res & 0xFFFF;
  32253. WRITE_WORD_F(adr, res)
  32254. POST_IO
  32255. RET(12)
  32256. }
  32257. // ADDDa
  32258. OPCODE(0xD158)
  32259. {
  32260. u32 adr, res;
  32261. u32 src, dst;
  32262. src = DREGu16((Opcode >> 9) & 7);
  32263. adr = AREG((Opcode >> 0) & 7);
  32264. AREG((Opcode >> 0) & 7) += 2;
  32265. PRE_IO
  32266. READ_WORD_F(adr, dst)
  32267. res = dst + src;
  32268. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  32269. flag_N = flag_X = flag_C = res >> 8;
  32270. flag_NotZ = res & 0xFFFF;
  32271. WRITE_WORD_F(adr, res)
  32272. POST_IO
  32273. RET(12)
  32274. }
  32275. // ADDDa
  32276. OPCODE(0xD160)
  32277. {
  32278. u32 adr, res;
  32279. u32 src, dst;
  32280. src = DREGu16((Opcode >> 9) & 7);
  32281. adr = AREG((Opcode >> 0) & 7) - 2;
  32282. AREG((Opcode >> 0) & 7) = adr;
  32283. PRE_IO
  32284. READ_WORD_F(adr, dst)
  32285. res = dst + src;
  32286. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  32287. flag_N = flag_X = flag_C = res >> 8;
  32288. flag_NotZ = res & 0xFFFF;
  32289. WRITE_WORD_F(adr, res)
  32290. POST_IO
  32291. RET(14)
  32292. }
  32293. // ADDDa
  32294. OPCODE(0xD168)
  32295. {
  32296. u32 adr, res;
  32297. u32 src, dst;
  32298. src = DREGu16((Opcode >> 9) & 7);
  32299. FETCH_SWORD(adr);
  32300. adr += AREG((Opcode >> 0) & 7);
  32301. PRE_IO
  32302. READ_WORD_F(adr, dst)
  32303. res = dst + src;
  32304. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  32305. flag_N = flag_X = flag_C = res >> 8;
  32306. flag_NotZ = res & 0xFFFF;
  32307. WRITE_WORD_F(adr, res)
  32308. POST_IO
  32309. RET(16)
  32310. }
  32311. // ADDDa
  32312. OPCODE(0xD170)
  32313. {
  32314. u32 adr, res;
  32315. u32 src, dst;
  32316. src = DREGu16((Opcode >> 9) & 7);
  32317. adr = AREG((Opcode >> 0) & 7);
  32318. DECODE_EXT_WORD
  32319. PRE_IO
  32320. READ_WORD_F(adr, dst)
  32321. res = dst + src;
  32322. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  32323. flag_N = flag_X = flag_C = res >> 8;
  32324. flag_NotZ = res & 0xFFFF;
  32325. WRITE_WORD_F(adr, res)
  32326. POST_IO
  32327. RET(18)
  32328. }
  32329. // ADDDa
  32330. OPCODE(0xD178)
  32331. {
  32332. u32 adr, res;
  32333. u32 src, dst;
  32334. src = DREGu16((Opcode >> 9) & 7);
  32335. FETCH_SWORD(adr);
  32336. PRE_IO
  32337. READ_WORD_F(adr, dst)
  32338. res = dst + src;
  32339. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  32340. flag_N = flag_X = flag_C = res >> 8;
  32341. flag_NotZ = res & 0xFFFF;
  32342. WRITE_WORD_F(adr, res)
  32343. POST_IO
  32344. RET(16)
  32345. }
  32346. // ADDDa
  32347. OPCODE(0xD179)
  32348. {
  32349. u32 adr, res;
  32350. u32 src, dst;
  32351. src = DREGu16((Opcode >> 9) & 7);
  32352. FETCH_LONG(adr);
  32353. PRE_IO
  32354. READ_WORD_F(adr, dst)
  32355. res = dst + src;
  32356. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  32357. flag_N = flag_X = flag_C = res >> 8;
  32358. flag_NotZ = res & 0xFFFF;
  32359. WRITE_WORD_F(adr, res)
  32360. POST_IO
  32361. RET(20)
  32362. }
  32363. // ADDDa
  32364. OPCODE(0xD15F)
  32365. {
  32366. u32 adr, res;
  32367. u32 src, dst;
  32368. src = DREGu16((Opcode >> 9) & 7);
  32369. adr = AREG(7);
  32370. AREG(7) += 2;
  32371. PRE_IO
  32372. READ_WORD_F(adr, dst)
  32373. res = dst + src;
  32374. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  32375. flag_N = flag_X = flag_C = res >> 8;
  32376. flag_NotZ = res & 0xFFFF;
  32377. WRITE_WORD_F(adr, res)
  32378. POST_IO
  32379. RET(12)
  32380. }
  32381. // ADDDa
  32382. OPCODE(0xD167)
  32383. {
  32384. u32 adr, res;
  32385. u32 src, dst;
  32386. src = DREGu16((Opcode >> 9) & 7);
  32387. adr = AREG(7) - 2;
  32388. AREG(7) = adr;
  32389. PRE_IO
  32390. READ_WORD_F(adr, dst)
  32391. res = dst + src;
  32392. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  32393. flag_N = flag_X = flag_C = res >> 8;
  32394. flag_NotZ = res & 0xFFFF;
  32395. WRITE_WORD_F(adr, res)
  32396. POST_IO
  32397. RET(14)
  32398. }
  32399. // ADDDa
  32400. OPCODE(0xD190)
  32401. {
  32402. u32 adr, res;
  32403. u32 src, dst;
  32404. src = DREGu32((Opcode >> 9) & 7);
  32405. adr = AREG((Opcode >> 0) & 7);
  32406. PRE_IO
  32407. READ_LONG_F(adr, dst)
  32408. res = dst + src;
  32409. flag_NotZ = res;
  32410. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  32411. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  32412. flag_N = res >> 24;
  32413. WRITE_LONG_F(adr, res)
  32414. POST_IO
  32415. RET(20)
  32416. }
  32417. // ADDDa
  32418. OPCODE(0xD198)
  32419. {
  32420. u32 adr, res;
  32421. u32 src, dst;
  32422. src = DREGu32((Opcode >> 9) & 7);
  32423. adr = AREG((Opcode >> 0) & 7);
  32424. AREG((Opcode >> 0) & 7) += 4;
  32425. PRE_IO
  32426. READ_LONG_F(adr, dst)
  32427. res = dst + src;
  32428. flag_NotZ = res;
  32429. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  32430. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  32431. flag_N = res >> 24;
  32432. WRITE_LONG_F(adr, res)
  32433. POST_IO
  32434. RET(20)
  32435. }
  32436. // ADDDa
  32437. OPCODE(0xD1A0)
  32438. {
  32439. u32 adr, res;
  32440. u32 src, dst;
  32441. src = DREGu32((Opcode >> 9) & 7);
  32442. adr = AREG((Opcode >> 0) & 7) - 4;
  32443. AREG((Opcode >> 0) & 7) = adr;
  32444. PRE_IO
  32445. READ_LONG_F(adr, dst)
  32446. res = dst + src;
  32447. flag_NotZ = res;
  32448. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  32449. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  32450. flag_N = res >> 24;
  32451. WRITE_LONG_F(adr, res)
  32452. POST_IO
  32453. RET(22)
  32454. }
  32455. // ADDDa
  32456. OPCODE(0xD1A8)
  32457. {
  32458. u32 adr, res;
  32459. u32 src, dst;
  32460. src = DREGu32((Opcode >> 9) & 7);
  32461. FETCH_SWORD(adr);
  32462. adr += AREG((Opcode >> 0) & 7);
  32463. PRE_IO
  32464. READ_LONG_F(adr, dst)
  32465. res = dst + src;
  32466. flag_NotZ = res;
  32467. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  32468. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  32469. flag_N = res >> 24;
  32470. WRITE_LONG_F(adr, res)
  32471. POST_IO
  32472. RET(24)
  32473. }
  32474. // ADDDa
  32475. OPCODE(0xD1B0)
  32476. {
  32477. u32 adr, res;
  32478. u32 src, dst;
  32479. src = DREGu32((Opcode >> 9) & 7);
  32480. adr = AREG((Opcode >> 0) & 7);
  32481. DECODE_EXT_WORD
  32482. PRE_IO
  32483. READ_LONG_F(adr, dst)
  32484. res = dst + src;
  32485. flag_NotZ = res;
  32486. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  32487. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  32488. flag_N = res >> 24;
  32489. WRITE_LONG_F(adr, res)
  32490. POST_IO
  32491. RET(26)
  32492. }
  32493. // ADDDa
  32494. OPCODE(0xD1B8)
  32495. {
  32496. u32 adr, res;
  32497. u32 src, dst;
  32498. src = DREGu32((Opcode >> 9) & 7);
  32499. FETCH_SWORD(adr);
  32500. PRE_IO
  32501. READ_LONG_F(adr, dst)
  32502. res = dst + src;
  32503. flag_NotZ = res;
  32504. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  32505. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  32506. flag_N = res >> 24;
  32507. WRITE_LONG_F(adr, res)
  32508. POST_IO
  32509. RET(24)
  32510. }
  32511. // ADDDa
  32512. OPCODE(0xD1B9)
  32513. {
  32514. u32 adr, res;
  32515. u32 src, dst;
  32516. src = DREGu32((Opcode >> 9) & 7);
  32517. FETCH_LONG(adr);
  32518. PRE_IO
  32519. READ_LONG_F(adr, dst)
  32520. res = dst + src;
  32521. flag_NotZ = res;
  32522. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  32523. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  32524. flag_N = res >> 24;
  32525. WRITE_LONG_F(adr, res)
  32526. POST_IO
  32527. RET(28)
  32528. }
  32529. // ADDDa
  32530. OPCODE(0xD19F)
  32531. {
  32532. u32 adr, res;
  32533. u32 src, dst;
  32534. src = DREGu32((Opcode >> 9) & 7);
  32535. adr = AREG(7);
  32536. AREG(7) += 4;
  32537. PRE_IO
  32538. READ_LONG_F(adr, dst)
  32539. res = dst + src;
  32540. flag_NotZ = res;
  32541. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  32542. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  32543. flag_N = res >> 24;
  32544. WRITE_LONG_F(adr, res)
  32545. POST_IO
  32546. RET(20)
  32547. }
  32548. // ADDDa
  32549. OPCODE(0xD1A7)
  32550. {
  32551. u32 adr, res;
  32552. u32 src, dst;
  32553. src = DREGu32((Opcode >> 9) & 7);
  32554. adr = AREG(7) - 4;
  32555. AREG(7) = adr;
  32556. PRE_IO
  32557. READ_LONG_F(adr, dst)
  32558. res = dst + src;
  32559. flag_NotZ = res;
  32560. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  32561. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  32562. flag_N = res >> 24;
  32563. WRITE_LONG_F(adr, res)
  32564. POST_IO
  32565. RET(22)
  32566. }
  32567. // ADDX
  32568. OPCODE(0xD100)
  32569. {
  32570. u32 adr, res;
  32571. u32 src, dst;
  32572. src = DREGu8((Opcode >> 0) & 7);
  32573. dst = DREGu8((Opcode >> 9) & 7);
  32574. res = dst + src + ((flag_X >> 8) & 1);
  32575. flag_N = flag_X = flag_C = res;
  32576. flag_V = (src ^ res) & (dst ^ res);
  32577. flag_NotZ |= res & 0xFF;
  32578. DREGu8((Opcode >> 9) & 7) = res;
  32579. RET(4)
  32580. }
  32581. // ADDX
  32582. OPCODE(0xD140)
  32583. {
  32584. u32 adr, res;
  32585. u32 src, dst;
  32586. src = DREGu16((Opcode >> 0) & 7);
  32587. dst = DREGu16((Opcode >> 9) & 7);
  32588. res = dst + src + ((flag_X >> 8) & 1);
  32589. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  32590. flag_N = flag_X = flag_C = res >> 8;
  32591. flag_NotZ |= res & 0xFFFF;
  32592. DREGu16((Opcode >> 9) & 7) = res;
  32593. RET(4)
  32594. }
  32595. // ADDX
  32596. OPCODE(0xD180)
  32597. {
  32598. u32 adr, res;
  32599. u32 src, dst;
  32600. src = DREGu32((Opcode >> 0) & 7);
  32601. dst = DREGu32((Opcode >> 9) & 7);
  32602. res = dst + src + ((flag_X >> 8) & 1);
  32603. flag_NotZ |= res;
  32604. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  32605. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  32606. flag_N = res >> 24;
  32607. DREGu32((Opcode >> 9) & 7) = res;
  32608. RET(8)
  32609. }
  32610. // ADDXM
  32611. OPCODE(0xD108)
  32612. {
  32613. u32 adr, res;
  32614. u32 src, dst;
  32615. adr = AREG((Opcode >> 0) & 7) - 1;
  32616. AREG((Opcode >> 0) & 7) = adr;
  32617. PRE_IO
  32618. READ_BYTE_F(adr, src)
  32619. adr = AREG((Opcode >> 9) & 7) - 1;
  32620. AREG((Opcode >> 9) & 7) = adr;
  32621. READ_BYTE_F(adr, dst)
  32622. res = dst + src + ((flag_X >> 8) & 1);
  32623. flag_N = flag_X = flag_C = res;
  32624. flag_V = (src ^ res) & (dst ^ res);
  32625. flag_NotZ |= res & 0xFF;
  32626. WRITE_BYTE_F(adr, res)
  32627. POST_IO
  32628. RET(18)
  32629. }
  32630. // ADDXM
  32631. OPCODE(0xD148)
  32632. {
  32633. u32 adr, res;
  32634. u32 src, dst;
  32635. adr = AREG((Opcode >> 0) & 7) - 2;
  32636. AREG((Opcode >> 0) & 7) = adr;
  32637. PRE_IO
  32638. READ_WORD_F(adr, src)
  32639. adr = AREG((Opcode >> 9) & 7) - 2;
  32640. AREG((Opcode >> 9) & 7) = adr;
  32641. READ_WORD_F(adr, dst)
  32642. res = dst + src + ((flag_X >> 8) & 1);
  32643. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  32644. flag_N = flag_X = flag_C = res >> 8;
  32645. flag_NotZ |= res & 0xFFFF;
  32646. WRITE_WORD_F(adr, res)
  32647. POST_IO
  32648. RET(18)
  32649. }
  32650. // ADDXM
  32651. OPCODE(0xD188)
  32652. {
  32653. u32 adr, res;
  32654. u32 src, dst;
  32655. adr = AREG((Opcode >> 0) & 7) - 4;
  32656. AREG((Opcode >> 0) & 7) = adr;
  32657. PRE_IO
  32658. READ_LONG_F(adr, src)
  32659. adr = AREG((Opcode >> 9) & 7) - 4;
  32660. AREG((Opcode >> 9) & 7) = adr;
  32661. READ_LONG_F(adr, dst)
  32662. res = dst + src + ((flag_X >> 8) & 1);
  32663. flag_NotZ |= res;
  32664. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  32665. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  32666. flag_N = res >> 24;
  32667. WRITE_LONG_F(adr, res)
  32668. POST_IO
  32669. RET(30)
  32670. }
  32671. // ADDX7M
  32672. OPCODE(0xD10F)
  32673. {
  32674. u32 adr, res;
  32675. u32 src, dst;
  32676. adr = AREG(7) - 2;
  32677. AREG(7) = adr;
  32678. PRE_IO
  32679. READ_BYTE_F(adr, src)
  32680. adr = AREG((Opcode >> 9) & 7) - 1;
  32681. AREG((Opcode >> 9) & 7) = adr;
  32682. READ_BYTE_F(adr, dst)
  32683. res = dst + src + ((flag_X >> 8) & 1);
  32684. flag_N = flag_X = flag_C = res;
  32685. flag_V = (src ^ res) & (dst ^ res);
  32686. flag_NotZ |= res & 0xFF;
  32687. WRITE_BYTE_F(adr, res)
  32688. POST_IO
  32689. RET(18)
  32690. }
  32691. // ADDX7M
  32692. OPCODE(0xD14F)
  32693. {
  32694. u32 adr, res;
  32695. u32 src, dst;
  32696. adr = AREG(7) - 2;
  32697. AREG(7) = adr;
  32698. PRE_IO
  32699. READ_WORD_F(adr, src)
  32700. adr = AREG((Opcode >> 9) & 7) - 2;
  32701. AREG((Opcode >> 9) & 7) = adr;
  32702. READ_WORD_F(adr, dst)
  32703. res = dst + src + ((flag_X >> 8) & 1);
  32704. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  32705. flag_N = flag_X = flag_C = res >> 8;
  32706. flag_NotZ |= res & 0xFFFF;
  32707. WRITE_WORD_F(adr, res)
  32708. POST_IO
  32709. RET(18)
  32710. }
  32711. // ADDX7M
  32712. OPCODE(0xD18F)
  32713. {
  32714. u32 adr, res;
  32715. u32 src, dst;
  32716. adr = AREG(7) - 4;
  32717. AREG(7) = adr;
  32718. PRE_IO
  32719. READ_LONG_F(adr, src)
  32720. adr = AREG((Opcode >> 9) & 7) - 4;
  32721. AREG((Opcode >> 9) & 7) = adr;
  32722. READ_LONG_F(adr, dst)
  32723. res = dst + src + ((flag_X >> 8) & 1);
  32724. flag_NotZ |= res;
  32725. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  32726. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  32727. flag_N = res >> 24;
  32728. WRITE_LONG_F(adr, res)
  32729. POST_IO
  32730. RET(30)
  32731. }
  32732. // ADDXM7
  32733. OPCODE(0xDF08)
  32734. {
  32735. u32 adr, res;
  32736. u32 src, dst;
  32737. adr = AREG((Opcode >> 0) & 7) - 1;
  32738. AREG((Opcode >> 0) & 7) = adr;
  32739. PRE_IO
  32740. READ_BYTE_F(adr, src)
  32741. adr = AREG(7) - 2;
  32742. AREG(7) = adr;
  32743. READ_BYTE_F(adr, dst)
  32744. res = dst + src + ((flag_X >> 8) & 1);
  32745. flag_N = flag_X = flag_C = res;
  32746. flag_V = (src ^ res) & (dst ^ res);
  32747. flag_NotZ |= res & 0xFF;
  32748. WRITE_BYTE_F(adr, res)
  32749. POST_IO
  32750. RET(18)
  32751. }
  32752. // ADDXM7
  32753. OPCODE(0xDF48)
  32754. {
  32755. u32 adr, res;
  32756. u32 src, dst;
  32757. adr = AREG((Opcode >> 0) & 7) - 2;
  32758. AREG((Opcode >> 0) & 7) = adr;
  32759. PRE_IO
  32760. READ_WORD_F(adr, src)
  32761. adr = AREG(7) - 2;
  32762. AREG(7) = adr;
  32763. READ_WORD_F(adr, dst)
  32764. res = dst + src + ((flag_X >> 8) & 1);
  32765. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  32766. flag_N = flag_X = flag_C = res >> 8;
  32767. flag_NotZ |= res & 0xFFFF;
  32768. WRITE_WORD_F(adr, res)
  32769. POST_IO
  32770. RET(18)
  32771. }
  32772. // ADDXM7
  32773. OPCODE(0xDF88)
  32774. {
  32775. u32 adr, res;
  32776. u32 src, dst;
  32777. adr = AREG((Opcode >> 0) & 7) - 4;
  32778. AREG((Opcode >> 0) & 7) = adr;
  32779. PRE_IO
  32780. READ_LONG_F(adr, src)
  32781. adr = AREG(7) - 4;
  32782. AREG(7) = adr;
  32783. READ_LONG_F(adr, dst)
  32784. res = dst + src + ((flag_X >> 8) & 1);
  32785. flag_NotZ |= res;
  32786. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  32787. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  32788. flag_N = res >> 24;
  32789. WRITE_LONG_F(adr, res)
  32790. POST_IO
  32791. RET(30)
  32792. }
  32793. // ADDX7M7
  32794. OPCODE(0xDF0F)
  32795. {
  32796. u32 adr, res;
  32797. u32 src, dst;
  32798. adr = AREG(7) - 2;
  32799. AREG(7) = adr;
  32800. PRE_IO
  32801. READ_BYTE_F(adr, src)
  32802. adr = AREG(7) - 2;
  32803. AREG(7) = adr;
  32804. READ_BYTE_F(adr, dst)
  32805. res = dst + src + ((flag_X >> 8) & 1);
  32806. flag_N = flag_X = flag_C = res;
  32807. flag_V = (src ^ res) & (dst ^ res);
  32808. flag_NotZ |= res & 0xFF;
  32809. WRITE_BYTE_F(adr, res)
  32810. POST_IO
  32811. RET(18)
  32812. }
  32813. // ADDX7M7
  32814. OPCODE(0xDF4F)
  32815. {
  32816. u32 adr, res;
  32817. u32 src, dst;
  32818. adr = AREG(7) - 2;
  32819. AREG(7) = adr;
  32820. PRE_IO
  32821. READ_WORD_F(adr, src)
  32822. adr = AREG(7) - 2;
  32823. AREG(7) = adr;
  32824. READ_WORD_F(adr, dst)
  32825. res = dst + src + ((flag_X >> 8) & 1);
  32826. flag_V = ((src ^ res) & (dst ^ res)) >> 8;
  32827. flag_N = flag_X = flag_C = res >> 8;
  32828. flag_NotZ |= res & 0xFFFF;
  32829. WRITE_WORD_F(adr, res)
  32830. POST_IO
  32831. RET(18)
  32832. }
  32833. // ADDX7M7
  32834. OPCODE(0xDF8F)
  32835. {
  32836. u32 adr, res;
  32837. u32 src, dst;
  32838. adr = AREG(7) - 4;
  32839. AREG(7) = adr;
  32840. PRE_IO
  32841. READ_LONG_F(adr, src)
  32842. adr = AREG(7) - 4;
  32843. AREG(7) = adr;
  32844. READ_LONG_F(adr, dst)
  32845. res = dst + src + ((flag_X >> 8) & 1);
  32846. flag_NotZ |= res;
  32847. flag_X = flag_C = ((src & dst & 1) + (src >> 1) + (dst >> 1)) >> 23;
  32848. flag_V = ((src ^ res) & (dst ^ res)) >> 24;
  32849. flag_N = res >> 24;
  32850. WRITE_LONG_F(adr, res)
  32851. POST_IO
  32852. RET(30)
  32853. }
  32854. // ADDA
  32855. OPCODE(0xD0C0)
  32856. {
  32857. u32 adr, res;
  32858. u32 src, dst;
  32859. src = (s32)DREGs16((Opcode >> 0) & 7);
  32860. dst = AREGu32((Opcode >> 9) & 7);
  32861. res = dst + src;
  32862. AREG((Opcode >> 9) & 7) = res;
  32863. RET(8)
  32864. }
  32865. // ADDA
  32866. OPCODE(0xD0C8)
  32867. {
  32868. u32 adr, res;
  32869. u32 src, dst;
  32870. src = (s32)AREGs16((Opcode >> 0) & 7);
  32871. dst = AREGu32((Opcode >> 9) & 7);
  32872. res = dst + src;
  32873. AREG((Opcode >> 9) & 7) = res;
  32874. RET(8)
  32875. }
  32876. // ADDA
  32877. OPCODE(0xD0D0)
  32878. {
  32879. u32 adr, res;
  32880. u32 src, dst;
  32881. adr = AREG((Opcode >> 0) & 7);
  32882. PRE_IO
  32883. READSX_WORD_F(adr, src)
  32884. dst = AREGu32((Opcode >> 9) & 7);
  32885. res = dst + src;
  32886. AREG((Opcode >> 9) & 7) = res;
  32887. POST_IO
  32888. #ifdef USE_CYCLONE_TIMING
  32889. RET(12)
  32890. #else
  32891. RET(10)
  32892. #endif
  32893. }
  32894. // ADDA
  32895. OPCODE(0xD0D8)
  32896. {
  32897. u32 adr, res;
  32898. u32 src, dst;
  32899. adr = AREG((Opcode >> 0) & 7);
  32900. AREG((Opcode >> 0) & 7) += 2;
  32901. PRE_IO
  32902. READSX_WORD_F(adr, src)
  32903. dst = AREGu32((Opcode >> 9) & 7);
  32904. res = dst + src;
  32905. AREG((Opcode >> 9) & 7) = res;
  32906. POST_IO
  32907. #ifdef USE_CYCLONE_TIMING
  32908. RET(12)
  32909. #else
  32910. RET(10)
  32911. #endif
  32912. }
  32913. // ADDA
  32914. OPCODE(0xD0E0)
  32915. {
  32916. u32 adr, res;
  32917. u32 src, dst;
  32918. adr = AREG((Opcode >> 0) & 7) - 2;
  32919. AREG((Opcode >> 0) & 7) = adr;
  32920. PRE_IO
  32921. READSX_WORD_F(adr, src)
  32922. dst = AREGu32((Opcode >> 9) & 7);
  32923. res = dst + src;
  32924. AREG((Opcode >> 9) & 7) = res;
  32925. POST_IO
  32926. #ifdef USE_CYCLONE_TIMING
  32927. RET(14)
  32928. #else
  32929. RET(12)
  32930. #endif
  32931. }
  32932. // ADDA
  32933. OPCODE(0xD0E8)
  32934. {
  32935. u32 adr, res;
  32936. u32 src, dst;
  32937. FETCH_SWORD(adr);
  32938. adr += AREG((Opcode >> 0) & 7);
  32939. PRE_IO
  32940. READSX_WORD_F(adr, src)
  32941. dst = AREGu32((Opcode >> 9) & 7);
  32942. res = dst + src;
  32943. AREG((Opcode >> 9) & 7) = res;
  32944. POST_IO
  32945. #ifdef USE_CYCLONE_TIMING
  32946. RET(16)
  32947. #else
  32948. RET(14)
  32949. #endif
  32950. }
  32951. // ADDA
  32952. OPCODE(0xD0F0)
  32953. {
  32954. u32 adr, res;
  32955. u32 src, dst;
  32956. adr = AREG((Opcode >> 0) & 7);
  32957. DECODE_EXT_WORD
  32958. PRE_IO
  32959. READSX_WORD_F(adr, src)
  32960. dst = AREGu32((Opcode >> 9) & 7);
  32961. res = dst + src;
  32962. AREG((Opcode >> 9) & 7) = res;
  32963. POST_IO
  32964. #ifdef USE_CYCLONE_TIMING
  32965. RET(18)
  32966. #else
  32967. RET(16)
  32968. #endif
  32969. }
  32970. // ADDA
  32971. OPCODE(0xD0F8)
  32972. {
  32973. u32 adr, res;
  32974. u32 src, dst;
  32975. FETCH_SWORD(adr);
  32976. PRE_IO
  32977. READSX_WORD_F(adr, src)
  32978. dst = AREGu32((Opcode >> 9) & 7);
  32979. res = dst + src;
  32980. AREG((Opcode >> 9) & 7) = res;
  32981. POST_IO
  32982. #ifdef USE_CYCLONE_TIMING
  32983. RET(16)
  32984. #else
  32985. RET(14)
  32986. #endif
  32987. }
  32988. // ADDA
  32989. OPCODE(0xD0F9)
  32990. {
  32991. u32 adr, res;
  32992. u32 src, dst;
  32993. FETCH_LONG(adr);
  32994. PRE_IO
  32995. READSX_WORD_F(adr, src)
  32996. dst = AREGu32((Opcode >> 9) & 7);
  32997. res = dst + src;
  32998. AREG((Opcode >> 9) & 7) = res;
  32999. POST_IO
  33000. #ifdef USE_CYCLONE_TIMING
  33001. RET(20)
  33002. #else
  33003. RET(18)
  33004. #endif
  33005. }
  33006. // ADDA
  33007. OPCODE(0xD0FA)
  33008. {
  33009. u32 adr, res;
  33010. u32 src, dst;
  33011. adr = GET_SWORD + GET_PC;
  33012. PC++;
  33013. PRE_IO
  33014. READSX_WORD_F(adr, src)
  33015. dst = AREGu32((Opcode >> 9) & 7);
  33016. res = dst + src;
  33017. AREG((Opcode >> 9) & 7) = res;
  33018. POST_IO
  33019. #ifdef USE_CYCLONE_TIMING
  33020. RET(16)
  33021. #else
  33022. RET(14)
  33023. #endif
  33024. }
  33025. // ADDA
  33026. OPCODE(0xD0FB)
  33027. {
  33028. u32 adr, res;
  33029. u32 src, dst;
  33030. adr = GET_PC;
  33031. DECODE_EXT_WORD
  33032. PRE_IO
  33033. READSX_WORD_F(adr, src)
  33034. dst = AREGu32((Opcode >> 9) & 7);
  33035. res = dst + src;
  33036. AREG((Opcode >> 9) & 7) = res;
  33037. POST_IO
  33038. #ifdef USE_CYCLONE_TIMING
  33039. RET(18)
  33040. #else
  33041. RET(16)
  33042. #endif
  33043. }
  33044. // ADDA
  33045. OPCODE(0xD0FC)
  33046. {
  33047. u32 adr, res;
  33048. u32 src, dst;
  33049. FETCH_SWORD(src);
  33050. dst = AREGu32((Opcode >> 9) & 7);
  33051. res = dst + src;
  33052. AREG((Opcode >> 9) & 7) = res;
  33053. RET(12)
  33054. }
  33055. // ADDA
  33056. OPCODE(0xD0DF)
  33057. {
  33058. u32 adr, res;
  33059. u32 src, dst;
  33060. adr = AREG(7);
  33061. AREG(7) += 2;
  33062. PRE_IO
  33063. READSX_WORD_F(adr, src)
  33064. dst = AREGu32((Opcode >> 9) & 7);
  33065. res = dst + src;
  33066. AREG((Opcode >> 9) & 7) = res;
  33067. POST_IO
  33068. #ifdef USE_CYCLONE_TIMING
  33069. RET(12)
  33070. #else
  33071. RET(10)
  33072. #endif
  33073. }
  33074. // ADDA
  33075. OPCODE(0xD0E7)
  33076. {
  33077. u32 adr, res;
  33078. u32 src, dst;
  33079. adr = AREG(7) - 2;
  33080. AREG(7) = adr;
  33081. PRE_IO
  33082. READSX_WORD_F(adr, src)
  33083. dst = AREGu32((Opcode >> 9) & 7);
  33084. res = dst + src;
  33085. AREG((Opcode >> 9) & 7) = res;
  33086. POST_IO
  33087. #ifdef USE_CYCLONE_TIMING
  33088. RET(14)
  33089. #else
  33090. RET(12)
  33091. #endif
  33092. }
  33093. // ADDA
  33094. OPCODE(0xD1C0)
  33095. {
  33096. u32 adr, res;
  33097. u32 src, dst;
  33098. src = (s32)DREGs32((Opcode >> 0) & 7);
  33099. dst = AREGu32((Opcode >> 9) & 7);
  33100. res = dst + src;
  33101. AREG((Opcode >> 9) & 7) = res;
  33102. #ifdef USE_CYCLONE_TIMING
  33103. RET(8)
  33104. #else
  33105. RET(6)
  33106. #endif
  33107. }
  33108. // ADDA
  33109. OPCODE(0xD1C8)
  33110. {
  33111. u32 adr, res;
  33112. u32 src, dst;
  33113. src = (s32)AREGs32((Opcode >> 0) & 7);
  33114. dst = AREGu32((Opcode >> 9) & 7);
  33115. res = dst + src;
  33116. AREG((Opcode >> 9) & 7) = res;
  33117. #ifdef USE_CYCLONE_TIMING
  33118. RET(8)
  33119. #else
  33120. RET(6)
  33121. #endif
  33122. }
  33123. // ADDA
  33124. OPCODE(0xD1D0)
  33125. {
  33126. u32 adr, res;
  33127. u32 src, dst;
  33128. adr = AREG((Opcode >> 0) & 7);
  33129. PRE_IO
  33130. READSX_LONG_F(adr, src)
  33131. dst = AREGu32((Opcode >> 9) & 7);
  33132. res = dst + src;
  33133. AREG((Opcode >> 9) & 7) = res;
  33134. POST_IO
  33135. RET(14)
  33136. }
  33137. // ADDA
  33138. OPCODE(0xD1D8)
  33139. {
  33140. u32 adr, res;
  33141. u32 src, dst;
  33142. adr = AREG((Opcode >> 0) & 7);
  33143. AREG((Opcode >> 0) & 7) += 4;
  33144. PRE_IO
  33145. READSX_LONG_F(adr, src)
  33146. dst = AREGu32((Opcode >> 9) & 7);
  33147. res = dst + src;
  33148. AREG((Opcode >> 9) & 7) = res;
  33149. POST_IO
  33150. RET(14)
  33151. }
  33152. // ADDA
  33153. OPCODE(0xD1E0)
  33154. {
  33155. u32 adr, res;
  33156. u32 src, dst;
  33157. adr = AREG((Opcode >> 0) & 7) - 4;
  33158. AREG((Opcode >> 0) & 7) = adr;
  33159. PRE_IO
  33160. READSX_LONG_F(adr, src)
  33161. dst = AREGu32((Opcode >> 9) & 7);
  33162. res = dst + src;
  33163. AREG((Opcode >> 9) & 7) = res;
  33164. POST_IO
  33165. RET(16)
  33166. }
  33167. // ADDA
  33168. OPCODE(0xD1E8)
  33169. {
  33170. u32 adr, res;
  33171. u32 src, dst;
  33172. FETCH_SWORD(adr);
  33173. adr += AREG((Opcode >> 0) & 7);
  33174. PRE_IO
  33175. READSX_LONG_F(adr, src)
  33176. dst = AREGu32((Opcode >> 9) & 7);
  33177. res = dst + src;
  33178. AREG((Opcode >> 9) & 7) = res;
  33179. POST_IO
  33180. RET(18)
  33181. }
  33182. // ADDA
  33183. OPCODE(0xD1F0)
  33184. {
  33185. u32 adr, res;
  33186. u32 src, dst;
  33187. adr = AREG((Opcode >> 0) & 7);
  33188. DECODE_EXT_WORD
  33189. PRE_IO
  33190. READSX_LONG_F(adr, src)
  33191. dst = AREGu32((Opcode >> 9) & 7);
  33192. res = dst + src;
  33193. AREG((Opcode >> 9) & 7) = res;
  33194. POST_IO
  33195. RET(20)
  33196. }
  33197. // ADDA
  33198. OPCODE(0xD1F8)
  33199. {
  33200. u32 adr, res;
  33201. u32 src, dst;
  33202. FETCH_SWORD(adr);
  33203. PRE_IO
  33204. READSX_LONG_F(adr, src)
  33205. dst = AREGu32((Opcode >> 9) & 7);
  33206. res = dst + src;
  33207. AREG((Opcode >> 9) & 7) = res;
  33208. POST_IO
  33209. RET(18)
  33210. }
  33211. // ADDA
  33212. OPCODE(0xD1F9)
  33213. {
  33214. u32 adr, res;
  33215. u32 src, dst;
  33216. FETCH_LONG(adr);
  33217. PRE_IO
  33218. READSX_LONG_F(adr, src)
  33219. dst = AREGu32((Opcode >> 9) & 7);
  33220. res = dst + src;
  33221. AREG((Opcode >> 9) & 7) = res;
  33222. POST_IO
  33223. RET(22)
  33224. }
  33225. // ADDA
  33226. OPCODE(0xD1FA)
  33227. {
  33228. u32 adr, res;
  33229. u32 src, dst;
  33230. adr = GET_SWORD + GET_PC;
  33231. PC++;
  33232. PRE_IO
  33233. READSX_LONG_F(adr, src)
  33234. dst = AREGu32((Opcode >> 9) & 7);
  33235. res = dst + src;
  33236. AREG((Opcode >> 9) & 7) = res;
  33237. POST_IO
  33238. RET(18)
  33239. }
  33240. // ADDA
  33241. OPCODE(0xD1FB)
  33242. {
  33243. u32 adr, res;
  33244. u32 src, dst;
  33245. adr = GET_PC;
  33246. DECODE_EXT_WORD
  33247. PRE_IO
  33248. READSX_LONG_F(adr, src)
  33249. dst = AREGu32((Opcode >> 9) & 7);
  33250. res = dst + src;
  33251. AREG((Opcode >> 9) & 7) = res;
  33252. POST_IO
  33253. RET(20)
  33254. }
  33255. // ADDA
  33256. OPCODE(0xD1FC)
  33257. {
  33258. u32 adr, res;
  33259. u32 src, dst;
  33260. FETCH_LONG(src);
  33261. dst = AREGu32((Opcode >> 9) & 7);
  33262. res = dst + src;
  33263. AREG((Opcode >> 9) & 7) = res;
  33264. #ifdef USE_CYCLONE_TIMING
  33265. RET(16)
  33266. #else
  33267. RET(14)
  33268. #endif
  33269. }
  33270. // ADDA
  33271. OPCODE(0xD1DF)
  33272. {
  33273. u32 adr, res;
  33274. u32 src, dst;
  33275. adr = AREG(7);
  33276. AREG(7) += 4;
  33277. PRE_IO
  33278. READSX_LONG_F(adr, src)
  33279. dst = AREGu32((Opcode >> 9) & 7);
  33280. res = dst + src;
  33281. AREG((Opcode >> 9) & 7) = res;
  33282. POST_IO
  33283. RET(14)
  33284. }
  33285. // ADDA
  33286. OPCODE(0xD1E7)
  33287. {
  33288. u32 adr, res;
  33289. u32 src, dst;
  33290. adr = AREG(7) - 4;
  33291. AREG(7) = adr;
  33292. PRE_IO
  33293. READSX_LONG_F(adr, src)
  33294. dst = AREGu32((Opcode >> 9) & 7);
  33295. res = dst + src;
  33296. AREG((Opcode >> 9) & 7) = res;
  33297. POST_IO
  33298. RET(16)
  33299. }
  33300. // ASRk
  33301. OPCODE(0xE000)
  33302. {
  33303. u32 adr, res;
  33304. u32 src, dst;
  33305. u32 sft;
  33306. sft = (((Opcode >> 9) - 1) & 7) + 1;
  33307. ctx->io_cycle_counter -= sft * 2;
  33308. src = (s32)DREGs8((Opcode >> 0) & 7);
  33309. flag_V = 0;
  33310. flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
  33311. res = ((s32)src) >> sft;
  33312. flag_N = res >> 0;
  33313. flag_NotZ = res;
  33314. DREGu8((Opcode >> 0) & 7) = res;
  33315. RET(6)
  33316. }
  33317. // ASRk
  33318. OPCODE(0xE040)
  33319. {
  33320. u32 adr, res;
  33321. u32 src, dst;
  33322. u32 sft;
  33323. sft = (((Opcode >> 9) - 1) & 7) + 1;
  33324. ctx->io_cycle_counter -= sft * 2;
  33325. src = (s32)DREGs16((Opcode >> 0) & 7);
  33326. flag_V = 0;
  33327. flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
  33328. res = ((s32)src) >> sft;
  33329. flag_N = res >> 8;
  33330. flag_NotZ = res;
  33331. DREGu16((Opcode >> 0) & 7) = res;
  33332. RET(6)
  33333. }
  33334. // ASRk
  33335. OPCODE(0xE080)
  33336. {
  33337. u32 adr, res;
  33338. u32 src, dst;
  33339. u32 sft;
  33340. sft = (((Opcode >> 9) - 1) & 7) + 1;
  33341. ctx->io_cycle_counter -= sft * 2;
  33342. src = (s32)DREGs32((Opcode >> 0) & 7);
  33343. flag_V = 0;
  33344. flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
  33345. res = ((s32)src) >> sft;
  33346. flag_N = res >> 24;
  33347. flag_NotZ = res;
  33348. DREGu32((Opcode >> 0) & 7) = res;
  33349. RET(8)
  33350. }
  33351. // LSRk
  33352. OPCODE(0xE008)
  33353. {
  33354. u32 adr, res;
  33355. u32 src, dst;
  33356. u32 sft;
  33357. sft = (((Opcode >> 9) - 1) & 7) + 1;
  33358. ctx->io_cycle_counter -= sft * 2;
  33359. src = DREGu8((Opcode >> 0) & 7);
  33360. flag_N = flag_V = 0;
  33361. flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
  33362. res = src >> sft;
  33363. flag_NotZ = res;
  33364. DREGu8((Opcode >> 0) & 7) = res;
  33365. RET(6)
  33366. }
  33367. // LSRk
  33368. OPCODE(0xE048)
  33369. {
  33370. u32 adr, res;
  33371. u32 src, dst;
  33372. u32 sft;
  33373. sft = (((Opcode >> 9) - 1) & 7) + 1;
  33374. ctx->io_cycle_counter -= sft * 2;
  33375. src = DREGu16((Opcode >> 0) & 7);
  33376. flag_N = flag_V = 0;
  33377. flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
  33378. res = src >> sft;
  33379. flag_NotZ = res;
  33380. DREGu16((Opcode >> 0) & 7) = res;
  33381. RET(6)
  33382. }
  33383. // LSRk
  33384. OPCODE(0xE088)
  33385. {
  33386. u32 adr, res;
  33387. u32 src, dst;
  33388. u32 sft;
  33389. sft = (((Opcode >> 9) - 1) & 7) + 1;
  33390. ctx->io_cycle_counter -= sft * 2;
  33391. src = DREGu32((Opcode >> 0) & 7);
  33392. flag_N = flag_V = 0;
  33393. flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
  33394. res = src >> sft;
  33395. flag_NotZ = res;
  33396. DREGu32((Opcode >> 0) & 7) = res;
  33397. RET(8)
  33398. }
  33399. // ROXRk
  33400. OPCODE(0xE010)
  33401. {
  33402. u32 adr, res;
  33403. u32 src, dst;
  33404. u32 sft;
  33405. sft = (((Opcode >> 9) - 1) & 7) + 1;
  33406. ctx->io_cycle_counter -= sft * 2;
  33407. src = DREGu8((Opcode >> 0) & 7);
  33408. src |= (flag_X & M68K_SR_X) << 0;
  33409. res = (src >> sft) | (src << (9 - sft));
  33410. flag_X = flag_C = res >> 0;
  33411. flag_V = 0;
  33412. flag_N = res >> 0;
  33413. flag_NotZ = res & 0x000000FF;
  33414. DREGu8((Opcode >> 0) & 7) = res;
  33415. RET(6)
  33416. }
  33417. // ROXRk
  33418. OPCODE(0xE050)
  33419. {
  33420. u32 adr, res;
  33421. u32 src, dst;
  33422. u32 sft;
  33423. sft = (((Opcode >> 9) - 1) & 7) + 1;
  33424. ctx->io_cycle_counter -= sft * 2;
  33425. src = DREGu16((Opcode >> 0) & 7);
  33426. src |= (flag_X & M68K_SR_X) << 8;
  33427. res = (src >> sft) | (src << (17 - sft));
  33428. flag_X = flag_C = res >> 8;
  33429. flag_V = 0;
  33430. flag_N = res >> 8;
  33431. flag_NotZ = res & 0x0000FFFF;
  33432. DREGu16((Opcode >> 0) & 7) = res;
  33433. RET(6)
  33434. }
  33435. // ROXRk
  33436. OPCODE(0xE090)
  33437. {
  33438. u32 adr, res;
  33439. u32 src, dst;
  33440. u32 sft;
  33441. sft = (((Opcode >> 9) - 1) & 7) + 1;
  33442. ctx->io_cycle_counter -= sft * 2;
  33443. src = DREGu32((Opcode >> 0) & 7);
  33444. flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
  33445. if (sft == 1) res = (src >> 1) | ((flag_X & M68K_SR_X) << (32 - (M68K_SR_X_SFT + 1)));
  33446. else res = (src >> sft) | (src << (33 - sft)) | ((flag_X & M68K_SR_X) << (32 - (M68K_SR_X_SFT + sft)));
  33447. flag_X = flag_C;
  33448. flag_V = 0;
  33449. flag_N = res >> 24;
  33450. flag_NotZ = res;
  33451. DREGu32((Opcode >> 0) & 7) = res;
  33452. RET(8)
  33453. }
  33454. // RORk
  33455. OPCODE(0xE018)
  33456. {
  33457. u32 adr, res;
  33458. u32 src, dst;
  33459. u32 sft;
  33460. sft = (((Opcode >> 9) - 1) & 7) + 1;
  33461. ctx->io_cycle_counter -= sft * 2;
  33462. src = DREGu8((Opcode >> 0) & 7);
  33463. flag_V = 0;
  33464. flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
  33465. res = (src >> sft) | (src << (8 - sft));
  33466. flag_N = res >> 0;
  33467. flag_NotZ = res & 0x000000FF;
  33468. DREGu8((Opcode >> 0) & 7) = res;
  33469. RET(6)
  33470. }
  33471. // RORk
  33472. OPCODE(0xE058)
  33473. {
  33474. u32 adr, res;
  33475. u32 src, dst;
  33476. u32 sft;
  33477. sft = (((Opcode >> 9) - 1) & 7) + 1;
  33478. ctx->io_cycle_counter -= sft * 2;
  33479. src = DREGu16((Opcode >> 0) & 7);
  33480. flag_V = 0;
  33481. flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
  33482. res = (src >> sft) | (src << (16 - sft));
  33483. flag_N = res >> 8;
  33484. flag_NotZ = res & 0x0000FFFF;
  33485. DREGu16((Opcode >> 0) & 7) = res;
  33486. RET(6)
  33487. }
  33488. // RORk
  33489. OPCODE(0xE098)
  33490. {
  33491. u32 adr, res;
  33492. u32 src, dst;
  33493. u32 sft;
  33494. sft = (((Opcode >> 9) - 1) & 7) + 1;
  33495. ctx->io_cycle_counter -= sft * 2;
  33496. src = DREGu32((Opcode >> 0) & 7);
  33497. flag_V = 0;
  33498. flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
  33499. res = (src >> sft) | (src << (32 - sft));
  33500. flag_N = res >> 24;
  33501. flag_NotZ = res;
  33502. DREGu32((Opcode >> 0) & 7) = res;
  33503. RET(8)
  33504. }
  33505. // ASLk
  33506. OPCODE(0xE100)
  33507. {
  33508. u32 adr, res;
  33509. u32 src, dst;
  33510. u32 sft;
  33511. sft = (((Opcode >> 9) - 1) & 7) + 1;
  33512. ctx->io_cycle_counter -= sft * 2;
  33513. src = DREGu8((Opcode >> 0) & 7);
  33514. if (sft < 8)
  33515. {
  33516. flag_X = flag_C = src << (0 + sft);
  33517. res = src << sft;
  33518. flag_N = res >> 0;
  33519. flag_NotZ = res & 0x000000FF;
  33520. DREGu8((Opcode >> 0) & 7) = res;
  33521. flag_V = 0;
  33522. if ((sft > 7) && (src)) flag_V = M68K_SR_V;
  33523. else
  33524. {
  33525. u32 msk = (((s32)0x80000000) >> (sft + 24)) & 0x000000FF;
  33526. src &= msk;
  33527. if ((src) && (src != msk)) flag_V = M68K_SR_V;
  33528. }
  33529. RET(6)
  33530. }
  33531. if (src) flag_V = M68K_SR_V;
  33532. else flag_V = 0;
  33533. flag_X = flag_C = src << M68K_SR_C_SFT;
  33534. res = 0;
  33535. DREGu8((Opcode >> 0) & 7) = res;
  33536. flag_N = 0;
  33537. flag_NotZ = 0;
  33538. RET(6)
  33539. }
  33540. // ASLk
  33541. OPCODE(0xE140)
  33542. {
  33543. u32 adr, res;
  33544. u32 src, dst;
  33545. u32 sft;
  33546. sft = (((Opcode >> 9) - 1) & 7) + 1;
  33547. ctx->io_cycle_counter -= sft * 2;
  33548. src = DREGu16((Opcode >> 0) & 7);
  33549. flag_X = flag_C = src >> (8 - sft);
  33550. res = src << sft;
  33551. flag_N = res >> 8;
  33552. flag_NotZ = res & 0x0000FFFF;
  33553. DREGu16((Opcode >> 0) & 7) = res;
  33554. flag_V = 0;
  33555. {
  33556. u32 msk = (((s32)0x80000000) >> (sft + 16)) & 0x0000FFFF;
  33557. src &= msk;
  33558. if ((src) && (src != msk)) flag_V = M68K_SR_V;
  33559. }
  33560. RET(6)
  33561. }
  33562. // ASLk
  33563. OPCODE(0xE180)
  33564. {
  33565. u32 adr, res;
  33566. u32 src, dst;
  33567. u32 sft;
  33568. sft = (((Opcode >> 9) - 1) & 7) + 1;
  33569. ctx->io_cycle_counter -= sft * 2;
  33570. src = DREGu32((Opcode >> 0) & 7);
  33571. flag_X = flag_C = src >> (24 - sft);
  33572. res = src << sft;
  33573. flag_N = res >> 24;
  33574. flag_NotZ = res & 0xFFFFFFFF;
  33575. DREGu32((Opcode >> 0) & 7) = res;
  33576. flag_V = 0;
  33577. {
  33578. u32 msk = (((s32)0x80000000) >> (sft + 0)) & 0xFFFFFFFF;
  33579. src &= msk;
  33580. if ((src) && (src != msk)) flag_V = M68K_SR_V;
  33581. }
  33582. RET(8)
  33583. }
  33584. // LSLk
  33585. OPCODE(0xE108)
  33586. {
  33587. u32 adr, res;
  33588. u32 src, dst;
  33589. u32 sft;
  33590. sft = (((Opcode >> 9) - 1) & 7) + 1;
  33591. ctx->io_cycle_counter -= sft * 2;
  33592. src = DREGu8((Opcode >> 0) & 7);
  33593. flag_V = 0;
  33594. flag_X = flag_C = src << (0 + sft);
  33595. res = src << sft;
  33596. flag_N = res >> 0;
  33597. flag_NotZ = res & 0x000000FF;
  33598. DREGu8((Opcode >> 0) & 7) = res;
  33599. RET(6)
  33600. }
  33601. // LSLk
  33602. OPCODE(0xE148)
  33603. {
  33604. u32 adr, res;
  33605. u32 src, dst;
  33606. u32 sft;
  33607. sft = (((Opcode >> 9) - 1) & 7) + 1;
  33608. ctx->io_cycle_counter -= sft * 2;
  33609. src = DREGu16((Opcode >> 0) & 7);
  33610. flag_V = 0;
  33611. flag_X = flag_C = src >> (8 - sft);
  33612. res = src << sft;
  33613. flag_N = res >> 8;
  33614. flag_NotZ = res & 0x0000FFFF;
  33615. DREGu16((Opcode >> 0) & 7) = res;
  33616. RET(6)
  33617. }
  33618. // LSLk
  33619. OPCODE(0xE188)
  33620. {
  33621. u32 adr, res;
  33622. u32 src, dst;
  33623. u32 sft;
  33624. sft = (((Opcode >> 9) - 1) & 7) + 1;
  33625. ctx->io_cycle_counter -= sft * 2;
  33626. src = DREGu32((Opcode >> 0) & 7);
  33627. flag_V = 0;
  33628. flag_X = flag_C = src >> (24 - sft);
  33629. res = src << sft;
  33630. flag_N = res >> 24;
  33631. flag_NotZ = res & 0xFFFFFFFF;
  33632. DREGu32((Opcode >> 0) & 7) = res;
  33633. RET(8)
  33634. }
  33635. // ROXLk
  33636. OPCODE(0xE110)
  33637. {
  33638. u32 adr, res;
  33639. u32 src, dst;
  33640. u32 sft;
  33641. sft = (((Opcode >> 9) - 1) & 7) + 1;
  33642. ctx->io_cycle_counter -= sft * 2;
  33643. src = DREGu8((Opcode >> 0) & 7);
  33644. src |= (flag_X & M68K_SR_X) << 0;
  33645. res = (src << sft) | (src >> (9 - sft));
  33646. flag_X = flag_C = res >> 0;
  33647. flag_V = 0;
  33648. flag_N = res >> 0;
  33649. flag_NotZ = res & 0x000000FF;
  33650. DREGu8((Opcode >> 0) & 7) = res;
  33651. RET(6)
  33652. }
  33653. // ROXLk
  33654. OPCODE(0xE150)
  33655. {
  33656. u32 adr, res;
  33657. u32 src, dst;
  33658. u32 sft;
  33659. sft = (((Opcode >> 9) - 1) & 7) + 1;
  33660. ctx->io_cycle_counter -= sft * 2;
  33661. src = DREGu16((Opcode >> 0) & 7);
  33662. src |= (flag_X & M68K_SR_X) << 8;
  33663. res = (src << sft) | (src >> (17 - sft));
  33664. flag_X = flag_C = res >> 8;
  33665. flag_V = 0;
  33666. flag_N = res >> 8;
  33667. flag_NotZ = res & 0x0000FFFF;
  33668. DREGu16((Opcode >> 0) & 7) = res;
  33669. RET(6)
  33670. }
  33671. // ROXLk
  33672. OPCODE(0xE190)
  33673. {
  33674. u32 adr, res;
  33675. u32 src, dst;
  33676. u32 sft;
  33677. sft = (((Opcode >> 9) - 1) & 7) + 1;
  33678. ctx->io_cycle_counter -= sft * 2;
  33679. src = DREGu32((Opcode >> 0) & 7);
  33680. flag_C = src >> ((32 - M68K_SR_C_SFT) - sft);
  33681. if (sft == 1) res = (src << 1) | ((flag_X & M68K_SR_X) >> ((M68K_SR_X_SFT + 1) - 1));
  33682. else res = (src << sft) | (src >> (33 - sft)) | ((flag_X & M68K_SR_X) >> ((M68K_SR_X_SFT + 1) - sft));
  33683. flag_X = flag_C;
  33684. flag_V = 0;
  33685. flag_N = res >> 24;
  33686. flag_NotZ = res;
  33687. DREGu32((Opcode >> 0) & 7) = res;
  33688. RET(8)
  33689. }
  33690. // ROLk
  33691. OPCODE(0xE118)
  33692. {
  33693. u32 adr, res;
  33694. u32 src, dst;
  33695. u32 sft;
  33696. sft = (((Opcode >> 9) - 1) & 7) + 1;
  33697. ctx->io_cycle_counter -= sft * 2;
  33698. src = DREGu8((Opcode >> 0) & 7);
  33699. flag_V = 0;
  33700. flag_C = src << (0 + sft);
  33701. res = (src << sft) | (src >> (8 - sft));
  33702. flag_N = res >> 0;
  33703. flag_NotZ = res & 0x000000FF;
  33704. DREGu8((Opcode >> 0) & 7) = res;
  33705. RET(6)
  33706. }
  33707. // ROLk
  33708. OPCODE(0xE158)
  33709. {
  33710. u32 adr, res;
  33711. u32 src, dst;
  33712. u32 sft;
  33713. sft = (((Opcode >> 9) - 1) & 7) + 1;
  33714. ctx->io_cycle_counter -= sft * 2;
  33715. src = DREGu16((Opcode >> 0) & 7);
  33716. flag_V = 0;
  33717. flag_C = src >> (8 - sft);
  33718. res = (src << sft) | (src >> (16 - sft));
  33719. flag_N = res >> 8;
  33720. flag_NotZ = res & 0x0000FFFF;
  33721. DREGu16((Opcode >> 0) & 7) = res;
  33722. RET(6)
  33723. }
  33724. // ROLk
  33725. OPCODE(0xE198)
  33726. {
  33727. u32 adr, res;
  33728. u32 src, dst;
  33729. u32 sft;
  33730. sft = (((Opcode >> 9) - 1) & 7) + 1;
  33731. ctx->io_cycle_counter -= sft * 2;
  33732. src = DREGu32((Opcode >> 0) & 7);
  33733. flag_V = 0;
  33734. flag_C = src >> (24 - sft);
  33735. res = (src << sft) | (src >> (32 - sft));
  33736. flag_N = res >> 24;
  33737. flag_NotZ = res;
  33738. DREGu32((Opcode >> 0) & 7) = res;
  33739. RET(8)
  33740. }
  33741. // ASRD
  33742. OPCODE(0xE020)
  33743. {
  33744. u32 adr, res;
  33745. u32 src, dst;
  33746. u32 sft;
  33747. sft = DREG((Opcode >> 9) & 7) & 0x3F;
  33748. src = (s32)DREGs8((Opcode >> 0) & 7);
  33749. if (sft)
  33750. {
  33751. ctx->io_cycle_counter -= sft * 2;
  33752. if (sft < 8)
  33753. {
  33754. flag_V = 0;
  33755. flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
  33756. res = ((s32)src) >> sft;
  33757. flag_N = res >> 0;
  33758. flag_NotZ = res;
  33759. DREGu8((Opcode >> 0) & 7) = res;
  33760. RET(6)
  33761. }
  33762. if (src & (1 << 7))
  33763. {
  33764. flag_N = M68K_SR_N;
  33765. flag_NotZ = 1;
  33766. flag_V = 0;
  33767. flag_C = M68K_SR_C;
  33768. flag_X = M68K_SR_X;
  33769. res = 0x000000FF;
  33770. DREGu8((Opcode >> 0) & 7) = res;
  33771. RET(6)
  33772. }
  33773. flag_N = 0;
  33774. flag_NotZ = 0;
  33775. flag_V = 0;
  33776. flag_C = 0;
  33777. flag_X = 0;
  33778. res = 0;
  33779. DREGu8((Opcode >> 0) & 7) = res;
  33780. RET(6)
  33781. }
  33782. flag_V = 0;
  33783. flag_C = 0;
  33784. flag_N = src >> 0;
  33785. flag_NotZ = src;
  33786. RET(6)
  33787. }
  33788. // ASRD
  33789. OPCODE(0xE060)
  33790. {
  33791. u32 adr, res;
  33792. u32 src, dst;
  33793. u32 sft;
  33794. sft = DREG((Opcode >> 9) & 7) & 0x3F;
  33795. src = (s32)DREGs16((Opcode >> 0) & 7);
  33796. if (sft)
  33797. {
  33798. ctx->io_cycle_counter -= sft * 2;
  33799. if (sft < 16)
  33800. {
  33801. flag_V = 0;
  33802. flag_X = flag_C = (src >> (sft - 1)) << M68K_SR_C_SFT;
  33803. res = ((s32)src) >> sft;
  33804. flag_N = res >> 8;
  33805. flag_NotZ = res;
  33806. DREGu16((Opcode >> 0) & 7) = res;
  33807. RET(6)
  33808. }
  33809. if (src & (1 << 15))
  33810. {
  33811. flag_N = M68K_SR_N;
  33812. flag_NotZ = 1;
  33813. flag_V = 0;
  33814. flag_C = M68K_SR_C;
  33815. flag_X = M68K_SR_X;
  33816. res = 0x0000FFFF;
  33817. DREGu16((Opcode >> 0) & 7) = res;
  33818. RET(6)
  33819. }
  33820. flag_N = 0;
  33821. flag_NotZ = 0;
  33822. flag_V = 0;
  33823. flag_C = 0;
  33824. flag_X = 0;
  33825. res = 0;
  33826. DREGu16((Opcode >> 0) & 7) = res;
  33827. RET(6)
  33828. }
  33829. flag_V = 0;
  33830. flag_C = 0;
  33831. flag_N = src >> 8;
  33832. flag_NotZ = src;
  33833. RET(6)
  33834. }
  33835. // ASRD
  33836. OPCODE(0xE0A0)
  33837. {
  33838. #ifdef USE_CYCLONE_TIMING
  33839. #define CYC 8
  33840. #else
  33841. #define CYC 6
  33842. #endif
  33843. u32 adr, res;
  33844. u32 src, dst;
  33845. u32 sft;
  33846. sft = DREG((Opcode >> 9) & 7) & 0x3F;
  33847. src = (s32)DREGs32((Opcode >> 0) & 7);
  33848. if (sft)
  33849. {
  33850. ctx->io_cycle_counter -= sft * 2;
  33851. if (sft < 32)
  33852. {
  33853. flag_V = 0;
  33854. flag_X = flag_C = (src >> (sft - 1)) << M68K_SR_C_SFT;
  33855. res = ((s32)src) >> sft;
  33856. flag_N = res >> 24;
  33857. flag_NotZ = res;
  33858. DREGu32((Opcode >> 0) & 7) = res;
  33859. RET(CYC)
  33860. }
  33861. if (src & (1 << 31))
  33862. {
  33863. flag_N = M68K_SR_N;
  33864. flag_NotZ = 1;
  33865. flag_V = 0;
  33866. flag_C = M68K_SR_C;
  33867. flag_X = M68K_SR_X;
  33868. res = 0xFFFFFFFF;
  33869. DREGu32((Opcode >> 0) & 7) = res;
  33870. RET(CYC)
  33871. }
  33872. flag_N = 0;
  33873. flag_NotZ = 0;
  33874. flag_V = 0;
  33875. flag_C = 0;
  33876. flag_X = 0;
  33877. res = 0;
  33878. DREGu32((Opcode >> 0) & 7) = res;
  33879. RET(CYC)
  33880. }
  33881. flag_V = 0;
  33882. flag_C = 0;
  33883. flag_N = src >> 24;
  33884. flag_NotZ = src;
  33885. RET(CYC)
  33886. #undef CYC
  33887. }
  33888. // LSRD
  33889. OPCODE(0xE028)
  33890. {
  33891. u32 adr, res;
  33892. u32 src, dst;
  33893. u32 sft;
  33894. sft = DREG((Opcode >> 9) & 7) & 0x3F;
  33895. src = DREGu8((Opcode >> 0) & 7);
  33896. if (sft)
  33897. {
  33898. ctx->io_cycle_counter -= sft * 2;
  33899. if (sft <= 8)
  33900. {
  33901. flag_N = flag_V = 0;
  33902. flag_X = flag_C = src << ((M68K_SR_C_SFT + 1) - sft);
  33903. res = src >> sft;
  33904. flag_NotZ = res;
  33905. DREGu8((Opcode >> 0) & 7) = res;
  33906. RET(6)
  33907. }
  33908. flag_X = flag_C = 0;
  33909. flag_N = 0;
  33910. flag_NotZ = 0;
  33911. flag_V = 0;
  33912. res = 0;
  33913. DREGu8((Opcode >> 0) & 7) = res;
  33914. RET(6)
  33915. }
  33916. flag_V = 0;
  33917. flag_C = 0;
  33918. flag_N = src >> 0;
  33919. flag_NotZ = src;
  33920. RET(6)
  33921. }
  33922. // LSRD
  33923. OPCODE(0xE068)
  33924. {
  33925. u32 adr, res;
  33926. u32 src, dst;
  33927. u32 sft;
  33928. sft = DREG((Opcode >> 9) & 7) & 0x3F;
  33929. src = DREGu16((Opcode >> 0) & 7);
  33930. if (sft)
  33931. {
  33932. ctx->io_cycle_counter -= sft * 2;
  33933. if (sft <= 16)
  33934. {
  33935. flag_N = flag_V = 0;
  33936. flag_X = flag_C = (src >> (sft - 1)) << M68K_SR_C_SFT;
  33937. res = src >> sft;
  33938. flag_NotZ = res;
  33939. DREGu16((Opcode >> 0) & 7) = res;
  33940. RET(6)
  33941. }
  33942. flag_X = flag_C = 0;
  33943. flag_N = 0;
  33944. flag_NotZ = 0;
  33945. flag_V = 0;
  33946. res = 0;
  33947. DREGu16((Opcode >> 0) & 7) = res;
  33948. RET(6)
  33949. }
  33950. flag_V = 0;
  33951. flag_C = 0;
  33952. flag_N = src >> 8;
  33953. flag_NotZ = src;
  33954. RET(6)
  33955. }
  33956. // LSRD
  33957. OPCODE(0xE0A8)
  33958. {
  33959. #ifdef USE_CYCLONE_TIMING
  33960. #define CYC 8
  33961. #else
  33962. #define CYC 6
  33963. #endif
  33964. u32 adr, res;
  33965. u32 src, dst;
  33966. u32 sft;
  33967. sft = DREG((Opcode >> 9) & 7) & 0x3F;
  33968. src = DREGu32((Opcode >> 0) & 7);
  33969. if (sft)
  33970. {
  33971. ctx->io_cycle_counter -= sft * 2;
  33972. if (sft < 32)
  33973. {
  33974. flag_N = flag_V = 0;
  33975. flag_X = flag_C = (src >> (sft - 1)) << M68K_SR_C_SFT;
  33976. res = src >> sft;
  33977. flag_NotZ = res;
  33978. DREGu32((Opcode >> 0) & 7) = res;
  33979. RET(CYC)
  33980. }
  33981. if (sft == 32) flag_C = src >> (31 - M68K_SR_C_SFT);
  33982. else flag_C = 0;
  33983. flag_X = flag_C;
  33984. flag_N = 0;
  33985. flag_NotZ = 0;
  33986. flag_V = 0;
  33987. res = 0;
  33988. DREGu32((Opcode >> 0) & 7) = res;
  33989. RET(CYC)
  33990. }
  33991. flag_V = 0;
  33992. flag_C = 0;
  33993. flag_N = src >> 24;
  33994. flag_NotZ = src;
  33995. RET(CYC)
  33996. #undef CYC
  33997. }
  33998. // ROXRD
  33999. OPCODE(0xE030)
  34000. {
  34001. u32 adr, res;
  34002. u32 src, dst;
  34003. u32 sft;
  34004. sft = DREG((Opcode >> 9) & 7) & 0x3F;
  34005. src = DREGu8((Opcode >> 0) & 7);
  34006. if (sft)
  34007. {
  34008. ctx->io_cycle_counter -= sft * 2;
  34009. sft %= 9;
  34010. src |= (flag_X & M68K_SR_X) << 0;
  34011. res = (src >> sft) | (src << (9 - sft));
  34012. flag_X = flag_C = res >> 0;
  34013. flag_V = 0;
  34014. flag_N = res >> 0;
  34015. flag_NotZ = res & 0x000000FF;
  34016. DREGu8((Opcode >> 0) & 7) = res;
  34017. RET(6)
  34018. }
  34019. flag_V = 0;
  34020. flag_C = flag_X;
  34021. flag_N = src >> 0;
  34022. flag_NotZ = src;
  34023. RET(6)
  34024. }
  34025. // ROXRD
  34026. OPCODE(0xE070)
  34027. {
  34028. u32 adr, res;
  34029. u32 src, dst;
  34030. u32 sft;
  34031. sft = DREG((Opcode >> 9) & 7) & 0x3F;
  34032. src = DREGu16((Opcode >> 0) & 7);
  34033. if (sft)
  34034. {
  34035. ctx->io_cycle_counter -= sft * 2;
  34036. sft %= 17;
  34037. src |= (flag_X & M68K_SR_X) << 8;
  34038. res = (src >> sft) | (src << (17 - sft));
  34039. flag_X = flag_C = res >> 8;
  34040. flag_V = 0;
  34041. flag_N = res >> 8;
  34042. flag_NotZ = res & 0x0000FFFF;
  34043. DREGu16((Opcode >> 0) & 7) = res;
  34044. RET(6)
  34045. }
  34046. flag_V = 0;
  34047. flag_C = flag_X;
  34048. flag_N = src >> 8;
  34049. flag_NotZ = src;
  34050. RET(6)
  34051. }
  34052. // ROXRD
  34053. OPCODE(0xE0B0)
  34054. {
  34055. #ifdef USE_CYCLONE_TIMING
  34056. #define CYC 8
  34057. #else
  34058. #define CYC 6
  34059. #endif
  34060. u32 adr, res;
  34061. u32 src, dst;
  34062. u32 sft;
  34063. sft = DREG((Opcode >> 9) & 7) & 0x3F;
  34064. src = DREGu32((Opcode >> 0) & 7);
  34065. if (sft)
  34066. {
  34067. ctx->io_cycle_counter -= sft * 2;
  34068. sft %= 33;
  34069. if (sft != 0)
  34070. {
  34071. if (sft == 1) res = (src >> 1) | ((flag_X & M68K_SR_X) << (32 - (M68K_SR_X_SFT + 1)));
  34072. else res = (src >> sft) | (src << (33 - sft)) | (((flag_X & M68K_SR_X) << (32 - (M68K_SR_X_SFT + 1))) >> (sft - 1));
  34073. flag_X = (src >> (sft - 1)) << M68K_SR_X_SFT;
  34074. }
  34075. else res = src;
  34076. flag_C = flag_X;
  34077. flag_V = 0;
  34078. flag_N = res >> 24;
  34079. flag_NotZ = res;
  34080. DREGu32((Opcode >> 0) & 7) = res;
  34081. RET(CYC)
  34082. }
  34083. flag_V = 0;
  34084. flag_C = flag_X;
  34085. flag_N = src >> 24;
  34086. flag_NotZ = src;
  34087. RET(CYC)
  34088. #undef CYC
  34089. }
  34090. // RORD
  34091. OPCODE(0xE038)
  34092. {
  34093. u32 adr, res;
  34094. u32 src, dst;
  34095. u32 sft;
  34096. sft = DREG((Opcode >> 9) & 7) & 0x3F;
  34097. src = DREGu8((Opcode >> 0) & 7);
  34098. if (sft)
  34099. {
  34100. ctx->io_cycle_counter -= sft * 2;
  34101. sft &= 0x07;
  34102. flag_C = src << (M68K_SR_C_SFT - ((sft - 1) & 7));
  34103. res = (src >> sft) | (src << (8 - sft));
  34104. flag_V = 0;
  34105. flag_N = res >> 0;
  34106. flag_NotZ = res & 0x000000FF;
  34107. DREGu8((Opcode >> 0) & 7) = res;
  34108. RET(6)
  34109. }
  34110. flag_V = 0;
  34111. flag_C = 0;
  34112. flag_N = src >> 0;
  34113. flag_NotZ = src;
  34114. RET(6)
  34115. }
  34116. // RORD
  34117. OPCODE(0xE078)
  34118. {
  34119. u32 adr, res;
  34120. u32 src, dst;
  34121. u32 sft;
  34122. sft = DREG((Opcode >> 9) & 7) & 0x3F;
  34123. src = DREGu16((Opcode >> 0) & 7);
  34124. if (sft)
  34125. {
  34126. ctx->io_cycle_counter -= sft * 2;
  34127. sft &= 0x0F;
  34128. flag_C = (src >> ((sft - 1) & 15)) << M68K_SR_C_SFT;
  34129. res = (src >> sft) | (src << (16 - sft));
  34130. flag_V = 0;
  34131. flag_N = res >> 8;
  34132. flag_NotZ = res & 0x0000FFFF;
  34133. DREGu16((Opcode >> 0) & 7) = res;
  34134. RET(6)
  34135. }
  34136. flag_V = 0;
  34137. flag_C = 0;
  34138. flag_N = src >> 8;
  34139. flag_NotZ = src;
  34140. RET(6)
  34141. }
  34142. // RORD
  34143. OPCODE(0xE0B8)
  34144. {
  34145. #ifdef USE_CYCLONE_TIMING
  34146. #define CYC 8
  34147. #else
  34148. #define CYC 6
  34149. #endif
  34150. u32 adr, res;
  34151. u32 src, dst;
  34152. u32 sft;
  34153. sft = DREG((Opcode >> 9) & 7) & 0x3F;
  34154. src = DREGu32((Opcode >> 0) & 7);
  34155. if (sft)
  34156. {
  34157. ctx->io_cycle_counter -= sft * 2;
  34158. sft &= 0x1F;
  34159. flag_C = (src >> ((sft - 1) & 31)) << M68K_SR_C_SFT;
  34160. res = (src >> sft) | (src << (32 - sft));
  34161. flag_V = 0;
  34162. flag_N = res >> 24;
  34163. flag_NotZ = res;
  34164. DREGu32((Opcode >> 0) & 7) = res;
  34165. RET(CYC)
  34166. }
  34167. flag_V = 0;
  34168. flag_C = 0;
  34169. flag_N = src >> 24;
  34170. flag_NotZ = src;
  34171. RET(CYC)
  34172. #undef CYC
  34173. }
  34174. // ASLD
  34175. OPCODE(0xE120)
  34176. {
  34177. u32 adr, res;
  34178. u32 src, dst;
  34179. u32 sft;
  34180. sft = DREG((Opcode >> 9) & 7) & 0x3F;
  34181. src = DREGu8((Opcode >> 0) & 7);
  34182. if (sft)
  34183. {
  34184. ctx->io_cycle_counter -= sft * 2;
  34185. if (sft < 8)
  34186. {
  34187. flag_X = flag_C = (src << sft) >> 0;
  34188. res = (src << sft) & 0x000000FF;
  34189. flag_N = res >> 0;
  34190. flag_NotZ = res;
  34191. DREGu8((Opcode >> 0) & 7) = res;
  34192. flag_V = 0;
  34193. {
  34194. u32 msk = (((s32)0x80000000) >> (sft + 24)) & 0x000000FF;
  34195. src &= msk;
  34196. if ((src) && (src != msk)) flag_V = M68K_SR_V;
  34197. }
  34198. RET(6)
  34199. }
  34200. if (sft == 256) flag_C = src << M68K_SR_C_SFT;
  34201. else flag_C = 0;
  34202. flag_X = flag_C;
  34203. if (src) flag_V = M68K_SR_V;
  34204. else flag_V = 0;
  34205. res = 0;
  34206. DREGu8((Opcode >> 0) & 7) = res;
  34207. flag_N = 0;
  34208. flag_NotZ = 0;
  34209. RET(6)
  34210. }
  34211. flag_V = 0;
  34212. flag_C = 0;
  34213. flag_N = src >> 0;
  34214. flag_NotZ = src;
  34215. RET(6)
  34216. }
  34217. // ASLD
  34218. OPCODE(0xE160)
  34219. {
  34220. u32 adr, res;
  34221. u32 src, dst;
  34222. u32 sft;
  34223. sft = DREG((Opcode >> 9) & 7) & 0x3F;
  34224. src = DREGu16((Opcode >> 0) & 7);
  34225. if (sft)
  34226. {
  34227. ctx->io_cycle_counter -= sft * 2;
  34228. if (sft < 16)
  34229. {
  34230. flag_X = flag_C = (src << sft) >> 8;
  34231. res = (src << sft) & 0x0000FFFF;
  34232. flag_N = res >> 8;
  34233. flag_NotZ = res;
  34234. DREGu16((Opcode >> 0) & 7) = res;
  34235. flag_V = 0;
  34236. {
  34237. u32 msk = (((s32)0x80000000) >> (sft + 16)) & 0x0000FFFF;
  34238. src &= msk;
  34239. if ((src) && (src != msk)) flag_V = M68K_SR_V;
  34240. }
  34241. RET(6)
  34242. }
  34243. if (sft == 65536) flag_C = src << M68K_SR_C_SFT;
  34244. else flag_C = 0;
  34245. flag_X = flag_C;
  34246. if (src) flag_V = M68K_SR_V;
  34247. else flag_V = 0;
  34248. res = 0;
  34249. DREGu16((Opcode >> 0) & 7) = res;
  34250. flag_N = 0;
  34251. flag_NotZ = 0;
  34252. RET(6)
  34253. }
  34254. flag_V = 0;
  34255. flag_C = 0;
  34256. flag_N = src >> 8;
  34257. flag_NotZ = src;
  34258. RET(6)
  34259. }
  34260. // ASLD
  34261. OPCODE(0xE1A0)
  34262. {
  34263. #ifdef USE_CYCLONE_TIMING
  34264. #define CYC 8
  34265. #else
  34266. #define CYC 6
  34267. #endif
  34268. u32 adr, res;
  34269. u32 src, dst;
  34270. u32 sft;
  34271. sft = DREG((Opcode >> 9) & 7) & 0x3F;
  34272. src = DREGu32((Opcode >> 0) & 7);
  34273. if (sft)
  34274. {
  34275. ctx->io_cycle_counter -= sft * 2;
  34276. if (sft < 32)
  34277. {
  34278. flag_X = flag_C = (src >> (32 - sft)) << M68K_SR_C_SFT;
  34279. res = src << sft;
  34280. flag_N = res >> 24;
  34281. flag_NotZ = res;
  34282. DREGu32((Opcode >> 0) & 7) = res;
  34283. flag_V = 0;
  34284. {
  34285. u32 msk = (((s32)0x80000000) >> (sft + 0)) & 0xFFFFFFFF;
  34286. src &= msk;
  34287. if ((src) && (src != msk)) flag_V = M68K_SR_V;
  34288. }
  34289. RET(CYC)
  34290. }
  34291. if (sft == 0) flag_C = src << M68K_SR_C_SFT;
  34292. else flag_C = 0;
  34293. flag_X = flag_C;
  34294. if (src) flag_V = M68K_SR_V;
  34295. else flag_V = 0;
  34296. res = 0;
  34297. DREGu32((Opcode >> 0) & 7) = res;
  34298. flag_N = 0;
  34299. flag_NotZ = 0;
  34300. RET(CYC)
  34301. }
  34302. flag_V = 0;
  34303. flag_C = 0;
  34304. flag_N = src >> 24;
  34305. flag_NotZ = src;
  34306. RET(CYC)
  34307. #undef CYC
  34308. }
  34309. // LSLD
  34310. OPCODE(0xE128)
  34311. {
  34312. u32 adr, res;
  34313. u32 src, dst;
  34314. u32 sft;
  34315. sft = DREG((Opcode >> 9) & 7) & 0x3F;
  34316. src = DREGu8((Opcode >> 0) & 7);
  34317. if (sft)
  34318. {
  34319. ctx->io_cycle_counter -= sft * 2;
  34320. if (sft <= 8)
  34321. {
  34322. flag_X = flag_C = (src << sft) >> 0;
  34323. res = (src << sft) & 0x000000FF;
  34324. flag_V = 0;
  34325. flag_N = res >> 0;
  34326. flag_NotZ = res;
  34327. DREGu8((Opcode >> 0) & 7) = res;
  34328. RET(6)
  34329. }
  34330. flag_X = flag_C = 0;
  34331. flag_N = 0;
  34332. flag_NotZ = 0;
  34333. flag_V = 0;
  34334. res = 0;
  34335. DREGu8((Opcode >> 0) & 7) = res;
  34336. RET(6)
  34337. }
  34338. flag_V = 0;
  34339. flag_C = 0;
  34340. flag_N = src >> 0;
  34341. flag_NotZ = src;
  34342. RET(6)
  34343. }
  34344. // LSLD
  34345. OPCODE(0xE168)
  34346. {
  34347. u32 adr, res;
  34348. u32 src, dst;
  34349. u32 sft;
  34350. sft = DREG((Opcode >> 9) & 7) & 0x3F;
  34351. src = DREGu16((Opcode >> 0) & 7);
  34352. if (sft)
  34353. {
  34354. ctx->io_cycle_counter -= sft * 2;
  34355. if (sft <= 16)
  34356. {
  34357. flag_X = flag_C = (src << sft) >> 8;
  34358. res = (src << sft) & 0x0000FFFF;
  34359. flag_V = 0;
  34360. flag_N = res >> 8;
  34361. flag_NotZ = res;
  34362. DREGu16((Opcode >> 0) & 7) = res;
  34363. RET(6)
  34364. }
  34365. flag_X = flag_C = 0;
  34366. flag_N = 0;
  34367. flag_NotZ = 0;
  34368. flag_V = 0;
  34369. res = 0;
  34370. DREGu16((Opcode >> 0) & 7) = res;
  34371. RET(6)
  34372. }
  34373. flag_V = 0;
  34374. flag_C = 0;
  34375. flag_N = src >> 8;
  34376. flag_NotZ = src;
  34377. RET(6)
  34378. }
  34379. // LSLD
  34380. OPCODE(0xE1A8)
  34381. {
  34382. #ifdef USE_CYCLONE_TIMING
  34383. #define CYC 8
  34384. #else
  34385. #define CYC 6
  34386. #endif
  34387. u32 adr, res;
  34388. u32 src, dst;
  34389. u32 sft;
  34390. sft = DREG((Opcode >> 9) & 7) & 0x3F;
  34391. src = DREGu32((Opcode >> 0) & 7);
  34392. if (sft)
  34393. {
  34394. ctx->io_cycle_counter -= sft * 2;
  34395. if (sft < 32)
  34396. {
  34397. flag_X = flag_C = (src >> (32 - sft)) << M68K_SR_C_SFT;
  34398. res = src << sft;
  34399. flag_V = 0;
  34400. flag_N = res >> 24;
  34401. flag_NotZ = res;
  34402. DREGu32((Opcode >> 0) & 7) = res;
  34403. RET(CYC)
  34404. }
  34405. if (sft == 32) flag_C = src << M68K_SR_C_SFT;
  34406. else flag_C = 0;
  34407. flag_X = flag_C;
  34408. flag_N = 0;
  34409. flag_NotZ = 0;
  34410. flag_V = 0;
  34411. res = 0;
  34412. DREGu32((Opcode >> 0) & 7) = res;
  34413. RET(CYC)
  34414. }
  34415. flag_V = 0;
  34416. flag_C = 0;
  34417. flag_N = src >> 24;
  34418. flag_NotZ = src;
  34419. RET(CYC)
  34420. #undef CYC
  34421. }
  34422. // ROXLD
  34423. OPCODE(0xE130)
  34424. {
  34425. u32 adr, res;
  34426. u32 src, dst;
  34427. u32 sft;
  34428. sft = DREG((Opcode >> 9) & 7) & 0x3F;
  34429. src = DREGu8((Opcode >> 0) & 7);
  34430. if (sft)
  34431. {
  34432. ctx->io_cycle_counter -= sft * 2;
  34433. sft %= 9;
  34434. src |= (flag_X & M68K_SR_X) << 0;
  34435. res = (src << sft) | (src >> (9 - sft));
  34436. flag_X = flag_C = res >> 0;
  34437. flag_V = 0;
  34438. flag_N = res >> 0;
  34439. flag_NotZ = res & 0x000000FF;
  34440. DREGu8((Opcode >> 0) & 7) = res;
  34441. RET(6)
  34442. }
  34443. flag_V = 0;
  34444. flag_C = flag_X;
  34445. flag_N = src >> 0;
  34446. flag_NotZ = src;
  34447. RET(6)
  34448. }
  34449. // ROXLD
  34450. OPCODE(0xE170)
  34451. {
  34452. u32 adr, res;
  34453. u32 src, dst;
  34454. u32 sft;
  34455. sft = DREG((Opcode >> 9) & 7) & 0x3F;
  34456. src = DREGu16((Opcode >> 0) & 7);
  34457. if (sft)
  34458. {
  34459. ctx->io_cycle_counter -= sft * 2;
  34460. sft %= 17;
  34461. src |= (flag_X & M68K_SR_X) << 8;
  34462. res = (src << sft) | (src >> (17 - sft));
  34463. flag_X = flag_C = res >> 8;
  34464. flag_V = 0;
  34465. flag_N = res >> 8;
  34466. flag_NotZ = res & 0x0000FFFF;
  34467. DREGu16((Opcode >> 0) & 7) = res;
  34468. RET(6)
  34469. }
  34470. flag_V = 0;
  34471. flag_C = flag_X;
  34472. flag_N = src >> 8;
  34473. flag_NotZ = src;
  34474. RET(6)
  34475. }
  34476. // ROXLD
  34477. OPCODE(0xE1B0)
  34478. {
  34479. #ifdef USE_CYCLONE_TIMING
  34480. #define CYC 8
  34481. #else
  34482. #define CYC 6
  34483. #endif
  34484. u32 adr, res;
  34485. u32 src, dst;
  34486. u32 sft;
  34487. sft = DREG((Opcode >> 9) & 7) & 0x3F;
  34488. src = DREGu32((Opcode >> 0) & 7);
  34489. if (sft)
  34490. {
  34491. ctx->io_cycle_counter -= sft * 2;
  34492. sft %= 33;
  34493. if (sft != 0)
  34494. {
  34495. if (sft == 1) res = (src << 1) | ((flag_X >> ((M68K_SR_X_SFT + 1) - 1)) & 1);
  34496. else res = (src << sft) | (src >> (33 - sft)) | (((flag_X >> ((M68K_SR_X_SFT + 1) - 1)) & 1) << (sft - 1));
  34497. flag_X = (src >> (32 - sft)) << M68K_SR_X_SFT;
  34498. }
  34499. else res = src;
  34500. flag_C = flag_X;
  34501. flag_V = 0;
  34502. flag_N = res >> 24;
  34503. flag_NotZ = res;
  34504. DREGu32((Opcode >> 0) & 7) = res;
  34505. RET(CYC)
  34506. }
  34507. flag_V = 0;
  34508. flag_C = flag_X;
  34509. flag_N = src >> 24;
  34510. flag_NotZ = src;
  34511. RET(CYC)
  34512. #undef CYC
  34513. }
  34514. // ROLD
  34515. OPCODE(0xE138)
  34516. {
  34517. u32 adr, res;
  34518. u32 src, dst;
  34519. u32 sft;
  34520. sft = DREG((Opcode >> 9) & 7) & 0x3F;
  34521. src = DREGu8((Opcode >> 0) & 7);
  34522. if (sft)
  34523. {
  34524. ctx->io_cycle_counter -= sft * 2;
  34525. if (sft &= 0x07)
  34526. {
  34527. flag_C = (src << sft) >> 0;
  34528. res = ((src << sft) | (src >> (8 - sft))) & 0x000000FF;
  34529. flag_V = 0;
  34530. flag_N = res >> 0;
  34531. flag_NotZ = res;
  34532. DREGu8((Opcode >> 0) & 7) = res;
  34533. RET(6)
  34534. }
  34535. flag_V = 0;
  34536. flag_C = src << M68K_SR_C_SFT;
  34537. flag_N = src >> 0;
  34538. flag_NotZ = src;
  34539. RET(6)
  34540. }
  34541. flag_V = 0;
  34542. flag_C = 0;
  34543. flag_N = src >> 0;
  34544. flag_NotZ = src;
  34545. RET(6)
  34546. }
  34547. // ROLD
  34548. OPCODE(0xE178)
  34549. {
  34550. u32 adr, res;
  34551. u32 src, dst;
  34552. u32 sft;
  34553. sft = DREG((Opcode >> 9) & 7) & 0x3F;
  34554. src = DREGu16((Opcode >> 0) & 7);
  34555. if (sft)
  34556. {
  34557. ctx->io_cycle_counter -= sft * 2;
  34558. if (sft &= 0x0F)
  34559. {
  34560. flag_C = (src << sft) >> 8;
  34561. res = ((src << sft) | (src >> (16 - sft))) & 0x0000FFFF;
  34562. flag_V = 0;
  34563. flag_N = res >> 8;
  34564. flag_NotZ = res;
  34565. DREGu16((Opcode >> 0) & 7) = res;
  34566. RET(6)
  34567. }
  34568. flag_V = 0;
  34569. flag_C = src << M68K_SR_C_SFT;
  34570. flag_N = src >> 8;
  34571. flag_NotZ = src;
  34572. RET(6)
  34573. }
  34574. flag_V = 0;
  34575. flag_C = 0;
  34576. flag_N = src >> 8;
  34577. flag_NotZ = src;
  34578. RET(6)
  34579. }
  34580. // ROLD
  34581. OPCODE(0xE1B8)
  34582. {
  34583. #ifdef USE_CYCLONE_TIMING
  34584. #define CYC 8
  34585. #else
  34586. #define CYC 6
  34587. #endif
  34588. u32 adr, res;
  34589. u32 src, dst;
  34590. u32 sft;
  34591. sft = DREG((Opcode >> 9) & 7) & 0x3F;
  34592. src = DREGu32((Opcode >> 0) & 7);
  34593. if (sft)
  34594. {
  34595. ctx->io_cycle_counter -= sft * 2;
  34596. if (sft &= 0x1F)
  34597. {
  34598. flag_C = (src >> (32 - sft)) << M68K_SR_C_SFT;
  34599. res = (src << sft) | (src >> (32 - sft));
  34600. flag_V = 0;
  34601. flag_N = res >> 24;
  34602. flag_NotZ = res;
  34603. DREGu32((Opcode >> 0) & 7) = res;
  34604. RET(CYC)
  34605. }
  34606. flag_V = 0;
  34607. flag_C = src << M68K_SR_C_SFT;
  34608. flag_N = src >> 24;
  34609. flag_NotZ = src;
  34610. RET(CYC)
  34611. }
  34612. flag_V = 0;
  34613. flag_C = 0;
  34614. flag_N = src >> 24;
  34615. flag_NotZ = src;
  34616. RET(CYC)
  34617. #undef CYC
  34618. }
  34619. // ASR
  34620. OPCODE(0xE0D0)
  34621. {
  34622. u32 adr, res;
  34623. u32 src, dst;
  34624. adr = AREG((Opcode >> 0) & 7);
  34625. PRE_IO
  34626. READ_WORD_F(adr, src)
  34627. flag_V = 0;
  34628. flag_X = flag_C = src << M68K_SR_C_SFT;
  34629. res = (src >> 1) | (src & (1 << 15));
  34630. flag_N = res >> 8;
  34631. flag_NotZ = res;
  34632. WRITE_WORD_F(adr, res)
  34633. POST_IO
  34634. RET(12)
  34635. }
  34636. // ASR
  34637. OPCODE(0xE0D8)
  34638. {
  34639. u32 adr, res;
  34640. u32 src, dst;
  34641. adr = AREG((Opcode >> 0) & 7);
  34642. AREG((Opcode >> 0) & 7) += 2;
  34643. PRE_IO
  34644. READ_WORD_F(adr, src)
  34645. flag_V = 0;
  34646. flag_X = flag_C = src << M68K_SR_C_SFT;
  34647. res = (src >> 1) | (src & (1 << 15));
  34648. flag_N = res >> 8;
  34649. flag_NotZ = res;
  34650. WRITE_WORD_F(adr, res)
  34651. POST_IO
  34652. RET(12)
  34653. }
  34654. // ASR
  34655. OPCODE(0xE0E0)
  34656. {
  34657. u32 adr, res;
  34658. u32 src, dst;
  34659. adr = AREG((Opcode >> 0) & 7) - 2;
  34660. AREG((Opcode >> 0) & 7) = adr;
  34661. PRE_IO
  34662. READ_WORD_F(adr, src)
  34663. flag_V = 0;
  34664. flag_X = flag_C = src << M68K_SR_C_SFT;
  34665. res = (src >> 1) | (src & (1 << 15));
  34666. flag_N = res >> 8;
  34667. flag_NotZ = res;
  34668. WRITE_WORD_F(adr, res)
  34669. POST_IO
  34670. RET(14)
  34671. }
  34672. // ASR
  34673. OPCODE(0xE0E8)
  34674. {
  34675. u32 adr, res;
  34676. u32 src, dst;
  34677. FETCH_SWORD(adr);
  34678. adr += AREG((Opcode >> 0) & 7);
  34679. PRE_IO
  34680. READ_WORD_F(adr, src)
  34681. flag_V = 0;
  34682. flag_X = flag_C = src << M68K_SR_C_SFT;
  34683. res = (src >> 1) | (src & (1 << 15));
  34684. flag_N = res >> 8;
  34685. flag_NotZ = res;
  34686. WRITE_WORD_F(adr, res)
  34687. POST_IO
  34688. RET(16)
  34689. }
  34690. // ASR
  34691. OPCODE(0xE0F0)
  34692. {
  34693. u32 adr, res;
  34694. u32 src, dst;
  34695. adr = AREG((Opcode >> 0) & 7);
  34696. DECODE_EXT_WORD
  34697. PRE_IO
  34698. READ_WORD_F(adr, src)
  34699. flag_V = 0;
  34700. flag_X = flag_C = src << M68K_SR_C_SFT;
  34701. res = (src >> 1) | (src & (1 << 15));
  34702. flag_N = res >> 8;
  34703. flag_NotZ = res;
  34704. WRITE_WORD_F(adr, res)
  34705. POST_IO
  34706. RET(18)
  34707. }
  34708. // ASR
  34709. OPCODE(0xE0F8)
  34710. {
  34711. u32 adr, res;
  34712. u32 src, dst;
  34713. FETCH_SWORD(adr);
  34714. PRE_IO
  34715. READ_WORD_F(adr, src)
  34716. flag_V = 0;
  34717. flag_X = flag_C = src << M68K_SR_C_SFT;
  34718. res = (src >> 1) | (src & (1 << 15));
  34719. flag_N = res >> 8;
  34720. flag_NotZ = res;
  34721. WRITE_WORD_F(adr, res)
  34722. POST_IO
  34723. RET(16)
  34724. }
  34725. // ASR
  34726. OPCODE(0xE0F9)
  34727. {
  34728. u32 adr, res;
  34729. u32 src, dst;
  34730. FETCH_LONG(adr);
  34731. PRE_IO
  34732. READ_WORD_F(adr, src)
  34733. flag_V = 0;
  34734. flag_X = flag_C = src << M68K_SR_C_SFT;
  34735. res = (src >> 1) | (src & (1 << 15));
  34736. flag_N = res >> 8;
  34737. flag_NotZ = res;
  34738. WRITE_WORD_F(adr, res)
  34739. POST_IO
  34740. RET(20)
  34741. }
  34742. // ASR
  34743. OPCODE(0xE0DF)
  34744. {
  34745. u32 adr, res;
  34746. u32 src, dst;
  34747. adr = AREG(7);
  34748. AREG(7) += 2;
  34749. PRE_IO
  34750. READ_WORD_F(adr, src)
  34751. flag_V = 0;
  34752. flag_X = flag_C = src << M68K_SR_C_SFT;
  34753. res = (src >> 1) | (src & (1 << 15));
  34754. flag_N = res >> 8;
  34755. flag_NotZ = res;
  34756. WRITE_WORD_F(adr, res)
  34757. POST_IO
  34758. RET(12)
  34759. }
  34760. // ASR
  34761. OPCODE(0xE0E7)
  34762. {
  34763. u32 adr, res;
  34764. u32 src, dst;
  34765. adr = AREG(7) - 2;
  34766. AREG(7) = adr;
  34767. PRE_IO
  34768. READ_WORD_F(adr, src)
  34769. flag_V = 0;
  34770. flag_X = flag_C = src << M68K_SR_C_SFT;
  34771. res = (src >> 1) | (src & (1 << 15));
  34772. flag_N = res >> 8;
  34773. flag_NotZ = res;
  34774. WRITE_WORD_F(adr, res)
  34775. POST_IO
  34776. RET(14)
  34777. }
  34778. // LSR
  34779. OPCODE(0xE2D0)
  34780. {
  34781. u32 adr, res;
  34782. u32 src, dst;
  34783. adr = AREG((Opcode >> 0) & 7);
  34784. PRE_IO
  34785. READ_WORD_F(adr, src)
  34786. flag_N = flag_V = 0;
  34787. flag_X = flag_C = src << M68K_SR_C_SFT;
  34788. res = src >> 1;
  34789. flag_NotZ = res;
  34790. WRITE_WORD_F(adr, res)
  34791. POST_IO
  34792. RET(12)
  34793. }
  34794. // LSR
  34795. OPCODE(0xE2D8)
  34796. {
  34797. u32 adr, res;
  34798. u32 src, dst;
  34799. adr = AREG((Opcode >> 0) & 7);
  34800. AREG((Opcode >> 0) & 7) += 2;
  34801. PRE_IO
  34802. READ_WORD_F(adr, src)
  34803. flag_N = flag_V = 0;
  34804. flag_X = flag_C = src << M68K_SR_C_SFT;
  34805. res = src >> 1;
  34806. flag_NotZ = res;
  34807. WRITE_WORD_F(adr, res)
  34808. POST_IO
  34809. RET(12)
  34810. }
  34811. // LSR
  34812. OPCODE(0xE2E0)
  34813. {
  34814. u32 adr, res;
  34815. u32 src, dst;
  34816. adr = AREG((Opcode >> 0) & 7) - 2;
  34817. AREG((Opcode >> 0) & 7) = adr;
  34818. PRE_IO
  34819. READ_WORD_F(adr, src)
  34820. flag_N = flag_V = 0;
  34821. flag_X = flag_C = src << M68K_SR_C_SFT;
  34822. res = src >> 1;
  34823. flag_NotZ = res;
  34824. WRITE_WORD_F(adr, res)
  34825. POST_IO
  34826. RET(14)
  34827. }
  34828. // LSR
  34829. OPCODE(0xE2E8)
  34830. {
  34831. u32 adr, res;
  34832. u32 src, dst;
  34833. FETCH_SWORD(adr);
  34834. adr += AREG((Opcode >> 0) & 7);
  34835. PRE_IO
  34836. READ_WORD_F(adr, src)
  34837. flag_N = flag_V = 0;
  34838. flag_X = flag_C = src << M68K_SR_C_SFT;
  34839. res = src >> 1;
  34840. flag_NotZ = res;
  34841. WRITE_WORD_F(adr, res)
  34842. POST_IO
  34843. RET(16)
  34844. }
  34845. // LSR
  34846. OPCODE(0xE2F0)
  34847. {
  34848. u32 adr, res;
  34849. u32 src, dst;
  34850. adr = AREG((Opcode >> 0) & 7);
  34851. DECODE_EXT_WORD
  34852. PRE_IO
  34853. READ_WORD_F(adr, src)
  34854. flag_N = flag_V = 0;
  34855. flag_X = flag_C = src << M68K_SR_C_SFT;
  34856. res = src >> 1;
  34857. flag_NotZ = res;
  34858. WRITE_WORD_F(adr, res)
  34859. POST_IO
  34860. RET(18)
  34861. }
  34862. // LSR
  34863. OPCODE(0xE2F8)
  34864. {
  34865. u32 adr, res;
  34866. u32 src, dst;
  34867. FETCH_SWORD(adr);
  34868. PRE_IO
  34869. READ_WORD_F(adr, src)
  34870. flag_N = flag_V = 0;
  34871. flag_X = flag_C = src << M68K_SR_C_SFT;
  34872. res = src >> 1;
  34873. flag_NotZ = res;
  34874. WRITE_WORD_F(adr, res)
  34875. POST_IO
  34876. RET(16)
  34877. }
  34878. // LSR
  34879. OPCODE(0xE2F9)
  34880. {
  34881. u32 adr, res;
  34882. u32 src, dst;
  34883. FETCH_LONG(adr);
  34884. PRE_IO
  34885. READ_WORD_F(adr, src)
  34886. flag_N = flag_V = 0;
  34887. flag_X = flag_C = src << M68K_SR_C_SFT;
  34888. res = src >> 1;
  34889. flag_NotZ = res;
  34890. WRITE_WORD_F(adr, res)
  34891. POST_IO
  34892. RET(20)
  34893. }
  34894. // LSR
  34895. OPCODE(0xE2DF)
  34896. {
  34897. u32 adr, res;
  34898. u32 src, dst;
  34899. adr = AREG(7);
  34900. AREG(7) += 2;
  34901. PRE_IO
  34902. READ_WORD_F(adr, src)
  34903. flag_N = flag_V = 0;
  34904. flag_X = flag_C = src << M68K_SR_C_SFT;
  34905. res = src >> 1;
  34906. flag_NotZ = res;
  34907. WRITE_WORD_F(adr, res)
  34908. POST_IO
  34909. RET(12)
  34910. }
  34911. // LSR
  34912. OPCODE(0xE2E7)
  34913. {
  34914. u32 adr, res;
  34915. u32 src, dst;
  34916. adr = AREG(7) - 2;
  34917. AREG(7) = adr;
  34918. PRE_IO
  34919. READ_WORD_F(adr, src)
  34920. flag_N = flag_V = 0;
  34921. flag_X = flag_C = src << M68K_SR_C_SFT;
  34922. res = src >> 1;
  34923. flag_NotZ = res;
  34924. WRITE_WORD_F(adr, res)
  34925. POST_IO
  34926. RET(14)
  34927. }
  34928. // ROXR
  34929. OPCODE(0xE4D0)
  34930. {
  34931. u32 adr, res;
  34932. u32 src, dst;
  34933. adr = AREG((Opcode >> 0) & 7);
  34934. PRE_IO
  34935. READ_WORD_F(adr, src)
  34936. flag_V = 0;
  34937. res = (src >> 1) | ((flag_X & M68K_SR_X) << 7);
  34938. flag_C = flag_X = src << M68K_SR_C_SFT;
  34939. flag_N = res >> 8;
  34940. flag_NotZ = res;
  34941. WRITE_WORD_F(adr, res)
  34942. POST_IO
  34943. RET(12)
  34944. }
  34945. // ROXR
  34946. OPCODE(0xE4D8)
  34947. {
  34948. u32 adr, res;
  34949. u32 src, dst;
  34950. adr = AREG((Opcode >> 0) & 7);
  34951. AREG((Opcode >> 0) & 7) += 2;
  34952. PRE_IO
  34953. READ_WORD_F(adr, src)
  34954. flag_V = 0;
  34955. res = (src >> 1) | ((flag_X & M68K_SR_X) << 7);
  34956. flag_C = flag_X = src << M68K_SR_C_SFT;
  34957. flag_N = res >> 8;
  34958. flag_NotZ = res;
  34959. WRITE_WORD_F(adr, res)
  34960. POST_IO
  34961. RET(12)
  34962. }
  34963. // ROXR
  34964. OPCODE(0xE4E0)
  34965. {
  34966. u32 adr, res;
  34967. u32 src, dst;
  34968. adr = AREG((Opcode >> 0) & 7) - 2;
  34969. AREG((Opcode >> 0) & 7) = adr;
  34970. PRE_IO
  34971. READ_WORD_F(adr, src)
  34972. flag_V = 0;
  34973. res = (src >> 1) | ((flag_X & M68K_SR_X) << 7);
  34974. flag_C = flag_X = src << M68K_SR_C_SFT;
  34975. flag_N = res >> 8;
  34976. flag_NotZ = res;
  34977. WRITE_WORD_F(adr, res)
  34978. POST_IO
  34979. RET(14)
  34980. }
  34981. // ROXR
  34982. OPCODE(0xE4E8)
  34983. {
  34984. u32 adr, res;
  34985. u32 src, dst;
  34986. FETCH_SWORD(adr);
  34987. adr += AREG((Opcode >> 0) & 7);
  34988. PRE_IO
  34989. READ_WORD_F(adr, src)
  34990. flag_V = 0;
  34991. res = (src >> 1) | ((flag_X & M68K_SR_X) << 7);
  34992. flag_C = flag_X = src << M68K_SR_C_SFT;
  34993. flag_N = res >> 8;
  34994. flag_NotZ = res;
  34995. WRITE_WORD_F(adr, res)
  34996. POST_IO
  34997. RET(16)
  34998. }
  34999. // ROXR
  35000. OPCODE(0xE4F0)
  35001. {
  35002. u32 adr, res;
  35003. u32 src, dst;
  35004. adr = AREG((Opcode >> 0) & 7);
  35005. DECODE_EXT_WORD
  35006. PRE_IO
  35007. READ_WORD_F(adr, src)
  35008. flag_V = 0;
  35009. res = (src >> 1) | ((flag_X & M68K_SR_X) << 7);
  35010. flag_C = flag_X = src << M68K_SR_C_SFT;
  35011. flag_N = res >> 8;
  35012. flag_NotZ = res;
  35013. WRITE_WORD_F(adr, res)
  35014. POST_IO
  35015. RET(18)
  35016. }
  35017. // ROXR
  35018. OPCODE(0xE4F8)
  35019. {
  35020. u32 adr, res;
  35021. u32 src, dst;
  35022. FETCH_SWORD(adr);
  35023. PRE_IO
  35024. READ_WORD_F(adr, src)
  35025. flag_V = 0;
  35026. res = (src >> 1) | ((flag_X & M68K_SR_X) << 7);
  35027. flag_C = flag_X = src << M68K_SR_C_SFT;
  35028. flag_N = res >> 8;
  35029. flag_NotZ = res;
  35030. WRITE_WORD_F(adr, res)
  35031. POST_IO
  35032. RET(16)
  35033. }
  35034. // ROXR
  35035. OPCODE(0xE4F9)
  35036. {
  35037. u32 adr, res;
  35038. u32 src, dst;
  35039. FETCH_LONG(adr);
  35040. PRE_IO
  35041. READ_WORD_F(adr, src)
  35042. flag_V = 0;
  35043. res = (src >> 1) | ((flag_X & M68K_SR_X) << 7);
  35044. flag_C = flag_X = src << M68K_SR_C_SFT;
  35045. flag_N = res >> 8;
  35046. flag_NotZ = res;
  35047. WRITE_WORD_F(adr, res)
  35048. POST_IO
  35049. RET(20)
  35050. }
  35051. // ROXR
  35052. OPCODE(0xE4DF)
  35053. {
  35054. u32 adr, res;
  35055. u32 src, dst;
  35056. adr = AREG(7);
  35057. AREG(7) += 2;
  35058. PRE_IO
  35059. READ_WORD_F(adr, src)
  35060. flag_V = 0;
  35061. res = (src >> 1) | ((flag_X & M68K_SR_X) << 7);
  35062. flag_C = flag_X = src << M68K_SR_C_SFT;
  35063. flag_N = res >> 8;
  35064. flag_NotZ = res;
  35065. WRITE_WORD_F(adr, res)
  35066. POST_IO
  35067. RET(12)
  35068. }
  35069. // ROXR
  35070. OPCODE(0xE4E7)
  35071. {
  35072. u32 adr, res;
  35073. u32 src, dst;
  35074. adr = AREG(7) - 2;
  35075. AREG(7) = adr;
  35076. PRE_IO
  35077. READ_WORD_F(adr, src)
  35078. flag_V = 0;
  35079. res = (src >> 1) | ((flag_X & M68K_SR_X) << 7);
  35080. flag_C = flag_X = src << M68K_SR_C_SFT;
  35081. flag_N = res >> 8;
  35082. flag_NotZ = res;
  35083. WRITE_WORD_F(adr, res)
  35084. POST_IO
  35085. RET(14)
  35086. }
  35087. // ROR
  35088. OPCODE(0xE6D0)
  35089. {
  35090. u32 adr, res;
  35091. u32 src, dst;
  35092. adr = AREG((Opcode >> 0) & 7);
  35093. PRE_IO
  35094. READ_WORD_F(adr, src)
  35095. flag_V = 0;
  35096. flag_C = src << M68K_SR_C_SFT;
  35097. res = (src >> 1) | (src << 15);
  35098. flag_N = res >> 8;
  35099. flag_NotZ = res & 0x0000FFFF;
  35100. WRITE_WORD_F(adr, res)
  35101. POST_IO
  35102. RET(12)
  35103. }
  35104. // ROR
  35105. OPCODE(0xE6D8)
  35106. {
  35107. u32 adr, res;
  35108. u32 src, dst;
  35109. adr = AREG((Opcode >> 0) & 7);
  35110. AREG((Opcode >> 0) & 7) += 2;
  35111. PRE_IO
  35112. READ_WORD_F(adr, src)
  35113. flag_V = 0;
  35114. flag_C = src << M68K_SR_C_SFT;
  35115. res = (src >> 1) | (src << 15);
  35116. flag_N = res >> 8;
  35117. flag_NotZ = res & 0x0000FFFF;
  35118. WRITE_WORD_F(adr, res)
  35119. POST_IO
  35120. RET(12)
  35121. }
  35122. // ROR
  35123. OPCODE(0xE6E0)
  35124. {
  35125. u32 adr, res;
  35126. u32 src, dst;
  35127. adr = AREG((Opcode >> 0) & 7) - 2;
  35128. AREG((Opcode >> 0) & 7) = adr;
  35129. PRE_IO
  35130. READ_WORD_F(adr, src)
  35131. flag_V = 0;
  35132. flag_C = src << M68K_SR_C_SFT;
  35133. res = (src >> 1) | (src << 15);
  35134. flag_N = res >> 8;
  35135. flag_NotZ = res & 0x0000FFFF;
  35136. WRITE_WORD_F(adr, res)
  35137. POST_IO
  35138. RET(14)
  35139. }
  35140. // ROR
  35141. OPCODE(0xE6E8)
  35142. {
  35143. u32 adr, res;
  35144. u32 src, dst;
  35145. FETCH_SWORD(adr);
  35146. adr += AREG((Opcode >> 0) & 7);
  35147. PRE_IO
  35148. READ_WORD_F(adr, src)
  35149. flag_V = 0;
  35150. flag_C = src << M68K_SR_C_SFT;
  35151. res = (src >> 1) | (src << 15);
  35152. flag_N = res >> 8;
  35153. flag_NotZ = res & 0x0000FFFF;
  35154. WRITE_WORD_F(adr, res)
  35155. POST_IO
  35156. RET(16)
  35157. }
  35158. // ROR
  35159. OPCODE(0xE6F0)
  35160. {
  35161. u32 adr, res;
  35162. u32 src, dst;
  35163. adr = AREG((Opcode >> 0) & 7);
  35164. DECODE_EXT_WORD
  35165. PRE_IO
  35166. READ_WORD_F(adr, src)
  35167. flag_V = 0;
  35168. flag_C = src << M68K_SR_C_SFT;
  35169. res = (src >> 1) | (src << 15);
  35170. flag_N = res >> 8;
  35171. flag_NotZ = res & 0x0000FFFF;
  35172. WRITE_WORD_F(adr, res)
  35173. POST_IO
  35174. RET(18)
  35175. }
  35176. // ROR
  35177. OPCODE(0xE6F8)
  35178. {
  35179. u32 adr, res;
  35180. u32 src, dst;
  35181. FETCH_SWORD(adr);
  35182. PRE_IO
  35183. READ_WORD_F(adr, src)
  35184. flag_V = 0;
  35185. flag_C = src << M68K_SR_C_SFT;
  35186. res = (src >> 1) | (src << 15);
  35187. flag_N = res >> 8;
  35188. flag_NotZ = res & 0x0000FFFF;
  35189. WRITE_WORD_F(adr, res)
  35190. POST_IO
  35191. RET(16)
  35192. }
  35193. // ROR
  35194. OPCODE(0xE6F9)
  35195. {
  35196. u32 adr, res;
  35197. u32 src, dst;
  35198. FETCH_LONG(adr);
  35199. PRE_IO
  35200. READ_WORD_F(adr, src)
  35201. flag_V = 0;
  35202. flag_C = src << M68K_SR_C_SFT;
  35203. res = (src >> 1) | (src << 15);
  35204. flag_N = res >> 8;
  35205. flag_NotZ = res & 0x0000FFFF;
  35206. WRITE_WORD_F(adr, res)
  35207. POST_IO
  35208. RET(20)
  35209. }
  35210. // ROR
  35211. OPCODE(0xE6DF)
  35212. {
  35213. u32 adr, res;
  35214. u32 src, dst;
  35215. adr = AREG(7);
  35216. AREG(7) += 2;
  35217. PRE_IO
  35218. READ_WORD_F(adr, src)
  35219. flag_V = 0;
  35220. flag_C = src << M68K_SR_C_SFT;
  35221. res = (src >> 1) | (src << 15);
  35222. flag_N = res >> 8;
  35223. flag_NotZ = res & 0x0000FFFF;
  35224. WRITE_WORD_F(adr, res)
  35225. POST_IO
  35226. RET(12)
  35227. }
  35228. // ROR
  35229. OPCODE(0xE6E7)
  35230. {
  35231. u32 adr, res;
  35232. u32 src, dst;
  35233. adr = AREG(7) - 2;
  35234. AREG(7) = adr;
  35235. PRE_IO
  35236. READ_WORD_F(adr, src)
  35237. flag_V = 0;
  35238. flag_C = src << M68K_SR_C_SFT;
  35239. res = (src >> 1) | (src << 15);
  35240. flag_N = res >> 8;
  35241. flag_NotZ = res & 0x0000FFFF;
  35242. WRITE_WORD_F(adr, res)
  35243. POST_IO
  35244. RET(14)
  35245. }
  35246. // ASL
  35247. OPCODE(0xE1D0)
  35248. {
  35249. u32 adr, res;
  35250. u32 src, dst;
  35251. adr = AREG((Opcode >> 0) & 7);
  35252. PRE_IO
  35253. READ_WORD_F(adr, src)
  35254. flag_X = flag_C = src >> 7;
  35255. res = src << 1;
  35256. flag_V = (src ^ res) >> 8;
  35257. flag_N = res >> 8;
  35258. flag_NotZ = res & 0x0000FFFF;
  35259. WRITE_WORD_F(adr, res)
  35260. POST_IO
  35261. RET(12)
  35262. }
  35263. // ASL
  35264. OPCODE(0xE1D8)
  35265. {
  35266. u32 adr, res;
  35267. u32 src, dst;
  35268. adr = AREG((Opcode >> 0) & 7);
  35269. AREG((Opcode >> 0) & 7) += 2;
  35270. PRE_IO
  35271. READ_WORD_F(adr, src)
  35272. flag_X = flag_C = src >> 7;
  35273. res = src << 1;
  35274. flag_V = (src ^ res) >> 8;
  35275. flag_N = res >> 8;
  35276. flag_NotZ = res & 0x0000FFFF;
  35277. WRITE_WORD_F(adr, res)
  35278. POST_IO
  35279. RET(12)
  35280. }
  35281. // ASL
  35282. OPCODE(0xE1E0)
  35283. {
  35284. u32 adr, res;
  35285. u32 src, dst;
  35286. adr = AREG((Opcode >> 0) & 7) - 2;
  35287. AREG((Opcode >> 0) & 7) = adr;
  35288. PRE_IO
  35289. READ_WORD_F(adr, src)
  35290. flag_X = flag_C = src >> 7;
  35291. res = src << 1;
  35292. flag_V = (src ^ res) >> 8;
  35293. flag_N = res >> 8;
  35294. flag_NotZ = res & 0x0000FFFF;
  35295. WRITE_WORD_F(adr, res)
  35296. POST_IO
  35297. RET(14)
  35298. }
  35299. // ASL
  35300. OPCODE(0xE1E8)
  35301. {
  35302. u32 adr, res;
  35303. u32 src, dst;
  35304. FETCH_SWORD(adr);
  35305. adr += AREG((Opcode >> 0) & 7);
  35306. PRE_IO
  35307. READ_WORD_F(adr, src)
  35308. flag_X = flag_C = src >> 7;
  35309. res = src << 1;
  35310. flag_V = (src ^ res) >> 8;
  35311. flag_N = res >> 8;
  35312. flag_NotZ = res & 0x0000FFFF;
  35313. WRITE_WORD_F(adr, res)
  35314. POST_IO
  35315. RET(16)
  35316. }
  35317. // ASL
  35318. OPCODE(0xE1F0)
  35319. {
  35320. u32 adr, res;
  35321. u32 src, dst;
  35322. adr = AREG((Opcode >> 0) & 7);
  35323. DECODE_EXT_WORD
  35324. PRE_IO
  35325. READ_WORD_F(adr, src)
  35326. flag_X = flag_C = src >> 7;
  35327. res = src << 1;
  35328. flag_V = (src ^ res) >> 8;
  35329. flag_N = res >> 8;
  35330. flag_NotZ = res & 0x0000FFFF;
  35331. WRITE_WORD_F(adr, res)
  35332. POST_IO
  35333. RET(18)
  35334. }
  35335. // ASL
  35336. OPCODE(0xE1F8)
  35337. {
  35338. u32 adr, res;
  35339. u32 src, dst;
  35340. FETCH_SWORD(adr);
  35341. PRE_IO
  35342. READ_WORD_F(adr, src)
  35343. flag_X = flag_C = src >> 7;
  35344. res = src << 1;
  35345. flag_V = (src ^ res) >> 8;
  35346. flag_N = res >> 8;
  35347. flag_NotZ = res & 0x0000FFFF;
  35348. WRITE_WORD_F(adr, res)
  35349. POST_IO
  35350. RET(16)
  35351. }
  35352. // ASL
  35353. OPCODE(0xE1F9)
  35354. {
  35355. u32 adr, res;
  35356. u32 src, dst;
  35357. FETCH_LONG(adr);
  35358. PRE_IO
  35359. READ_WORD_F(adr, src)
  35360. flag_X = flag_C = src >> 7;
  35361. res = src << 1;
  35362. flag_V = (src ^ res) >> 8;
  35363. flag_N = res >> 8;
  35364. flag_NotZ = res & 0x0000FFFF;
  35365. WRITE_WORD_F(adr, res)
  35366. POST_IO
  35367. RET(20)
  35368. }
  35369. // ASL
  35370. OPCODE(0xE1DF)
  35371. {
  35372. u32 adr, res;
  35373. u32 src, dst;
  35374. adr = AREG(7);
  35375. AREG(7) += 2;
  35376. PRE_IO
  35377. READ_WORD_F(adr, src)
  35378. flag_X = flag_C = src >> 7;
  35379. res = src << 1;
  35380. flag_V = (src ^ res) >> 8;
  35381. flag_N = res >> 8;
  35382. flag_NotZ = res & 0x0000FFFF;
  35383. WRITE_WORD_F(adr, res)
  35384. POST_IO
  35385. RET(12)
  35386. }
  35387. // ASL
  35388. OPCODE(0xE1E7)
  35389. {
  35390. u32 adr, res;
  35391. u32 src, dst;
  35392. adr = AREG(7) - 2;
  35393. AREG(7) = adr;
  35394. PRE_IO
  35395. READ_WORD_F(adr, src)
  35396. flag_X = flag_C = src >> 7;
  35397. res = src << 1;
  35398. flag_V = (src ^ res) >> 8;
  35399. flag_N = res >> 8;
  35400. flag_NotZ = res & 0x0000FFFF;
  35401. WRITE_WORD_F(adr, res)
  35402. POST_IO
  35403. RET(14)
  35404. }
  35405. // LSL
  35406. OPCODE(0xE3D0)
  35407. {
  35408. u32 adr, res;
  35409. u32 src, dst;
  35410. adr = AREG((Opcode >> 0) & 7);
  35411. PRE_IO
  35412. READ_WORD_F(adr, src)
  35413. flag_V = 0;
  35414. flag_X = flag_C = src >> 7;
  35415. res = src << 1;
  35416. flag_N = res >> 8;
  35417. flag_NotZ = res & 0x0000FFFF;
  35418. WRITE_WORD_F(adr, res)
  35419. POST_IO
  35420. RET(12)
  35421. }
  35422. // LSL
  35423. OPCODE(0xE3D8)
  35424. {
  35425. u32 adr, res;
  35426. u32 src, dst;
  35427. adr = AREG((Opcode >> 0) & 7);
  35428. AREG((Opcode >> 0) & 7) += 2;
  35429. PRE_IO
  35430. READ_WORD_F(adr, src)
  35431. flag_V = 0;
  35432. flag_X = flag_C = src >> 7;
  35433. res = src << 1;
  35434. flag_N = res >> 8;
  35435. flag_NotZ = res & 0x0000FFFF;
  35436. WRITE_WORD_F(adr, res)
  35437. POST_IO
  35438. RET(12)
  35439. }
  35440. // LSL
  35441. OPCODE(0xE3E0)
  35442. {
  35443. u32 adr, res;
  35444. u32 src, dst;
  35445. adr = AREG((Opcode >> 0) & 7) - 2;
  35446. AREG((Opcode >> 0) & 7) = adr;
  35447. PRE_IO
  35448. READ_WORD_F(adr, src)
  35449. flag_V = 0;
  35450. flag_X = flag_C = src >> 7;
  35451. res = src << 1;
  35452. flag_N = res >> 8;
  35453. flag_NotZ = res & 0x0000FFFF;
  35454. WRITE_WORD_F(adr, res)
  35455. POST_IO
  35456. RET(14)
  35457. }
  35458. // LSL
  35459. OPCODE(0xE3E8)
  35460. {
  35461. u32 adr, res;
  35462. u32 src, dst;
  35463. FETCH_SWORD(adr);
  35464. adr += AREG((Opcode >> 0) & 7);
  35465. PRE_IO
  35466. READ_WORD_F(adr, src)
  35467. flag_V = 0;
  35468. flag_X = flag_C = src >> 7;
  35469. res = src << 1;
  35470. flag_N = res >> 8;
  35471. flag_NotZ = res & 0x0000FFFF;
  35472. WRITE_WORD_F(adr, res)
  35473. POST_IO
  35474. RET(16)
  35475. }
  35476. // LSL
  35477. OPCODE(0xE3F0)
  35478. {
  35479. u32 adr, res;
  35480. u32 src, dst;
  35481. adr = AREG((Opcode >> 0) & 7);
  35482. DECODE_EXT_WORD
  35483. PRE_IO
  35484. READ_WORD_F(adr, src)
  35485. flag_V = 0;
  35486. flag_X = flag_C = src >> 7;
  35487. res = src << 1;
  35488. flag_N = res >> 8;
  35489. flag_NotZ = res & 0x0000FFFF;
  35490. WRITE_WORD_F(adr, res)
  35491. POST_IO
  35492. RET(18)
  35493. }
  35494. // LSL
  35495. OPCODE(0xE3F8)
  35496. {
  35497. u32 adr, res;
  35498. u32 src, dst;
  35499. FETCH_SWORD(adr);
  35500. PRE_IO
  35501. READ_WORD_F(adr, src)
  35502. flag_V = 0;
  35503. flag_X = flag_C = src >> 7;
  35504. res = src << 1;
  35505. flag_N = res >> 8;
  35506. flag_NotZ = res & 0x0000FFFF;
  35507. WRITE_WORD_F(adr, res)
  35508. POST_IO
  35509. RET(16)
  35510. }
  35511. // LSL
  35512. OPCODE(0xE3F9)
  35513. {
  35514. u32 adr, res;
  35515. u32 src, dst;
  35516. FETCH_LONG(adr);
  35517. PRE_IO
  35518. READ_WORD_F(adr, src)
  35519. flag_V = 0;
  35520. flag_X = flag_C = src >> 7;
  35521. res = src << 1;
  35522. flag_N = res >> 8;
  35523. flag_NotZ = res & 0x0000FFFF;
  35524. WRITE_WORD_F(adr, res)
  35525. POST_IO
  35526. RET(20)
  35527. }
  35528. // LSL
  35529. OPCODE(0xE3DF)
  35530. {
  35531. u32 adr, res;
  35532. u32 src, dst;
  35533. adr = AREG(7);
  35534. AREG(7) += 2;
  35535. PRE_IO
  35536. READ_WORD_F(adr, src)
  35537. flag_V = 0;
  35538. flag_X = flag_C = src >> 7;
  35539. res = src << 1;
  35540. flag_N = res >> 8;
  35541. flag_NotZ = res & 0x0000FFFF;
  35542. WRITE_WORD_F(adr, res)
  35543. POST_IO
  35544. RET(12)
  35545. }
  35546. // LSL
  35547. OPCODE(0xE3E7)
  35548. {
  35549. u32 adr, res;
  35550. u32 src, dst;
  35551. adr = AREG(7) - 2;
  35552. AREG(7) = adr;
  35553. PRE_IO
  35554. READ_WORD_F(adr, src)
  35555. flag_V = 0;
  35556. flag_X = flag_C = src >> 7;
  35557. res = src << 1;
  35558. flag_N = res >> 8;
  35559. flag_NotZ = res & 0x0000FFFF;
  35560. WRITE_WORD_F(adr, res)
  35561. POST_IO
  35562. RET(14)
  35563. }
  35564. // ROXL
  35565. OPCODE(0xE5D0)
  35566. {
  35567. u32 adr, res;
  35568. u32 src, dst;
  35569. adr = AREG((Opcode >> 0) & 7);
  35570. PRE_IO
  35571. READ_WORD_F(adr, src)
  35572. flag_V = 0;
  35573. res = (src << 1) | ((flag_X & M68K_SR_X) >> 8);
  35574. flag_X = flag_C = src >> 7;
  35575. flag_N = res >> 8;
  35576. flag_NotZ = res & 0x0000FFFF;
  35577. WRITE_WORD_F(adr, res)
  35578. POST_IO
  35579. RET(12)
  35580. }
  35581. // ROXL
  35582. OPCODE(0xE5D8)
  35583. {
  35584. u32 adr, res;
  35585. u32 src, dst;
  35586. adr = AREG((Opcode >> 0) & 7);
  35587. AREG((Opcode >> 0) & 7) += 2;
  35588. PRE_IO
  35589. READ_WORD_F(adr, src)
  35590. flag_V = 0;
  35591. res = (src << 1) | ((flag_X & M68K_SR_X) >> 8);
  35592. flag_X = flag_C = src >> 7;
  35593. flag_N = res >> 8;
  35594. flag_NotZ = res & 0x0000FFFF;
  35595. WRITE_WORD_F(adr, res)
  35596. POST_IO
  35597. RET(12)
  35598. }
  35599. // ROXL
  35600. OPCODE(0xE5E0)
  35601. {
  35602. u32 adr, res;
  35603. u32 src, dst;
  35604. adr = AREG((Opcode >> 0) & 7) - 2;
  35605. AREG((Opcode >> 0) & 7) = adr;
  35606. PRE_IO
  35607. READ_WORD_F(adr, src)
  35608. flag_V = 0;
  35609. res = (src << 1) | ((flag_X & M68K_SR_X) >> 8);
  35610. flag_X = flag_C = src >> 7;
  35611. flag_N = res >> 8;
  35612. flag_NotZ = res & 0x0000FFFF;
  35613. WRITE_WORD_F(adr, res)
  35614. POST_IO
  35615. RET(14)
  35616. }
  35617. // ROXL
  35618. OPCODE(0xE5E8)
  35619. {
  35620. u32 adr, res;
  35621. u32 src, dst;
  35622. FETCH_SWORD(adr);
  35623. adr += AREG((Opcode >> 0) & 7);
  35624. PRE_IO
  35625. READ_WORD_F(adr, src)
  35626. flag_V = 0;
  35627. res = (src << 1) | ((flag_X & M68K_SR_X) >> 8);
  35628. flag_X = flag_C = src >> 7;
  35629. flag_N = res >> 8;
  35630. flag_NotZ = res & 0x0000FFFF;
  35631. WRITE_WORD_F(adr, res)
  35632. POST_IO
  35633. RET(16)
  35634. }
  35635. // ROXL
  35636. OPCODE(0xE5F0)
  35637. {
  35638. u32 adr, res;
  35639. u32 src, dst;
  35640. adr = AREG((Opcode >> 0) & 7);
  35641. DECODE_EXT_WORD
  35642. PRE_IO
  35643. READ_WORD_F(adr, src)
  35644. flag_V = 0;
  35645. res = (src << 1) | ((flag_X & M68K_SR_X) >> 8);
  35646. flag_X = flag_C = src >> 7;
  35647. flag_N = res >> 8;
  35648. flag_NotZ = res & 0x0000FFFF;
  35649. WRITE_WORD_F(adr, res)
  35650. POST_IO
  35651. RET(18)
  35652. }
  35653. // ROXL
  35654. OPCODE(0xE5F8)
  35655. {
  35656. u32 adr, res;
  35657. u32 src, dst;
  35658. FETCH_SWORD(adr);
  35659. PRE_IO
  35660. READ_WORD_F(adr, src)
  35661. flag_V = 0;
  35662. res = (src << 1) | ((flag_X & M68K_SR_X) >> 8);
  35663. flag_X = flag_C = src >> 7;
  35664. flag_N = res >> 8;
  35665. flag_NotZ = res & 0x0000FFFF;
  35666. WRITE_WORD_F(adr, res)
  35667. POST_IO
  35668. RET(16)
  35669. }
  35670. // ROXL
  35671. OPCODE(0xE5F9)
  35672. {
  35673. u32 adr, res;
  35674. u32 src, dst;
  35675. FETCH_LONG(adr);
  35676. PRE_IO
  35677. READ_WORD_F(adr, src)
  35678. flag_V = 0;
  35679. res = (src << 1) | ((flag_X & M68K_SR_X) >> 8);
  35680. flag_X = flag_C = src >> 7;
  35681. flag_N = res >> 8;
  35682. flag_NotZ = res & 0x0000FFFF;
  35683. WRITE_WORD_F(adr, res)
  35684. POST_IO
  35685. RET(20)
  35686. }
  35687. // ROXL
  35688. OPCODE(0xE5DF)
  35689. {
  35690. u32 adr, res;
  35691. u32 src, dst;
  35692. adr = AREG(7);
  35693. AREG(7) += 2;
  35694. PRE_IO
  35695. READ_WORD_F(adr, src)
  35696. flag_V = 0;
  35697. res = (src << 1) | ((flag_X & M68K_SR_X) >> 8);
  35698. flag_X = flag_C = src >> 7;
  35699. flag_N = res >> 8;
  35700. flag_NotZ = res & 0x0000FFFF;
  35701. WRITE_WORD_F(adr, res)
  35702. POST_IO
  35703. RET(12)
  35704. }
  35705. // ROXL
  35706. OPCODE(0xE5E7)
  35707. {
  35708. u32 adr, res;
  35709. u32 src, dst;
  35710. adr = AREG(7) - 2;
  35711. AREG(7) = adr;
  35712. PRE_IO
  35713. READ_WORD_F(adr, src)
  35714. flag_V = 0;
  35715. res = (src << 1) | ((flag_X & M68K_SR_X) >> 8);
  35716. flag_X = flag_C = src >> 7;
  35717. flag_N = res >> 8;
  35718. flag_NotZ = res & 0x0000FFFF;
  35719. WRITE_WORD_F(adr, res)
  35720. POST_IO
  35721. RET(14)
  35722. }
  35723. // ROL
  35724. OPCODE(0xE7D0)
  35725. {
  35726. u32 adr, res;
  35727. u32 src, dst;
  35728. adr = AREG((Opcode >> 0) & 7);
  35729. PRE_IO
  35730. READ_WORD_F(adr, src)
  35731. flag_V = 0;
  35732. flag_C = src >> 7;
  35733. res = (src << 1) | (src >> 15);
  35734. flag_N = res >> 8;
  35735. flag_NotZ = res & 0x0000FFFF;
  35736. WRITE_WORD_F(adr, res)
  35737. POST_IO
  35738. RET(12)
  35739. }
  35740. // ROL
  35741. OPCODE(0xE7D8)
  35742. {
  35743. u32 adr, res;
  35744. u32 src, dst;
  35745. adr = AREG((Opcode >> 0) & 7);
  35746. AREG((Opcode >> 0) & 7) += 2;
  35747. PRE_IO
  35748. READ_WORD_F(adr, src)
  35749. flag_V = 0;
  35750. flag_C = src >> 7;
  35751. res = (src << 1) | (src >> 15);
  35752. flag_N = res >> 8;
  35753. flag_NotZ = res & 0x0000FFFF;
  35754. WRITE_WORD_F(adr, res)
  35755. POST_IO
  35756. RET(12)
  35757. }
  35758. // ROL
  35759. OPCODE(0xE7E0)
  35760. {
  35761. u32 adr, res;
  35762. u32 src, dst;
  35763. adr = AREG((Opcode >> 0) & 7) - 2;
  35764. AREG((Opcode >> 0) & 7) = adr;
  35765. PRE_IO
  35766. READ_WORD_F(adr, src)
  35767. flag_V = 0;
  35768. flag_C = src >> 7;
  35769. res = (src << 1) | (src >> 15);
  35770. flag_N = res >> 8;
  35771. flag_NotZ = res & 0x0000FFFF;
  35772. WRITE_WORD_F(adr, res)
  35773. POST_IO
  35774. RET(14)
  35775. }
  35776. // ROL
  35777. OPCODE(0xE7E8)
  35778. {
  35779. u32 adr, res;
  35780. u32 src, dst;
  35781. FETCH_SWORD(adr);
  35782. adr += AREG((Opcode >> 0) & 7);
  35783. PRE_IO
  35784. READ_WORD_F(adr, src)
  35785. flag_V = 0;
  35786. flag_C = src >> 7;
  35787. res = (src << 1) | (src >> 15);
  35788. flag_N = res >> 8;
  35789. flag_NotZ = res & 0x0000FFFF;
  35790. WRITE_WORD_F(adr, res)
  35791. POST_IO
  35792. RET(16)
  35793. }
  35794. // ROL
  35795. OPCODE(0xE7F0)
  35796. {
  35797. u32 adr, res;
  35798. u32 src, dst;
  35799. adr = AREG((Opcode >> 0) & 7);
  35800. DECODE_EXT_WORD
  35801. PRE_IO
  35802. READ_WORD_F(adr, src)
  35803. flag_V = 0;
  35804. flag_C = src >> 7;
  35805. res = (src << 1) | (src >> 15);
  35806. flag_N = res >> 8;
  35807. flag_NotZ = res & 0x0000FFFF;
  35808. WRITE_WORD_F(adr, res)
  35809. POST_IO
  35810. RET(18)
  35811. }
  35812. // ROL
  35813. OPCODE(0xE7F8)
  35814. {
  35815. u32 adr, res;
  35816. u32 src, dst;
  35817. FETCH_SWORD(adr);
  35818. PRE_IO
  35819. READ_WORD_F(adr, src)
  35820. flag_V = 0;
  35821. flag_C = src >> 7;
  35822. res = (src << 1) | (src >> 15);
  35823. flag_N = res >> 8;
  35824. flag_NotZ = res & 0x0000FFFF;
  35825. WRITE_WORD_F(adr, res)
  35826. POST_IO
  35827. RET(16)
  35828. }
  35829. // ROL
  35830. OPCODE(0xE7F9)
  35831. {
  35832. u32 adr, res;
  35833. u32 src, dst;
  35834. FETCH_LONG(adr);
  35835. PRE_IO
  35836. READ_WORD_F(adr, src)
  35837. flag_V = 0;
  35838. flag_C = src >> 7;
  35839. res = (src << 1) | (src >> 15);
  35840. flag_N = res >> 8;
  35841. flag_NotZ = res & 0x0000FFFF;
  35842. WRITE_WORD_F(adr, res)
  35843. POST_IO
  35844. RET(20)
  35845. }
  35846. // ROL
  35847. OPCODE(0xE7DF)
  35848. {
  35849. u32 adr, res;
  35850. u32 src, dst;
  35851. adr = AREG(7);
  35852. AREG(7) += 2;
  35853. PRE_IO
  35854. READ_WORD_F(adr, src)
  35855. flag_V = 0;
  35856. flag_C = src >> 7;
  35857. res = (src << 1) | (src >> 15);
  35858. flag_N = res >> 8;
  35859. flag_NotZ = res & 0x0000FFFF;
  35860. WRITE_WORD_F(adr, res)
  35861. POST_IO
  35862. RET(12)
  35863. }
  35864. // ROL
  35865. OPCODE(0xE7E7)
  35866. {
  35867. u32 adr, res;
  35868. u32 src, dst;
  35869. adr = AREG(7) - 2;
  35870. AREG(7) = adr;
  35871. PRE_IO
  35872. READ_WORD_F(adr, src)
  35873. flag_V = 0;
  35874. flag_C = src >> 7;
  35875. res = (src << 1) | (src >> 15);
  35876. flag_N = res >> 8;
  35877. flag_NotZ = res & 0x0000FFFF;
  35878. WRITE_WORD_F(adr, res)
  35879. POST_IO
  35880. RET(14)
  35881. }
  35882. #ifdef PICODRIVE_HACK
  35883. #if 0
  35884. #define UPDATE_IDLE_COUNT { \
  35885. extern int idle_hit_counter; \
  35886. idle_hit_counter++; \
  35887. }
  35888. #else
  35889. #define UPDATE_IDLE_COUNT
  35890. #endif
  35891. // BRA
  35892. OPCODE(0x6001_idle)
  35893. {
  35894. #ifdef FAMEC_CHECK_BRANCHES
  35895. u32 newPC = GET_PC;
  35896. s8 offs=Opcode;
  35897. newPC += offs;
  35898. SET_PC(newPC);
  35899. CHECK_BRANCH_EXCEPTION(offs)
  35900. #else
  35901. PC += ((s8)(Opcode & 0xFE)) >> 1;
  35902. #endif
  35903. UPDATE_IDLE_COUNT
  35904. RET0()
  35905. }
  35906. // BCC
  35907. OPCODE(0x6601_idle)
  35908. {
  35909. if (flag_NotZ)
  35910. {
  35911. UPDATE_IDLE_COUNT
  35912. PC += ((s8)(Opcode & 0xFE)) >> 1;
  35913. //if (idle_hit)
  35914. RET0()
  35915. }
  35916. RET(8)
  35917. }
  35918. OPCODE(0x6701_idle)
  35919. {
  35920. if (!flag_NotZ)
  35921. {
  35922. UPDATE_IDLE_COUNT
  35923. PC += ((s8)(Opcode & 0xFE)) >> 1;
  35924. //if (idle_hit)
  35925. RET0()
  35926. }
  35927. RET(8)
  35928. }
  35929. extern int SekIsIdleReady(void);
  35930. extern int SekIsIdleCode(unsigned short *dst, int bytes);
  35931. extern int SekRegisterIdlePatch(unsigned int pc, int oldop, int newop, void *ctx);
  35932. OPCODE(idle_detector_bcc8)
  35933. {
  35934. int frame_count, cond_true, bytes, ret, newop;
  35935. u16 *dest_pc;
  35936. dest_pc = PC + (((s8)(Opcode & 0xFE)) >> 1);
  35937. if (!SekIsIdleReady())
  35938. goto end;
  35939. bytes = 0 - (s8)(Opcode & 0xFE) - 2;
  35940. ret = SekIsIdleCode(dest_pc, bytes);
  35941. newop = (Opcode & 0xfe) | 0x7100;
  35942. if (!ret) newop |= 0x200;
  35943. if ( Opcode & 0x0100) newop |= 0x400; // beq
  35944. if (!(Opcode & 0x0f00)) newop |= 0xc00; // bra
  35945. ret = SekRegisterIdlePatch(GET_PC - 2, Opcode, newop, ctx);
  35946. switch (ret)
  35947. {
  35948. case 0: PC[-1] = newop; break;
  35949. case 1: break;
  35950. case 2: JumpTable[Opcode] = (Opcode & 0x0f00) ?
  35951. ((Opcode & 0x0100) ? CAST_OP(0x6701) : CAST_OP(0x6601)) :
  35952. CAST_OP(0x6001); break;
  35953. }
  35954. end:
  35955. if ((Opcode & 0xff00) == 0x6000) cond_true = 1;
  35956. else cond_true = (Opcode & 0x0100) ? !flag_NotZ : flag_NotZ; // beq?
  35957. if (cond_true)
  35958. {
  35959. PC = dest_pc;
  35960. ctx->io_cycle_counter -= 2;
  35961. }
  35962. RET(8)
  35963. }
  35964. #endif // PICODRIVE_HACK